1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
"""Bed object from SleepIQ API."""
from __future__ import annotations
from typing import Any
from .api import SleepIQAPI
from .consts import SIDES_FULL, Side
from .foundation import SleepIQFoundation
from .sleeper import SleepIQSleeper
class SleepIQBed:
"""Bed object from SleepIQ API."""
def __init__(self, api: SleepIQAPI, data: dict[str, Any]) -> None:
"""Initialize bed object."""
self._api = api
self.name = data["name"]
self.id = data["bedId"]
self.mac_addr = data["macAddress"]
self.paused = False
self.sleepers = [
SleepIQSleeper(api, self.id, data[f"sleeper{SIDES_FULL[side]}Id"], side)
for side in [Side.LEFT, Side.RIGHT]
if data.get(f"sleeper{SIDES_FULL[side]}Id")
]
self.foundation = SleepIQFoundation(api, self.id)
self.model = "Unknown"
if "model" in data:
self.model = data["model"]
elif "components" in data:
for comp in data["components"]:
if comp["base"] == "BASE":
self.model = comp["model"]
break
def __str__(self) -> str:
"""Return string representation."""
return (
f"SleepIQBed({self.name}, model={self.model}, id={self.id}) "
+ str(self.sleepers)
+ " "
+ str(self.foundation)
)
def __repr__(self) -> str:
"""Return string representation."""
return (
f"SleepIQBed({self.name}, model={self.model}, id={self.id}) "
+ str(self.sleepers)
+ " "
+ str(self.foundation)
)
async def valid(self) -> bool:
return await self._api.check("bed/" + self.id + "/pauseMode")
async def calibrate(self) -> None:
"""Calibrate or "baseline" bed."""
for sleeper in self.sleepers:
if sleeper.sleeper_id:
await sleeper.calibrate()
break
async def stop_pump(self) -> None:
"""Stop pump."""
await self._api.put("bed/" + self.id + "/pump/forceIdle")
async def fetch_pause_mode(self) -> None:
"""Update paused attribute with data from API."""
json = await self._api.get("bed/" + self.id + "/pauseMode")
self.paused = json.get("pauseMode", "") == "on"
async def set_pause_mode(self, mode: bool) -> None:
"""Set pause mode in API and locally."""
params = {"mode": "on" if mode else "off"}
await self._api.put("bed/" + self.id + "/pauseMode", params=params)
self.paused = mode
|