Home Assistant Unofficial Reference 2024.12.1
const.py
Go to the documentation of this file.
1 """Constants for the Overkiz (by Somfy) integration."""
2 
3 from __future__ import annotations
4 
5 from datetime import timedelta
6 import logging
7 from typing import Final
8 
9 from pyoverkiz.enums import (
10  MeasuredValueType,
11  OverkizCommandParam,
12  Server,
13  UIClass,
14  UIWidget,
15 )
16 
17 from homeassistant.const import (
18  CONCENTRATION_PARTS_PER_BILLION,
19  CONCENTRATION_PARTS_PER_MILLION,
20  DEGREE,
21  LIGHT_LUX,
22  PERCENTAGE,
23  Platform,
24  UnitOfElectricCurrent,
25  UnitOfElectricPotential,
26  UnitOfEnergy,
27  UnitOfIrradiance,
28  UnitOfLength,
29  UnitOfPower,
30  UnitOfPressure,
31  UnitOfSpeed,
32  UnitOfTemperature,
33  UnitOfTime,
34  UnitOfVolume,
35  UnitOfVolumeFlowRate,
36 )
37 
38 DOMAIN: Final = "overkiz"
39 LOGGER: logging.Logger = logging.getLogger(__package__)
40 
41 CONF_API_TYPE: Final = "api_type"
42 CONF_HUB: Final = "hub"
43 DEFAULT_SERVER: Final = Server.SOMFY_EUROPE
44 DEFAULT_HOST: Final = "gateway-xxxx-xxxx-xxxx.local:8443"
45 
46 UPDATE_INTERVAL: Final = timedelta(seconds=30)
47 UPDATE_INTERVAL_ALL_ASSUMED_STATE: Final = timedelta(minutes=60)
48 
49 PLATFORMS: list[Platform] = [
50  Platform.ALARM_CONTROL_PANEL,
51  Platform.BINARY_SENSOR,
52  Platform.BUTTON,
53  Platform.CLIMATE,
54  Platform.COVER,
55  Platform.LIGHT,
56  Platform.LOCK,
57  Platform.NUMBER,
58  Platform.SCENE,
59  Platform.SELECT,
60  Platform.SENSOR,
61  Platform.SIREN,
62  Platform.SWITCH,
63  Platform.WATER_HEATER,
64 ]
65 
66 IGNORED_OVERKIZ_DEVICES: list[UIClass | UIWidget] = [
67  UIClass.PROTOCOL_GATEWAY,
68  UIClass.POD,
69 ]
70 
71 # Used to map the Somfy widget and ui_class to the Home Assistant platform
72 OVERKIZ_DEVICE_TO_PLATFORM: dict[UIClass | UIWidget, Platform | None] = {
73  UIClass.ADJUSTABLE_SLATS_ROLLER_SHUTTER: Platform.COVER,
74  UIClass.AWNING: Platform.COVER,
75  UIClass.CURTAIN: Platform.COVER,
76  UIClass.DOOR_LOCK: Platform.LOCK,
77  UIClass.EXTERIOR_SCREEN: Platform.COVER,
78  UIClass.EXTERIOR_VENETIAN_BLIND: Platform.COVER,
79  UIClass.GARAGE_DOOR: Platform.COVER,
80  UIClass.GATE: Platform.COVER,
81  UIClass.LIGHT: Platform.LIGHT,
82  UIClass.ON_OFF: Platform.SWITCH,
83  UIClass.PERGOLA: Platform.COVER,
84  UIClass.ROLLER_SHUTTER: Platform.COVER,
85  UIClass.SCREEN: Platform.COVER,
86  UIClass.SHUTTER: Platform.COVER,
87  UIClass.SIREN: Platform.SIREN,
88  UIClass.SWIMMING_POOL: Platform.SWITCH,
89  UIClass.SWINGING_SHUTTER: Platform.COVER,
90  UIClass.VENETIAN_BLIND: Platform.COVER,
91  UIClass.WINDOW: Platform.COVER,
92  UIWidget.ALARM_PANEL_CONTROLLER: Platform.ALARM_CONTROL_PANEL, # widgetName, uiClass is Alarm (not supported)
93  UIWidget.ATLANTIC_ELECTRICAL_HEATER: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
94  UIWidget.ATLANTIC_ELECTRICAL_HEATER_WITH_ADJUSTABLE_TEMPERATURE_SETPOINT: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
95  UIWidget.ATLANTIC_ELECTRICAL_TOWEL_DRYER: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
96  UIWidget.ATLANTIC_HEAT_RECOVERY_VENTILATION: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
97  UIWidget.ATLANTIC_PASS_APC_DHW: Platform.WATER_HEATER, # widgetName, uiClass is WaterHeatingSystem (not supported)
98  UIWidget.ATLANTIC_PASS_APC_HEAT_PUMP: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
99  UIWidget.ATLANTIC_PASS_APC_HEATING_AND_COOLING_ZONE: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
100  UIWidget.ATLANTIC_PASS_APC_HEATING_ZONE: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
101  UIWidget.ATLANTIC_PASS_APC_ZONE_CONTROL: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
102  UIWidget.DOMESTIC_HOT_WATER_PRODUCTION: Platform.WATER_HEATER, # widgetName, uiClass is WaterHeatingSystem (not supported)
103  UIWidget.DOMESTIC_HOT_WATER_TANK: Platform.SWITCH, # widgetName, uiClass is WaterHeatingSystem (not supported)
104  UIWidget.HITACHI_AIR_TO_AIR_HEAT_PUMP: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
105  UIWidget.HITACHI_DHW: Platform.WATER_HEATER, # widgetName, uiClass is HitachiHeatingSystem (not supported)
106  UIWidget.MY_FOX_ALARM_CONTROLLER: Platform.ALARM_CONTROL_PANEL, # widgetName, uiClass is Alarm (not supported)
107  UIWidget.MY_FOX_SECURITY_CAMERA: Platform.SWITCH, # widgetName, uiClass is Camera (not supported)
108  UIWidget.RTD_INDOOR_SIREN: Platform.SWITCH, # widgetName, uiClass is Siren (not supported)
109  UIWidget.RTD_OUTDOOR_SIREN: Platform.SWITCH, # widgetName, uiClass is Siren (not supported)
110  UIWidget.RTS_GENERIC: Platform.COVER, # widgetName, uiClass is Generic (not supported)
111  UIWidget.SIREN_STATUS: None, # widgetName, uiClass is Siren (siren)
112  UIWidget.SOMFY_HEATING_TEMPERATURE_INTERFACE: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
113  UIWidget.SOMFY_THERMOSTAT: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
114  UIWidget.STATELESS_ALARM_CONTROLLER: Platform.SWITCH, # widgetName, uiClass is Alarm (not supported)
115  UIWidget.STATEFUL_ALARM_CONTROLLER: Platform.ALARM_CONTROL_PANEL, # widgetName, uiClass is Alarm (not supported)
116  UIWidget.STATELESS_EXTERIOR_HEATING: Platform.SWITCH, # widgetName, uiClass is ExteriorHeatingSystem (not supported)
117  UIWidget.TSKALARM_CONTROLLER: Platform.ALARM_CONTROL_PANEL, # widgetName, uiClass is Alarm (not supported)
118  UIWidget.VALVE_HEATING_TEMPERATURE_INTERFACE: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
119 }
120 
121 # Map Overkiz camelCase to Home Assistant snake_case for translation
122 OVERKIZ_STATE_TO_TRANSLATION: dict[str, str] = {
123  OverkizCommandParam.EXTERNAL_GATEWAY: "external_gateway",
124  OverkizCommandParam.LOCAL_USER: "local_user",
125  OverkizCommandParam.LOW_BATTERY: "low_battery",
126  OverkizCommandParam.LSC: "lsc",
127  OverkizCommandParam.MAINTENANCE_REQUIRED: "maintenance_required",
128  OverkizCommandParam.NO_DEFECT: "no_defect",
129  OverkizCommandParam.SAAC: "saac",
130  OverkizCommandParam.SFC: "sfc",
131  OverkizCommandParam.UPS: "ups",
132 }
133 
134 OVERKIZ_UNIT_TO_HA: dict[str, str] = {
135  MeasuredValueType.ABSOLUTE_VALUE: "",
136  MeasuredValueType.ANGLE_IN_DEGREES: DEGREE,
137  MeasuredValueType.ANGULAR_SPEED_IN_DEGREES_PER_SECOND: f"{DEGREE}/{UnitOfTime.SECONDS}",
138  MeasuredValueType.ELECTRICAL_ENERGY_IN_KWH: UnitOfEnergy.KILO_WATT_HOUR,
139  MeasuredValueType.ELECTRICAL_ENERGY_IN_WH: UnitOfEnergy.WATT_HOUR,
140  MeasuredValueType.ELECTRICAL_POWER_IN_KW: UnitOfPower.KILO_WATT,
141  MeasuredValueType.ELECTRICAL_POWER_IN_W: UnitOfPower.WATT,
142  MeasuredValueType.ELECTRIC_CURRENT_IN_AMPERE: UnitOfElectricCurrent.AMPERE,
143  MeasuredValueType.ELECTRIC_CURRENT_IN_MILLI_AMPERE: UnitOfElectricCurrent.MILLIAMPERE,
144  MeasuredValueType.ENERGY_IN_CAL: "cal",
145  MeasuredValueType.ENERGY_IN_KCAL: "kcal",
146  MeasuredValueType.FLOW_IN_LITRE_PER_SECOND: f"{UnitOfVolume.LITERS}/{UnitOfTime.SECONDS}",
147  MeasuredValueType.FLOW_IN_METER_CUBE_PER_HOUR: UnitOfVolumeFlowRate.CUBIC_METERS_PER_HOUR,
148  MeasuredValueType.FLOW_IN_METER_CUBE_PER_SECOND: f"{UnitOfVolume.CUBIC_METERS}/{UnitOfTime.SECONDS}",
149  MeasuredValueType.FOSSIL_ENERGY_IN_WH: UnitOfEnergy.WATT_HOUR,
150  MeasuredValueType.GRADIENT_IN_PERCENTAGE_PER_SECOND: f"{PERCENTAGE}/{UnitOfTime.SECONDS}",
151  MeasuredValueType.LENGTH_IN_METER: UnitOfLength.METERS,
152  MeasuredValueType.LINEAR_SPEED_IN_METER_PER_SECOND: UnitOfSpeed.METERS_PER_SECOND,
153  MeasuredValueType.LUMINANCE_IN_LUX: LIGHT_LUX,
154  MeasuredValueType.PARTS_PER_BILLION: CONCENTRATION_PARTS_PER_BILLION,
155  MeasuredValueType.PARTS_PER_MILLION: CONCENTRATION_PARTS_PER_MILLION,
156  MeasuredValueType.PARTS_PER_QUADRILLION: "ppq",
157  MeasuredValueType.PARTS_PER_TRILLION: "ppt",
158  MeasuredValueType.POWER_PER_SQUARE_METER: UnitOfIrradiance.WATTS_PER_SQUARE_METER,
159  MeasuredValueType.PRESSURE_IN_HPA: UnitOfPressure.HPA,
160  MeasuredValueType.PRESSURE_IN_MILLI_BAR: UnitOfPressure.MBAR,
161  MeasuredValueType.RELATIVE_VALUE_IN_PERCENTAGE: PERCENTAGE,
162  MeasuredValueType.TEMPERATURE_IN_CELCIUS: UnitOfTemperature.CELSIUS,
163  MeasuredValueType.TEMPERATURE_IN_KELVIN: UnitOfTemperature.KELVIN,
164  MeasuredValueType.TIME_IN_SECOND: UnitOfTime.SECONDS,
165  # MeasuredValueType.VECTOR_COORDINATE: "",
166  MeasuredValueType.VOLTAGE_IN_MILLI_VOLT: UnitOfElectricPotential.MILLIVOLT,
167  MeasuredValueType.VOLTAGE_IN_VOLT: UnitOfElectricPotential.VOLT,
168  MeasuredValueType.VOLUME_IN_CUBIC_METER: UnitOfVolume.CUBIC_METERS,
169  MeasuredValueType.VOLUME_IN_GALLON: UnitOfVolume.GALLONS,
170  MeasuredValueType.VOLUME_IN_LITER: UnitOfVolume.LITERS,
171 }