Modernize fitbit sensors (#101179)

* Improve fitbit sensors with state class and entiy category

* Revert sensor format changes
This commit is contained in:
Allen Porter
2023-10-02 07:56:46 -07:00
committed by GitHub
parent cab30085c5
commit 74b3c5c690
2 changed files with 76 additions and 0 deletions

View File

@@ -29,6 +29,7 @@ from homeassistant.const import (
CONF_TOKEN,
CONF_UNIT_SYSTEM,
PERCENTAGE,
EntityCategory,
UnitOfLength,
UnitOfMass,
UnitOfTime,
@@ -137,6 +138,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
native_unit_of_measurement="cal",
icon="mdi:fire",
scope="activity",
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/calories",
@@ -144,6 +147,7 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
native_unit_of_measurement="cal",
icon="mdi:fire",
scope="activity",
state_class=SensorStateClass.TOTAL_INCREASING,
),
FitbitSensorEntityDescription(
key="activities/caloriesBMR",
@@ -152,6 +156,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:fire",
scope="activity",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/distance",
@@ -161,6 +167,7 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
value_fn=_distance_value_fn,
unit_fn=_distance_unit,
scope="activity",
state_class=SensorStateClass.TOTAL_INCREASING,
),
FitbitSensorEntityDescription(
key="activities/elevation",
@@ -169,6 +176,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
device_class=SensorDeviceClass.DISTANCE,
unit_fn=_elevation_unit,
scope="activity",
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/floors",
@@ -176,6 +185,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
native_unit_of_measurement="floors",
icon="mdi:walk",
scope="activity",
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/heart",
@@ -184,6 +195,7 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:heart-pulse",
value_fn=lambda result: int(result["value"]["restingHeartRate"]),
scope="heartrate",
state_class=SensorStateClass.MEASUREMENT,
),
FitbitSensorEntityDescription(
key="activities/minutesFairlyActive",
@@ -192,6 +204,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:walk",
device_class=SensorDeviceClass.DURATION,
scope="activity",
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/minutesLightlyActive",
@@ -200,6 +214,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:walk",
device_class=SensorDeviceClass.DURATION,
scope="activity",
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/minutesSedentary",
@@ -208,6 +224,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:seat-recline-normal",
device_class=SensorDeviceClass.DURATION,
scope="activity",
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/minutesVeryActive",
@@ -216,6 +234,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:run",
device_class=SensorDeviceClass.DURATION,
scope="activity",
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/steps",
@@ -223,6 +243,7 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
native_unit_of_measurement="steps",
icon="mdi:walk",
scope="activity",
state_class=SensorStateClass.TOTAL_INCREASING,
),
FitbitSensorEntityDescription(
key="activities/tracker/activityCalories",
@@ -231,6 +252,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:fire",
scope="activity",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/tracker/calories",
@@ -239,6 +262,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:fire",
scope="activity",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/tracker/distance",
@@ -249,6 +274,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
unit_fn=_distance_unit,
scope="activity",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/tracker/elevation",
@@ -258,6 +285,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
unit_fn=_elevation_unit,
scope="activity",
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/tracker/floors",
@@ -266,6 +295,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:walk",
scope="activity",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/tracker/minutesFairlyActive",
@@ -275,6 +306,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
device_class=SensorDeviceClass.DURATION,
scope="activity",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/tracker/minutesLightlyActive",
@@ -284,6 +317,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
device_class=SensorDeviceClass.DURATION,
scope="activity",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/tracker/minutesSedentary",
@@ -293,6 +328,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
device_class=SensorDeviceClass.DURATION,
scope="activity",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/tracker/minutesVeryActive",
@@ -302,6 +339,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
device_class=SensorDeviceClass.DURATION,
scope="activity",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="activities/tracker/steps",
@@ -310,6 +349,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:walk",
scope="activity",
entity_registry_enabled_default=False,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="body/bmi",
@@ -320,6 +361,7 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
value_fn=_body_value_fn,
scope="weight",
entity_registry_enabled_default=False,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="body/fat",
@@ -330,6 +372,7 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
value_fn=_body_value_fn,
scope="weight",
entity_registry_enabled_default=False,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="body/weight",
@@ -347,6 +390,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
native_unit_of_measurement="times awaken",
icon="mdi:sleep",
scope="sleep",
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="sleep/efficiency",
@@ -355,6 +400,7 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:sleep",
state_class=SensorStateClass.MEASUREMENT,
scope="sleep",
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="sleep/minutesAfterWakeup",
@@ -363,6 +409,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:sleep",
device_class=SensorDeviceClass.DURATION,
scope="sleep",
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="sleep/minutesAsleep",
@@ -371,6 +419,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:sleep",
device_class=SensorDeviceClass.DURATION,
scope="sleep",
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="sleep/minutesAwake",
@@ -379,6 +429,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:sleep",
device_class=SensorDeviceClass.DURATION,
scope="sleep",
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="sleep/minutesToFallAsleep",
@@ -387,6 +439,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:sleep",
device_class=SensorDeviceClass.DURATION,
scope="sleep",
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
FitbitSensorEntityDescription(
key="sleep/timeInBed",
@@ -395,6 +449,8 @@ FITBIT_RESOURCES_LIST: Final[tuple[FitbitSensorEntityDescription, ...]] = (
icon="mdi:hotel",
device_class=SensorDeviceClass.DURATION,
scope="sleep",
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
),
)
@@ -404,6 +460,7 @@ SLEEP_START_TIME = FitbitSensorEntityDescription(
name="Sleep Start Time",
icon="mdi:clock",
scope="sleep",
entity_category=EntityCategory.DIAGNOSTIC,
)
SLEEP_START_TIME_12HR = FitbitSensorEntityDescription(
key="sleep/startTime",
@@ -411,6 +468,7 @@ SLEEP_START_TIME_12HR = FitbitSensorEntityDescription(
icon="mdi:clock",
value_fn=_clock_format_12h,
scope="sleep",
entity_category=EntityCategory.DIAGNOSTIC,
)
FITBIT_RESOURCE_BATTERY = FitbitSensorEntityDescription(
@@ -418,6 +476,7 @@ FITBIT_RESOURCE_BATTERY = FitbitSensorEntityDescription(
name="Battery",
icon="mdi:battery",
scope="settings",
entity_category=EntityCategory.DIAGNOSTIC,
)
FITBIT_RESOURCES_KEYS: Final[list[str]] = [

View File

@@ -6,6 +6,7 @@
'attribution': 'Data provided by Fitbit.com',
'friendly_name': 'Activity Calories',
'icon': 'mdi:fire',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': 'cal',
}),
'fitbit-api-user-id-1_activities/activityCalories',
@@ -18,6 +19,7 @@
'attribution': 'Data provided by Fitbit.com',
'friendly_name': 'Calories',
'icon': 'mdi:fire',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': 'cal',
}),
'fitbit-api-user-id-1_activities/calories',
@@ -30,6 +32,7 @@
'attribution': 'Data provided by Fitbit.com',
'friendly_name': 'Steps',
'icon': 'mdi:walk',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': 'steps',
}),
'fitbit-api-user-id-1_activities/steps',
@@ -82,6 +85,7 @@
'attribution': 'Data provided by Fitbit.com',
'friendly_name': 'Awakenings Count',
'icon': 'mdi:sleep',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': 'times awaken',
}),
'fitbit-api-user-id-1_sleep/awakeningsCount',
@@ -108,6 +112,7 @@
'device_class': 'duration',
'friendly_name': 'Minutes After Wakeup',
'icon': 'mdi:sleep',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
}),
'fitbit-api-user-id-1_sleep/minutesAfterWakeup',
@@ -121,6 +126,7 @@
'device_class': 'duration',
'friendly_name': 'Sleep Minutes Asleep',
'icon': 'mdi:sleep',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
}),
'fitbit-api-user-id-1_sleep/minutesAsleep',
@@ -134,6 +140,7 @@
'device_class': 'duration',
'friendly_name': 'Sleep Minutes Awake',
'icon': 'mdi:sleep',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
}),
'fitbit-api-user-id-1_sleep/minutesAwake',
@@ -147,6 +154,7 @@
'device_class': 'duration',
'friendly_name': 'Sleep Minutes to Fall Asleep',
'icon': 'mdi:sleep',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
}),
'fitbit-api-user-id-1_sleep/minutesToFallAsleep',
@@ -160,6 +168,7 @@
'device_class': 'distance',
'friendly_name': 'Distance',
'icon': 'mdi:map-marker',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfLength.KILOMETERS: 'km'>,
}),
'fitbit-api-user-id-1_activities/distance',
@@ -184,6 +193,7 @@
'device_class': 'duration',
'friendly_name': 'Sleep Time in Bed',
'icon': 'mdi:hotel',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
}),
'fitbit-api-user-id-1_sleep/timeInBed',
@@ -197,6 +207,7 @@
'device_class': 'distance',
'friendly_name': 'Elevation',
'icon': 'mdi:walk',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfLength.METERS: 'm'>,
}),
'fitbit-api-user-id-1_activities/elevation',
@@ -209,6 +220,7 @@
'attribution': 'Data provided by Fitbit.com',
'friendly_name': 'Floors',
'icon': 'mdi:walk',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': 'floors',
}),
'fitbit-api-user-id-1_activities/floors',
@@ -221,6 +233,7 @@
'attribution': 'Data provided by Fitbit.com',
'friendly_name': 'Resting Heart Rate',
'icon': 'mdi:heart-pulse',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': 'bpm',
}),
'fitbit-api-user-id-1_activities/heart',
@@ -234,6 +247,7 @@
'device_class': 'duration',
'friendly_name': 'Minutes Fairly Active',
'icon': 'mdi:walk',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
}),
'fitbit-api-user-id-1_activities/minutesFairlyActive',
@@ -247,6 +261,7 @@
'device_class': 'duration',
'friendly_name': 'Minutes Lightly Active',
'icon': 'mdi:walk',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
}),
'fitbit-api-user-id-1_activities/minutesLightlyActive',
@@ -260,6 +275,7 @@
'device_class': 'duration',
'friendly_name': 'Minutes Sedentary',
'icon': 'mdi:seat-recline-normal',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
}),
'fitbit-api-user-id-1_activities/minutesSedentary',
@@ -273,6 +289,7 @@
'device_class': 'duration',
'friendly_name': 'Minutes Very Active',
'icon': 'mdi:run',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
}),
'fitbit-api-user-id-1_activities/minutesVeryActive',