Files
srv-docker/homeassistant/config/custom_components/polaris/const.py
2026-03-07 17:28:59 +00:00

3524 lines
124 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""The Polaris IQ Home component."""
from __future__ import annotations
from collections.abc import Callable
from dataclasses import dataclass
import datetime
import json
from zoneinfo import ZoneInfo
import voluptuous as vol
from homeassistant.components.image import Image, ImageEntityDescription
from homeassistant.components.vacuum import (
DOMAIN,
ATTR_CLEANED_AREA,
StateVacuumEntity,
# VacuumActivity,
VacuumEntityFeature,
)
from homeassistant.components.climate import (
ClimateEntity,
ClimateEntityFeature,
ClimateEntityDescription,
HVACMode,
)
from homeassistant.components.time import TimeEntity, TimeEntityDescription
from homeassistant.components.button import (
ButtonDeviceClass,
ButtonEntity,
ButtonEntityDescription,
)
from homeassistant.components.binary_sensor import (
BinarySensorDeviceClass,
BinarySensorEntity,
BinarySensorEntityDescription,
)
from homeassistant.components.select import SelectEntityDescription
from homeassistant.components.number import NumberDeviceClass, NumberEntityDescription
from homeassistant.components.select import SelectEntityDescription
from homeassistant.components.sensor import (
SensorDeviceClass,
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.components.switch import (
SwitchDeviceClass,
SwitchEntityDescription,
)
from homeassistant.components.water_heater import WaterHeaterEntity, WaterHeaterEntityDescription # removed in HA Core 2026.1
from homeassistant.components.humidifier import HumidifierEntity, HumidifierEntityDescription, HumidifierDeviceClass
from homeassistant.const import (
PERCENTAGE,
UnitOfTemperature,
UnitOfMass,
SIGNAL_STRENGTH_DECIBELS,
CONCENTRATION_PARTS_PER_MILLION,
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
UnitOfTime,
UnitOfVolume,
UnitOfEnergy,
UnitOfPower,
Platform,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.selector import (
SelectOptionDict,
SelectSelector,
SelectSelectorConfig,
SelectSelectorMode,
)
PLATFORMS = [
Platform.SELECT,
Platform.SENSOR,
Platform.HUMIDIFIER,
Platform.WATER_HEATER,
Platform.SWITCH,
Platform.NUMBER,
Platform.LIGHT,
Platform.BINARY_SENSOR,
Platform.BUTTON,
Platform.TIME,
Platform.CLIMATE,
Platform.VACUUM
# Platform.IMAGE
]
# Global values
DOMAIN = "polaris"
MQTT_ROOT_TOPIC = "MQTT_ROOT_TOPIC"
MQTT_ROOT_TOPIC_DEFAULT = "polaris"
DEVICETYPE = "DEVICETYPE"
DEVICEID = "DEVICEID"
MANUFACTURER = "Polaris IQ Home"
CUSTOM_SELECT_FILE_PATH = "www/polaris/polaris_custom_select.js"
POLARIS_DEVICE = {
0: {"model": "Unknown", "class": "all"},
37: {"model": "PWK-7111CGLD-WIFI-(old)", "class": "kettle"},
245: {"model": "PWK-0105", "class": "kettle"},
205: {"model": "PWK-1538CC", "class": "kettle"},
271: {"model": "PWK-1701CGLD", "class": "kettle"},
36: {"model": "PWK-17107CGLD-WIFI-(old)", "class": "kettle"},
29: {"model": "PWK-1712CGLD", "class": "kettle"},
38: {"model": "PWK-1712CGLD", "class": "kettle"},
54: {"model": "PWK-1712CGLD", "class": "kettle"},
59: {"model": "PWK-1712CGLD", "class": "kettle"},
63: {"model": "PWK-1712CGLD", "class": "kettle"},
97: {"model": "PWK-1712CGLD", "class": "kettle"},
117: {"model": "PWK-1712CGLD", "class": "kettle"},
208: {"model": "PWK-1712CGLD", "class": "kettle"},
83: {"model": "PWK-1712CGLD-RGB", "class": "kettle"},
253: {"model": "PWK-1715", "class": "kettle"},
244: {"model": "PWK-1716CGLD", "class": "kettle"},
67: {"model": "PWK-1720CGLD", "class": "kettle"},
84: {"model": "PWK-1720CGLD-RGB", "class": "kettle"},
6: {"model": "PWK-1725CGLD", "class": "kettle"},
52: {"model": "PWK-1725CGLD", "class": "kettle"},
57: {"model": "PWK-1725CGLD", "class": "kettle"},
61: {"model": "PWK-1725CGLD", "class": "kettle"},
82: {"model": "PWK-1725CGLD", "class": "kettle"},
86: {"model": "PWK-1725CGLD", "class": "kettle"},
105: {"model": "PWK-1725CGLD", "class": "kettle"},
106: {"model": "PWK-1725CGLD", "class": "kettle"},
177: {"model": "PWK-1725CGLD", "class": "kettle"},
194: {"model": "PWK-1725CGLD", "class": "kettle"},
196: {"model": "PWK-1725CGLD", "class": "kettle"},
164: {"model": "PWK-1728CGLDA", "class": "kettle"},
209: {"model": "PWK-1729CAD", "class": "kettle"},
189: {"model": "PWK-1746CA", "class": "kettle"},
260: {"model": "PWK-1746CA", "class": "kettle"},
308: {"model": "PWK-1746CA", "class": "kettle"},
8: {"model": "PWK-1755CAD", "class": "kettle"},
53: {"model": "PWK-1755CAD", "class": "kettle"},
58: {"model": "PWK-1755CAD", "class": "kettle"},
62: {"model": "PWK-1755CAD", "class": "kettle"},
185: {"model": "PWK-1755CAD", "class": "kettle"},
165: {"model": "PWK-1755CAD-VOICE", "class": "kettle"},
121: {"model": "PWK-1774CAD", "class": "kettle"},
2: {"model": "PWK-1775CGLD", "class": "kettle"},
51: {"model": "PWK-1775CGLD", "class": "kettle"},
56: {"model": "PWK-1775CGLD", "class": "kettle"},
60: {"model": "PWK-1775CGLD", "class": "kettle"},
98: {"model": "PWK-1775CGLD", "class": "kettle"},
188: {"model": "PWK-1775CGLD", "class": "kettle"},
223: {"model": "PWK-1775CGLD", "class": "kettle"},
262: {"model": "PWK-1775CGLD", "class": "kettle"},
263: {"model": "PWK-1775CGLD", "class": "kettle"},
275: {"model": "PWK-1775CGLD", "class": "kettle"},
294: {"model": "PWK-1775CGLD", "class": "kettle"},
85: {"model": "PWK-1775CGLD-SMART", "class": "kettle"},
139: {"model": "PWK-1775CGLD-VOICE", "class": "kettle"},
175: {"model": "PWK-1823CGLD", "class": "kettle"},
254: {"model": "PWK-1823CGLD", "class": "kettle"},
176: {"model": "PWK-1841CGLD", "class": "kettle"},
255: {"model": "PWK-1841CGLD", "class": "kettle"},
147: {"model": "PUH-0205", "class": "humidifier"},
71: {"model": "PUH-1010", "class": "humidifier"},
72: {"model": "PUH-2300", "class": "humidifier"},
73: {"model": "PUH-3030", "class": "humidifier"},
75: {"model": "PUH-4040", "class": "humidifier"},
99: {"model": "PUH-4040", "class": "humidifier"},
153: {"model": "PUH-4055", "class": "humidifier"},
137: {"model": "PUH-4066", "class": "humidifier"},
157: {"model": "PUH-4550", "class": "humidifier"},
158: {"model": "PUH-6060", "class": "humidifier"},
25: {"model": "PUH-6090", "class": "humidifier"},
15: {"model": "PUH-7406", "class": "humidifier"},
87: {"model": "PUH-8080/PUH-4606", "class": "humidifier"},
155: {"model": "PUH-8802", "class": "humidifier"},
74: {"model": "PUH-9009", "class": "humidifier"},
4: {"model": "PUH-9105/PUH-2709", "class": "humidifier"},
17: {"model": "PUH-9105/PUH-2709", "class": "humidifier"},
18: {"model": "PUH-9105/PUH-2709", "class": "humidifier"},
44: {"model": "PUH-9105/PUH-2709", "class": "humidifier"},
70: {"model": "PUH-9105/PUH-2709", "class": "humidifier"},
1: {"model": "EVO-0225", "class": "cooker"},
95: {"model": "PMC-00000", "class": "cooker"},
303: {"model": "PMC-0510", "class": "cooker"},
301: {"model": "PMC-0515", "class": "cooker"},
10: {"model": "PMC-0521WIFI", "class": "cooker"},
41: {"model": "PMC-0521WIFI", "class": "cooker"},
267: {"model": "PMC-0521WIFI", "class": "cooker"},
55: {"model": "PMC-0524WIFI", "class": "cooker"},
206: {"model": "PMC-0524WIFI", "class": "cooker"},
9: {"model": "PMC-0526WIFI", "class": "cooker"},
40: {"model": "PMC-0526WIFI", "class": "cooker"},
138: {"model": "PMC-0526WIFI", "class": "cooker"},
39: {"model": "PMC-0528WIFI", "class": "cooker"},
48: {"model": "PMC-0528WIFI", "class": "cooker"},
268: {"model": "PMC-0528WIFI", "class": "cooker"},
47: {"model": "PMC-0530WIFI", "class": "cooker"},
270: {"model": "PMC-0530WIFI", "class": "cooker"},
210: {"model": "PMC-0590AD", "class": "cooker"},
302: {"model": "PMC-0597", "class": "cooker"},
215: {"model": "PMC-5001WIFI", "class": "cooker"},
79: {"model": "PMC-5017WIFI", "class": "cooker"},
192: {"model": "PMC-5017WIFI", "class": "cooker"},
80: {"model": "PMC-5020WIFI", "class": "cooker"},
266: {"model": "PMC-5020WIFI", "class": "cooker"},
77: {"model": "PMC-5040WIFI", "class": "cooker"},
78: {"model": "PMC-5050WIFI", "class": "cooker"},
89: {"model": "PMC-5055WIFI", "class": "cooker"},
114: {"model": "PMC-5060-Smart-Motion", "class": "cooker"},
240: {"model": "PMC-5060-Smart-Motion", "class": "cooker"},
162: {"model": "PMC-5063WIFI", "class": "cooker"},
169: {"model": "PPC-1505-WiFI", "class": "cooker"},
183: {"model": "PPC-1505-WiFI", "class": "cooker"},
235: {"model": "AM7310-(test)", "class": "coffeemaker"},
305: {"model": "PACM-2072", "class": "coffeemaker"},
103: {"model": "PACM-2080AC", "class": "coffeemaker"},
261: {"model": "PACM-2080AC", "class": "coffeemaker"},
276: {"model": "PACM-2080AC", "class": "coffeemaker"},
277: {"model": "PACM-2080AC", "class": "coffeemaker"},
200: {"model": "PACM-2081AC", "class": "coffeemaker"},
265: {"model": "PACM-2081AC", "class": "coffeemaker"},
280: {"model": "PACM-2081AC", "class": "coffeemaker"},
166: {"model": "PACM-2085GC", "class": "coffeemaker"},
278: {"model": "PACM-2085GC", "class": "coffeemaker"},
247: {"model": "PCM-1255", "class": "coffeemaker"},
45: {"model": "PCM-1540WIFI", "class": "coffeemaker"},
222: {"model": "PCM-1540WIFI", "class": "coffeemaker"},
274: {"model": "PCM-1540WIFI", "class": "coffeemaker"},
279: {"model": "PCM-1540WIFI", "class": "coffeemaker"},
190: {"model": "PCM-1560", "class": "coffeemaker"},
207: {"model": "PCM-2070CG", "class": "coffeemaker"},
172: {"model": "PAW-0804", "class": "air-cleaner"},
140: {"model": "PAW-0804(c3-test)", "class": "air-cleaner"},
151: {"model": "PPA-2025", "class": "air-cleaner"},
203: {"model": "PPA-2025", "class": "air-cleaner"},
250: {"model": "PPA-2025", "class": "air-cleaner"},
152: {"model": "PPA-4050", "class": "air-cleaner"},
204: {"model": "PPA-4050", "class": "air-cleaner"},
251: {"model": "PPA-4050", "class": "air-cleaner"},
236: {"model": "PPAT-02A", "class": "air-cleaner"},
238: {"model": "PPAT-80P", "class": "air-cleaner"},
239: {"model": "PPAT-90GDi", "class": "air-cleaner"},
132: {"model": "PWF-2005", "class": "irrigator"},
252: {"model": "PWF-2005", "class": "irrigator"},
273: {"model": "PAF-4001WIFI", "class": "air_fryer"},
290: {"model": "PAF-6003WIFI", "class": "air_fryer"},
291: {"model": "PAF-8003WIFI", "class": "air_fryer"},
292: {"model": "PAF-8005WIFI", "class": "air_fryer"},
31: {"model": "ENIGMA-WI-FI", "class": "boiler"},
11: {"model": "PWH-IDF06", "class": "boiler"},
30: {"model": "SIGMA-WIFI", "class": "boiler"},
249: {"model": "VEKTOR-WIFI", "class": "boiler"},
46: {"model": "PCH-0320WIFI", "class": "heater"},
65: {"model": "PCH-0320WIFI", "class": "heater"},
16: {"model": "PHV-1401", "class": "heater"},
49: {"model": "PMH-21XX", "class": "heater"},
64: {"model": "PMH-21XX", "class": "heater"},
246: {"model": "PRWC-3001", "class": "cleaner"},
101: {"model": "PVCR-0726-Aqua", "class": "cleaner"},
108: {"model": "PVCR-0726-GYRO", "class": "cleaner"},
21: {"model": "PVCR-0735", "class": "cleaner"},
163: {"model": "PVCR-0735", "class": "cleaner"},
19: {"model": "PVCR-0833", "class": "cleaner"},
43: {"model": "PVCR-0833", "class": "cleaner"},
104: {"model": "PVCR-0905", "class": "cleaner"},
156: {"model": "PVCR-0905", "class": "cleaner"},
107: {"model": "PVCR-0926", "class": "cleaner"},
23: {"model": "PVCR-1028", "class": "cleaner"},
22: {"model": "PVCR-1050", "class": "cleaner"},
102: {"model": "PVCR-1226-Aqua", "class": "cleaner"},
109: {"model": "PVCR-1226-GYRO", "class": "cleaner"},
24: {"model": "PVCR-1229", "class": "cleaner"},
68: {"model": "PVCR-3100", "class": "cleaner"},
7: {"model": "PVCR-3200", "class": "cleaner"},
76: {"model": "PVCR-3200", "class": "cleaner"},
115: {"model": "PVCR-3200", "class": "cleaner"},
12: {"model": "PVCR-3300", "class": "cleaner"},
81: {"model": "PVCR-3400", "class": "cleaner"},
130: {"model": "PVCR-3600", "class": "cleaner"},
112: {"model": "PVCR-3700", "class": "cleaner"},
88: {"model": "PVCR-3800", "class": "cleaner"},
66: {"model": "PVCR-3900", "class": "cleaner"},
131: {"model": "PVCR-3900", "class": "cleaner"},
113: {"model": "PVCR-4000", "class": "cleaner"},
197: {"model": "PVCR-4000", "class": "cleaner"},
110: {"model": "PVCR-4105", "class": "cleaner"},
127: {"model": "PVCR-4105", "class": "cleaner"},
199: {"model": "PVCR-4250", "class": "cleaner"},
241: {"model": "PVCR-4250", "class": "cleaner"},
211: {"model": "PVCR-4260", "class": "cleaner"},
269: {"model": "PVCR-4260", "class": "cleaner"},
142: {"model": "PVCR-4500", "class": "cleaner"},
195: {"model": "PVCR-4500", "class": "cleaner"},
307: {"model": "PVCR-4750", "class": "cleaner"},
119: {"model": "PVCR-5001", "class": "cleaner"},
146: {"model": "PVCR-5001", "class": "cleaner"},
154: {"model": "PVCR-5001", "class": "cleaner"},
201: {"model": "PVCR-5003", "class": "cleaner"},
242: {"model": "PVCR-5005", "class": "cleaner"},
123: {"model": "PVCR-6001", "class": "cleaner"},
148: {"model": "PVCR-6001", "class": "cleaner"},
221: {"model": "PVCR-6001", "class": "cleaner"},
187: {"model": "PVCR-6003", "class": "cleaner"},
256: {"model": "PVCR-7026", "class": "cleaner"},
128: {"model": "PVCRAC-7050", "class": "cleaner"},
212: {"model": "PVCRAC-7290", "class": "cleaner"},
178: {"model": "PVCRAC-7750", "class": "cleaner"},
198: {"model": "PVCRAC-7790", "class": "cleaner"},
264: {"model": "PVCRAC-7790", "class": "cleaner"},
126: {"model": "PVCRDC-0101", "class": "cleaner"},
160: {"model": "PVCRDC-0101", "class": "cleaner"},
124: {"model": "PVCRDC-5002", "class": "cleaner"},
149: {"model": "PVCRDC-5002", "class": "cleaner"},
213: {"model": "PVCRDC-5002", "class": "cleaner"},
202: {"model": "PVCRDC-5004", "class": "cleaner"},
181: {"model": "PVCRDC-5006", "class": "cleaner"},
125: {"model": "PVCRDC-6002", "class": "cleaner"},
150: {"model": "PVCRDC-6002", "class": "cleaner"},
186: {"model": "PVCRDC-6004", "class": "cleaner"},
257: {"model": "PVCRDC-7028", "class": "cleaner"},
217: {"model": "PVCRDC-G2-5002", "class": "cleaner"},
218: {"model": "PVCRDC-G2-6002", "class": "cleaner"},
133: {"model": "PVCR-G2-0726W", "class": "cleaner"},
193: {"model": "PVCR-G2-0826", "class": "cleaner"},
134: {"model": "PVCR-G2-0926W", "class": "cleaner"},
135: {"model": "PVCR-G2-1226", "class": "cleaner"},
129: {"model": "PVCR-G2-3200", "class": "cleaner"},
122: {"model": "PVCR-G2-3600", "class": "cleaner"},
219: {"model": "PVCR-G2-5001", "class": "cleaner"},
220: {"model": "PVCR-G2-6001", "class": "cleaner"},
100: {"model": "PVCR-Wave-15", "class": "cleaner"},
93: {"model": "PHB-1350-WIFI", "class": "blender"},
35: {"model": "PHB-1503-WIFI-(old)", "class": "blender"},
34: {"model": "PHB-1551-WIFI", "class": "blender"},
282: {"model": "induction-hob", "class": "cooktop"},
286: {"model": "XFC302I-B3SF", "class": "cooktop"},
288: {"model": "XFC302T-B1D", "class": "cooktop"},
285: {"model": "XFC604I", "class": "cooktop"},
304: {"model": "XFC604I-(test)", "class": "cooktop"},
284: {"model": "XFC604I-B8F", "class": "cooktop"},
287: {"model": "XFC604T-B7D", "class": "cooktop"},
289: {"model": "XFG640F-B3P", "class": "cooktop"},
111: {"model": "PVCS-1150", "class": "cordless_cleaner"},
90: {"model": "PVCS-2090", "class": "cordless_cleaner"},
136: {"model": "PVCS-4070", "class": "cordless_cleaner"},
229: {"model": "PVCS-4070", "class": "cordless_cleaner"},
232: {"model": "PVCS-6020", "class": "cordless_cleaner"},
281: {"model": "PVCS-6020", "class": "cordless_cleaner"},
230: {"model": "PVCS-8200", "class": "cordless_cleaner"},
234: {"model": "PVCSDC-3000", "class": "cordless_cleaner"},
233: {"model": "PVCSDC-3005", "class": "cordless_cleaner"},
306: {"model": "PVCSDC-3005", "class": "cordless_cleaner"},
180: {"model": "PSF-3315", "class": "fan"},
248: {"model": "PSF-4025", "class": "fan"},
179: {"model": "PGP-3010-SMOKELESS", "class": "grill"},
96: {"model": "PGP-4001", "class": "grill"},
120: {"model": "PHD-4000", "class": "hair_care"},
184: {"model": "PHS-1300", "class": "hair_care"},
171: {"model": "PHSB-5000DF", "class": "hair_care"},
145: {"model": "PHSC-1234", "class": "hair_care"},
297: {"model": "8006", "class": "hood"},
296: {"model": "8029", "class": "hood"},
295: {"model": "6065A-600", "class": "hood"},
283: {"model": "PGS-2250VA", "class": "iron"},
91: {"model": "PIR-2624AK-3m", "class": "iron"},
161: {"model": "PIR-3074SG", "class": "iron"},
173: {"model": "PIR-3210AK-3m", "class": "iron"},
174: {"model": "PIR-3225AK-3m", "class": "iron"},
191: {"model": "PSS-2002K", "class": "iron"},
259: {"model": "PSS-8010K", "class": "iron"},
159: {"model": "PSS-9090K", "class": "iron"},
237: {"model": "SM-8095", "class": "kitchen_machine"},
272: {"model": "SM-8095", "class": "kitchen_machine"},
32: {"model": "PMG-2580", "class": "meat_grinder"},
216: {"model": "PMG-3060", "class": "meat_grinder"},
116: {"model": "Smart-Lid", "class": "other"},
299: {"model": "xbcook55", "class": "oven"},
300: {"model": "xbcook56", "class": "oven"},
298: {"model": "xbcook62", "class": "oven"},
92: {"model": "PGS-1450CWIFI", "class": "steamer"},
94: {"model": "PSS-7070KWIFI", "class": "steamer"},
50: {"model": "PETB-0202TC", "class": "toothbrush"},
69: {"model": "Ballu-OneAir-ASP-100", "class": "air_cleaner"}, # совместимость с <= v1.0.8
869: {"model": "Ballu-OneAir-ASP-100", "class": "air_cleaner"},
859: {"model": "Ballu-OneAir-ASP-200", "class": "air_cleaner"},
826: {"model": "Electrolux-EAP-2050D/2075D", "class": "air_cleaner"},
876: {"model": "Electrolux-Royal-Flash/Centurio-IQ-Inverter", "class": "boiler"},
833: {"model": "Electrolux-Centurio-IQ-3.0", "class": "boiler"},
802: {"model": "SmartInverter", "class": "boiler"},
844: {"model": "Royal-Thermo-Aqua-Inverter/Royal-Thermo-Aqua-Inox-Inverter", "class": "boiler"},
806: {"model": "Electrolux-Air-Gate-Transformer-DI-3.0", "class": "heater"},
846: {"model": "Electrolux-Air-Gate-Transformer-DI-4.0", "class": "heater"},
847: {"model": "Wi-Fi-Convection-Heater", "class": "heater"},
820: {"model": "Ballu-Platinum-Evol-DC/Olympio-Legend", "class": "air-conditioner"},
813: {"model": "Electrolux-Smartline/Ballu-Eco-Smart/Ice-Peak", "class": "air-conditioner"},
882: {"model": "Goldstar-GSAC/GSACI", "class": "air-conditioner"},
881: {"model": "UHB-960-ET", "class": "humidifier"},
835: {"model": "Electrolux-YOGAhealthline-2.0", "class": "humidifier"},
878: {"model": "Electrolux/Royal-Thermo", "class": "thermostat"},
}
POLARIS_KETTLE_TYPE = ["2","6","8","29","36","37","38","51","52","53","54","56","57","58","59","60","61","62","63","67","82","83","84","85","86","97","105","106","117","121","139","165","175","176","177","189","194","196","205","209","253","254","255","260","271","308"]
POLARIS_KETTLE_WITH_WEIGHT_TYPE = ["98","164","185","188","208","223","244","245","262","263","275","294"]
POLARIS_KETTLE_WITH_NIGHT_TYPE = ["36","37","86","97","106","117","164","175","176","177","189","194","196","205","208","209","244","253","254","255","260","271","308"]
POLARIS_KETTLE_WITH_BACKLIGHT_TYPE = ["36","37","51","52","53","54","60","61","62","63","67","82","83","84","85","86","97","98","105","106","117","139","164","175","176","177","188","189","194","196","208","209","223","244","245","253","254","255","260","262","263","271","275","294","308"]
POLARIS_KETTLE_WITH_TEA_TIME_MODE_TYPE = ["2","8","51","53","56","58","60","62","85","98","139","165","185","188","205","223","262","263","275","294"]
POLARIS_KETTLE_WITH_KEEP_WITH_WARM_MODE_TYPE = ["205","262","294"]
POLARIS_HUMIDDIFIER_TYPE = ["4","15","17","18","25","44","70","71","72","73","74","75","87","99","137","147","153","155","157","158","835","881"]
POLARIS_HUMIDDIFIER_WITH_IONISER_TYPE = ["4","15","17","18","44","70","72","73","74","137","147","153","155","157","158","835"]
POLARIS_HUMIDDIFIER_WITH_WARM_STREAM_TYPE = ["4","15","17","18","44","70","72","74","147","157","158","835","881"]
POLARIS_HUMIDDIFIER_LOW_FAN_TYPE = ["25","71","72","73","74","75","87","99","137","153","155","157","158"]
POLARIS_HUMIDDIFIER_7_MODE_TYPE = ["17","18","44","70"]
POLARIS_HUMIDDIFIER_5A_MODE_TYPE = ["4"]
POLARIS_HUMIDDIFIER_5B_MODE_TYPE = ["72","74","87","147","155"]
POLARIS_HUMIDDIFIER_4_MODE_TYPE = ["15","71","73","75","99"]
POLARIS_HUMIDDIFIER_3A_MODE_TYPE = ["25"]
POLARIS_HUMIDDIFIER_3B_MODE_TYPE = ["153","157","158"]
POLARIS_HUMIDDIFIER_2_MODE_TYPE = ["881"]
POLARIS_HUMIDDIFIER_1_MODE_TYPE = ["137"]
POLARIS_HUMIDDIFIER_11_MODE_TYPE = ["835"]
POLARIS_COOKER_TYPE = ["1","9","10","39","40","41","47","48","55","77","78","79","80","89","95","114","138","162","169","183","192","206","210","215","240","266","267","268","270","301","302","303"]
POLARIS_COOKER_WITH_LID_TYPE = ["9","39","40","41","47","48","55","77","78","79","80","89","95","114","138","162","169","183","192","206","210","215","240","266","267","268","270","301","302","303"]
POLARIS_COFFEEMAKER_TYPE = ["103", "166", "200","261","265","276","277","278","280","305"]
POLARIS_COFFEEMAKER_ROG_TYPE = ["45", "190", "207", "222", "235", "247", "274", "279"]
POLARIS_CLIMATE_TYPE = ["69", "869", "859"]
POLARIS_AIRCLEANER_TYPE = ["140", "151", "152", "172", "203", "204", "236", "238", "239", "250", "251"]
POLARIS_AIRCLEANER_EAP_TYPE = ["826"]
POLARIS_VACUUM_TYPE = ["7","12","19","21","22","23","24","43","66","68","76","81","88","100","101","102","104","107","108","109","110","112","113","115","119","122","123","124","125","126","127","128","129","130","131","133","134","135","142","146","148","149","150","154","156","160","163","178","181","186","187","193","195","197","198","199","201","202","211","212","213","217","218","219","220","221","241","242","246"]
POLARIS_BOILER_TYPE = ["802","833","844","876"]
POLARIS_IRRIGATOR_TYPE = ["132", "252"]
POLARIS_HEATER_TYPE = ["806","846","847"]
POLARIS_AIRCONDITIONER_TYPE = ["813","820","882"]
POLARIS_THERMOSTAT_TYPE = ["878"]
KETTLE_WITH_TEA_TIME_MODES = {"off": "0", "performance": "1", "electric": "3", "heat_pump": "4", "eco": "5", "gas": "6"}
KETTLE_WITH_KEEP_WITH_WARM_MODES = {"off": "0", "performance": "1", "high_demand": "2", "electric": "3", "heat_pump": "4", "eco": "5", "gas": "6"}
HUMIDDIFIER_5A_AVAILABLE_MODES = {"auto": "1", "comfort": "2", "baby": "3", "sleep": "4", "boost": "5"}
HUMIDDIFIER_5B_AVAILABLE_MODES = {"auto": "1", "sleep": "4", "boost": "5", "home": "6", "eco": "7"}
HUMIDDIFIER_4_AVAILABLE_MODES = {"auto": "1", "boost": "5", "home": "6", "eco": "7"}
HUMIDDIFIER_3A_AVAILABLE_MODES = {"boost": "5", "home": "6", "eco": "7"}
HUMIDDIFIER_3B_AVAILABLE_MODES = {"auto": "1", "boost": "5", "eco": "7"}
HUMIDDIFIER_2_AVAILABLE_MODES = {"home": "1", "auto": "2"}
HUMIDDIFIER_1_AVAILABLE_MODES = {"boost": "5"}
HUMIDDIFIER_11_AVAILABLE_MODES = {"home": "1", "auto": "2", "sleep": "3", "baby": "4", "comfort": "5", "fitnes": "6", "yoga": "7", "meditation": "8", "prana_hand": "9", "prana_auto": "10", "aroma": "11"}
KETTLE_ERROR = {
"00": "no_error",
"01": "low_water",
"02": "kettle_out_of_base",
"03": "temperature_sensor_failure",
"04": "temperature_sensor_failure",
"05": "child_lock",
"06": "recommended_to_change_water",
"07": "changed_water_for_long_time"
}
HUMIDDIFIER_ERROR = {
"00": "no_error",
"01": "low_water",
"02": "child_lock",
"03": "replace_filter",
"04": "maximum_schedules",
"05": "clean_tank"
}
COOKER_ERROR = {
"00": "no_error",
"01": "temperature_sensor_failure",
"02": "temperature_sensor_failure",
"06": "cup_not_present",
"07": "child_lock",
"08": "gesture_sensor_error"
}
COFFEEMAKER_ERROR = {
"00": "no_error",
"01": "side_door_open",
"02": "waste_container_not_installed",
"03": "drip_tray_not_installed",
"04": "the_brewing_unit_not_installed",
"05": "missing_water_tank",
"06": "waste_container_full",
"07": "not_enough_coffee_beans",
"08": "water_supply_blocked",
"09": "code_e001",
"10": "code_e002",
"11": "code_e003",
"12": "code_e004",
"13": "code_e005",
"14": "decalcification_required",
"15": "water_changed_for_long_time",
"16": "cleaning_milk_system",
"17": "cleaning_brewing_system",
"18": "decalcification_progress",
"19": "cleaning_hydraulic_system",
"20": "check_water_tank",
"98": "nothing_is_selected",
"99": "cappuccinator_false"
}
AIRCLEANER_ERROR = {
"00": "no_error",
"01": "replace_filter",
"02": "child_lock"
}
VACUUM_ERROR = {
"00": "no_error",
"01": "Cliff error",
"02": "Check front collision plate",
"04": "Check wheels",
"08": "Check edge brushes",
"10": "Change side brushes",
"11": "Change the main brush",
"12": "Change filter",
"13": "Empty the dust bin",
"16": "Check fan motor",
"22": "The robot is not on the floor",
"32": "Check roll brush",
"64": "Low batttery"
}
@dataclass
class PolarisSensorEntityDescription(SensorEntityDescription):
value_fn: Callable | None = None
valueMap: dict | None = None
mqttTopicCurrentValue: str | None = None
SENSORS_ALL_DEVICES = [
PolarisSensorEntityDescription(
key="sensor/temperature",
name="Temperature",
translation_key="temperature_sensor",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:thermometer",
),
PolarisSensorEntityDescription(
key="firmware",
name="Firmware Version",
translation_key="firmware_sensor",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_registry_enabled_default=True,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="devtype",
name="Device Type",
translation_key="type_sensor",
device_class=None,
native_unit_of_measurement=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="diag/rssi",
name="RSSI",
translation_key="rssi",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:wifi",
),
PolarisSensorEntityDescription(
key="error/code",
name="error",
translation_key="error",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:alert",
),
]
SENSORS_RUSCLIMATE_HUMIDIFIER = [
PolarisSensorEntityDescription(
key="sensor/humidity",
name="Humidity",
translation_key="humidity_sensor",
device_class=SensorDeviceClass.HUMIDITY,
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:water-percent",
),
PolarisSensorEntityDescription(
key="firmware",
name="Firmware Version",
translation_key="firmware_sensor",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_registry_enabled_default=True,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="devtype",
name="Device Type",
translation_key="type_sensor",
device_class=None,
native_unit_of_measurement=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="diag/rssi",
name="RSSI",
translation_key="rssi",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:wifi",
),
PolarisSensorEntityDescription(
key="error/code",
name="error",
translation_key="error",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:alert",
),
]
SENSORS_HUMIDIFIER = [
PolarisSensorEntityDescription(
key="sensor/humidity",
name="Humidity",
translation_key="humidity_sensor",
device_class=SensorDeviceClass.HUMIDITY,
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:water-percent",
),
PolarisSensorEntityDescription(
key="expendables",
name="filter_retain",
translation_key="filter_retain",
device_class=None,
native_unit_of_measurement=UnitOfTime.HOURS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
icon="mdi:filter",
),
PolarisSensorEntityDescription(
key="expendables",
name="clean_retain",
translation_key="clean_retain",
device_class=None,
native_unit_of_measurement=UnitOfTime.HOURS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
icon="mdi:cup-water",
),
]
SENSORS_WEIGHT = [
PolarisSensorEntityDescription(
key="weight",
name="weight",
translation_key="weight_sensor",
device_class=SensorDeviceClass.WEIGHT,
native_unit_of_measurement=UnitOfMass.GRAMS,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:weight-gram",
),
]
SENSORS_COOKER = [
PolarisSensorEntityDescription(
key="time",
name="time_to_end",
translation_key="time_to_end_sensor",
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.SECONDS,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:timer",
),
]
SENSORS_COFFEEMAKER = [
PolarisSensorEntityDescription(
key="mode",
name="mode",
translation_key="mode_sensor",
valueMap={
"0": "off",
"1": "espresso",
"2": "ristretto",
"3": "long_espresso",
"4": "americano",
"5": "heating",
"8": "cappuccino",
"9": "latte",
"10": "flat_white",
"11": "cortado",
"12": "double_espresso",
"13": "double_cappuccino",
"14": "double_latte",
"15": "double_long_espresso",
"16": "double_macchiato",
"17": "milk_coffee",
"18": "macchiato",
"19": "latte_macchiato",
"20": "hot_water",
"21": "hot_milk foam",
"22": "hot_milk"
},
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
icon="mdi:coffee-maker",
),
PolarisSensorEntityDescription(
key="program_data/5",
name="power_state",
translation_key="power_state",
valueMap={
"01": "power_on",
"02": "power_off",
"03": "turns_on",
"04": "turns_off"
},
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
icon="mdi:power",
),
]
SENSORS_COFFEEMAKER_ROG = [
PolarisSensorEntityDescription(
key="firmware",
name="Firmware Version",
translation_key="firmware_sensor",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_registry_enabled_default=True,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="devtype",
name="Device Type",
translation_key="type_sensor",
device_class=None,
native_unit_of_measurement=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="diag/rssi",
name="RSSI",
translation_key="rssi",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:wifi",
),
PolarisSensorEntityDescription(
key="error/code",
name="error",
translation_key="error",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:alert",
),
]
SENSORS_CLIMATE = [
PolarisSensorEntityDescription(
key="sensor/co2",
name="CO2",
translation_key="co2_sensor",
device_class=SensorDeviceClass.CO2,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
# entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:molecule-co2",
),
PolarisSensorEntityDescription(
key="expendables",
name="filter_retain",
translation_key="filter_retain",
device_class=None,
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
icon="mdi:filter",
),
]
SENSORS_CLIMATE_200 = [
PolarisSensorEntityDescription(
key="sensor/pm2",
name="PM2.5",
translation_key="pm2_5_sensor",
device_class=None,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:molecule",
),
PolarisSensorEntityDescription(
key="sensor/co2",
name="CO2",
translation_key="co2_sensor",
device_class=SensorDeviceClass.CO2,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:molecule-co2",
),
PolarisSensorEntityDescription(
key="expendables",
name="filter_retain",
translation_key="filter_retain",
device_class=None,
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
icon="mdi:filter",
),
PolarisSensorEntityDescription(
key="expendables",
name="pre_filter_retain",
translation_key="pre_filter_retain",
device_class=None,
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
icon="mdi:filter",
),
PolarisSensorEntityDescription(
key="time",
name="time_to_end",
translation_key="time_to_end_sensor_turbo",
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.SECONDS,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:timer",
),
]
SENSORS_AIRCLEANER = [
PolarisSensorEntityDescription(
key="sensor/pm2",
name="PM2.5",
translation_key="pm2_5_sensor",
device_class=None,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:molecule",
),
PolarisSensorEntityDescription(
key="expendables",
name="filter_retain",
translation_key="filter_retain",
device_class=None,
native_unit_of_measurement=UnitOfTime.HOURS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
icon="mdi:filter",
),
PolarisSensorEntityDescription(
key="firmware",
name="Firmware Version",
translation_key="firmware_sensor",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_registry_enabled_default=True,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="devtype",
name="Device Type",
translation_key="type_sensor",
device_class=None,
native_unit_of_measurement=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="diag/rssi",
name="RSSI",
translation_key="rssi",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:wifi",
),
PolarisSensorEntityDescription(
key="error/code",
name="error",
translation_key="error",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:alert",
),
PolarisSensorEntityDescription(
key="time",
name="time_to_end",
translation_key="time_to_end_sensor",
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.SECONDS,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:timer",
),
]
SENSORS_AIRCLEANER_EAP = [
PolarisSensorEntityDescription(
key="sensor/pm2",
name="PM2.5",
translation_key="pm2_5_sensor",
device_class=None,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:molecule",
),
PolarisSensorEntityDescription(
key="expendables",
name="filter_retain",
translation_key="filter_retain",
device_class=None,
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
icon="mdi:filter",
),
PolarisSensorEntityDescription(
key="firmware",
name="Firmware Version",
translation_key="firmware_sensor",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_registry_enabled_default=True,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="devtype",
name="Device Type",
translation_key="type_sensor",
device_class=None,
native_unit_of_measurement=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="diag/rssi",
name="RSSI",
translation_key="rssi",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:wifi",
),
PolarisSensorEntityDescription(
key="error/code",
name="error",
translation_key="error",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:alert",
),
]
SENSORS_VACUUM = [
PolarisSensorEntityDescription(
key="firmware",
name="Firmware Version",
translation_key="firmware_sensor",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_registry_enabled_default=True,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="devtype",
name="Device Type",
translation_key="type_sensor",
device_class=None,
native_unit_of_measurement=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="diag/rssi",
name="RSSI",
translation_key="rssi",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:wifi",
),
PolarisSensorEntityDescription(
key="error/code",
name="error",
translation_key="error",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:alert",
),
PolarisSensorEntityDescription(
key="go_area",
name="go_area",
translation_key="go_area",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:map-marker-radius",
),
PolarisSensorEntityDescription(
key="location_current",
name="current_id_room",
translation_key="current_id_room",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:map-marker-radius",
),
]
SENSORS_WATER_BOILER = [
PolarisSensorEntityDescription(
key="firmware",
name="Firmware Version",
translation_key="firmware_sensor",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_registry_enabled_default=True,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="devtype",
name="Device Type",
translation_key="type_sensor",
device_class=None,
native_unit_of_measurement=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="diag/rssi",
name="RSSI",
translation_key="rssi",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:wifi",
),
PolarisSensorEntityDescription(
key="expendables",
name="anode_retain",
translation_key="anode_retain",
device_class=None,
native_unit_of_measurement=UnitOfTime.DAYS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
icon="mdi:sign-pole",
),
PolarisSensorEntityDescription(
key="sensor/temperature",
name="Temperature",
translation_key="temperature_sensor",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:thermometer",
),
]
SENSORS_IRRIGATOR = [
PolarisSensorEntityDescription(
key="firmware",
name="Firmware Version",
translation_key="firmware_sensor",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_registry_enabled_default=True,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="devtype",
name="Device Type",
translation_key="type_sensor",
device_class=None,
native_unit_of_measurement=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="diag/rssi",
name="RSSI",
translation_key="rssi",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:wifi",
),
PolarisSensorEntityDescription(
key="time",
name="time_to_end",
translation_key="time_to_end_sensor",
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.SECONDS,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:timer",
),
PolarisSensorEntityDescription(
key="program_data/0",
name="quality",
translation_key="quality",
device_class=None,
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:equalizer",
),
]
SENSORS_HEATER = [
PolarisSensorEntityDescription(
key="firmware",
name="Firmware Version",
translation_key="firmware_sensor",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_registry_enabled_default=True,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="devtype",
name="Device Type",
translation_key="type_sensor",
device_class=None,
native_unit_of_measurement=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="diag/rssi",
name="RSSI",
translation_key="rssi",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:wifi",
),
PolarisSensorEntityDescription(
key="program_data/0",
name="сurrent_power",
translation_key="сurrent_power",
device_class=None,
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:equalizer",
),
PolarisSensorEntityDescription(
key="sensor/temperature",
name="Temperature",
translation_key="temperature_sensor",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:thermometer",
),
]
SENSORS_AIRCONDITIONER = [
PolarisSensorEntityDescription(
key="sensor/temperature",
name="Temperature",
translation_key="temperature_sensor",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
entity_registry_enabled_default=True,
icon="mdi:thermometer",
),
PolarisSensorEntityDescription(
key="firmware",
name="Firmware Version",
translation_key="firmware_sensor",
device_class=None,
native_unit_of_measurement=None,
state_class=None,
entity_registry_enabled_default=True,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="devtype",
name="Device Type",
translation_key="type_sensor",
device_class=None,
native_unit_of_measurement=None,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:information-outline",
),
PolarisSensorEntityDescription(
key="diag/rssi",
name="RSSI",
translation_key="rssi",
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:wifi",
),
]
SENSORS_THERMOSTAT = [
PolarisSensorEntityDescription(
key="power_consume",
name="Power consume",
translation_key="power_consume",
device_class=SensorDeviceClass.ENERGY,
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_registry_enabled_default=True,
icon="mdi:meter-electric-outline",
),
]
@dataclass
class PolarisSwitchEntityDescription(SwitchEntityDescription):
mqttTopicCommand: str | None = None
mqttTopicCurrentValue: str | None = None
payload_on: str | None = None
payload_off: str | None = None
SWITCHES_ALL_DEVICES = [
PolarisSwitchEntityDescription(
key="power",
translation_key="power_switch",
# entity_category=EntityCategory.CONFIG,
name="Power",
mqttTopicCommand="control/mode",
mqttTopicCurrentValue="state/mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
icon="mdi:power-standby",
),
PolarisSwitchEntityDescription(
key="sound",
translation_key="sound_switch",
entity_category=EntityCategory.CONFIG,
name="Sound",
mqttTopicCommand="control/sound",
mqttTopicCurrentValue="state/sound",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
# icon="mdi:volume-high",
),
PolarisSwitchEntityDescription(
key="child_lock",
translation_key="child_lock_switch",
entity_category=EntityCategory.CONFIG,
name="Child lock",
mqttTopicCommand="control/child_lock",
mqttTopicCurrentValue="state/child_lock",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
# icon="mdi:lock",
),
]
SWITCH_KETTLE_BACKLIGHT = [
PolarisSwitchEntityDescription(
key="backlight",
translation_key="backlight_switch",
entity_category=EntityCategory.CONFIG,
name="Backlight",
mqttTopicCommand="control/backlight",
mqttTopicCurrentValue="state/backlight",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
# icon="mdi:alarm-light",
),
]
SWITCHES_RUSCLIMATE_HUMIDIFIER = [
PolarisSwitchEntityDescription(
key="power",
translation_key="power_switch",
name="Power",
mqttTopicCommand="control/mode",
mqttTopicCurrentValue="state/mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
icon="mdi:power-standby",
),
PolarisSwitchEntityDescription(
key="backlight",
translation_key="backlight_switch",
entity_category=EntityCategory.CONFIG,
name="Backlight bottom",
mqttTopicCommand="control/backlight",
mqttTopicCurrentValue="state/backlight",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
),
PolarisSwitchEntityDescription(
key="night",
translation_key="night_switch",
entity_category=EntityCategory.CONFIG,
name="Night light",
mqttTopicCommand="control/night",
mqttTopicCurrentValue="state/night",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:weather-night",
),
]
SWITCH_HUMIDIFIER_BACKLIGHT = [
PolarisSwitchEntityDescription(
key="backlight",
translation_key="backlight_switch",
entity_category=EntityCategory.CONFIG,
name="Backlight",
mqttTopicCommand="control/backlight",
mqttTopicCurrentValue="state/backlight",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
# icon="mdi:alarm-light",
),
]
SWITCH_HUMIDIFIER_IONISER = [
PolarisSwitchEntityDescription(
key="ioniser",
translation_key="ioniser_switch",
entity_category=EntityCategory.CONFIG,
name="Ioniser",
mqttTopicCommand="control/ioniser",
mqttTopicCurrentValue="state/ioniser",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:atom-variant",
),
]
SWITCH_HUMIDIFIER_WARM_STREAM = [
PolarisSwitchEntityDescription(
key="warm_stream",
translation_key="warm_stream_switch",
entity_category=EntityCategory.CONFIG,
name="Warm stream",
mqttTopicCommand="control/warm_stream",
mqttTopicCurrentValue="state/warm_stream",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:heat-wave",
),
]
SWITCH_HUMIDIFIER_ULTRAVIOLET = [
PolarisSwitchEntityDescription(
key="ultraviolet",
translation_key="ultraviolet_switch",
entity_category=EntityCategory.CONFIG,
name="Ultraviolet",
mqttTopicCommand="control/uv",
mqttTopicCurrentValue="state/uv",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:white-balance-sunny",
),
]
SWITCHES_COOKER = [
PolarisSwitchEntityDescription(
key="child_lock",
translation_key="child_lock_switch",
entity_category=EntityCategory.CONFIG,
name="Child lock",
mqttTopicCommand="control/child_lock",
mqttTopicCurrentValue="state/child_lock",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
# icon="mdi:lock",
),
PolarisSwitchEntityDescription(
key="keepwarm",
translation_key="keepwarm_switch",
entity_category=EntityCategory.CONFIG,
name="Keepwarm",
mqttTopicCommand="control/keepwarm",
mqttTopicCurrentValue="state/keepwarm",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:heat-wave",
),
]
SWITCHES_COFFEEMAKER = [
PolarisSwitchEntityDescription(
key="power",
translation_key="power_switch",
entity_category=EntityCategory.CONFIG,
name="Power",
mqttTopicCommand="control/program_data/5",
mqttTopicCurrentValue="state/program_data/5",
device_class=SwitchDeviceClass.SWITCH,
payload_on="03",
payload_off="04",
icon="mdi:power-standby",
),
PolarisSwitchEntityDescription(
key="sound",
translation_key="sound_switch",
entity_category=EntityCategory.CONFIG,
name="Sound",
mqttTopicCommand="control/sound",
mqttTopicCurrentValue="state/sound",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
PolarisSwitchEntityDescription(
key="child_lock",
translation_key="child_lock_switch",
entity_category=EntityCategory.CONFIG,
name="Child lock",
mqttTopicCommand="control/child_lock",
mqttTopicCurrentValue="state/child_lock",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
]
SWITCHES_COFFEEMAKER_ROG = [
PolarisSwitchEntityDescription(
key="power",
translation_key="power_switch",
entity_category=EntityCategory.CONFIG,
name="Power",
mqttTopicCommand="control/mode",
mqttTopicCurrentValue="state/mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="5",
payload_off="0",
icon="mdi:power-standby",
),
PolarisSwitchEntityDescription(
key="sound",
translation_key="sound_switch",
entity_category=EntityCategory.CONFIG,
name="Sound",
mqttTopicCommand="control/sound",
mqttTopicCurrentValue="state/sound",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
PolarisSwitchEntityDescription(
key="child_lock",
translation_key="child_lock_switch",
entity_category=EntityCategory.CONFIG,
name="Child lock",
mqttTopicCommand="control/child_lock",
mqttTopicCurrentValue="state/child_lock",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
]
SWITCHES_CLIMATE = [
PolarisSwitchEntityDescription(
key="power",
translation_key="power_switch",
entity_category=EntityCategory.CONFIG,
name="Power",
mqttTopicCommand="control/mode",
mqttTopicCurrentValue="state/mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="2",
payload_off="0",
icon="mdi:power-standby",
),
PolarisSwitchEntityDescription(
key="volume",
translation_key="sound_switch",
entity_category=EntityCategory.CONFIG,
name="Volume",
mqttTopicCommand="control/volume",
mqttTopicCurrentValue="state/volume",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
),
PolarisSwitchEntityDescription(
key="backlight",
translation_key="backlight_switch",
entity_category=EntityCategory.CONFIG,
name="Backlight",
mqttTopicCommand="control/backlight",
mqttTopicCurrentValue="state/backlight",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
),
]
SWITCHES_CLIMATE_200 = [
PolarisSwitchEntityDescription(
key="damper",
translation_key="damper_switch",
entity_category=EntityCategory.CONFIG,
name="Damper",
mqttTopicCommand="control/damper",
mqttTopicCurrentValue="state/damper",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:swap-horizontal-circle-outline",
),
PolarisSwitchEntityDescription(
key="ioniser",
translation_key="ioniser_switch",
entity_category=EntityCategory.CONFIG,
name="Ioniser",
mqttTopicCommand="control/ionizer",
mqttTopicCurrentValue="state/ionizer",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:atom-variant",
),
PolarisSwitchEntityDescription(
key="ultraviolet",
translation_key="ultraviolet_switch",
entity_category=EntityCategory.CONFIG,
name="Ultraviolet",
mqttTopicCommand="control/uv",
mqttTopicCurrentValue="state/uv",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:white-balance-sunny",
),
]
SWITCHES_AIRCLEANER = [
PolarisSwitchEntityDescription(
key="backlight",
translation_key="backlight_switch",
entity_category=EntityCategory.CONFIG,
name="Backlight",
mqttTopicCommand="control/backlight",
mqttTopicCurrentValue="state/backlight",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
# icon="mdi:alarm-light",
),
PolarisSwitchEntityDescription(
key="ioniser",
translation_key="ioniser_switch",
entity_category=EntityCategory.CONFIG,
name="Ioniser",
mqttTopicCommand="control/ioniser",
mqttTopicCurrentValue="state/ioniser",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:atom-variant",
),
PolarisSwitchEntityDescription(
key="ultraviolet",
translation_key="ultraviolet_switch",
entity_category=EntityCategory.CONFIG,
name="Ultraviolet",
mqttTopicCommand="control/warm_stream",
mqttTopicCurrentValue="state/warm_stream",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:white-balance-sunny",
),
]
SWITCHES_AIRCLEANER_EAP = [
PolarisSwitchEntityDescription(
key="backlight",
translation_key="backlight_switch",
entity_category=EntityCategory.CONFIG,
name="Backlight",
mqttTopicCommand="control/backlight",
mqttTopicCurrentValue="state/backlight",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
PolarisSwitchEntityDescription(
key="ioniser",
translation_key="ioniser_switch",
entity_category=EntityCategory.CONFIG,
name="Ioniser",
mqttTopicCommand="control/ioniser",
mqttTopicCurrentValue="state/ioniser",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:atom-variant",
),
PolarisSwitchEntityDescription(
key="ultraviolet",
translation_key="ultraviolet_switch",
entity_category=EntityCategory.CONFIG,
name="Ultraviolet",
mqttTopicCommand="control/uv",
mqttTopicCurrentValue="state/uv",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:white-balance-sunny",
),
PolarisSwitchEntityDescription(
key="power",
translation_key="power_switch",
name="Power",
mqttTopicCommand="control/mode",
mqttTopicCurrentValue="state/mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
icon="mdi:power-standby",
),
PolarisSwitchEntityDescription(
key="child_lock",
translation_key="child_lock_switch",
entity_category=EntityCategory.CONFIG,
name="Child lock",
mqttTopicCommand="control/child_lock",
mqttTopicCurrentValue="state/child_lock",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
]
SWITCHES_VACUUM = [
PolarisSwitchEntityDescription(
key="turbo",
translation_key="turbo_switch",
entity_category=EntityCategory.CONFIG,
name="mode clean carpet",
mqttTopicCommand="control/turbo",
mqttTopicCurrentValue="state/turbo",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
# icon="mdi:alarm-light",
),
PolarisSwitchEntityDescription(
key="ioniser",
translation_key="emptying_dust_switch",
entity_category=EntityCategory.CONFIG,
name="sbros_musora",
mqttTopicCommand="control/ioniser",
mqttTopicCurrentValue="state/ioniser",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:atom-variant",
),
PolarisSwitchEntityDescription(
key="volume",
translation_key="sound_switch",
entity_category=EntityCategory.CONFIG,
name="Volume",
mqttTopicCommand="control/volume",
mqttTopicCurrentValue="state/volume",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
]
SWITCHES_WATER_BOILER = [
PolarisSwitchEntityDescription(
key="power",
translation_key="power_switch",
# entity_category=EntityCategory.CONFIG,
name="Power",
mqttTopicCommand="control/mode",
mqttTopicCurrentValue="state/mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
icon="mdi:power-standby",
),
PolarisSwitchEntityDescription(
key="child_lock",
translation_key="child_lock_switch",
entity_category=EntityCategory.CONFIG,
name="Child lock",
mqttTopicCommand="control/child_lock",
mqttTopicCurrentValue="state/child_lock",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
PolarisSwitchEntityDescription(
key="smart_mode",
translation_key="smart_mode",
entity_category=EntityCategory.CONFIG,
name="smart_mode",
mqttTopicCommand="control/smart_mode",
mqttTopicCurrentValue="state/smart_mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:water-boiler-auto",
),
PolarisSwitchEntityDescription(
key="bss_mode",
translation_key="bss_mode",
entity_category=EntityCategory.CONFIG,
name="bss_mode",
mqttTopicCommand="control/bss",
mqttTopicCurrentValue="state/bss",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:bacteria",
),
]
SWITCHES_WATER_BOILER_BACKLIGHT = [
PolarisSwitchEntityDescription(
key="backlight",
translation_key="backlight_bright",
entity_category=EntityCategory.CONFIG,
name="Backlight",
mqttTopicCommand="control/backlight",
mqttTopicCurrentValue="state/backlight",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
),
]
SWITCHES_WATER_BOILER_NO_FROST = [
PolarisSwitchEntityDescription(
key="no_frost",
translation_key="no_frost",
entity_category=EntityCategory.CONFIG,
name="No frost",
mqttTopicCommand="control/keep_warm",
mqttTopicCurrentValue="state/keep_warm",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:snowflake-off",
),
]
SWITCHES_IRRIGATOR = [
PolarisSwitchEntityDescription(
key="smart_mode",
translation_key="smart_mode_switch",
entity_category=EntityCategory.CONFIG,
name="Massage",
mqttTopicCommand="control/smart_mode",
mqttTopicCurrentValue="state/smart_mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
icon="mdi:hand-wave",
),
PolarisSwitchEntityDescription(
key="ioniser",
translation_key="ozonation_switch",
entity_category=EntityCategory.CONFIG,
name="O3",
mqttTopicCommand="control/ioniser",
mqttTopicCurrentValue="state/ioniser",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:atom-variant",
),
PolarisSwitchEntityDescription(
key="power_switch",
translation_key="power_switch",
entity_category=EntityCategory.CONFIG,
name="Power",
mqttTopicCommand="control/mode",
mqttTopicCurrentValue="state/mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
icon="mdi:power",
),
]
SWITCHES_HEATER = [
PolarisSwitchEntityDescription(
key="power",
translation_key="power_switch",
# entity_category=EntityCategory.CONFIG,
name="Power",
mqttTopicCommand="control/mode",
mqttTopicCurrentValue="state/mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
icon="mdi:power-standby",
),
PolarisSwitchEntityDescription(
key="volume",
translation_key="sound_switch",
entity_category=EntityCategory.CONFIG,
name="Volume",
mqttTopicCommand="control/volume",
mqttTopicCurrentValue="state/volume",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
),
PolarisSwitchEntityDescription(
key="backlight",
translation_key="backlight_bright",
entity_category=EntityCategory.CONFIG,
name="Backlight",
mqttTopicCommand="control/backlight",
mqttTopicCurrentValue="state/backlight",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
),
PolarisSwitchEntityDescription(
key="child_lock",
translation_key="child_lock_switch",
entity_category=EntityCategory.CONFIG,
name="Child lock",
mqttTopicCommand="control/child_lock",
mqttTopicCurrentValue="state/child_lock",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
PolarisSwitchEntityDescription(
key="damper_heater",
translation_key="damper_heater",
entity_category=EntityCategory.CONFIG,
name="Detect open window",
mqttTopicCommand="control/damper",
mqttTopicCurrentValue="state/damper",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
PolarisSwitchEntityDescription(
key="display_off_heater",
translation_key="display_off_heater",
entity_category=EntityCategory.CONFIG,
name="Auto-turn off display",
mqttTopicCommand="control/program_data/0",
mqttTopicCurrentValue="state/program_data/0",
device_class=SwitchDeviceClass.SWITCH,
payload_on="01",
payload_off="00",
),
PolarisSwitchEntityDescription(
key="half_power_heater",
translation_key="half_power_heater",
entity_category=EntityCategory.CONFIG,
name="Half the power",
mqttTopicCommand="control/program_data/0",
mqttTopicCurrentValue="state/program_data/0",
device_class=SwitchDeviceClass.SWITCH,
payload_on="01",
payload_off="00",
),
]
SWITCHES_AIRCONDITIONER = [
PolarisSwitchEntityDescription(
key="turbo",
translation_key="turbo_switch",
entity_category=EntityCategory.CONFIG,
name="Turbo mode",
mqttTopicCommand="control/turbo",
mqttTopicCurrentValue="state/turbo",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:rocket-launch",
),
PolarisSwitchEntityDescription(
key="night",
translation_key="night_switch",
entity_category=EntityCategory.CONFIG,
name="Night mode",
mqttTopicCommand="control/night",
mqttTopicCurrentValue="state/night",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:weather-night",
),
PolarisSwitchEntityDescription(
key="self-cleaning",
translation_key="self_cleaning",
entity_category=EntityCategory.CONFIG,
name="Self cleaning",
mqttTopicCommand="control/program_data/1",
mqttTopicCurrentValue="state/program_data/1",
device_class=SwitchDeviceClass.SWITCH,
payload_on="01",
payload_off="00",
),
PolarisSwitchEntityDescription(
key="delicate-blowing",
translation_key="delicate_blowing",
entity_category=EntityCategory.CONFIG,
name="Delicate blowing",
mqttTopicCommand="control/program_data/2",
mqttTopicCurrentValue="state/program_data/2",
device_class=SwitchDeviceClass.SWITCH,
payload_on="01",
payload_off="00",
icon="mdi:air-filter",
),
PolarisSwitchEntityDescription(
key="eco_mode_switch",
translation_key="eco_mode_switch",
entity_category=EntityCategory.CONFIG,
name="Eco mode",
mqttTopicCommand="control/program_data/0",
mqttTopicCurrentValue="state/program_data/0",
device_class=SwitchDeviceClass.SWITCH,
payload_on="01",
payload_off="00",
),
PolarisSwitchEntityDescription(
key="auto_heater_switch",
translation_key="auto_heater_switch",
entity_category=EntityCategory.CONFIG,
name="Auto heater",
mqttTopicCommand="control/program_data/0",
mqttTopicCurrentValue="state/program_data/0",
device_class=SwitchDeviceClass.SWITCH,
payload_on="01",
payload_off="00",
),
]
SWITCHES_AIRCONDITIONER_820 = [
PolarisSwitchEntityDescription(
key="ioniser",
translation_key="ioniser_switch",
entity_category=EntityCategory.CONFIG,
name="Ioniser",
mqttTopicCommand="control/ionizer",
mqttTopicCurrentValue="state/ionizer",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:atom-variant",
),
PolarisSwitchEntityDescription(
key="backlight",
translation_key="backlight_switch",
entity_category=EntityCategory.CONFIG,
name="Backlight",
mqttTopicCommand="control/backlight",
mqttTopicCurrentValue="state/backlight",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
),
PolarisSwitchEntityDescription(
key="turbo",
translation_key="turbo_switch",
entity_category=EntityCategory.CONFIG,
name="Turbo mode",
mqttTopicCommand="control/turbo",
mqttTopicCurrentValue="state/turbo",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:rocket-launch",
),
PolarisSwitchEntityDescription(
key="night",
translation_key="night_switch",
entity_category=EntityCategory.CONFIG,
name="Night mode",
mqttTopicCommand="control/night",
mqttTopicCurrentValue="state/night",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:weather-night",
),
PolarisSwitchEntityDescription(
key="self_cleaning",
translation_key="self_cleaning",
entity_category=EntityCategory.CONFIG,
name="Self cleaning",
mqttTopicCommand="control/program_data/1",
mqttTopicCurrentValue="state/program_data/1",
device_class=SwitchDeviceClass.SWITCH,
payload_on="01",
payload_off="00",
),
PolarisSwitchEntityDescription(
key="quiet_mode",
translation_key="quiet_mode",
entity_category=EntityCategory.CONFIG,
name="Quiet mode",
mqttTopicCommand="control/program_data/1",
mqttTopicCurrentValue="state/program_data/1",
device_class=SwitchDeviceClass.SWITCH,
payload_on="01",
payload_off="00",
icon="mdi:fan-minus",
),
PolarisSwitchEntityDescription(
key="eco_mode_switch",
translation_key="eco_mode_switch",
entity_category=EntityCategory.CONFIG,
name="Eco mode",
mqttTopicCommand="control/program_data/0",
mqttTopicCurrentValue="state/program_data/0",
device_class=SwitchDeviceClass.SWITCH,
payload_on="01",
payload_off="00",
),
PolarisSwitchEntityDescription(
key="anti_fingus",
translation_key="anti_fingus_switch",
entity_category=EntityCategory.CONFIG,
name="Anti-fingus",
mqttTopicCommand="control/program_data/0",
mqttTopicCurrentValue="state/program_data/0",
device_class=SwitchDeviceClass.SWITCH,
payload_on="01",
payload_off="00",
icon="mdi:mushroom-off-outline",
),
]
SWITCHES_AIRCONDITIONER_882 = [
PolarisSwitchEntityDescription(
key="backlight",
translation_key="backlight_switch",
entity_category=EntityCategory.CONFIG,
name="Backlight",
mqttTopicCommand="control/backlight",
mqttTopicCurrentValue="state/backlight",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
),
PolarisSwitchEntityDescription(
key="turbo",
translation_key="turbo_switch",
entity_category=EntityCategory.CONFIG,
name="Turbo mode",
mqttTopicCommand="control/turbo",
mqttTopicCurrentValue="state/turbo",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:rocket-launch",
),
PolarisSwitchEntityDescription(
key="night",
translation_key="night_switch",
entity_category=EntityCategory.CONFIG,
name="Night mode",
mqttTopicCommand="control/night",
mqttTopicCurrentValue="state/night",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:weather-night",
),
PolarisSwitchEntityDescription(
key="smart_mode",
translation_key="smart_mode",
entity_category=EntityCategory.CONFIG,
name="smart_mode",
mqttTopicCommand="control/smart_mode",
mqttTopicCurrentValue="state/smart_mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
icon="mdi:thermometer-auto",
),
PolarisSwitchEntityDescription(
key="volume",
translation_key="sound_switch",
entity_category=EntityCategory.CONFIG,
name="Volume",
mqttTopicCommand="control/volume",
mqttTopicCurrentValue="state/volume",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
),
]
SWITCHES_THERMOSTAT = [
PolarisSwitchEntityDescription(
key="power",
translation_key="power_switch",
name="Power",
mqttTopicCommand="control/mode",
mqttTopicCurrentValue="state/mode",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
icon="mdi:power-standby",
),
PolarisSwitchEntityDescription(
key="display_off_heater",
translation_key="display_off_heater",
entity_category=EntityCategory.CONFIG,
name="Backlight auto off",
mqttTopicCommand="control/backlight",
mqttTopicCurrentValue="state/backlight",
device_class=SwitchDeviceClass.SWITCH,
payload_on="1",
payload_off="0",
),
PolarisSwitchEntityDescription(
key="child_lock",
translation_key="child_lock_switch",
entity_category=EntityCategory.CONFIG,
name="Child lock",
mqttTopicCommand="control/child_lock",
mqttTopicCurrentValue="state/child_lock",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
PolarisSwitchEntityDescription(
key="damper_heater",
translation_key="damper_heater",
entity_category=EntityCategory.CONFIG,
name="Detect open window",
mqttTopicCommand="control/damper",
mqttTopicCurrentValue="state/damper",
device_class=SwitchDeviceClass.SWITCH,
payload_on="true",
payload_off="false",
),
]
@dataclass
class PolarisWaterHeaterEntityDescription(WaterHeaterEntityDescription): # breaks_in_ha_version="2026.1"
mqttTopicCurrentMode: str | None = None
mqttTopicCommandMode: str | None = None
mqttTopicCurrentTemperature: str | None = None
mqttTopicCommandTemperature: str | None = None
mqttTopicTargetTemperature: str | None = None
payload_on: str | None = None
payload_off: str | None = None
min_temp: float | None = None
max_temp: float | None = None
operation_list: str | None = None
mode: str | None = None
WATER_HEATERS = [
PolarisWaterHeaterEntityDescription(
key="water_heater",
translation_key="water_heater",
# entity_category=EntityCategory.CONFIG,
name="water_heater",
mqttTopicCommandMode="control/mode",
mqttTopicCommandTemperature="control/temperature",
mqttTopicCurrentMode="state/mode",
mqttTopicCurrentTemperature="state/sensor/temperature",
mqttTopicTargetTemperature="state/temperature",
payload_on="1",
payload_off="0",
# icon="mdi:kettle",
min_temp=30,
max_temp=100,
mode="off",
operation_list = {"off": "0", "performance": "1", "electric": "3", "heat_pump": "4", "eco": "5"}
)
]
WATER_BOILERS = [
PolarisWaterHeaterEntityDescription(
key="water_boiler",
translation_key="water_boiler",
name="water_boiler",
mqttTopicCommandMode="control/mode",
mqttTopicCommandTemperature="control/temperature",
mqttTopicCurrentMode="state/mode",
mqttTopicCurrentTemperature="state/sensor/temperature",
mqttTopicTargetTemperature="state/temperature",
payload_on="1",
payload_off="0",
# icon="mdi:water-boiler",
min_temp=30,
max_temp=75,
mode="off",
operation_list = {"off": "0", "performance": "1", "electric": "2", "heat_pump": "3", "eco": "6"}
)
]
@dataclass
class PolarisHumidifierEntityDescription(HumidifierEntityDescription):
mqttTopicCurrentState: str | None = None
mqttTopicCommandState: str | None = None
mqttTopicCurrentMode: str | None = None
mqttTopicCommandMode: str | None = None
mqttTopicCurrentHumidity: str | None = None
mqttTopicCurrentTargetHumidity: str | None = None
mqttTopicCommandTargetHumidity: str | None = None
payload_on: str | None = None
payload_off: str | None = None
min_humidity: int | None = None
max_humidity: int | None = None
mode: str | None = None
available_modes: str | None = None
HUMIDIFIERS = [
PolarisHumidifierEntityDescription(
name="Humidifier",
key="humidifier",
translation_key="humidifier",
mode="boost",
available_modes={"auto": "1", "comfort": "2", "baby": "3", "sleep": "4", "boost": "5", "home": "6", "eco": "7"},
mqttTopicCurrentState = "state/mode",
mqttTopicCommandState = "control/mode",
mqttTopicCurrentMode = "state/mode",
mqttTopicCommandMode = "control/mode",
mqttTopicCurrentHumidity = "state/sensor/humidity",
mqttTopicCurrentTargetHumidity = "state/humidity",
mqttTopicCommandTargetHumidity = "control/humidity",
payload_on = "1",
payload_off = "0",
min_humidity = 30,
max_humidity = 80,
device_class=HumidifierDeviceClass.HUMIDIFIER,
icon="mdi:air-humidifier",
)
]
@dataclass
class PolarisNumberEntityDescription(NumberEntityDescription):
mqttTopicCurrent: str | None = None
mqttTopicCommand: str | None = None
native_value: int | None = None
NUMBER_HUMIDIFIER = [
PolarisNumberEntityDescription(
key="intensity",
name="intensity",
translation_key="intensity",
mqttTopicCurrent = "state/intensity",
mqttTopicCommand = "control/intensity",
entity_category=EntityCategory.CONFIG,
device_class=None,
native_unit_of_measurement=None,
entity_registry_enabled_default=True,
native_max_value=7,
native_min_value=0,
native_step=1,
native_value=1,
)
]
NUMBER_RUSCLIMATE_HUMIDIFIER = [
PolarisNumberEntityDescription(
key="speed",
name="Evaporation rate",
translation_key="evaporation_rate",
mqttTopicCurrent = "state/speed",
mqttTopicCommand = "control/speed",
entity_category=EntityCategory.CONFIG,
device_class=None,
native_unit_of_measurement=None,
entity_registry_enabled_default=True,
native_max_value=3,
native_min_value=1,
native_step=1,
native_value=1,
)
]
NUMBER_COOKER = [
PolarisNumberEntityDescription(
key="set_temperature",
name="set_temperature",
translation_key="set_temperature",
mqttTopicCurrent = "control/set_temperature",
mqttTopicCommand = "control/set_temperature",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
entity_registry_enabled_default=True,
native_max_value=160,
native_min_value=20,
native_step=1,
native_value=115,
mode="box",
)
]
NUMBERS_COFFEEMAKER = [
PolarisNumberEntityDescription(
key="amount",
name="amount",
translation_key="amount",
mqttTopicCurrent = "state/amount",
mqttTopicCommand = "control/amount",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.WATER,
native_unit_of_measurement=UnitOfVolume.MILLILITERS,
entity_registry_enabled_default=True,
native_max_value=250,
native_min_value=20,
native_step=5,
native_value=40,
mode="slider",
),
PolarisNumberEntityDescription(
key="weight",
name="weight",
translation_key="weight",
mqttTopicCurrent = "state/weight",
mqttTopicCommand = "control/weight",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.WEIGHT,
native_unit_of_measurement=UnitOfMass.GRAMS,
entity_registry_enabled_default=True,
native_max_value=12,
native_min_value=7,
native_step=1,
native_value=9,
mode="slider",
),
PolarisNumberEntityDescription(
key="tank",
name="tank",
translation_key="tank",
mqttTopicCurrent = "state/tank",
mqttTopicCommand = "control/tank",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.WATER,
native_unit_of_measurement=UnitOfVolume.MILLILITERS,
entity_registry_enabled_default=True,
native_max_value=250,
native_min_value=50,
native_step=5,
native_value=100,
mode="slider",
),
PolarisNumberEntityDescription(
key="pressure",
name="pressure",
translation_key="pressure",
mqttTopicCurrent = "state/pressure",
mqttTopicCommand = "control/pressure",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.SECONDS,
entity_registry_enabled_default=True,
native_max_value=100,
native_min_value=0,
native_step=5,
native_value=40,
mode="slider",
),
PolarisNumberEntityDescription(
key="speed",
name="speed",
translation_key="speed",
mqttTopicCurrent = "state/speed",
mqttTopicCommand = "control/speed",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.SECONDS,
entity_registry_enabled_default=True,
native_max_value=100,
native_min_value=0,
native_step=5,
native_value=30,
mode="slider",
),
PolarisNumberEntityDescription(
key="temperature",
name="temperature",
translation_key="temperature",
mqttTopicCurrent = "state/temperature",
mqttTopicCommand = "control/temperature",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
entity_registry_enabled_default=True,
native_max_value=95,
native_min_value=0,
native_step=1,
native_value=92,
mode="slider",
),
]
NUMBERS_COFFEEMAKER_ROG = [
PolarisNumberEntityDescription(
key="display_time",
name="display_time",
translation_key="display_time",
mqttTopicCurrent = "state/program_data/0",
mqttTopicCommand = "control/program_data/0",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.MINUTES,
entity_registry_enabled_default=True,
native_max_value=30,
native_min_value=10,
native_step=5,
native_value=10,
mode="slider",
),
PolarisNumberEntityDescription(
key="amount",
name="amount",
translation_key="amount",
mqttTopicCurrent = "state/amount",
mqttTopicCommand = "control/amount",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.WEIGHT,
native_unit_of_measurement=UnitOfMass.GRAMS,
entity_registry_enabled_default=True,
native_max_value=200,
native_min_value=30,
native_step=5,
native_value=40,
mode="slider",
),
PolarisNumberEntityDescription(
key="tank",
name="tank",
translation_key="speed",
mqttTopicCurrent = "state/tank",
mqttTopicCommand = "control/tank",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.SECONDS,
entity_registry_enabled_default=True,
native_max_value=40,
native_min_value=1,
native_step=1,
native_value=15,
mode="slider",
),
PolarisNumberEntityDescription(
key="temperature",
name="temperature",
translation_key="temperature",
mqttTopicCurrent = "state/temperature",
mqttTopicCommand = "control/temperature",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
entity_registry_enabled_default=True,
native_max_value=105,
native_min_value=95,
native_step=5,
native_value=95,
mode="slider",
),
]
NUMBERS_AIRCLEANER = [
PolarisNumberEntityDescription(
key="time",
name="time_timer",
translation_key="time_timer",
mqttTopicCurrent = "state/time",
mqttTopicCommand = "control/time",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.HOURS,
entity_registry_enabled_default=True,
native_max_value=12,
native_min_value=0,
native_step=1,
native_value=1,
mode="slider",
),
]
NUMBERS_IRRIGATOR = [
PolarisNumberEntityDescription(
key="speed_irrigator",
name="speed_irrigator",
translation_key="speed_irrigator",
mqttTopicCurrent = "state/speed",
mqttTopicCommand = "control/speed",
entity_category=EntityCategory.CONFIG,
entity_registry_enabled_default=True,
native_max_value=10,
native_min_value=1,
native_step=1,
native_value=1,
mode="slider",
icon="mdi:speedometer",
),
]
NUMBERS_HEATER = [
PolarisNumberEntityDescription(
key="temperature_difference_eco",
name="ECO difference temperature",
translation_key="temperature_difference_eco",
mqttTopicCurrent = "state/program_data/2",
mqttTopicCommand = "control/program_data/2",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
entity_registry_enabled_default=True,
native_max_value=7,
native_min_value=3,
native_step=1,
native_value=3,
mode="slider",
),
PolarisNumberEntityDescription(
key="temperature_difference_antifrost",
name="Anti frost difference temperature",
translation_key="temperature_difference_antifrost",
mqttTopicCurrent = "state/program_data/3",
mqttTopicCommand = "control/program_data/3",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
entity_registry_enabled_default=True,
native_max_value=7,
native_min_value=3,
native_step=1,
native_value=3,
mode="slider",
),
]
NUMBERS_THERMOSTAT = [
PolarisNumberEntityDescription(
key="bright_backlight",
name="Bright backlight",
translation_key="bright_backlight",
mqttTopicCurrent = "state/program_data/0",
mqttTopicCommand = "control/program_data/0",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.POWER_FACTOR,
native_unit_of_measurement=PERCENTAGE,
entity_registry_enabled_default=True,
native_max_value=100,
native_min_value=20,
native_step=10,
native_value=100,
mode="slider",
icon="mdi:brightness-percent",
),
PolarisNumberEntityDescription(
key="power_cable",
name="Power cable",
translation_key="power_cable",
mqttTopicCurrent = "state/program_data/9",
mqttTopicCommand = "control/program_data/9",
entity_category=EntityCategory.CONFIG,
device_class=NumberDeviceClass.POWER,
native_unit_of_measurement=UnitOfPower.WATT,
entity_registry_enabled_default=True,
native_max_value=3600,
native_min_value=50,
native_step=25,
native_value=50,
mode="box",
),
]
@dataclass
class PolarisSelectEntityDescription(SelectEntityDescription):
options: dict[str, str] | None = None
mqttTopicCurrentMode: str | None = None
mqttTopicCommandMode: str | None = None
mqttTopicCommandTemperature: str | None = None
mqttTopicTargetTemperature: str | None = None
SELECT_KETTLE = [
PolarisSelectEntityDescription(
key="select_mode_kettle",
name="select_mode_kettle",
translation_key="select_mode_kettle",
mqttTopicCurrentMode="state/mode",
mqttTopicCommandMode="control/mode",
mqttTopicCommandTemperature="control/temperature",
mqttTopicTargetTemperature="state/temperature",
options={
"not_selected": 0,
"black_tea": 100,
"baby_bottle": 40,
"instant_coffee": 95,
"green_tea": 80,
"flower_tea": 80,
"tea_bag": 100,
"red_tea": 90,
"puerh_tea": 95,
"oolong_tea": 90,
"white_tea": 65,
"herbal_tea": 90,
},
entity_category=EntityCategory.CONFIG,
device_class=None,
icon="mdi:receipt-text",
entity_registry_enabled_default=True,
)
]
SELECT_COOKER = [
PolarisSelectEntityDescription(
key="select_mode_cooker",
name="select_mode_cooker",
translation_key="select_mode_cooker",
mqttTopicCurrentMode="state/steps",
mqttTopicCommandMode="control/steps",
options={
"my_recipe_plus": "[{\"mode\":1, \"time\":1200, \"temperature\":115}]",
"reheat": "[{\"mode\":2, \"time\":1200, \"temperature\":115}]",
"cake": "[{\"mode\":3, \"time\":3600, \"temperature\":130}]",
"soaked_rice": "[{\"mode\":4, \"time\":2400, \"temperature\":115}]",
"stew": "[{\"mode\":6, \"time\":7200, \"temperature\":93}]",
"fry": "[{\"mode\":7, \"time\":300, \"temperature\":160}]",
"pilaf": "[{\"mode\":9, \"time\":3600, \"temperature\":120}]",
"yogurt": "[{\"mode\":12, \"time\":28800, \"temperature\":38}]",
"oatmeal": "[{\"mode\":13, \"time\":300, \"temperature\":96}]",
"milk_porridge": "[{\"mode\":17, \"time\":3600, \"temperature\":95}]",
"soup": "[{\"mode\":18, \"time\":3600, \"temperature\":97}]",
"meat": "[{\"mode\":24, \"time\":21600, \"temperature\":93}]",
"cottage_cheese": "[{\"mode\":27, \"time\":2400, \"temperature\":80}]",
},
entity_category=EntityCategory.CONFIG,
device_class=None,
icon="mdi:receipt-text",
entity_registry_enabled_default=True,
)
]
SELECT_COFFEEMAKER = [
PolarisSelectEntityDescription(
key="select_mode_cofeemaker",
name="select_mode_cofeemaker",
translation_key="select_mode_cofeemaker",
mqttTopicCurrentMode="control/mode", # ??????
mqttTopicCommandMode="control/mode",
options={
"not_selected": "[{\"mode\": 0, \"amount\": 0, \"weight\": 0, \"tank\": 0, \"pressure\": 0, \"speed\": 0, \"temperature\": 0}]",
"espresso": "[{\"mode\": 1, \"amount\": 40, \"weight\": 9, \"tank\": 0, \"pressure\": 0, \"speed\": 0, \"temperature\": 92}]",
"ristretto": "[{\"mode\": 2, \"amount\": 30, \"weight\": 11, \"tank\": 0, \"pressure\": 0, \"speed\": 0, \"temperature\": 92}]",
"long_espresso": "[{\"mode\": 3, \"amount\": 100, \"weight\": 9, \"tank\": 0, \"pressure\": 0, \"speed\": 0, \"temperature\": 92}]",
"americano": "[{\"mode\": 4, \"amount\": 80, \"weight\": 9, \"tank\": 100, \"pressure\": 0, \"speed\": 0, \"temperature\": 92}]",
"cappuccino": "[{\"mode\": 8, \"amount\": 50, \"weight\": 9, \"tank\": 0, \"pressure\": 35, \"speed\": 0, \"temperature\": 92}]",
"latte": "[{\"mode\": 9, \"amount\": 40, \"weight\": 9, \"tank\": 0, \"pressure\": 15, \"speed\": 30, \"temperature\": 92}]",
"flat_white": "[{\"mode\": 10, \"amount\": 80, \"weight\": 9, \"tank\": 0, \"pressure\": 5, \"speed\": 30, \"temperature\": 92}]",
"cortado": "[{\"mode\": 11, \"amount\": 50, \"weight\": 9, \"tank\": 0, \"pressure\": 0, \"speed\": 10, \"temperature\": 92}]",
"double_espresso": "[{\"mode\": 12, \"amount\": 40, \"weight\": 9, \"tank\": 0, \"pressure\": 0, \"speed\": 0, \"temperature\": 92}]",
"double_cappuccino": "[{\"mode\": 13, \"amount\": 80, \"weight\": 12, \"tank\": 0, \"pressure\": 50, \"speed\": 0, \"temperature\": 92}]",
"double_latte": "[{\"mode\": 14, \"amount\": 60, \"weight\": 10, \"tank\": 0, \"pressure\": 20, \"speed\": 45, \"temperature\": 92}]",
"double_long_espresso": "[{\"mode\": 15, \"amount\": 100, \"weight\": 9, \"tank\": 0, \"pressure\": 0, \"speed\": 0, \"temperature\": 92}]",
"double_macchiato": "[{\"mode\": 16, \"amount\": 60, \"weight\": 10, \"tank\": 0, \"pressure\": 60, \"speed\": 0, \"temperature\": 92}]",
"milk_coffee": "[{\"mode\": 17, \"amount\": 50, \"weight\": 9, \"tank\": 0, \"pressure\": 0, \"speed\": 30, \"temperature\": 92}]",
"macchiato": "[{\"mode\": 18, \"amount\": 40, \"weight\": 9, \"tank\": 0, \"pressure\": 40, \"speed\": 0, \"temperature\": 92}]",
"latte_macchiato": "[{\"mode\": 19, \"amount\": 40, \"weight\": 9, \"tank\": 0, \"pressure\": 20, \"speed\": 25, \"temperature\": 92}]",
"hot_water": "[{\"mode\": 20, \"amount\": 0, \"weight\": 0, \"tank\": 100, \"pressure\": 0, \"speed\": 0, \"temperature\": 0}]",
"hot_milk_foam": "[{\"mode\": 21, \"amount\": 0, \"weight\": 0, \"tank\": 0, \"pressure\": 35, \"speed\": 0, \"temperature\": 0}]",
"hot_milk": "[{\"mode\": 22, \"amount\": 0, \"weight\": 0, \"tank\": 0, \"pressure\": 0, \"speed\": 45, \"temperature\": 0}]"
},
entity_category=EntityCategory.CONFIG,
device_class=None,
icon="mdi:receipt-text",
entity_registry_enabled_default=True,
)
]
SELECT_COFFEEMAKER_ROG = [
PolarisSelectEntityDescription(
key="select_mode_cofeemaker_rog",
name="select_mode_cofeemaker",
translation_key="select_mode_cofeemaker",
mqttTopicCurrentMode="state/mode",
mqttTopicCommandMode="control/mode",
options={
"not_selected": "[{\"mode\": 0, \"amount\": 30, \"tank\": 0, \"temperature\": 95}]",
"espresso": "[{\"mode\": 1, \"amount\": 65, \"tank\": 0, \"temperature\": 95}]",
"doppio": "[{\"mode\": 1, \"amount\": 115, \"tank\": 0, \"temperature\": 95}]",
"cappuccino": "[{\"mode\": 2, \"amount\": 50, \"tank\": 15, \"temperature\": 95}]",
"double_cappuccino": "[{\"mode\": 2, \"amount\": 100, \"tank\": 25, \"temperature\": 95}]",
"latte": "[{\"mode\": 3, \"amount\": 65, \"tank\": 32, \"temperature\": 95}]",
"double_latte": "[{\"mode\": 3, \"amount\": 115, \"tank\": 40, \"temperature\": 95}]",
"lungo": "[{\"mode\": 1, \"amount\": 120, \"tank\": 0, \"temperature\": 95}]",
"flat_white": "[{\"mode\": 2, \"amount\": 70, \"tank\": 20, \"temperature\": 95}]",
"clearing": "[{\"mode\": 4, \"amount\": 0, \"tank\": 0, \"temperature\": 95}]",
"heating": "[{\"mode\": 5, \"amount\": 0, \"tank\": 0, \"temperature\": 95}]",
"hot_milk": "[{\"mode\": 6, \"amount\": 0, \"tank\": 15, \"temperature\": 95}]",
},
entity_category=EntityCategory.CONFIG,
device_class=None,
icon="mdi:receipt-text",
entity_registry_enabled_default=True,
)
]
SELECT_CLIMATE = [
PolarisSelectEntityDescription(
key="select_melody",
name="Melody",
translation_key="select_melody",
mqttTopicCurrentMode="state/amount",
mqttTopicCommandMode="control/amount",
options={
"mute": 0,
"rainstorm": 1,
"surf": 2,
"forest": 3,
"birdsong": 4,
"bonfire": 5,
},
entity_category=EntityCategory.CONFIG,
device_class=None,
icon="mdi:music-note",
entity_registry_enabled_default=True,
)
]
SELECT_AIRCLEANER_EAP = [
PolarisSelectEntityDescription(
key="select_night_backlight",
name="Night backlight",
translation_key="select_night_backlight",
mqttTopicCurrentMode="state/program_data/0",
mqttTopicCommandMode="control/program_data/0",
options={
"off": 0,
"all_on": 1,
"high_on": 2,
"mid_on": 3,
"low_on": 4,
},
entity_category=EntityCategory.CONFIG,
device_class=None,
entity_registry_enabled_default=True,
)
]
SELECT_AIRCONDITIONER_SWING_HORIZONTAL = [
PolarisSelectEntityDescription(
key="select_swing_horizontal",
name="Swing horizontal",
translation_key="select_swing_horizontal",
mqttTopicCurrentMode="state/program_data/3",
mqttTopicCommandMode="control/program_data/3",
options={
"off": "00",
"top": "01",
"high": "02",
"middle": "03",
"low": "04",
"bottom": "05",
},
entity_category=EntityCategory.CONFIG,
device_class=None,
entity_registry_enabled_default=True,
icon="mdi:arrow-split-horizontal",
)
]
SELECT_AIRCONDITIONER_SWING_VERTICAL = [
PolarisSelectEntityDescription(
key="select_swing_vertical",
name="Swing vertical",
translation_key="select_swing_vertical",
mqttTopicCurrentMode="state/program_data/4",
mqttTopicCommandMode="control/program_data/4",
options={
"off": "00",
"left": "01",
"center-left": "02",
"center": "03",
"center-right": "04",
"right": "05",
},
entity_category=EntityCategory.CONFIG,
device_class=None,
entity_registry_enabled_default=True,
icon="mdi:arrow-split-vertical",
)
]
SELECT_VACUUM = [
PolarisSelectEntityDescription(
key="select_mode_vacuum",
name="select_mode_vacuum",
translation_key="select_mode",
mqttTopicCurrentMode="state/mode",
mqttTopicCommandMode="control/mode",
options={
"mode0": 0,
"mode1": 1,
"mode2": 2,
"mode3": 3,
"mode4": 4,
"mode5": 5,
},
entity_category=EntityCategory.CONFIG,
device_class=None,
icon="mdi:vacuum",
entity_registry_enabled_default=True,
),
PolarisSelectEntityDescription(
key="select_room",
name="select_room",
translation_key="select_room",
mqttTopicCurrentMode="control/room",
mqttTopicCommandMode="control/room",
options={
"All_rooms": {"id": "00", "coordinate": []}
},
entity_category=EntityCategory.CONFIG,
device_class=None,
icon="mdi:vacuum",
entity_registry_enabled_default=True,
)
]
SELECT_IRRIGATOR = [
PolarisSelectEntityDescription(
key="select_irrigator",
name="Preset",
translation_key="select_irrigator",
mqttTopicCurrentMode="state/program_data/1",
mqttTopicCommandMode="control/",
options={
"preset1": 1,
"preset2": 2,
"preset3": 3,
},
entity_category=EntityCategory.CONFIG,
device_class=None,
icon="mdi:format-list-numbered",
entity_registry_enabled_default=True,
)
]
@dataclass
class PolarisLightEntityDescription(SelectEntityDescription):
mqttTopicCurrentColor: str | None = None
mqttTopicCommandColor: str | None = None
mqttTopicCurrentState: str | None = None
mqttTopicCommandState: str | None = None
LIGHTS = [
PolarisLightEntityDescription(
key="night",
name="night",
translation_key="night_light",
mqttTopicCurrentColor="state/program_data/0",
mqttTopicCommandColor="control/program_data/0",
mqttTopicCurrentState="state/night",
mqttTopicCommandState="control/night",
entity_category=EntityCategory.CONFIG,
device_class=None,
entity_registry_enabled_default=True,
)
]
LIGHTS_DOUBLE = [
PolarisLightEntityDescription(
key="night_up",
name="night_up",
translation_key="night_light_up",
mqttTopicCurrentColor="state/backlight",
mqttTopicCommandColor="control/backlight",
mqttTopicCurrentState="state/backlight",
mqttTopicCommandState="control/backlight",
entity_category=EntityCategory.CONFIG,
device_class=None,
entity_registry_enabled_default=True,
),
PolarisLightEntityDescription(
key="night_down",
name="night_down",
translation_key="night_light_down",
mqttTopicCurrentColor="state/backlight",
mqttTopicCommandColor="control/backlight",
mqttTopicCurrentState="state/backlight",
mqttTopicCommandState="control/backlight",
entity_category=EntityCategory.CONFIG,
device_class=None,
entity_registry_enabled_default=True,
)
]
@dataclass
class PolarisBinarySensorEntityDescription(BinarySensorEntityDescription):
mqttTopicStatus: str | None = None
BINARYSENSOR_KETTLE = [
PolarisBinarySensorEntityDescription(
key="base",
name="base",
translation_key="base_binary_sensor",
mqttTopicStatus="state/error/empty_base",
device_class=None, #BinarySensorDeviceClass.PLUG,
entity_registry_enabled_default=True,
)
]
BINARYSENSOR_LID = [
PolarisBinarySensorEntityDescription(
key="lid",
name="lid",
translation_key="lid_binary_sensor",
mqttTopicStatus="state/lid_open",
device_class=None,
entity_registry_enabled_default=True,
)
]
BINARYSENSOR_WATER_TANK = [
PolarisBinarySensorEntityDescription(
key="water_tank",
name="water_tank",
translation_key="water_tank_binary_sensor",
mqttTopicStatus="state/error/water",
device_class=None,
entity_registry_enabled_default=True,
)
]
BINARYSENSOR_CAPPUCCINATOR = [
PolarisBinarySensorEntityDescription(
key="cappuccinator",
name="cappuccinator",
translation_key="cappuccinator_binary_sensor",
mqttTopicStatus="state/tank",
device_class=None,
entity_registry_enabled_default=True,
)
]
BINARYSENSOR_THERMOSTAT = [
PolarisBinarySensorEntityDescription(
key="heating",
name="Heating",
translation_key="heating_binary_sensor",
mqttTopicStatus="state/program_data/10",
device_class=BinarySensorDeviceClass.HEAT,
entity_registry_enabled_default=True,
icon="mdi:heat-wave",
)
]
BINARYSENSOR_AVAILABLE = [
PolarisBinarySensorEntityDescription(
key="available",
name="available",
translation_key="available_binary_sensor",
mqttTopicStatus="state/error/connection",
device_class=BinarySensorDeviceClass.CONNECTIVITY,
entity_registry_enabled_default=True,
)
]
@dataclass
class PolarisButtonEntityDescription(ButtonEntityDescription):
payloads: str | None = None
mqttTopicCommand: str | None = None
BUTTON_HUMIDIFIER = [
PolarisButtonEntityDescription(
key="button_reset_filter",
name="button_reset_filter",
translation_key="button_reset_filter",
mqttTopicCommand="control/expendables",
device_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
payloads="[0,0]",
icon="mdi:filter",
),
PolarisButtonEntityDescription(
key="button_reset_tank",
name="button_reset_tank",
translation_key="button_reset_tank",
mqttTopicCommand="control/expendables",
device_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
payloads="[1,0]",
icon="mdi:cup-water",
)
]
BUTTON_COOKER = [
PolarisButtonEntityDescription(
key="button_stop",
name="button_stop",
translation_key="button_stop",
mqttTopicCommand="control/steps",
device_class=None,
entity_category=EntityCategory.CONFIG,
entity_registry_enabled_default=True,
payloads="[]",
),
PolarisButtonEntityDescription(
key="button_start",
name="button_start",
translation_key="button_start",
mqttTopicCommand="control/steps",
device_class=None,
entity_category=EntityCategory.CONFIG,
entity_registry_enabled_default=True,
payloads="[]",
)
]
BUTTON_COFFEEMAKER = [
PolarisButtonEntityDescription(
key="button_stop",
name="button_stop",
translation_key="button_stop_coffee",
mqttTopicCommand="control/",
device_class=None,
entity_category=EntityCategory.CONFIG,
entity_registry_enabled_default=True,
payloads="[]",
),
PolarisButtonEntityDescription(
key="button_start",
name="button_start",
translation_key="button_start_coffee",
mqttTopicCommand="control/",
device_class=None,
entity_category=EntityCategory.CONFIG,
entity_registry_enabled_default=True,
payloads="[]",
)
]
BUTTON_CLIMATES = [
PolarisButtonEntityDescription(
key="button_reset_filter",
name="button_reset_filter",
translation_key="button_reset_filter",
mqttTopicCommand="control/expendables",
device_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
payloads="[100]",
icon="mdi:filter",
)
]
BUTTON_CLIMATES_200 = [
PolarisButtonEntityDescription(
key="button_reset_filter",
name="button_reset_filter",
translation_key="button_reset_filter",
mqttTopicCommand="control/expendables",
device_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
payloads="[0,100]",
icon="mdi:filter",
),
PolarisButtonEntityDescription(
key="button_reset_prefilter",
name="button_reset_prefilter",
translation_key="button_reset_prefilter",
mqttTopicCommand="control/expendables",
device_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
payloads="[100,0]",
icon="mdi:filter",
)
]
BUTTON_AIRCLEANER = [
PolarisButtonEntityDescription(
key="button_reset_filter",
name="button_reset_filter",
translation_key="button_reset_filter",
mqttTopicCommand="control/expendables",
device_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=True,
payloads="[0]",
icon="mdi:filter",
)
]
@dataclass
class PolarisTimeEntityDescription(TimeEntityDescription):
min_time: int | None = None
max_time: int | None = None
default_time: int | None = None
mqttTopicCurrentTime: str | None = None
mqttTopicCommandTime: str | None = None
TIME_COOKER = [
PolarisTimeEntityDescription(
key="delay_start",
name="delay_start",
translation_key="delay_start",
mqttTopicCurrentTime="state/delay_start",
mqttTopicCommandTime="control/delay_start",
min_time=1,
max_time=720,
default_time=0,
entity_category=EntityCategory.CONFIG,
entity_registry_enabled_default=True,
),
PolarisTimeEntityDescription(
key="cooking_time",
name="cooking_time",
translation_key="cooking_time",
mqttTopicCurrentTime="control/cooking_time",
mqttTopicCommandTime="control/cooking_time",
min_time=1,
max_time=720,
default_time=20,
entity_category=EntityCategory.CONFIG,
entity_registry_enabled_default=True,
)
]
@dataclass
class PolarisClimateEntityDescription(ClimateEntityDescription):
fan_mode: str | None = None
fan_modes: str | None = None
preset_mode: str | None = None
preset_modes: str | None = None
hvac_modes: list | None = None
supported_features: int | None = None
mqttTopicStateTemperature: str | None = None
mqttTopicCommandTemperature: str | None = None
mqttTopicCurrentTemperature: str | None = None
mqttTopicStateFanMode: str | None = None
mqttTopicCommandFanMode: str | None = None
mqttTopicCommandPower: str | None = None
mqttTopicCurrentPresetMode: str | None = None
mqttTopicCommandPresetMode: str | None = None
mqttTopicCommandSwingMode: str | None = None
mqttTopicStateSwingMode: str | None = None
payload_on: str | None = None
payload_off: str | None = None
min_temp: int | None = None
max_temp: int | None = None
temp_step: int | None = None
swing_mode: str | None = None
swing_modes: str | None = None
CLIMATES = [
PolarisClimateEntityDescription(
name = "Climate",
key = "climate",
translation_key = "climate",
fan_mode = "off",
fan_modes = {"off": "0", "1_speed": "1", "2_speed": "2", "3_speed": "3", "4_speed": "4", "5_speed": "5", "6_speed": "6", "7_speed": "7"},
preset_mode = "passive",
preset_modes = {"hands": "1", "auto": "2", "night": "3", "turbo": "4", "passive": "5"},
hvac_modes = [HVACMode.OFF, HVACMode.FAN_ONLY],
supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.PRESET_MODE
| ClimateEntityFeature.FAN_MODE
| ClimateEntityFeature.TURN_OFF
| ClimateEntityFeature.TURN_ON
),
mqttTopicStateTemperature = "state/temperature",
mqttTopicCommandTemperature = "control/temperature",
mqttTopicCurrentTemperature = "state/sensor/temperature",
mqttTopicStateFanMode = "state/speed",
mqttTopicCommandFanMode = "control/speed",
mqttTopicCommandPower = "control/mode",
mqttTopicCurrentPresetMode = "state/mode",
mqttTopicCommandPresetMode = "control/mode",
payload_on = "5",
payload_off = "0",
min_temp = 5,
max_temp = 25,
temp_step = 1,
device_class = None,
)
]
CLIMATES_200 = [
PolarisClimateEntityDescription(
name = "Climate",
key = "climate",
translation_key = "climate",
fan_mode = "off",
fan_modes = {"off": "0", "1_speed": "1", "2_speed": "2", "3_speed": "3", "4_speed": "4", "5_speed": "5", "6_speed": "6", "7_speed": "7", "8_speed": "8", "9_speed": "9"},
preset_mode = "auto",
preset_modes = {"hands": "1", "auto": "2", "night": "3", "turbo": "4"},
hvac_modes = [HVACMode.OFF, HVACMode.FAN_ONLY],
supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.PRESET_MODE
| ClimateEntityFeature.FAN_MODE
| ClimateEntityFeature.TURN_OFF
| ClimateEntityFeature.TURN_ON
),
mqttTopicStateTemperature = "state/temperature",
mqttTopicCommandTemperature = "control/temperature",
mqttTopicCurrentTemperature = "state/sensor/temperature",
mqttTopicStateFanMode = "state/speed",
mqttTopicCommandFanMode = "control/speed",
mqttTopicCommandPower = "control/mode",
mqttTopicCurrentPresetMode = "state/mode",
mqttTopicCommandPresetMode = "control/mode",
payload_on = "2",
payload_off = "0",
min_temp = 5,
max_temp = 25,
temp_step = 1,
device_class = None,
)
]
AIRCLEANER = [
PolarisClimateEntityDescription(
name = "Aircleaner",
key = "aircleaner",
translation_key = "aircleaner",
fan_mode = "auto",
fan_modes = {"auto": "0", "low": "1", "medium": "2", "high": "3"},
preset_mode = "auto",
preset_modes = {"auto": "1", "hands": "2", "night": "3"},
hvac_modes = [HVACMode.OFF, HVACMode.DRY],
supported_features = (
ClimateEntityFeature.PRESET_MODE
| ClimateEntityFeature.FAN_MODE
| ClimateEntityFeature.TURN_OFF
| ClimateEntityFeature.TURN_ON
),
mqttTopicStateFanMode = "state/intensity",
mqttTopicCommandFanMode = "control/intensity",
mqttTopicCommandPower = "control/mode",
mqttTopicCurrentPresetMode = "state/mode",
mqttTopicCommandPresetMode = "control/mode",
payload_on = "1",
payload_off = "0",
device_class = None,
)
]
AIRCLEANER_EAP = [
PolarisClimateEntityDescription(
name = "Aircleaner",
key = "aircleaner",
translation_key = "aircleaner",
fan_mode = "low",
fan_modes = {"off": "0", "low": "1", "medium": "2", "high": "3", "top": "4"},
preset_mode = "auto",
preset_modes = {"auto": "1", "night": "2", "hands": "3"},
hvac_modes = [HVACMode.OFF, HVACMode.DRY],
supported_features = (
ClimateEntityFeature.PRESET_MODE
| ClimateEntityFeature.FAN_MODE
| ClimateEntityFeature.TURN_OFF
| ClimateEntityFeature.TURN_ON
),
mqttTopicStateFanMode = "state/fan_speed",
mqttTopicCommandFanMode = "control/fan_speed",
mqttTopicCommandPower = "control/mode",
mqttTopicCurrentPresetMode = "state/mode",
mqttTopicCommandPresetMode = "control/mode",
payload_on = "1",
payload_off = "0",
device_class = None,
)
]
CLIMATES_HEATER = [
PolarisClimateEntityDescription(
name = "Heater",
key = "heater",
translation_key = "heater",
fan_mode = "auto",
fan_modes = {"auto": "0", "10_percent": "1", "20_percent": "2", "30_percent": "3", "40_percent": "4", "50_percent": "5", "60_percent": "6", "70_percent": "7", "80_percent": "8", "90_percent": "9", "100_percent": "10"},
preset_mode = "comfort",
preset_modes = {"comfort": "1", "eco": "2", "away": "3"},
hvac_modes = [HVACMode.OFF, HVACMode.HEAT],
supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.PRESET_MODE
# | ClimateEntityFeature.AUX_HEAT
| ClimateEntityFeature.FAN_MODE
| ClimateEntityFeature.TURN_OFF
| ClimateEntityFeature.TURN_ON
),
mqttTopicStateTemperature = "state/temperature",
mqttTopicCommandTemperature = "control/temperature",
mqttTopicCurrentTemperature = "state/sensor/temperature",
mqttTopicStateFanMode = "state/speed",
mqttTopicCommandFanMode = "control/speed",
mqttTopicCommandPower = "control/mode",
mqttTopicCurrentPresetMode = "state/mode",
mqttTopicCommandPresetMode = "control/mode",
payload_on = "1",
payload_off = "0",
min_temp = 5,
max_temp = 35,
temp_step = 1,
device_class = None,
)
]
CLIMATES_AIRCONDITIONER = [
PolarisClimateEntityDescription(
name = "Conditioner",
key = "conditioner",
translation_key = "conditioner",
fan_mode = "auto",
fan_modes = {"auto": "0", "min": "1", "low": "2", "middle": "3", "high": "4", "max": "5"},
preset_mode = "auto",
preset_modes = {"auto": "1", "cooling": "2", "defrosting": "3", "heating": "4", "fan": "5"},
hvac_modes = [HVACMode.OFF, HVACMode.HEAT, HVACMode.COOL, HVACMode.FAN_ONLY, HVACMode.DRY, HVACMode.AUTO],
swing_mode = "off",
swing_modes = {"off": "0", "both": "1", "vertical": "2", "horizontal": "3"},
supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.FAN_MODE
| ClimateEntityFeature.TURN_OFF
| ClimateEntityFeature.TURN_ON
| ClimateEntityFeature.SWING_MODE
),
mqttTopicStateTemperature = "state/temperature",
mqttTopicCommandTemperature = "control/temperature",
mqttTopicCurrentTemperature = "state/sensor/temperature",
mqttTopicStateFanMode = "state/speed",
mqttTopicCommandFanMode = "control/speed",
mqttTopicCommandPower = "control/mode",
mqttTopicCurrentPresetMode = "state/mode",
mqttTopicCommandPresetMode = "control/mode",
mqttTopicCommandSwingMode = "control/program_data/0",
mqttTopicStateSwingMode = "state/program_data/0",
payload_on = "1",
payload_off = "0",
min_temp = 16,
max_temp = 30,
temp_step = 1,
device_class = None,
)
]
CLIMATES_THERMOSTAT = [
PolarisClimateEntityDescription(
name = "Thermostat",
key = "thermostat",
translation_key = "thermostat",
preset_mode = "comfort",
preset_modes = {"eco": "1", "comfort": "2", "turbo": "3", "antifrost": "4", "schedule": "5", "vacation": "6", "manual": "7"},
hvac_modes = [HVACMode.OFF, HVACMode.HEAT],
supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.PRESET_MODE
| ClimateEntityFeature.TURN_OFF
| ClimateEntityFeature.TURN_ON
),
mqttTopicStateTemperature = "state/temperature",
mqttTopicCommandTemperature = "control/temperature",
mqttTopicCurrentTemperature = "state/sensor/temperature",
mqttTopicCommandPower = "control/mode",
mqttTopicCurrentPresetMode = "state/mode",
mqttTopicCommandPresetMode = "control/mode",
payload_on = "1",
payload_off = "0",
min_temp = 5,
max_temp = 45,
temp_step = 1,
device_class = None,
)
]
@dataclass
class PolarisVacuumEntityDescription(ClimateEntityDescription):
fan_mode: str | None = None
fan_modes: str | None = None
mqttTopicCommandMode: str | None = None
mqttTopicCurrentMode: str | None = None
mqttTopicBatteryState: str | None = None
mqttTopicBatteryLevel: str | None = None
mqttTopicStateFanMode: str | None = None
mqttTopicCommandFanMode: str | None = None
mqttTopicCommandFindMe: str | None = None
mqttTopicCommandGoArea: str | None = None
VACUUM = [
PolarisVacuumEntityDescription(
name = "Vacuum",
key = "vacuum",
translation_key = "vacuum",
mqttTopicCommandMode = "control/mode",
mqttTopicCurrentMode = "state/mode",
mqttTopicStateFanMode = "state/suction",
mqttTopicCommandFanMode = "control/suction",
mqttTopicBatteryLevel = "state/battery",
mqttTopicBatteryState = "state/battery_state",
mqttTopicCommandFindMe = "control/find_me",
mqttTopicCommandGoArea = "control/go_area",
device_class = None,
)
]
@dataclass
class PolarisImageEntityDescription(ImageEntityDescription):
mqttTopicCommandGoArea: str | None = None
IMAGE = [
PolarisImageEntityDescription(
name = "Image",
key = "image",
translation_key = "image",
mqttTopicCommandGoArea = "control/go_area",
device_class = None,
)
]