From f6c66dfd27a3aad8463d4945f5bf97c586b221d3 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 7 Jun 2024 12:11:15 +0200 Subject: [PATCH] Bump aiowithings to 3.0.1 (#118854) --- .../components/withings/coordinator.py | 13 +- .../components/withings/manifest.json | 2 +- homeassistant/components/withings/sensor.py | 97 ++- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- .../withings/fixtures/measurements.json | 471 +++++++++++++++ .../withings/snapshots/test_diagnostics.ambr | 552 +++++++++++++++--- 7 files changed, 1034 insertions(+), 105 deletions(-) diff --git a/homeassistant/components/withings/coordinator.py b/homeassistant/components/withings/coordinator.py index 35df34ab5a4..361a20acafd 100644 --- a/homeassistant/components/withings/coordinator.py +++ b/homeassistant/components/withings/coordinator.py @@ -9,6 +9,7 @@ from typing import TYPE_CHECKING from aiowithings import ( Activity, Goals, + MeasurementPosition, MeasurementType, NotificationCategory, SleepSummary, @@ -85,7 +86,9 @@ class WithingsDataUpdateCoordinator[_DataT](DataUpdateCoordinator[_DataT]): class WithingsMeasurementDataUpdateCoordinator( - WithingsDataUpdateCoordinator[dict[MeasurementType, float]] + WithingsDataUpdateCoordinator[ + dict[tuple[MeasurementType, MeasurementPosition | None], float] + ] ): """Withings measurement coordinator.""" @@ -98,9 +101,13 @@ class WithingsMeasurementDataUpdateCoordinator( NotificationCategory.WEIGHT, NotificationCategory.PRESSURE, } - self._previous_data: dict[MeasurementType, float] = {} + self._previous_data: dict[ + tuple[MeasurementType, MeasurementPosition | None], float + ] = {} - async def _internal_update_data(self) -> dict[MeasurementType, float]: + async def _internal_update_data( + self, + ) -> dict[tuple[MeasurementType, MeasurementPosition | None], float]: """Retrieve measurement data.""" if self._last_valid_update is None: now = dt_util.utcnow() diff --git a/homeassistant/components/withings/manifest.json b/homeassistant/components/withings/manifest.json index 36e34ffc187..4c97f43fd80 100644 --- a/homeassistant/components/withings/manifest.json +++ b/homeassistant/components/withings/manifest.json @@ -9,5 +9,5 @@ "iot_class": "cloud_push", "loggers": ["aiowithings"], "quality_scale": "platinum", - "requirements": ["aiowithings==2.1.0"] + "requirements": ["aiowithings==3.0.1"] } diff --git a/homeassistant/components/withings/sensor.py b/homeassistant/components/withings/sensor.py index 6d4d18bedd8..e205af7bdda 100644 --- a/homeassistant/components/withings/sensor.py +++ b/homeassistant/components/withings/sensor.py @@ -10,6 +10,7 @@ from typing import Any from aiowithings import ( Activity, Goals, + MeasurementPosition, MeasurementType, SleepSummary, Workout, @@ -63,12 +64,14 @@ class WithingsMeasurementSensorEntityDescription(SensorEntityDescription): """Immutable class for describing withings data.""" measurement_type: MeasurementType + measurement_position: MeasurementPosition | None = None MEASUREMENT_SENSORS: dict[ - MeasurementType, WithingsMeasurementSensorEntityDescription + tuple[MeasurementType, MeasurementPosition | None], + WithingsMeasurementSensorEntityDescription, ] = { - MeasurementType.WEIGHT: WithingsMeasurementSensorEntityDescription( + (MeasurementType.WEIGHT, None): WithingsMeasurementSensorEntityDescription( key="weight_kg", measurement_type=MeasurementType.WEIGHT, native_unit_of_measurement=UnitOfMass.KILOGRAMS, @@ -76,7 +79,7 @@ MEASUREMENT_SENSORS: dict[ device_class=SensorDeviceClass.WEIGHT, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.FAT_MASS_WEIGHT: WithingsMeasurementSensorEntityDescription( + (MeasurementType.FAT_MASS_WEIGHT, None): WithingsMeasurementSensorEntityDescription( key="fat_mass_kg", measurement_type=MeasurementType.FAT_MASS_WEIGHT, translation_key="fat_mass", @@ -85,7 +88,7 @@ MEASUREMENT_SENSORS: dict[ device_class=SensorDeviceClass.WEIGHT, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.FAT_FREE_MASS: WithingsMeasurementSensorEntityDescription( + (MeasurementType.FAT_FREE_MASS, None): WithingsMeasurementSensorEntityDescription( key="fat_free_mass_kg", measurement_type=MeasurementType.FAT_FREE_MASS, translation_key="fat_free_mass", @@ -94,7 +97,7 @@ MEASUREMENT_SENSORS: dict[ device_class=SensorDeviceClass.WEIGHT, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.MUSCLE_MASS: WithingsMeasurementSensorEntityDescription( + (MeasurementType.MUSCLE_MASS, None): WithingsMeasurementSensorEntityDescription( key="muscle_mass_kg", measurement_type=MeasurementType.MUSCLE_MASS, translation_key="muscle_mass", @@ -103,7 +106,7 @@ MEASUREMENT_SENSORS: dict[ device_class=SensorDeviceClass.WEIGHT, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.BONE_MASS: WithingsMeasurementSensorEntityDescription( + (MeasurementType.BONE_MASS, None): WithingsMeasurementSensorEntityDescription( key="bone_mass_kg", measurement_type=MeasurementType.BONE_MASS, translation_key="bone_mass", @@ -112,7 +115,7 @@ MEASUREMENT_SENSORS: dict[ device_class=SensorDeviceClass.WEIGHT, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.HEIGHT: WithingsMeasurementSensorEntityDescription( + (MeasurementType.HEIGHT, None): WithingsMeasurementSensorEntityDescription( key="height_m", measurement_type=MeasurementType.HEIGHT, translation_key="height", @@ -122,14 +125,17 @@ MEASUREMENT_SENSORS: dict[ state_class=SensorStateClass.MEASUREMENT, entity_registry_enabled_default=False, ), - MeasurementType.TEMPERATURE: WithingsMeasurementSensorEntityDescription( + (MeasurementType.TEMPERATURE, None): WithingsMeasurementSensorEntityDescription( key="temperature_c", measurement_type=MeasurementType.TEMPERATURE, native_unit_of_measurement=UnitOfTemperature.CELSIUS, device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.BODY_TEMPERATURE: WithingsMeasurementSensorEntityDescription( + ( + MeasurementType.BODY_TEMPERATURE, + None, + ): WithingsMeasurementSensorEntityDescription( key="body_temperature_c", measurement_type=MeasurementType.BODY_TEMPERATURE, translation_key="body_temperature", @@ -137,7 +143,10 @@ MEASUREMENT_SENSORS: dict[ device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.SKIN_TEMPERATURE: WithingsMeasurementSensorEntityDescription( + ( + MeasurementType.SKIN_TEMPERATURE, + None, + ): WithingsMeasurementSensorEntityDescription( key="skin_temperature_c", measurement_type=MeasurementType.SKIN_TEMPERATURE, translation_key="skin_temperature", @@ -145,7 +154,7 @@ MEASUREMENT_SENSORS: dict[ device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.FAT_RATIO: WithingsMeasurementSensorEntityDescription( + (MeasurementType.FAT_RATIO, None): WithingsMeasurementSensorEntityDescription( key="fat_ratio_pct", measurement_type=MeasurementType.FAT_RATIO, translation_key="fat_ratio", @@ -153,35 +162,41 @@ MEASUREMENT_SENSORS: dict[ suggested_display_precision=2, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.DIASTOLIC_BLOOD_PRESSURE: WithingsMeasurementSensorEntityDescription( + ( + MeasurementType.DIASTOLIC_BLOOD_PRESSURE, + None, + ): WithingsMeasurementSensorEntityDescription( key="diastolic_blood_pressure_mmhg", measurement_type=MeasurementType.DIASTOLIC_BLOOD_PRESSURE, translation_key="diastolic_blood_pressure", native_unit_of_measurement=UOM_MMHG, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.SYSTOLIC_BLOOD_PRESSURE: WithingsMeasurementSensorEntityDescription( + ( + MeasurementType.SYSTOLIC_BLOOD_PRESSURE, + None, + ): WithingsMeasurementSensorEntityDescription( key="systolic_blood_pressure_mmhg", measurement_type=MeasurementType.SYSTOLIC_BLOOD_PRESSURE, translation_key="systolic_blood_pressure", native_unit_of_measurement=UOM_MMHG, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.HEART_RATE: WithingsMeasurementSensorEntityDescription( + (MeasurementType.HEART_RATE, None): WithingsMeasurementSensorEntityDescription( key="heart_pulse_bpm", measurement_type=MeasurementType.HEART_RATE, translation_key="heart_pulse", native_unit_of_measurement=UOM_BEATS_PER_MINUTE, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.SP02: WithingsMeasurementSensorEntityDescription( + (MeasurementType.SP02, None): WithingsMeasurementSensorEntityDescription( key="spo2_pct", measurement_type=MeasurementType.SP02, translation_key="spo2", native_unit_of_measurement=PERCENTAGE, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.HYDRATION: WithingsMeasurementSensorEntityDescription( + (MeasurementType.HYDRATION, None): WithingsMeasurementSensorEntityDescription( key="hydration", measurement_type=MeasurementType.HYDRATION, translation_key="hydration", @@ -190,7 +205,10 @@ MEASUREMENT_SENSORS: dict[ state_class=SensorStateClass.MEASUREMENT, entity_registry_enabled_default=False, ), - MeasurementType.PULSE_WAVE_VELOCITY: WithingsMeasurementSensorEntityDescription( + ( + MeasurementType.PULSE_WAVE_VELOCITY, + None, + ): WithingsMeasurementSensorEntityDescription( key="pulse_wave_velocity", measurement_type=MeasurementType.PULSE_WAVE_VELOCITY, translation_key="pulse_wave_velocity", @@ -198,7 +216,7 @@ MEASUREMENT_SENSORS: dict[ device_class=SensorDeviceClass.SPEED, state_class=SensorStateClass.MEASUREMENT, ), - MeasurementType.VO2: WithingsMeasurementSensorEntityDescription( + (MeasurementType.VO2, None): WithingsMeasurementSensorEntityDescription( key="vo2_max", measurement_type=MeasurementType.VO2, translation_key="vo2_max", @@ -206,7 +224,10 @@ MEASUREMENT_SENSORS: dict[ state_class=SensorStateClass.MEASUREMENT, entity_registry_enabled_default=False, ), - MeasurementType.EXTRACELLULAR_WATER: WithingsMeasurementSensorEntityDescription( + ( + MeasurementType.EXTRACELLULAR_WATER, + None, + ): WithingsMeasurementSensorEntityDescription( key="extracellular_water", measurement_type=MeasurementType.EXTRACELLULAR_WATER, translation_key="extracellular_water", @@ -215,7 +236,10 @@ MEASUREMENT_SENSORS: dict[ state_class=SensorStateClass.MEASUREMENT, entity_registry_enabled_default=False, ), - MeasurementType.INTRACELLULAR_WATER: WithingsMeasurementSensorEntityDescription( + ( + MeasurementType.INTRACELLULAR_WATER, + None, + ): WithingsMeasurementSensorEntityDescription( key="intracellular_water", measurement_type=MeasurementType.INTRACELLULAR_WATER, translation_key="intracellular_water", @@ -224,33 +248,42 @@ MEASUREMENT_SENSORS: dict[ state_class=SensorStateClass.MEASUREMENT, entity_registry_enabled_default=False, ), - MeasurementType.VASCULAR_AGE: WithingsMeasurementSensorEntityDescription( + (MeasurementType.VASCULAR_AGE, None): WithingsMeasurementSensorEntityDescription( key="vascular_age", measurement_type=MeasurementType.VASCULAR_AGE, translation_key="vascular_age", entity_registry_enabled_default=False, ), - MeasurementType.VISCERAL_FAT: WithingsMeasurementSensorEntityDescription( + (MeasurementType.VISCERAL_FAT, None): WithingsMeasurementSensorEntityDescription( key="visceral_fat", measurement_type=MeasurementType.VISCERAL_FAT, translation_key="visceral_fat_index", entity_registry_enabled_default=False, ), - MeasurementType.ELECTRODERMAL_ACTIVITY_FEET: WithingsMeasurementSensorEntityDescription( + ( + MeasurementType.ELECTRODERMAL_ACTIVITY_FEET, + None, + ): WithingsMeasurementSensorEntityDescription( key="electrodermal_activity_feet", measurement_type=MeasurementType.ELECTRODERMAL_ACTIVITY_FEET, translation_key="electrodermal_activity_feet", native_unit_of_measurement=PERCENTAGE, entity_registry_enabled_default=False, ), - MeasurementType.ELECTRODERMAL_ACTIVITY_LEFT_FOOT: WithingsMeasurementSensorEntityDescription( + ( + MeasurementType.ELECTRODERMAL_ACTIVITY_LEFT_FOOT, + None, + ): WithingsMeasurementSensorEntityDescription( key="electrodermal_activity_left_foot", measurement_type=MeasurementType.ELECTRODERMAL_ACTIVITY_LEFT_FOOT, translation_key="electrodermal_activity_left_foot", native_unit_of_measurement=PERCENTAGE, entity_registry_enabled_default=False, ), - MeasurementType.ELECTRODERMAL_ACTIVITY_RIGHT_FOOT: WithingsMeasurementSensorEntityDescription( + ( + MeasurementType.ELECTRODERMAL_ACTIVITY_RIGHT_FOOT, + None, + ): WithingsMeasurementSensorEntityDescription( key="electrodermal_activity_right_foot", measurement_type=MeasurementType.ELECTRODERMAL_ACTIVITY_RIGHT_FOOT, translation_key="electrodermal_activity_right_foot", @@ -650,6 +683,7 @@ async def async_setup_entry( measurement_coordinator, MEASUREMENT_SENSORS[measurement_type] ) for measurement_type in new_measurement_types + if measurement_type in MEASUREMENT_SENSORS ) measurement_coordinator.async_add_listener(_async_measurement_listener) @@ -796,14 +830,23 @@ class WithingsMeasurementSensor( @property def native_value(self) -> float: """Return the state of the entity.""" - return self.coordinator.data[self.entity_description.measurement_type] + return self.coordinator.data[ + ( + self.entity_description.measurement_type, + self.entity_description.measurement_position, + ) + ] @property def available(self) -> bool: """Return if the sensor is available.""" return ( super().available - and self.entity_description.measurement_type in self.coordinator.data + and ( + self.entity_description.measurement_type, + self.entity_description.measurement_position, + ) + in self.coordinator.data ) diff --git a/requirements_all.txt b/requirements_all.txt index 479677849bc..1ade0104498 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -401,7 +401,7 @@ aiowatttime==0.1.1 aiowebostv==0.4.0 # homeassistant.components.withings -aiowithings==2.1.0 +aiowithings==3.0.1 # homeassistant.components.yandex_transport aioymaps==1.2.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 630d356bcaf..9c1d370b59b 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -374,7 +374,7 @@ aiowatttime==0.1.1 aiowebostv==0.4.0 # homeassistant.components.withings -aiowithings==2.1.0 +aiowithings==3.0.1 # homeassistant.components.yandex_transport aioymaps==1.2.2 diff --git a/tests/components/withings/fixtures/measurements.json b/tests/components/withings/fixtures/measurements.json index 03222521877..31603d9a332 100644 --- a/tests/components/withings/fixtures/measurements.json +++ b/tests/components/withings/fixtures/measurements.json @@ -323,5 +323,476 @@ "modelid": 45, "model": "BPM Connect", "comment": null + }, + + { + "grpid": 5149666502, + "attrib": 0, + "date": 1560000000, + "created": 1560000000, + "modified": 1560000000, + "category": 1, + "deviceid": "51e8d0e7d16da9ff673accf10958ca94fea55d6e", + "hash_deviceid": "51e8d0e7d16da9ff673accf10958ca94fea55d6e", + "measures": [ + { + "value": 95854, + "type": 1, + "unit": -3, + "algo": 218235904, + "fm": 3 + }, + { + "value": 7718, + "type": 5, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 7718, + "type": 5, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 1866, + "type": 8, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 1866, + "type": 8, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 7338, + "type": 76, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 5205, + "type": 77, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 380, + "type": 88, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 2162, + "type": 168, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 3043, + "type": 169, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 32, + "type": 170, + "unit": -1, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 4000, + "type": 173, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 12 + }, + { + "value": 1350, + "type": 173, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 10 + }, + { + "value": 469, + "type": 173, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 3 + }, + { + "value": 1406, + "type": 173, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 11 + }, + { + "value": 491, + "type": 173, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 2 + }, + { + "value": 1209, + "type": 174, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 12 + }, + { + "value": 241, + "type": 174, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 10 + }, + { + "value": 107, + "type": 174, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 3 + }, + { + "value": 207, + "type": 174, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 11 + }, + { + "value": 99, + "type": 174, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 2 + }, + { + "value": 3823, + "type": 175, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 12 + }, + { + "value": 1277, + "type": 175, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 10 + }, + { + "value": 442, + "type": 175, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 3 + }, + { + "value": 1330, + "type": 175, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 11 + }, + { + "value": 463, + "type": 175, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 2 + }, + { + "value": 2263, + "type": 226, + "unit": 0, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 19467, + "type": 6, + "unit": -3 + } + ], + "modelid": 10, + "model": "Body Scan", + "comment": null + }, + { + "grpid": 5156052100, + "attrib": 0, + "date": 1560000000, + "created": 1560000000, + "modified": 1560000000, + "category": 1, + "deviceid": "51e8d0e7d16da9ff673accf10958ca94fea55d6e", + "hash_deviceid": "51e8d0e7d16da9ff673accf10958ca94fea55d6e", + "measures": [ + { + "value": 96440, + "type": 1, + "unit": -3, + "algo": 218235904, + "fm": 3 + }, + { + "value": 7863, + "type": 5, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 7863, + "type": 5, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 1780, + "type": 8, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 1780, + "type": 8, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 7475, + "type": 76, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 5296, + "type": 77, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 387, + "type": 88, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 2175, + "type": 168, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 3120, + "type": 169, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 31, + "type": 170, + "unit": -1, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 4049, + "type": 173, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 12 + }, + { + "value": 1384, + "type": 173, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 10 + }, + { + "value": 505, + "type": 173, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 3 + }, + { + "value": 1405, + "type": 173, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 11 + }, + { + "value": 518, + "type": 173, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 2 + }, + { + "value": 1099, + "type": 174, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 12 + }, + { + "value": 245, + "type": 174, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 10 + }, + { + "value": 103, + "type": 174, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 3 + }, + { + "value": 233, + "type": 174, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 11 + }, + { + "value": 99, + "type": 174, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 2 + }, + { + "value": 3870, + "type": 175, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 12 + }, + { + "value": 1309, + "type": 175, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 10 + }, + { + "value": 477, + "type": 175, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 3 + }, + { + "value": 1329, + "type": 175, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 11 + }, + { + "value": 489, + "type": 175, + "unit": -2, + "algo": 218235904, + "fm": 3, + "position": 2 + }, + { + "value": 2308, + "type": 226, + "unit": 0, + "algo": 218235904, + "fm": 3, + "position": 7 + }, + { + "value": 18457, + "type": 6, + "unit": -3 + } + ], + "modelid": 10, + "model": "Body Scan", + "comment": null } ] diff --git a/tests/components/withings/snapshots/test_diagnostics.ambr b/tests/components/withings/snapshots/test_diagnostics.ambr index 3dc7e824230..8ed8116f0c5 100644 --- a/tests/components/withings/snapshots/test_diagnostics.ambr +++ b/tests/components/withings/snapshots/test_diagnostics.ambr @@ -5,30 +5,166 @@ 'has_valid_external_webhook_url': True, 'received_activity_data': False, 'received_measurements': list([ - 1, - 8, - 5, - 76, - 88, - 4, - 12, - 71, - 73, - 6, - 9, - 10, - 11, - 54, - 77, - 91, - 123, - 155, - 168, - 169, - 198, - 197, - 196, - 170, + list([ + 1, + None, + ]), + list([ + 5, + None, + ]), + list([ + 8, + None, + ]), + list([ + 76, + None, + ]), + list([ + 77, + None, + ]), + list([ + 88, + None, + ]), + list([ + 168, + None, + ]), + list([ + 169, + None, + ]), + list([ + 170, + None, + ]), + list([ + 173, + 12, + ]), + list([ + 173, + 10, + ]), + list([ + 173, + 3, + ]), + list([ + 173, + 11, + ]), + list([ + 173, + 2, + ]), + list([ + 174, + 12, + ]), + list([ + 174, + 10, + ]), + list([ + 174, + 3, + ]), + list([ + 174, + 11, + ]), + list([ + 174, + 2, + ]), + list([ + 175, + 12, + ]), + list([ + 175, + 10, + ]), + list([ + 175, + 3, + ]), + list([ + 175, + 11, + ]), + list([ + 175, + 2, + ]), + list([ + 0, + None, + ]), + list([ + 6, + None, + ]), + list([ + 4, + None, + ]), + list([ + 12, + None, + ]), + list([ + 71, + None, + ]), + list([ + 73, + None, + ]), + list([ + 9, + None, + ]), + list([ + 10, + None, + ]), + list([ + 11, + None, + ]), + list([ + 54, + None, + ]), + list([ + 91, + None, + ]), + list([ + 123, + None, + ]), + list([ + 155, + None, + ]), + list([ + 198, + None, + ]), + list([ + 197, + None, + ]), + list([ + 196, + None, + ]), ]), 'received_sleep_data': True, 'received_workout_data': True, @@ -41,30 +177,166 @@ 'has_valid_external_webhook_url': False, 'received_activity_data': False, 'received_measurements': list([ - 1, - 8, - 5, - 76, - 88, - 4, - 12, - 71, - 73, - 6, - 9, - 10, - 11, - 54, - 77, - 91, - 123, - 155, - 168, - 169, - 198, - 197, - 196, - 170, + list([ + 1, + None, + ]), + list([ + 5, + None, + ]), + list([ + 8, + None, + ]), + list([ + 76, + None, + ]), + list([ + 77, + None, + ]), + list([ + 88, + None, + ]), + list([ + 168, + None, + ]), + list([ + 169, + None, + ]), + list([ + 170, + None, + ]), + list([ + 173, + 12, + ]), + list([ + 173, + 10, + ]), + list([ + 173, + 3, + ]), + list([ + 173, + 11, + ]), + list([ + 173, + 2, + ]), + list([ + 174, + 12, + ]), + list([ + 174, + 10, + ]), + list([ + 174, + 3, + ]), + list([ + 174, + 11, + ]), + list([ + 174, + 2, + ]), + list([ + 175, + 12, + ]), + list([ + 175, + 10, + ]), + list([ + 175, + 3, + ]), + list([ + 175, + 11, + ]), + list([ + 175, + 2, + ]), + list([ + 0, + None, + ]), + list([ + 6, + None, + ]), + list([ + 4, + None, + ]), + list([ + 12, + None, + ]), + list([ + 71, + None, + ]), + list([ + 73, + None, + ]), + list([ + 9, + None, + ]), + list([ + 10, + None, + ]), + list([ + 11, + None, + ]), + list([ + 54, + None, + ]), + list([ + 91, + None, + ]), + list([ + 123, + None, + ]), + list([ + 155, + None, + ]), + list([ + 198, + None, + ]), + list([ + 197, + None, + ]), + list([ + 196, + None, + ]), ]), 'received_sleep_data': True, 'received_workout_data': True, @@ -77,30 +349,166 @@ 'has_valid_external_webhook_url': True, 'received_activity_data': False, 'received_measurements': list([ - 1, - 8, - 5, - 76, - 88, - 4, - 12, - 71, - 73, - 6, - 9, - 10, - 11, - 54, - 77, - 91, - 123, - 155, - 168, - 169, - 198, - 197, - 196, - 170, + list([ + 1, + None, + ]), + list([ + 5, + None, + ]), + list([ + 8, + None, + ]), + list([ + 76, + None, + ]), + list([ + 77, + None, + ]), + list([ + 88, + None, + ]), + list([ + 168, + None, + ]), + list([ + 169, + None, + ]), + list([ + 170, + None, + ]), + list([ + 173, + 12, + ]), + list([ + 173, + 10, + ]), + list([ + 173, + 3, + ]), + list([ + 173, + 11, + ]), + list([ + 173, + 2, + ]), + list([ + 174, + 12, + ]), + list([ + 174, + 10, + ]), + list([ + 174, + 3, + ]), + list([ + 174, + 11, + ]), + list([ + 174, + 2, + ]), + list([ + 175, + 12, + ]), + list([ + 175, + 10, + ]), + list([ + 175, + 3, + ]), + list([ + 175, + 11, + ]), + list([ + 175, + 2, + ]), + list([ + 0, + None, + ]), + list([ + 6, + None, + ]), + list([ + 4, + None, + ]), + list([ + 12, + None, + ]), + list([ + 71, + None, + ]), + list([ + 73, + None, + ]), + list([ + 9, + None, + ]), + list([ + 10, + None, + ]), + list([ + 11, + None, + ]), + list([ + 54, + None, + ]), + list([ + 91, + None, + ]), + list([ + 123, + None, + ]), + list([ + 155, + None, + ]), + list([ + 198, + None, + ]), + list([ + 197, + None, + ]), + list([ + 196, + None, + ]), ]), 'received_sleep_data': True, 'received_workout_data': True,