Skip to content

Commit

Permalink
Set max foot warming to 600 for climate360 beds
Browse files Browse the repository at this point in the history
  • Loading branch information
kbickar committed Jan 15, 2024
1 parent d852c11 commit 393d510
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 14 deletions.
28 changes: 16 additions & 12 deletions asyncsleepiq/foot_warmer.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,32 @@
from __future__ import annotations

from .api import SleepIQAPI
from .consts import (Side, FootWarmingTemps, SIDES_FULL)
from .consts import Side, FootWarmingTemps, SIDES_FULL


class SleepIQFootWarmer:
"""Foot warmer representation for SleepIQ API."""

max_foot_warming_time = 360

def __init__(self, api: SleepIQAPI, bed_id: str, side: Side, timer: int, temperature: int) -> None:
"""Initialize foot warmer object."""
self._api = api
self.bed_id = bed_id
self.side = side
self.is_on = (temperature > 0)
self.is_on = temperature > 0
self.timer = timer
self.temperature = temperature

def __str__(self) -> str:
"""Return string representation."""
return f"SleepIQFootWarmer[{self.side}]: {'On' if self.is_on else 'Off'}, {self.timer}, {FootWarmingTemps(self.temperature).name}"

__repr__ = __str__

async def turn_on(self, temperature: FootWarmingTemps, time: int) -> None:
"""Turn on foot warmer through API."""
await self.set_foot_warming(temperature, time)
async def turn_on(self, temperature: FootWarmingTemps, time: int) -> None:
"""Turn on foot warmer through API."""
await self.set_foot_warming(temperature, time)

async def turn_off(self) -> None:
"""Turn off foot warmer through API."""
Expand All @@ -32,10 +36,10 @@ async def turn_off(self) -> None:

async def set_foot_warming(self, temperature: FootWarmingTemps, time: int) -> None:
"""Set foot warmer state through API."""
if time <= 0 or time > 360:
raise ValueError("Invalid Time, must be between 0 and 360")
if time <= 0 or time > self.max_foot_warming_time:
raise ValueError(f"Invalid Time, must be between 0 and {self.max_foot_warming_time}")

data = { self.time_key(): time, self.temp_key(): temperature.value}
data = {self.time_key(): time, self.temp_key(): temperature.value}
await self._api.put(f"bed/{self.bed_id}/foundation/footwarming", data)
await self.update(data)

Expand All @@ -46,8 +50,8 @@ async def update(self, data) -> None:
self.timer = data.get(self.time_key(), self.timer) if self.is_on else 0

def time_key(self):
return 'footWarmingTimer' + SIDES_FULL[self.side]
return "footWarmingTimer" + SIDES_FULL[self.side]

def temp_key(self, read = False):
key = 'Status' if read else 'Temp'
return f'footWarming{key}' + SIDES_FULL[self.side]
def temp_key(self, read=False):
key = "Status" if read else "Temp"
return f"footWarming{key}" + SIDES_FULL[self.side]
6 changes: 4 additions & 2 deletions asyncsleepiq/fuzion/foot_warmer.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@
class SleepIQFuzionFootWarmer(SleepIQFootWarmer):
"""Foot warmer representation for SleepIQ API."""

max_foot_warming_time = 600

async def set_foot_warming(self, temperature: FootWarmingTemps, time: int) -> None:
"""Set foot warmer state through API."""
if time <= 0 or time > 360:
raise ValueError("Invalid Time, must be between 0 and 360")
if time <= 0 or time > self.max_foot_warming_time:
raise ValueError(f"Invalid Time, must be between 0 and {self.max_foot_warming_time}")

args = [SIDES_FULL[self.side].lower(), temperature.name.lower(), str(time)]
await self._api.bamkey(self.bed_id, "SetFootwarmingSettings", args)
Expand Down

0 comments on commit 393d510

Please sign in to comment.