Esempio n. 1
0
 def _last(self, name):
     data = []
     Sensors.get_last(
         lambda obj: obj['name'] == name,
         data,
         max_age=self._period)
     if data:
         return self._make(name, data[0]['value'], data[0]['timestamp'])
Esempio n. 2
0
    def run(self):
        """
        Available data:
         + accelerator_pedal_position
            - percentage
         + brake_pedal_status
            - boolean
         + engine_speed
            - 0 - 16382 (rpm)
         + torque_at_transmission
            - Nm
         + vehicle_speed
            - km/h

         - fuel_consumed_since_restart
         - fuel_level
         - odometer
         - steering_wheel_angle
         - transmission_gear_position
        """
        while True:
            time.sleep(1.0 / self._frequency)
            acc_ped_pos = []
            vehicle_speed = []
            Sensors.get_last(
                lambda obj: obj['name'] == 'accelerator_pedal_position',
                acc_ped_pos)
            Sensors.get_last(
                lambda obj: obj['name'] == 'vehicle_speed',
                vehicle_speed)

            acc_ped_pos = acc_ped_pos[0] if acc_ped_pos else None
            vehicle_speed = vehicle_speed[0] if vehicle_speed else None
            if acc_ped_pos is not None and vehicle_speed is not None:
                timestamp = acc_ped_pos["timestamp"]
                ped_pos = acc_ped_pos['value']
                speed = vehicle_speed['value']
                print("Accelerator pedal status {}".format(ped_pos))
                print("Acceleration: {}".format(self.get_acceleration()))
                if self.is_driving_aggressively(ped_pos):
                    print("AGGRESSIVE!")
                    self._event.set()
                    if self._start_time is None:
                        self._start_time = acc_ped_pos['timestamp']
                    self._send()
                self._points.append((timestamp, ped_pos, speed))
Esempio n. 3
0
    def run(self):
        while True:
            time.sleep(1.0 / self._frequency)
            wheel_rot = []
            if Geometry._pos is None:
                continue
            lat, lng = Geometry._pos
            Sensors.get_last(
                lambda obj: obj['name'] == 'steering_wheel_angle',
                wheel_rot,
                max_age=1)
            if wheel_rot:
                wheel_rot = wheel_rot[0]['value']
                if abs(wheel_rot) > 75 or self._street_address is None:
                    self._last_turn = time.time()

            if self._last_turn is not None and time.time() - self._last_turn < 3:
                address = self._street_address
                try:  # Haults (stucks) after quota of 2500 lookups per day.
                    response = self._cli.reverse_geocode(
                        (lat, lng), result_type="route")
                    response = response[0]
                    for line in response['address_components']:
                        if 'route' in line['types']:
                            address = line['long_name']
                            break
                except Exception as e:
                    logging.debug(e)

                if self._street_address is None:
                    self._street_address = address
                elif address != self._street_address:
                    self._street_address = address
                    signaled = []
                    Sensors.get_data(
                        lambda e: e['name'] == 'turn_signals',
                        signaled,
                        max_age=12)
                    signaled = [e for e in signaled if e['value'] != 'off']
                    if not signaled:
                        self._event.set()
                        Distributor.analyzes.put({'name': 'forgot_signals', 'value': 1,
                                                  'timestamp': Geometry._time})
Esempio n. 4
0
    def run(self):
        while True:
            time.sleep(1.0 / self._frequency)
            speed_lim, vehic_speed = [], []
            Sensors.get_last(
                lambda obj: obj['name'] == 'speed_limit',
                speed_lim)
            Sensors.get_last(
                lambda obj: obj['name'] == 'vehicle_speed',
                vehic_speed)

            speed_lim = speed_lim[0]['value'] if speed_lim else None
            vehic_speed = vehic_speed[0]['value'] if vehic_speed else None
            if speed_lim:

                pos = []
                Sensors.get_last(lambda obj: obj['name'] == 'latitude', pos)
                Sensors.get_last(lambda obj: obj['name'] == 'longitude', pos)

                if vehic_speed and self.is_speeding(vehic_speed, speed_lim):
                    self._event.set()
                    self._event.speeding_percentage = (
                        vehic_speed - speed_lim) / speed_lim

                    # if self._velocities and self._event.speed_limit and speed_lim != self._event.speed_limit:
                    #    self._send()

                    # if not self._start_time:
                    #    self._start_time = pos[0]['timestamp']
                    # self._velocities.append(vehic_speed)
                    #self._points.append(list(map(lambda obj : obj['value'], pos)))
                    self._send()

                # elif vehic_speed and self._start_time: # No longing speeding, has things to send
                #    self._end_time = pos[0]['timestamp']
                #    self._send()

                self._event.speed_limit = speed_lim
Esempio n. 5
0
    def run(self):
        sleep(5 * self.sleep_duration)
        fuel_data = []
        distance_data = []
        engine_speed_data = []
        gear_data = []
        vehicle_speed_data = []

        Sensors.get_last(
            lambda obj: obj['name'] == 'fuel_consumed_since_restart',
            fuel_data)
        Sensors.get_last(lambda obj: obj['name'] == 'odometer', distance_data)

        while True:
            sleep(self.sleep_duration)
            Sensors.get_last(
                lambda obj: obj['name'] == 'fuel_consumed_since_restart',
                fuel_data)
            Sensors.get_last(
                lambda obj: obj['name'] == 'odometer',
                distance_data)
            Sensors.get_last(
                lambda obj: obj['name'] == 'engine_speed',
                engine_speed_data)
            Sensors.get_last(
                lambda obj: obj['name'] == 'transmission_gear_position',
                gear_data)
            Sensors.get_last(
                lambda obj: obj['name'] == 'vehicle_speed',
                vehicle_speed_data)
            if gear_data and engine_speed_data and vehicle_speed_data:
                self._evaluateGearChange(engine_speed_data[-1].get('value'), gear_data[-1].get(
                    'value'), vehicle_speed_data[-1].get('value'), vehicle_speed_data[-1].get('timestamp'))

            # difference between the two last measured fuel levels
            fuel_diff = fuel_data[-1].get('value') - fuel_data[-2].get('value')
            distance_diff = distance_data[-1].get('value') - \
                distance_data[-2].get('value')

            if distance_diff > 0:
                fuel_usage_per_km = fuel_diff / distance_diff
            else:
                fuel_usage_per_km = 0
            self.queue.put({'name': 'fuel_usage10',
                            'value': fuel_usage_per_km * 10,
                            'timestamp': fuel_data[-1].get('timestamp')})