diff --git a/bundles/org.openhab.binding.mercedesme/README.md b/bundles/org.openhab.binding.mercedesme/README.md index 3c8dd61e4f96f..964ac2c3d02c6 100644 --- a/bundles/org.openhab.binding.mercedesme/README.md +++ b/bundles/org.openhab.binding.mercedesme/README.md @@ -444,22 +444,23 @@ Group name: `range` All channels read-only. -| Channel | Type | Description | bev | hybrid | combustion | -|------------------|----------------------|------------------------------|-----|--------|------------| -| mileage | Number:Length | Total Mileage | X | X | X | -| home-distance | Number:Length | Distance to Home | X | X | X | -| soc | Number:Dimensionless | Battery State of Charge | X | X | | -| charged | Number:Energy | Charged Battery Energy | X | X | | -| uncharged | Number:Energy | Uncharged Battery Energy | X | X | | -| range-electric | Number:Length | Electric Range | X | X | | -| radius-electric | Number:Length | Electric Radius for Map | X | X | | -| fuel-level | Number:Dimensionless | Fuel Level in Percent | | X | X | -| fuel-remain | Number:Volume | Remaining Fuel | | X | X | -| fuel-open | Number:Volume | Open Fuel Capacity | | X | X | -| range-fuel | Number:Length | Fuel Range | | X | X | -| radius-fuel | Number:Length | Fuel Radius for Map | | X | X | -| range-hybrid | Number:Length | Hybrid Range | | X | | -| radius-hybrid | Number:Length | Hybrid Radius for Map | | X | | +| Channel | Type | Description | bev | hybrid | combustion | +|------------------|----------------------|---------------------------------|-----|--------|------------| +| mileage | Number:Length | Total Mileage | X | X | X | +| home-distance | Number:Length | Distance to Home | X | X | X | +| soc | Number:Dimensionless | Battery State of Charge | X | X | | +| charged | Number:Energy | Charged Battery Energy | X | X | | +| uncharged | Number:Energy | Uncharged Battery Energy | X | X | | +| range-electric | Number:Length | Electric Range | X | X | | +| radius-electric | Number:Length | Electric Radius for Map | X | X | | +| fuel-level | Number:Dimensionless | Fuel Level in Percent | | X | X | +| fuel-remain | Number:Volume | Remaining Fuel | | X | X | +| fuel-open | Number:Volume | Open Fuel Capacity | | X | X | +| range-fuel | Number:Length | Fuel Range | | X | X | +| radius-fuel | Number:Length | Fuel Radius for Map | | X | X | +| range-hybrid | Number:Length | Hybrid Range | | X | | +| radius-hybrid | Number:Length | Hybrid Radius for Map | | X | | +| adblue-level | Number:Dimensionless | AdBlue tank level in percent | | | X | Channels with `radius` are just giving a _guess_ which radius can be reached in a map display. diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/Constants.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/Constants.java index 040026d8b1dfb..21d5f25b4f2e3 100644 --- a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/Constants.java +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/Constants.java @@ -115,6 +115,7 @@ public class Constants { public static final String MB_KEY_DOORSTATUSFRONTLEFT = "doorstatusfrontleft"; public static final String MB_KEY_DOORSTATUSFRONTRIGHT = "doorstatusfrontright"; public static final String MB_KEY_TANKLEVELPERCENT = "tanklevelpercent"; + public static final String MB_KEY_ADBLUELEVELPERCENT = "tankLevelAdBlue"; public static final String MB_KEY_SOC = "soc"; public static final String MB_KEY_TIRE_PRESS_MEAS_TIMESTAMP = "tirePressMeasTimestamp"; public static final String MB_KEY_ENDOFCHARGETIME = "endofchargetime"; @@ -201,6 +202,7 @@ public class Constants { public static final String OH_CHANNEL_COUPLER_AC = "coupler-ac"; public static final String OH_CHANNEL_CHARGE_FLAP = "charge-flap"; public static final String OH_CHANNEL_FUEL_LEVEL = "fuel-level"; + public static final String OH_CHANNEL_ADBLUE_LEVEL = "adblue-level"; public static final String OH_CHANNEL_RANGE_HYBRID = "range-hybrid"; public static final String OH_CHANNEL_RANGE_FUEL = "range-fuel"; public static final String OH_CHANNEL_RANGE_ELECTRIC = "range-electric"; diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandler.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandler.java index 4716708ea37bd..40afa829c54e6 100644 --- a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandler.java +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandler.java @@ -112,6 +112,7 @@ * * @author Bernd Weymann - Initial contribution * @author Bernd Weymann - Bugfix https://github.com/openhab/openhab-addons/issues/16932 + * @author Bernd Weymann - Added adblue-channel https://community.openhab.org/t/mercedes-me-binding/136852/239 */ @NonNullByDefault public class VehicleHandler extends BaseThingHandler { @@ -709,6 +710,11 @@ public void distributeContent(VEPUpdate data) { block = true; } break; + case OH_CHANNEL_ADBLUE_LEVEL: + if (!Constants.COMBUSTION.equals(vehicleType)) { + block = true; + } + break; case OH_CHANNEL_COOLANT_FLUID: case OH_CHANNEL_ENGINE: case OH_CHANNEL_GAS_FLAP: diff --git a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/Mapper.java b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/Mapper.java index 4a8ff1127431f..ff31e444e6663 100644 --- a/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/Mapper.java +++ b/bundles/org.openhab.binding.mercedesme/src/main/java/org/openhab/binding/mercedesme/internal/utils/Mapper.java @@ -197,6 +197,7 @@ public static ChannelStateMap getChannelStateMap(String key, VehicleAttributeSta // Percentages case MB_KEY_SOC: case MB_KEY_TANKLEVELPERCENT: + case MB_KEY_ADBLUELEVELPERCENT: case MB_KEY_ECOSCORE_ACCEL: case MB_KEY_ECOSCORE_CONSTANT: case MB_KEY_ECOSCORE_COASTING: @@ -404,6 +405,7 @@ private static void init() { CHANNELS.put(MB_KEY_RANGELIQUID, new String[] { OH_CHANNEL_RANGE_FUEL, GROUP_RANGE }); CHANNELS.put(MB_KEY_OVERALL_RANGE, new String[] { OH_CHANNEL_RANGE_HYBRID, GROUP_RANGE }); CHANNELS.put(MB_KEY_TANKLEVELPERCENT, new String[] { OH_CHANNEL_FUEL_LEVEL, GROUP_RANGE }); + CHANNELS.put(MB_KEY_ADBLUELEVELPERCENT, new String[] { OH_CHANNEL_ADBLUE_LEVEL, GROUP_RANGE }); CHANNELS.put(MB_KEY_CHARGE_FLAP_DC_STATUS, new String[] { OH_CHANNEL_CHARGE_FLAP, GROUP_CHARGE }); CHANNELS.put(MB_KEY_CHARGE_COUPLER_AC_STATUS, new String[] { OH_CHANNEL_COUPLER_AC, GROUP_CHARGE }); diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/i18n/mercedesme.properties b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/i18n/mercedesme.properties index e3638f30acfd8..a18833ea11b69 100644 --- a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/i18n/mercedesme.properties +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/i18n/mercedesme.properties @@ -91,6 +91,8 @@ channel-type.mercedesme.accel.description = Score for smooth acceleration channel-type.mercedesme.active-hvac.label = AC Precondition Control channel-type.mercedesme.active-hvac.description = Switch on/off precondition air conditioning channel-type.mercedesme.active.label = Charge Active +channel-type.mercedesme.adblue-level.label = AdBlue Level +channel-type.mercedesme.adblue-level.description = AdBlue tank level in percent channel-type.mercedesme.auto-unlock.label = Coupler Auto Unlock channel-type.mercedesme.auto-unlock.description = Auto unlock coupler after charging channel-type.mercedesme.aux-heat.label = Auxiliary Heating Control diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-channel-types.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-channel-types.xml index 8861216318cd3..23de7f0c76f98 100644 --- a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-channel-types.xml +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-channel-types.xml @@ -53,6 +53,12 @@ + + Number:Dimensionless + + AdBlue tank level in percent + + Number:Volume diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-conv-channel-group.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-conv-channel-group.xml index 665c91e5a19fa..1a3d05c2ba07f 100644 --- a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-conv-channel-group.xml +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/range-conv-channel-group.xml @@ -14,6 +14,7 @@ + diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-combustion.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-combustion.xml index dbfe23533d5ef..4da711511080c 100644 --- a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-combustion.xml +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/thing/thing-combustion.xml @@ -28,7 +28,7 @@ - 2 + 3 diff --git a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/update/instructions.xml b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/update/instructions.xml index f95be9a969dd6..3c35c7ea32e31 100644 --- a/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/update/instructions.xml +++ b/bundles/org.openhab.binding.mercedesme/src/main/resources/OH-INF/update/instructions.xml @@ -214,6 +214,13 @@ + + + mercedesme:adblue-level + + AdBlue tank level in percent + + diff --git a/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandlerTest.java b/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandlerTest.java index 92e5f009c0de5..8675b4d0ac43a 100644 --- a/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandlerTest.java +++ b/bundles/org.openhab.binding.mercedesme/src/test/java/org/openhab/binding/mercedesme/internal/handler/VehicleHandlerTest.java @@ -81,6 +81,25 @@ public static Map createBEV() { return instances; } + public static Map createCombustion() { + Thing thingMock = mock(Thing.class); + when(thingMock.getThingTypeUID()).thenReturn(Constants.THING_TYPE_COMB); + when(thingMock.getUID()).thenReturn(new ThingUID("test", Constants.COMBUSTION)); + AccountHandlerMock ahm = new AccountHandlerMock(); + VehicleHandler vh = new VehicleHandler(thingMock, new LocationProviderMock(), + mock(MercedesMeCommandOptionProvider.class), mock(MercedesMeStateOptionProvider.class)); + vh.accountHandler = Optional.of(ahm); + VehicleConfiguration vehicleConfig = new VehicleConfiguration(); + vh.config = Optional.of(vehicleConfig); + ThingCallbackListener updateListener = new ThingCallbackListener(); + vh.setCallback(updateListener); + Map instances = new HashMap<>(); + instances.put(ThingCallbackListener.class.getCanonicalName(), updateListener); + instances.put(VehicleHandler.class.getCanonicalName(), vh); + instances.put(AccountHandlerMock.class.getCanonicalName(), ahm); + return instances; + } + @Test public void testBEVFullUpdateNoCapacities() { Thing thingMock = mock(Thing.class); @@ -616,4 +635,21 @@ public void testEcoScore() { assertEquals("10.2 km", updateListener.getResponse("test::bev:eco#bonus").toFullString(), "Eco Bonus"); assertEquals(ECOSCORE_UPDATE_COUNT, updateListener.getUpdatesForGroup("eco"), "ECO Update Count"); } + + @Test + public void testAdBlue() { + Map instances = createCombustion(); + ThingCallbackListener updateListener = (ThingCallbackListener) instances + .get(ThingCallbackListener.class.getCanonicalName()); + VehicleHandler vHandler = (VehicleHandler) instances.get(VehicleHandler.class.getCanonicalName()); + assertNotNull(updateListener); + assertNotNull(vHandler); + + String json = FileReader.readFileInString("src/test/resources/proto-json/MB-Combustion.json"); + VEPUpdate update = ProtoConverter.json2Proto(json, true); + vHandler.distributeContent(update); + + assertEquals("29 %", updateListener.getResponse("test::combustion:range#adblue-level").toFullString(), + "AdBlue Tank Level"); + } } diff --git a/bundles/org.openhab.binding.mercedesme/src/test/resources/proto-json/MB-Combustion.json b/bundles/org.openhab.binding.mercedesme/src/test/resources/proto-json/MB-Combustion.json new file mode 100644 index 0000000000000..42f96df44707c --- /dev/null +++ b/bundles/org.openhab.binding.mercedesme/src/test/resources/proto-json/MB-Combustion.json @@ -0,0 +1,960 @@ +{ + "minSocUpperLimit": { + "timestamp_in_ms": 1676018786000, + "ratio_unit": "PERCENT", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "bidirectionalChargingActive": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "chargeCouplerACStatus": { + "timestamp_in_ms": 1695360357000, + "nil_value": true, + "timestamp": 1695360357, + "status": 4 + }, + "doorLockStatusOverall": { + "timestamp_in_ms": 1695363305000, + "timestamp": 1695363305, + "int_value": 0 + }, + "precondSeatFrontRight": { + "timestamp_in_ms": 1683554139000, + "bool_value": false, + "timestamp": 1683554139 + }, + "evRangeAssistDriveOnSOC": { + "timestamp_in_ms": 1695363339000, + "timestamp": 1695363339, + "int_value": 100 + }, + "tirePressMeasTimestamp": { + "timestamp_in_ms": 1695363279000, + "timestamp": 1695363279, + "int_value": 1695363279 + }, + "drivenTimeStart": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "smartCharging": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "vehicleHealthStatus": { + "timestamp_in_ms": 1676018790747, + "nil_value": true, + "timestamp": 1676018790, + "status": 1 + }, + "doorlockstatusdecklid": { + "timestamp_in_ms": 1695363305000, + "bool_value": false, + "timestamp": 1695363305 + }, + "maxSoc": { + "display_value": "100", + "timestamp_in_ms": 1683122498000, + "ratio_unit": "PERCENT", + "timestamp": 1683122498, + "int_value": 100 + }, + "socprofile": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 1 + }, + "maxrange": { + "display_value": "460.0", + "timestamp_in_ms": 1695363358000, + "distance_unit": "KILOMETERS", + "timestamp": 1695363358, + "int_value": 460 + }, + "maxSocLowerLimit": { + "timestamp_in_ms": 1676018786000, + "ratio_unit": "PERCENT", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "weeklyProfile": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "liquidRangeSkipIndication": { + "timestamp_in_ms": 1695363279000, + "nil_value": true, + "timestamp": 1695363279, + "status": 4 + }, + "chargeCouplerDCStatus": { + "timestamp_in_ms": 1695360357000, + "nil_value": true, + "timestamp": 1695360357, + "status": 4 + }, + "doorlockstatusfrontright": { + "timestamp_in_ms": 1695363305000, + "bool_value": false, + "timestamp": 1695363305 + }, + "tirepressureRearRight": { + "display_value": "235", + "timestamp_in_ms": 1695362858000, + "pressure_unit": "KPA", + "double_value": 235, + "timestamp": 1695362858 + }, + "languageHU": { + "timestamp_in_ms": 1695360349000, + "timestamp": 1695360349, + "int_value": 1 + }, + "tireMarkerRearLeft": { + "timestamp_in_ms": 1695363279000, + "timestamp": 1695363279, + "int_value": 0 + }, + "vehiclePositionErrorCode": { + "timestamp_in_ms": 1695364874926, + "timestamp": 1695364874, + "int_value": 5 + }, + "distanceElectricalStart": { + "display_value": "20.5", + "timestamp_in_ms": 1695363251000, + "distance_unit": "KILOMETERS", + "double_value": 20.5, + "timestamp": 1695363251 + }, + "departureTimeMode": { + "timestamp_in_ms": 1683556799000, + "timestamp": 1683556799, + "int_value": 0 + }, + "parkbrakestatus": { + "timestamp_in_ms": 1695363287000, + "bool_value": true, + "timestamp": 1695363287 + }, + "gasTankLevel": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "starterBatteryState": { + "timestamp_in_ms": 1695364875052, + "nil_value": true, + "timestamp": 1695364875, + "status": 4 + }, + "precondNowError": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "windowStatusOverall": { + "timestamp_in_ms": 1695363249000, + "timestamp": 1695363249, + "int_value": 1 + }, + "tireSensorAvailable": { + "timestamp_in_ms": 1695363279000, + "timestamp": 1695363279, + "int_value": 0 + }, + "weeklySetHU": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "minSoc": { + "timestamp_in_ms": 1676018786000, + "ratio_unit": "PERCENT", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "rangeelectric": { + "display_value": "210", + "timestamp_in_ms": 1695363358000, + "distance_unit": "KILOMETERS", + "timestamp": 1695363358, + "int_value": 210 + }, + "tireMarkerRearRight": { + "timestamp_in_ms": 1695363279000, + "timestamp": 1695363279, + "int_value": 0 + }, + "windowstatusrearright": { + "timestamp_in_ms": 1679655918000, + "nil_value": true, + "timestamp": 1679655918, + "status": 4 + }, + "serviceintervaldays": { + "timestamp_in_ms": 1695326557000, + "timestamp": 1695326557, + "int_value": 139 + }, + "electricalRangeSkipIndication": { + "timestamp_in_ms": 1695363279000, + "bool_value": false, + "timestamp": 1695363279 + }, + "windowstatusrearleft": { + "timestamp_in_ms": 1679655918000, + "nil_value": true, + "timestamp": 1679655918, + "status": 4 + }, + "endofchargetime": { + "timestamp_in_ms": 1695327666000, + "clock_hour_unit": "T12H", + "nil_value": true, + "timestamp": 1695327666, + "status": 3 + }, + "hybridWarnings": { + "timestamp_in_ms": 1676018790747, + "nil_value": true, + "timestamp": 1676018790, + "status": 1 + }, + "positionHeading": { + "timestamp_in_ms": 1695363286000, + "double_value": 13.1, + "timestamp": 1695363286 + }, + "precondAtDepartureDisable": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "doorstatusrearleft": { + "timestamp_in_ms": 1695360694000, + "bool_value": false, + "timestamp": 1695360694 + }, + "odo": { + "display_value": "12757", + "timestamp_in_ms": 1695363219000, + "distance_unit": "KILOMETERS", + "timestamp": 1695363219, + "int_value": 12757 + }, + "evRangeAssistDriveOnTime": { + "timestamp_in_ms": 1692503910000, + "nil_value": true, + "timestamp": 1692503910, + "status": 3 + }, + "tirewarninglamp": { + "timestamp_in_ms": 1695363279000, + "timestamp": 1695363279, + "int_value": 0 + }, + "positionLong": { + "timestamp_in_ms": 1695363286000, + "double_value": 1.23, + "timestamp": 1695363286 + }, + "precondDuration": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "electricconsumptionreset": { + "display_value": "4.3", + "timestamp_in_ms": 1695363338000, + "electricity_consumption_unit": "KM_PER_KWH", + "double_value": 23.5, + "timestamp": 1695363338 + }, + "precondatdeparture": { + "timestamp_in_ms": 1679655918000, + "bool_value": true, + "timestamp": 1679655918 + }, + "flipWindowStatus": { + "timestamp_in_ms": 1694419017000, + "bool_value": false, + "timestamp": 1694419017 + }, + "temperatureUnitHU": { + "timestamp_in_ms": 1679655918000, + "bool_value": false, + "timestamp": 1679655918 + }, + "departureTimeWeekday": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "averageSpeedReset": { + "timestamp_in_ms": 1676018786000, + "speed_unit": "KM_PER_HOUR", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "ecoscoreconst": { + "display_value": "85", + "timestamp_in_ms": 1695363338000, + "ratio_unit": "PERCENT", + "timestamp": 1695363338, + "int_value": 85 + }, + "doorstatusfrontright": { + "timestamp_in_ms": 1695311302000, + "bool_value": false, + "timestamp": 1695311302 + }, + "tcuConnectionStateLowChannel": { + "timestamp_in_ms": 1695364588641, + "timestamp": 1695364588 + }, + "chargingstatus": { + "timestamp_in_ms": 1695363339000, + "timestamp": 1695363339, + "int_value": 3 + }, + "ecoscoretotal": { + "timestamp_in_ms": 1695363338000, + "ratio_unit": "PERCENT", + "nil_value": true, + "timestamp": 1695363338, + "status": 4 + }, + "doorstatusfrontleft": { + "timestamp_in_ms": 1695363301000, + "bool_value": false, + "timestamp": 1695363301 + }, + "electricRatioOverall": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "warningbrakeliningwear": { + "timestamp_in_ms": 1695363279000, + "bool_value": false, + "timestamp": 1695363279 + }, + "distanceZEStart": { + "timestamp_in_ms": 1676018786000, + "distance_unit": "KILOMETERS", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "doorlockstatusgas": { + "timestamp_in_ms": 1679655918000, + "nil_value": true, + "timestamp": 1679655918, + "status": 3 + }, + "engineHoodStatus": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "doorstatusrearright": { + "timestamp_in_ms": 1695362381000, + "bool_value": false, + "timestamp": 1695362381 + }, + "tirewarningsrdk": { + "timestamp_in_ms": 1695363279000, + "timestamp": 1695363279, + "int_value": 0 + }, + "precondNow": { + "timestamp_in_ms": 1683557132000, + "nil_value": true, + "timestamp": 1683557132, + "status": 4 + }, + "rangeliquid": { + "timestamp_in_ms": 1676018786000, + "distance_unit": "KILOMETERS", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "sunroofEventActive": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "chargingPower": { + "timestamp_in_ms": 1695363358000, + "double_value": 0, + "timestamp": 1695363358 + }, + "averageSpeedStart": { + "timestamp_in_ms": 1676018786000, + "speed_unit": "KM_PER_HOUR", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "drivenTimeReset": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "positionLat": { + "timestamp_in_ms": 1695363286000, + "double_value": 3.45, + "timestamp": 1695363286 + }, + "gasconsumptionstart": { + "timestamp_in_ms": 1676018786000, + "gas_consumption_unit": "KG_PER_100KM", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "vehicleLockState": { + "timestamp_in_ms": 1695363305000, + "timestamp": 1695363305, + "int_value": 2 + }, + "windowStatusRearRightBlind": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "gasTankRange": { + "timestamp_in_ms": 1676018786000, + "distance_unit": "KILOMETERS", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "ecoscorefreewhl": { + "display_value": "100", + "timestamp_in_ms": 1695360888000, + "ratio_unit": "PERCENT", + "timestamp": 1695360888, + "int_value": 100 + }, + "doorlockstatusrearright": { + "timestamp_in_ms": 1695363305000, + "bool_value": false, + "timestamp": 1695363305 + }, + "chargingPowerEcoLimit": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "distanceStart": { + "display_value": "20.5", + "timestamp_in_ms": 1695363251000, + "distance_unit": "KILOMETERS", + "double_value": 20.5, + "timestamp": 1695363251 + }, + "soc": { + "display_value": "46", + "timestamp_in_ms": 1695363339000, + "ratio_unit": "PERCENT", + "timestamp": 1695363339, + "int_value": 46 + }, + "gasconsumptionreset": { + "timestamp_in_ms": 1676018786000, + "gas_consumption_unit": "KG_PER_100KM", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "distanceReset": { + "display_value": "12748.1", + "timestamp_in_ms": 1695363216000, + "distance_unit": "KILOMETERS", + "double_value": 12748.1, + "timestamp": 1695363216 + }, + "sunroofStatusFrontBlind": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "windowstatusfrontleft": { + "timestamp_in_ms": 1695363249000, + "timestamp": 1695363249, + "int_value": 2 + }, + "speedUnitFromIC": { + "timestamp_in_ms": 1676018790747, + "nil_value": true, + "timestamp": 1676018790, + "status": 1 + }, + "windowStatusRearLeftBlind": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "doorlockstatusvehicle": { + "timestamp_in_ms": 1695363305000, + "timestamp": 1695363305, + "int_value": 2 + }, + "tankLevelAdBlue": { + "display_value": "29", + "timestamp_in_ms": 1731353728000, + "ratio_unit": "PERCENT", + "timestamp": 1731353728, + "int_value": 29 + }, + "tirepressureRearLeft": { + "display_value": "230", + "timestamp_in_ms": 1695363220000, + "pressure_unit": "KPA", + "double_value": 232.5, + "timestamp": 1695363220 + }, + "timeFormatHU": { + "timestamp_in_ms": 1679655918000, + "bool_value": true, + "timestamp": 1679655918 + }, + "liquidconsumptionstart": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "combustion_consumption_unit": "LITER_PER_100KM", + "timestamp": 1676018786, + "status": 4 + }, + "distanceGasReset": { + "timestamp_in_ms": 1676018786000, + "distance_unit": "KILOMETERS", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "temperaturePoints": { + "temperature_points_value": { + "temperature_points": [ + { + "temperature": 22, + "zone": "frontLeft", + "temperature_display_value": "22.0" + }, + { + "temperature": 19, + "zone": "frontRight", + "temperature_display_value": "19.0" + } + ] + }, + "timestamp_in_ms": 1695363358000, + "temperature_unit": "CELSIUS", + "timestamp": 1695363358 + }, + "departuretimesoc": { + "timestamp_in_ms": 1695363358000, + "ratio_unit": "PERCENT", + "nil_value": true, + "timestamp": 1695363358, + "status": 3 + }, + "selectedChargeProgram": { + "timestamp_in_ms": 1692508055000, + "timestamp": 1692508055, + "int_value": 0 + }, + "chargePrograms": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "distanceZEReset": { + "timestamp_in_ms": 1676018786000, + "distance_unit": "KILOMETERS", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "maxSocUpperLimit": { + "timestamp_in_ms": 1676018786000, + "ratio_unit": "PERCENT", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "tiremarker": { + "timestamp_in_ms": 1695363279000, + "timestamp": 1695363279, + "int_value": 0 + }, + "overallRange": { + "display_value": "210", + "timestamp_in_ms": 1695363358000, + "distance_unit": "KILOMETERS", + "double_value": 210, + "timestamp": 1695363358 + }, + "tirewarningsprw": { + "timestamp_in_ms": 1695363279000, + "nil_value": true, + "timestamp": 1695363279, + "status": 4 + }, + "precondSeatFrontLeft": { + "timestamp_in_ms": 1679655918000, + "bool_value": true, + "timestamp": 1679655918 + }, + "drivenTimeZEReset": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "tireMarkerFrontRight": { + "timestamp_in_ms": 1695363279000, + "timestamp": 1695363279, + "int_value": 0 + }, + "serviceintervaldistance": { + "timestamp_in_ms": 1695363288000, + "distance_unit": "KILOMETERS", + "nil_value": true, + "timestamp": 1695363288, + "status": 3 + }, + "precondActive": { + "timestamp_in_ms": 1683557132000, + "bool_value": false, + "timestamp": 1683557132 + }, + "ecoscorebonusrange": { + "display_value": "5.1", + "timestamp_in_ms": 1695363192000, + "distance_unit": "KILOMETERS", + "double_value": 5.1, + "timestamp": 1695363192 + }, + "precondState": { + "timestamp_in_ms": 1686111361000, + "timestamp": 1686111361 + }, + "distanceGasStart": { + "timestamp_in_ms": 1676018786000, + "distance_unit": "KILOMETERS", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "rangeAdBlue": { + "timestamp_in_ms": 1692592687000, + "distance_unit": "KILOMETERS", + "nil_value": true, + "timestamp": 1692592687, + "status": 4 + }, + "sunroofEvent": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "liquidconsumptionreset": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "combustion_consumption_unit": "LITER_PER_100KM", + "timestamp": 1676018786, + "status": 4 + }, + "warningbrakefluid": { + "timestamp_in_ms": 1695363279000, + "bool_value": false, + "timestamp": 1695363279 + }, + "hvBatteryThermalPropagationEvent": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "windowstatusfrontright": { + "timestamp_in_ms": 1695311329000, + "timestamp": 1695311329, + "int_value": 2 + }, + "electricconsumptionstart": { + "display_value": "5.3", + "timestamp_in_ms": 1695363284000, + "electricity_consumption_unit": "KM_PER_KWH", + "double_value": 18.7, + "timestamp": 1695363284 + }, + "trackingStateHU": { + "timestamp_in_ms": 1679655925000, + "bool_value": true, + "timestamp": 1679655925 + }, + "warningenginelight": { + "timestamp_in_ms": 1676018790747, + "nil_value": true, + "timestamp": 1676018790, + "status": 1 + }, + "ignitionstate": { + "timestamp_in_ms": 1695363287000, + "timestamp": 1695363287, + "int_value": 0 + }, + "precondSeatRearLeft": { + "timestamp_in_ms": 1683554139000, + "nil_value": true, + "timestamp": 1683554139, + "status": 4 + }, + "rooftopstatus": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "electricRatioReset": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "warningwashwater": { + "timestamp_in_ms": 1695363279000, + "bool_value": false, + "timestamp": 1695363279 + }, + "sunroofstatus": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "minSocLowerLimit": { + "timestamp_in_ms": 1676018786000, + "ratio_unit": "PERCENT", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "filterParticleLoading": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "tirepressureFrontRight": { + "display_value": "250", + "timestamp_in_ms": 1695363155000, + "pressure_unit": "KPA", + "double_value": 252.5, + "timestamp": 1695363155 + }, + "precondSeatRearRight": { + "timestamp_in_ms": 1683554139000, + "nil_value": true, + "timestamp": 1683554139, + "status": 4 + }, + "tirepressureFrontLeft": { + "display_value": "255", + "timestamp_in_ms": 1695363060000, + "pressure_unit": "KPA", + "double_value": 257.5, + "timestamp": 1695363060 + }, + "proximityCalculationForVehiclePositionRequired": { + "timestamp_in_ms": 1695364874926, + "bool_value": false, + "timestamp": 1695364874 + }, + "chargingactive": { + "timestamp_in_ms": 1695327666000, + "bool_value": false, + "timestamp": 1695327666 + }, + "gasTankLevelPercent": { + "timestamp_in_ms": 1676018786000, + "ratio_unit": "PERCENT", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "remoteStartTemperature": { + "display_value": "25.0", + "timestamp_in_ms": 1695363279000, + "temperature_unit": "CELSIUS", + "double_value": 25, + "timestamp": 1695363279 + }, + "vehicleDataConnectionState": { + "timestamp_in_ms": 1695364588641, + "bool_value": false, + "timestamp": 1695364588 + }, + "windowStatusRearBlind": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "endofChargeTimeWeekday": { + "timestamp_in_ms": 1695327666000, + "nil_value": true, + "timestamp": 1695327666, + "status": 3 + }, + "warningcoolantlevellow": { + "timestamp_in_ms": 1695363279000, + "bool_value": false, + "timestamp": 1695363279 + }, + "doorStatusOverall": { + "timestamp_in_ms": 1695363301000, + "timestamp": 1695363301, + "int_value": 1 + }, + "drivenTimeZEStart": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "ecoscoreaccel": { + "display_value": "100", + "timestamp_in_ms": 1695362014000, + "ratio_unit": "PERCENT", + "timestamp": 1695362014, + "int_value": 100 + }, + "sunroofStatusRearBlind": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "departuretime": { + "timestamp_in_ms": 1695363338000, + "clock_hour_unit": "T12H", + "timestamp": 1695363338, + "int_value": -1 + }, + "decklidstatus": { + "timestamp_in_ms": 1695185896000, + "bool_value": false, + "timestamp": 1695185896 + }, + "doorlockstatusfrontleft": { + "timestamp_in_ms": 1695363305000, + "bool_value": false, + "timestamp": 1695363305 + }, + "rangeElectricWltp": { + "timestamp_in_ms": 1676018786000, + "distance_unit": "KILOMETERS", + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "chargeFlapDCStatus": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "tireWarningLevelPrw": { + "timestamp_in_ms": 1695363279000, + "nil_value": true, + "timestamp": 1695363279, + "status": 4 + }, + "tanklevelpercent": { + "timestamp_in_ms": 1695363279000, + "ratio_unit": "PERCENT", + "nil_value": true, + "timestamp": 1695363279, + "status": 4 + }, + "chargeCouplerDCLockStatus": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "doorlockstatusrearleft": { + "timestamp_in_ms": 1695363305000, + "bool_value": false, + "timestamp": 1695363305 + }, + "electricRatioStart": { + "timestamp_in_ms": 1676018786000, + "nil_value": true, + "timestamp": 1676018786, + "status": 4 + }, + "precondError": { + "timestamp_in_ms": 1679655918000, + "timestamp": 1679655918, + "int_value": 0 + }, + "chargingErrorDetails": { + "timestamp_in_ms": 1679655918000, + "timestamp": 1679655918, + "int_value": 0 + }, + "vtime": { + "timestamp_in_ms": 1695363367000, + "timestamp": 1695363367, + "int_value": 1695370564 + }, + "tireMarkerFrontLeft": { + "timestamp_in_ms": 1695363279000, + "timestamp": 1695363279, + "int_value": 0 + }, + "distanceElectricalReset": { + "display_value": "12748.1", + "timestamp_in_ms": 1695363216000, + "distance_unit": "KILOMETERS", + "double_value": 12748.1, + "timestamp": 1695363216 + } +}