diff --git a/homeassistant/components/eight_sleep/__init__.py b/homeassistant/components/eight_sleep/__init__.py index a8a5a6e1fcc..595144013b6 100644 --- a/homeassistant/components/eight_sleep/__init__.py +++ b/homeassistant/components/eight_sleep/__init__.py @@ -43,12 +43,14 @@ SIGNAL_UPDATE_USER = "eight_user_update" NAME_MAP = { "left_current_sleep": "Left Sleep Session", + "left_current_sleep_fitness": "Left Sleep Fitness", "left_last_sleep": "Left Previous Sleep Session", "left_bed_state": "Left Bed State", "left_presence": "Left Bed Presence", "left_bed_temp": "Left Bed Temperature", "left_sleep_stage": "Left Sleep Stage", "right_current_sleep": "Right Sleep Session", + "right_current_sleep_fitness": "Right Sleep Fitness", "right_last_sleep": "Right Previous Sleep Session", "right_bed_state": "Right Bed State", "right_presence": "Right Bed Presence", @@ -57,14 +59,21 @@ NAME_MAP = { "room_temp": "Room Temperature", } -SENSORS = ["current_sleep", "last_sleep", "bed_state", "bed_temp", "sleep_stage"] +SENSORS = [ + "current_sleep", + "current_sleep_fitness", + "last_sleep", + "bed_state", + "bed_temp", + "sleep_stage", +] SERVICE_HEAT_SET = "heat_set" ATTR_TARGET_HEAT = "target" ATTR_HEAT_DURATION = "duration" -VALID_TARGET_HEAT = vol.All(vol.Coerce(int), vol.Clamp(min=0, max=100)) +VALID_TARGET_HEAT = vol.All(vol.Coerce(int), vol.Clamp(min=-100, max=100)) VALID_DURATION = vol.All(vol.Coerce(int), vol.Clamp(min=0, max=28800)) SERVICE_EIGHT_SCHEMA = vol.Schema( @@ -101,7 +110,7 @@ async def async_setup(hass, config): _LOGGER.error("Timezone is not set in Home Assistant.") return False - timezone = hass.config.time_zone + timezone = str(hass.config.time_zone) eight = EightSleep(user, password, timezone, partner, None, hass.loop) diff --git a/homeassistant/components/eight_sleep/manifest.json b/homeassistant/components/eight_sleep/manifest.json index 75998e71e5f..6372967b42b 100644 --- a/homeassistant/components/eight_sleep/manifest.json +++ b/homeassistant/components/eight_sleep/manifest.json @@ -2,7 +2,7 @@ "domain": "eight_sleep", "name": "Eight Sleep", "documentation": "https://www.home-assistant.io/integrations/eight_sleep", - "requirements": ["pyeight==0.1.2"], + "requirements": ["pyeight==0.1.3"], "dependencies": [], "codeowners": ["@mezz64"] } diff --git a/homeassistant/components/eight_sleep/sensor.py b/homeassistant/components/eight_sleep/sensor.py index d3d54fd58ca..af6de2657ce 100644 --- a/homeassistant/components/eight_sleep/sensor.py +++ b/homeassistant/components/eight_sleep/sensor.py @@ -28,6 +28,11 @@ ATTR_ACTIVE_HEAT = "Heating Active" ATTR_DURATION_HEAT = "Heating Time Remaining" ATTR_PROCESSING = "Processing" ATTR_SESSION_START = "Session Start" +ATTR_FIT_DATE = "Fitness Date" +ATTR_FIT_DURATION_SCORE = "Fitness Duration Score" +ATTR_FIT_ASLEEP_SCORE = "Fitness Asleep Score" +ATTR_FIT_OUT_SCORE = "Fitness Out-of-Bed Score" +ATTR_FIT_WAKEUP_SCORE = "Fitness Wakeup Score" _LOGGER = logging.getLogger(__name__) @@ -151,7 +156,11 @@ class EightUserSensor(EightSleepUserEntity): @property def unit_of_measurement(self): """Return the unit the value is expressed in.""" - if "current_sleep" in self._sensor or "last_sleep" in self._sensor: + if ( + "current_sleep" in self._sensor + or "last_sleep" in self._sensor + or "current_sleep_fitness" in self._sensor + ): return "Score" if "bed_temp" in self._sensor: if self._units == "si": @@ -169,8 +178,12 @@ class EightUserSensor(EightSleepUserEntity): """Retrieve latest state.""" _LOGGER.debug("Updating User sensor: %s", self._sensor) if "current" in self._sensor: - self._state = self._usrobj.current_sleep_score - self._attr = self._usrobj.current_values + if "fitness" in self._sensor: + self._state = self._usrobj.current_sleep_fitness_score + self._attr = self._usrobj.current_fitness_values + else: + self._state = self._usrobj.current_sleep_score + self._attr = self._usrobj.current_values elif "last" in self._sensor: self._state = self._usrobj.last_sleep_score self._attr = self._usrobj.last_values @@ -193,6 +206,16 @@ class EightUserSensor(EightSleepUserEntity): # Skip attributes if sensor type doesn't support return None + if "fitness" in self._sensor_root: + state_attr = { + ATTR_FIT_DATE: self._attr["date"], + ATTR_FIT_DURATION_SCORE: self._attr["duration"], + ATTR_FIT_ASLEEP_SCORE: self._attr["asleep"], + ATTR_FIT_OUT_SCORE: self._attr["out"], + ATTR_FIT_WAKEUP_SCORE: self._attr["wakeup"], + } + return state_attr + state_attr = {ATTR_SESSION_START: self._attr["date"]} state_attr[ATTR_TNT] = self._attr["tnt"] state_attr[ATTR_PROCESSING] = self._attr["processing"] diff --git a/homeassistant/components/eight_sleep/services.yaml b/homeassistant/components/eight_sleep/services.yaml index db7690730dd..49a3c67d604 100644 --- a/homeassistant/components/eight_sleep/services.yaml +++ b/homeassistant/components/eight_sleep/services.yaml @@ -1,6 +1,6 @@ heat_set: - description: Set heating level for eight sleep. + description: Set heating/cooling level for eight sleep. fields: - duration: {description: Duration to heat at the target level in seconds., example: 3600} + duration: {description: Duration to heat/cool at the target level in seconds., example: 3600} entity_id: {description: Entity id of the bed state to adjust., example: sensor.eight_left_bed_state} - target: {description: Target heating level from 0-100., example: 35} + target: {description: Target cooling/heating level from -100 to 100., example: 35} diff --git a/requirements_all.txt b/requirements_all.txt index fb4019be82d..c26368fad9b 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1226,7 +1226,7 @@ pyeconet==0.0.11 pyedimax==0.2.1 # homeassistant.components.eight_sleep -pyeight==0.1.2 +pyeight==0.1.3 # homeassistant.components.emby pyemby==1.6