def record_info(self, car: Car): mileage = car.status.timed_odometer.mileage level = car.status.get_energy('Electric').level level_fuel = car.status.get_energy('Fuel').level charge_date = car.status.get_energy('Electric').updated_at moving = car.status.kinetic.moving longitude = car.status.last_position.geometry.coordinates[0] latitude = car.status.last_position.geometry.coordinates[1] altitude = car.status.last_position.geometry.coordinates[2] date = car.status.last_position.properties.updated_at if date is None: date = charge_date logger.debug("vin:%s longitude:%s latitude:%s date:%s mileage:%s level:%s charge_date:%s level_fuel:" "%s moving:%s", car.vin, longitude, latitude, date, mileage, level, charge_date, level_fuel, moving) Database.record_position(self.weather_api, car.vin, mileage, latitude, longitude, altitude, date, level, level_fuel, moving) self.abrp.call(car, Database.get_last_temp(car.vin)) try: charging_status = car.status.get_energy('Electric').charging.status charging_mode = car.status.get_energy('Electric').charging.charging_mode Charging.record_charging(car, charging_status, charge_date, level, latitude, longitude, self.country_code, charging_mode) logger.debug("charging_status:%s ", charging_status) except AttributeError: logger.error("charging status not available from api")
def test_db_callback(self): old_dummy_value = dummy_value get_new_test_db() Database.set_db_callback(callback_test) assert old_dummy_value == dummy_value Database.record_position(None, "xx", 11, latitude, longitude - 0.05, None, date0, 40, None, False) assert old_dummy_value != dummy_value
def test_fuel_car(self): TestUnit.get_new_test_db() ElecPrice.CONFIG_FILENAME = DATA_DIR + "config.ini" car = self.vehicule_list[1] Database.record_position(None, car.vin, 11, latitude, longitude, 22, date0, 40, 30, False) Database.record_position(None, car.vin, 20, latitude, longitude, 22, date1, 35, 29, False) Database.record_position(None, car.vin, 30, latitude, longitude, 22, date2, 30, 28, False) trips = Trips.get_trips(self.vehicule_list) res = trips[car.vin].get_trips_as_dict() assert compare_dict(res, [{ 'consumption_km': 5.684210526315789, 'start_at': date0, 'consumption_by_temp': None, 'positions': { 'lat': [latitude], 'long': [longitude] }, 'duration': 40.0, 'speed_average': 28.5, 'distance': 19.0, 'mileage': 30.0, 'altitude_diff': 0, 'id': 1, 'consumption': 1.08, 'consumption_fuel_km': 10.53 }])
def record_position(): Database.record_position(None, car.vin, 11, latitude, longitude - 0.05, None, date0, 40, None, False) Database.record_position(None, car.vin, 20, latitude, longitude, 32, date1, 35, None, False) Database.record_position(None, car.vin, 30, latitude, longitude, 42, date2, 30, None, False)
def test_none_mileage(self): get_new_test_db() ElecPrice.CONFIG_FILENAME = DATA_DIR + "config.ini" car = self.vehicule_list[1] Database.record_position(None, car.vin, None, latitude, longitude, 22, get_date(1), 40, 30, False) Database.record_position(None, car.vin, None, latitude, longitude, 22, get_date(2), 35, 29, False) Database.record_position(None, car.vin, None, latitude, longitude, 22, get_date(3), 30, 28, False) start = get_date(4) end = get_date(6) Database.record_position(None, car.vin, 11, latitude, longitude, 22, start, 40, 30, False) Database.record_position(None, car.vin, 20, latitude, longitude, 22, get_date(5), 35, 29, False) Database.record_position(None, car.vin, 30, latitude, longitude, 22, end, 30, 28, False) trips = Trips.get_trips(self.vehicule_list) res = trips[car.vin].get_trips_as_dict() print(res) assert compare_dict(res, [{'consumption_km': 6.947368421052632, 'start_at': start, 'consumption_by_temp': None, 'positions': {'lat': [latitude], 'long': [longitude]}, 'duration': 120.0, 'speed_average': 9.5, 'distance': 19.0, 'mileage': 30.0, 'altitude_diff': 0, 'id': 1, 'consumption': 1.32, 'consumption_fuel_km': 10.53}])
def test_record_position_charging(self): TestUnit.get_new_test_db() ElecPrice.CONFIG_FILENAME = DATA_DIR + "config.ini" car = self.vehicule_list[0] Database.record_position(None, car.vin, 11, latitude, longitude - 0.05, None, date0, 40, None, False) Database.record_position(None, car.vin, 20, latitude, longitude, 32, date1, 35, None, False) Database.record_position(None, car.vin, 30, latitude, longitude, 42, date2, 30, None, False) Database.add_altitude_to_db(Database.get_db()) data = json.loads(Database.get_recorded_position()) assert data["features"][1]["geometry"]["coordinates"] == [ float(longitude), float(latitude) ] trips = Trips.get_trips(self.vehicule_list)[car.vin] trip = trips[0] map(trip.add_temperature, [10, 13, 15]) res = trip.get_info() assert compare_dict( res, { 'consumption_km': 24.21052631578947, 'start_at': date0, 'consumption_by_temp': None, 'positions': { 'lat': [latitude], 'long': [longitude] }, 'duration': 40.0, 'speed_average': 28.5, 'distance': 19.0, 'mileage': 30.0, 'altitude_diff': 2, 'id': 1, 'consumption': 4.6 }) Charging.elec_price = ElecPrice.read_config() start_level = 40 end_level = 85 Charging.record_charging(car, "InProgress", date0, start_level, latitude, longitude, None, "slow") Charging.record_charging(car, "InProgress", date1, 70, latitude, longitude, "FR", "slow") Charging.record_charging(car, "InProgress", date1, 70, latitude, longitude, "FR", "slow") Charging.record_charging(car, "InProgress", date2, 80, latitude, longitude, "FR", "slow") Charging.record_charging(car, "Stopped", date3, end_level, latitude, longitude, "FR", "slow") chargings = Charging.get_chargings() co2 = chargings[0]["co2"] assert isinstance(co2, float) assert compare_dict(chargings, [{ 'start_at': date0, 'stop_at': date3, 'VIN': 'VR3UHZKX', 'start_level': 40, 'end_level': 85, 'co2': co2, 'kw': 20.7, 'price': 3.84, 'charging_mode': 'slow' }]) assert get_figures(car) row = { "start_at": date0.strftime('%Y-%m-%dT%H:%M:%S.000Z'), "stop_at": date3.strftime('%Y-%m-%dT%H:%M:%S.000Z'), "start_level": start_level, "end_level": end_level } assert get_battery_curve_fig(row, car) is not None assert get_altitude_fig(trip) is not None