Bump aiowithings to 3.0.1 (#118854)

This commit is contained in:
Joost Lekkerkerker 2024-06-07 12:11:15 +02:00 committed by GitHub
parent bfff3c0524
commit f6c66dfd27
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 1034 additions and 105 deletions

View file

@ -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()

View file

@ -9,5 +9,5 @@
"iot_class": "cloud_push",
"loggers": ["aiowithings"],
"quality_scale": "platinum",
"requirements": ["aiowithings==2.1.0"]
"requirements": ["aiowithings==3.0.1"]
}

View file

@ -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
)

View file

@ -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

View file

@ -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

View file

@ -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
}
]

View file

@ -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,