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'])
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))
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})
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
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')})