-
Notifications
You must be signed in to change notification settings - Fork 0
/
binary_sensor.py
232 lines (184 loc) · 7.66 KB
/
binary_sensor.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
from homeassistant.components.binary_sensor import (
BinarySensorEntity,
BinarySensorDeviceClass,
)
from homeassistant.helpers.update_coordinator import (
CoordinatorEntity,
)
from homeassistant.core import (
callback,
)
from .const import (
DOMAIN,
DATA,
MONITOR,
)
async def async_setup_entry(hass, config_entry, async_add_entities):
"""
Přidá binární senzory pro daný config_entry v Home Assistant.
Tato funkce inicializuje nové entity binárních senzorů založené na datech získaných
z konfiguračního záznamu a přidá je do Home Assistant. Každý senzor je spojen s
konkrétní funkcionalitou nebo stavem zařízení reprezentovaného třídou HeatPump.
Args:
hass: Instance HomeAssistant, která poskytuje kontext a metody pro interakci s HA.
config_entry: Konfigurační záznam pro tuto integraci, obsahuje konfigurační data.
async_add_entities: Funkce callbacku používaná pro přidání nových entit do HA.
"""
# Získání instance koordinátora pro tento config_entry.
coordinator = hass.data[DOMAIN][config_entry.entry_id][DATA]
new_entities = []
# Vytvoření instancí binárních senzorů pro různé monitorované funkce a stavy.
new_entities.append(
GeneralBinarySensor(coordinator, MONITOR, "Rezim Zima", icon="mdi:snowflake")
)
new_entities.append(
GeneralBinarySensor(
coordinator, MONITOR, "Rezim Leto", icon="mdi:weather-sunny"
)
)
new_entities.append(RunningBinarySensor(coordinator, MONITOR, "Kompresor"))
new_entities.append(RunningBinarySensor(coordinator, MONITOR, "Obehove cerpadlo"))
new_entities.append(RunningBinarySensor(coordinator, MONITOR, "Ventilator"))
new_entities.append(RunningBinarySensor(coordinator, MONITOR, "Elektrokotel 1"))
new_entities.append(RunningBinarySensor(coordinator, MONITOR, "Elektrokotel 2"))
new_entities.append(ProblemBinarySensor(coordinator, MONITOR, "Alarm"))
new_entities.append(ProblemBinarySensor(coordinator, MONITOR, "3 Alarmy"))
new_entities.append(
GeneralBinarySensor(
coordinator, MONITOR, "Reset 3 Alarmu", icon="mdi:restart-alert"
)
)
new_entities.append(
GeneralBinarySensor(coordinator, MONITOR, "Odtaveni", icon="mdi:snowflake-melt")
)
new_entities.append(
GeneralBinarySensor(coordinator, MONITOR, "Zapnuto", icon="mdi:power")
)
# Přidání vytvořených entit do Home Assistant.
if new_entities:
async_add_entities(new_entities)
class BinarySensorBase(CoordinatorEntity, BinarySensorEntity):
"""Základní třída pro všechny binární senzory v této integraci."""
should_poll = False
def __init__(self, coordinator, device_type):
"""Inicializace základní třídy binárního senzoru."""
super().__init__(coordinator)
self._device_type = device_type
self._device = self.coordinator.hp.devices[device_type]
@property
def device_info(self):
"""Vrátí informace o zařízení pro integraci s Home Assistant."""
return {"identifiers": {(DOMAIN, self._device.id)}}
@property
def available(self) -> bool:
"""Vrátí dostupnost senzoru."""
return self._device.get_availability()
@callback
def _handle_coordinator_update(self) -> None:
"""Zpracování aktualizace od koordinátora."""
self._device = self.coordinator.hp.devices[self._device_type]
self.async_write_ha_state()
# Třídy pro specifické typy binárních senzorů (RunningBinarySensor, ProblemBinarySensor, GeneralBinarySensor)
# jsou odvozeny od BinarySensorBase a implementují specifické chování pro každý typ senzoru, včetně
# vlastnosti is_on, která určuje, zda je senzor ve stavu on/off, a vlastnosti icon pro určení ikony senzoru.
class RunningBinarySensor(BinarySensorBase):
"""Running třída pro binární senzory v této integraci."""
device_class = BinarySensorDeviceClass.RUNNING
def __init__(self, coordinator, device_type, name, icon=None):
"""
Inicializuje instance RunningBinarySensor.
Args:
coordinator: Instance koordinátora, který spravuje aktualizace dat.
device_type: Typ zařízení, ke kterému senzor patří.
name: Lidsky čitelný název senzoru.
icon: Volitelná ikona pro senzor.
"""
super().__init__(coordinator, device_type)
self._id = name.replace(" ", "_").casefold()
self._attr_name = name
self._attr_unique_id = self._device.id + "_" + self._id
self.entity_id = "binary_sensor." + self._device.id + "_" + self._id
self._icon = icon
@property
def is_on(self):
"""
Určuje, zda je zařízení v provozu.
Returns:
True, pokud je zařízení v provozu, jinak False.
"""
return self._device.get_state(self._id)
@property
def icon(self):
"""
Vrátí ikonu senzoru.
Returns:
Řetězec určující ikonu pro senzor.
"""
return self._icon
class ProblemBinarySensor(BinarySensorBase):
"""Problem třída pro binární senzory v této integraci."""
device_class = BinarySensorDeviceClass.PROBLEM
def __init__(self, coordinator, device_type, name, icon=None):
"""
Inicializuje instance ProblemBinarySensor.
Args:
coordinator: Instance koordinátora, který spravuje aktualizace dat.
device_type: Typ zařízení, ke kterému senzor patří.
name: Lidsky čitelný název senzoru.
icon: Volitelná ikona pro senzor.
"""
super().__init__(coordinator, device_type)
self._id = name.replace(" ", "_").casefold()
self._attr_name = name
self._attr_unique_id = self._device.id + "_" + self._id
self.entity_id = "binary_sensor." + self._device.id + "_" + self._id
self._icon = icon
@property
def is_on(self):
"""
Určuje, zda je zařízení v provozu.
Returns:
True, pokud je zařízení v provozu, jinak False.
"""
return self._device.get_state(self._id)
@property
def icon(self):
"""
Vrátí ikonu senzoru.
Returns:
Řetězec určující ikonu pro senzor.
"""
return self._icon
class GeneralBinarySensor(BinarySensorBase):
"""Obecná třída pro binární senzory v této integraci."""
def __init__(self, coordinator, device_type, name, icon=None):
"""
Inicializuje instance GeneralBinarySensor.
Args:
coordinator: Instance koordinátora, který spravuje aktualizace dat.
device_type: Typ zařízení, ke kterému senzor patří.
name: Lidsky čitelný název senzoru.
icon: Volitelná ikona pro senzor.
"""
super().__init__(coordinator, device_type)
self._id = name.replace(" ", "_").casefold()
self._attr_name = name
self._attr_unique_id = self._device.id + "_" + self._id
self.entity_id = "binary_sensor." + self._device.id + "_" + self._id
self._icon = icon
@property
def is_on(self):
"""
Určuje, zda je zařízení v provozu.
Returns:
True, pokud je zařízení v provozu, jinak False.
"""
return self._device.get_state(self._id)
@property
def icon(self):
"""
Vrátí ikonu senzoru.
Returns:
Řetězec určující ikonu pro senzor.
"""
return self._icon