149 lines
5.0 KiB
Python
149 lines
5.0 KiB
Python
"""Constants for the Fitbit platform."""
|
|
from __future__ import annotations
|
|
|
|
from typing import Final
|
|
|
|
from homeassistant.const import (
|
|
CONF_CLIENT_ID,
|
|
CONF_CLIENT_SECRET,
|
|
LENGTH_FEET,
|
|
MASS_KILOGRAMS,
|
|
MASS_MILLIGRAMS,
|
|
PERCENTAGE,
|
|
TIME_MILLISECONDS,
|
|
TIME_MINUTES,
|
|
)
|
|
|
|
ATTR_ACCESS_TOKEN: Final = "access_token"
|
|
ATTR_REFRESH_TOKEN: Final = "refresh_token"
|
|
ATTR_LAST_SAVED_AT: Final = "last_saved_at"
|
|
|
|
ATTR_DURATION: Final = "duration"
|
|
ATTR_DISTANCE: Final = "distance"
|
|
ATTR_ELEVATION: Final = "elevation"
|
|
ATTR_HEIGHT: Final = "height"
|
|
ATTR_WEIGHT: Final = "weight"
|
|
ATTR_BODY: Final = "body"
|
|
ATTR_LIQUIDS: Final = "liquids"
|
|
ATTR_BLOOD_GLUCOSE: Final = "blood glucose"
|
|
ATTR_BATTERY: Final = "battery"
|
|
|
|
CONF_MONITORED_RESOURCES: Final = "monitored_resources"
|
|
CONF_CLOCK_FORMAT: Final = "clock_format"
|
|
ATTRIBUTION: Final = "Data provided by Fitbit.com"
|
|
|
|
FITBIT_AUTH_CALLBACK_PATH: Final = "/api/fitbit/callback"
|
|
FITBIT_AUTH_START: Final = "/api/fitbit"
|
|
FITBIT_CONFIG_FILE: Final = "fitbit.conf"
|
|
FITBIT_DEFAULT_RESOURCES: Final[list[str]] = ["activities/steps"]
|
|
|
|
DEFAULT_CONFIG: Final[dict[str, str]] = {
|
|
CONF_CLIENT_ID: "CLIENT_ID_HERE",
|
|
CONF_CLIENT_SECRET: "CLIENT_SECRET_HERE",
|
|
}
|
|
DEFAULT_CLOCK_FORMAT: Final = "24H"
|
|
|
|
FITBIT_RESOURCES_LIST: Final[dict[str, tuple[str, str | None, str]]] = {
|
|
"activities/activityCalories": ("Activity Calories", "cal", "fire"),
|
|
"activities/calories": ("Calories", "cal", "fire"),
|
|
"activities/caloriesBMR": ("Calories BMR", "cal", "fire"),
|
|
"activities/distance": ("Distance", "", "map-marker"),
|
|
"activities/elevation": ("Elevation", "", "walk"),
|
|
"activities/floors": ("Floors", "floors", "walk"),
|
|
"activities/heart": ("Resting Heart Rate", "bpm", "heart-pulse"),
|
|
"activities/minutesFairlyActive": ("Minutes Fairly Active", TIME_MINUTES, "walk"),
|
|
"activities/minutesLightlyActive": ("Minutes Lightly Active", TIME_MINUTES, "walk"),
|
|
"activities/minutesSedentary": (
|
|
"Minutes Sedentary",
|
|
TIME_MINUTES,
|
|
"seat-recline-normal",
|
|
),
|
|
"activities/minutesVeryActive": ("Minutes Very Active", TIME_MINUTES, "run"),
|
|
"activities/steps": ("Steps", "steps", "walk"),
|
|
"activities/tracker/activityCalories": ("Tracker Activity Calories", "cal", "fire"),
|
|
"activities/tracker/calories": ("Tracker Calories", "cal", "fire"),
|
|
"activities/tracker/distance": ("Tracker Distance", "", "map-marker"),
|
|
"activities/tracker/elevation": ("Tracker Elevation", "", "walk"),
|
|
"activities/tracker/floors": ("Tracker Floors", "floors", "walk"),
|
|
"activities/tracker/minutesFairlyActive": (
|
|
"Tracker Minutes Fairly Active",
|
|
TIME_MINUTES,
|
|
"walk",
|
|
),
|
|
"activities/tracker/minutesLightlyActive": (
|
|
"Tracker Minutes Lightly Active",
|
|
TIME_MINUTES,
|
|
"walk",
|
|
),
|
|
"activities/tracker/minutesSedentary": (
|
|
"Tracker Minutes Sedentary",
|
|
TIME_MINUTES,
|
|
"seat-recline-normal",
|
|
),
|
|
"activities/tracker/minutesVeryActive": (
|
|
"Tracker Minutes Very Active",
|
|
TIME_MINUTES,
|
|
"run",
|
|
),
|
|
"activities/tracker/steps": ("Tracker Steps", "steps", "walk"),
|
|
"body/bmi": ("BMI", "BMI", "human"),
|
|
"body/fat": ("Body Fat", PERCENTAGE, "human"),
|
|
"body/weight": ("Weight", "", "human"),
|
|
"devices/battery": ("Battery", None, "battery"),
|
|
"sleep/awakeningsCount": ("Awakenings Count", "times awaken", "sleep"),
|
|
"sleep/efficiency": ("Sleep Efficiency", PERCENTAGE, "sleep"),
|
|
"sleep/minutesAfterWakeup": ("Minutes After Wakeup", TIME_MINUTES, "sleep"),
|
|
"sleep/minutesAsleep": ("Sleep Minutes Asleep", TIME_MINUTES, "sleep"),
|
|
"sleep/minutesAwake": ("Sleep Minutes Awake", TIME_MINUTES, "sleep"),
|
|
"sleep/minutesToFallAsleep": (
|
|
"Sleep Minutes to Fall Asleep",
|
|
TIME_MINUTES,
|
|
"sleep",
|
|
),
|
|
"sleep/startTime": ("Sleep Start Time", None, "clock"),
|
|
"sleep/timeInBed": ("Sleep Time in Bed", TIME_MINUTES, "hotel"),
|
|
}
|
|
|
|
FITBIT_MEASUREMENTS: Final[dict[str, dict[str, str]]] = {
|
|
"en_US": {
|
|
ATTR_DURATION: TIME_MILLISECONDS,
|
|
ATTR_DISTANCE: "mi",
|
|
ATTR_ELEVATION: LENGTH_FEET,
|
|
ATTR_HEIGHT: "in",
|
|
ATTR_WEIGHT: "lbs",
|
|
ATTR_BODY: "in",
|
|
ATTR_LIQUIDS: "fl. oz.",
|
|
ATTR_BLOOD_GLUCOSE: f"{MASS_MILLIGRAMS}/dL",
|
|
ATTR_BATTERY: "",
|
|
},
|
|
"en_GB": {
|
|
ATTR_DURATION: TIME_MILLISECONDS,
|
|
ATTR_DISTANCE: "kilometers",
|
|
ATTR_ELEVATION: "meters",
|
|
ATTR_HEIGHT: "centimeters",
|
|
ATTR_WEIGHT: "stone",
|
|
ATTR_BODY: "centimeters",
|
|
ATTR_LIQUIDS: "milliliters",
|
|
ATTR_BLOOD_GLUCOSE: "mmol/L",
|
|
ATTR_BATTERY: "",
|
|
},
|
|
"metric": {
|
|
ATTR_DURATION: TIME_MILLISECONDS,
|
|
ATTR_DISTANCE: "kilometers",
|
|
ATTR_ELEVATION: "meters",
|
|
ATTR_HEIGHT: "centimeters",
|
|
ATTR_WEIGHT: MASS_KILOGRAMS,
|
|
ATTR_BODY: "centimeters",
|
|
ATTR_LIQUIDS: "milliliters",
|
|
ATTR_BLOOD_GLUCOSE: "mmol/L",
|
|
ATTR_BATTERY: "",
|
|
},
|
|
}
|
|
|
|
BATTERY_LEVELS: Final[dict[str, int]] = {
|
|
"High": 100,
|
|
"Medium": 50,
|
|
"Low": 20,
|
|
"Empty": 0,
|
|
}
|