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")
Beispiel #2
0
 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
     }])
Beispiel #4
0
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)
Beispiel #5
0
 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