From 2474d84e352363bf12446977aeee41c555da6b9e Mon Sep 17 00:00:00 2001 From: G Johansson Date: Sat, 5 Mar 2022 22:59:15 +0100 Subject: [PATCH] Implement measurement sensor for Sensibo (#66949) --- .../components/sensibo/coordinator.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/homeassistant/components/sensibo/coordinator.py b/homeassistant/components/sensibo/coordinator.py index 9694d6db316..eaee8e23c1a 100644 --- a/homeassistant/components/sensibo/coordinator.py +++ b/homeassistant/components/sensibo/coordinator.py @@ -1,6 +1,7 @@ """DataUpdateCoordinator for the Sensibo integration.""" from __future__ import annotations +from dataclasses import dataclass from datetime import timedelta from typing import Any @@ -17,6 +18,21 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda from .const import DEFAULT_SCAN_INTERVAL, DOMAIN, LOGGER, TIMEOUT +@dataclass +class MotionSensor: + """Dataclass for motionsensors.""" + + id: str + alive: bool | None = None + fw_ver: str | None = None + fw_type: str | None = None + is_main_sensor: bool | None = None + battery_voltage: int | None = None + humidity: int | None = None + temperature: float | None = None + model: str | None = None + + class SensiboDataUpdateCoordinator(DataUpdateCoordinator): """A Sensibo Data Update Coordinator.""" @@ -98,6 +114,28 @@ class SensiboDataUpdateCoordinator(DataUpdateCoordinator): calibration_temp = dev["sensorsCalibration"].get("temperature") calibration_hum = dev["sensorsCalibration"].get("humidity") + # Sky plus supports functionality to use motion sensor as sensor for temp and humidity + if main_sensor := dev["mainMeasurementsSensor"]: + measurements = main_sensor["measurements"] + temperature = measurements.get("temperature") + humidity = measurements.get("humidity") + + motion_sensors = [ + MotionSensor( + id=motionsensor["id"], + alive=motionsensor["connectionStatus"].get("isAlive"), + fw_ver=motionsensor.get("firmwareVersion"), + fw_type=motionsensor.get("firmwareType"), + is_main_sensor=motionsensor.get("isMainSensor"), + battery_voltage=motionsensor["measurements"].get("batteryVoltage"), + humidity=motionsensor["measurements"].get("humidity"), + temperature=motionsensor["measurements"].get("temperature"), + model=motionsensor.get("productModel"), + ) + for motionsensor in dev["motionSensors"] + if dev["motionSensors"] + ] + device_data[unique_id] = { "id": unique_id, "mac": mac, @@ -126,5 +164,6 @@ class SensiboDataUpdateCoordinator(DataUpdateCoordinator): "calibration_temp": calibration_temp, "calibration_hum": calibration_hum, "full_capabilities": capabilities, + "motion_sensors": motion_sensors, } return device_data