Skip to content

Commit efd2a68

Browse files
committed
Working
1 parent a675433 commit efd2a68

File tree

1 file changed

+168
-80
lines changed

1 file changed

+168
-80
lines changed

plugwise/devices.py

Lines changed: 168 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -9,73 +9,85 @@
99
class BaseClass:
1010
"""Plugwise Base Gateway data class."""
1111

12-
available: bool | None
12+
available: bool | None # not for gateway, should always be available
1313
dev_class: str
1414
firmware: str
1515
hardware: str | None
1616
location: str
17-
mac_address: str
17+
mac_address: str
1818
model: str
1919
model_id: str | None
2020
name: str
2121
vendor: str
2222

2323

2424
@dataclass
25-
class SmileP1Gateway(BaseClass):
26-
"""Plugwise Smile P1 Gateway data class."""
27-
28-
binary_sensors: GatewayBinarySensors # Not for legacy?
29-
30-
31-
@dataclass
32-
class StretchGateway(BaseClass):
33-
"""Plugwise Stretch Gateway data class."""
25+
class AdamGateway(BaseClass):
26+
"""Plugwise Adam HA Gateway data class."""
3427

28+
binary_sensors: GatewayBinarySensors
29+
gateway_modes: list[str]
30+
regulation_modes: list[str]
31+
select_gateway_mode: str
32+
select_regulation_mode: str
33+
sensors: Weather
3534
zigbee_mac_address: str
3635

3736

3837
@dataclass
3938
class SmileTGateway(BaseClass):
4039
"""Plugwise Anna Smile-T Gateway data class."""
4140

42-
binary_sensors: GatewayBinarySensors | HeaterCentralBinarySensors # Not for legacy?
43-
sensors: GatewaySensors
41+
binary_sensors: GatewayBinarySensors
42+
sensors: Weather
4443

4544

4645
@dataclass
47-
class GatewayBinarySensors:
48-
"""Gateway binary_sensors class."""
46+
class SmileTLegacyGateway(BaseClass):
47+
"""Plugwise legacy Anna Smile-T Gateway data class."""
4948

50-
plugwise_notification: bool # None for some?
49+
sensors: Weather
5150

5251

5352
@dataclass
54-
class GatewaySensors:
55-
"""Gateway sensors class."""
53+
class SmileP1Gateway(BaseClass):
54+
"""Plugwise Smile P1 Gateway data class."""
5655

57-
outdoor_temperature: float | None # None when not enabled?
56+
binary_sensors: GatewayBinarySensors
5857

5958

6059
@dataclass
61-
class AdamGateway(BaseClass):
62-
"""Plugwise Adam HA Gateway data class."""
60+
class SmileP1LegacyGateway(BaseClass):
61+
"""Plugwise legacy Smile P1 Gateway data class."""
62+
63+
64+
@dataclass
65+
class StretchGateway(BaseClass):
66+
"""Plugwise Stretch Gateway data class."""
6367

64-
binary_sensors: GatewayBinarySensors | HeaterCentralBinarySensors # Not for legacy?
65-
gateway_modes: list[str]
66-
regulation_modes: list[str]
67-
select_gateway_mode: str
68-
select_regulation_mode: str
69-
sensors: GatewaySensors
7068
zigbee_mac_address: str
7169

7270

71+
@dataclass
72+
class GatewayBinarySensors:
73+
"""Gateway binary_sensors class."""
74+
75+
plugwise_notification: bool
76+
77+
78+
@dataclass
79+
class Weather:
80+
"""Gateway weather sensor class."""
81+
82+
outdoor_temperature: float | None # None when not available
83+
84+
7385
@dataclass
7486
class SmartEnergyMeter(BaseClass):
7587
"""DSMR Energy Meter data class."""
7688

7789
sensors: SmartEnergySensors
78-
90+
SmartEnergyMeterSmartEnergyMeter
7991

8092
@dataclass
8193
class SmartEnergySensors:
@@ -255,26 +267,43 @@ class ThermostatsDict:
255267

256268

257269
@dataclass
258-
class OnOffTherm(BaseClass):
259-
"""On-off heater/cooler device class."""
270+
class OnOff(BaseClass):
271+
"""On-off climate device class."""
260272

261-
binary_sensors: GatewayBinarySensors | HeaterCentralBinarySensors
273+
binary_sensors: OnOffBinarySensors
274+
sensors: OnOffSensors
275+
276+
277+
@dataclass
278+
class OpOffBinarySensors:
279+
"""OpenTherm binary_sensors class."""
280+
281+
heating_state: bool
282+
283+
284+
@dataclass
285+
class OnOffSensors:
286+
"""Heater-central sensors class."""
287+
288+
intended_boiler_temperature: float | None
289+
modulation_level: float | None
290+
water_temperature: float
262291

263292

264293
@dataclass
265294
class OpenTherm(BaseClass):
266-
"""OpenTherm heater/cooler device class."""
295+
"""OpenTherm climate device class."""
267296

268-
binary_sensors: GatewayBinarySensors | HeaterCentralBinarySensors
297+
binary_sensors: OpenThermBinarySensors
269298
maximum_boiler_temperature: SetpointDict | None
270299
max_dhw_temperature: SetpointDict | None
271-
sensors: HeaterCentralSensors
272-
switches: HeaterCentralSwitches | PlugSwitches
300+
sensors: OpenThermSensors
301+
switches: OpenThermSwitches
273302

274303

275304
@dataclass
276-
class HeaterCentralBinarySensors:
277-
"""Heater-central binary_sensors class."""
305+
class OpenThermBinarySensors:
306+
"""OpenTherm binary_sensors class."""
278307

279308
compressor_state: bool | None
280309
cooling_enabled: bool | None
@@ -286,8 +315,8 @@ class HeaterCentralBinarySensors:
286315

287316

288317
@dataclass
289-
class HeaterCentralSensors:
290-
"""Heater-central sensors class."""
318+
class OpenThermSensors:
319+
"""OpenTherm sensors class."""
291320

292321
dhw_temperature: float | None
293322
domestic_hot_water_setpoint: float | None
@@ -300,8 +329,8 @@ class HeaterCentralSensors:
300329

301330

302331
@dataclass
303-
class HeaterCentralSwitches:
304-
"""Heater-central switches class."""
332+
class OpenThermSwitches:
333+
"""OpenTherm switches class."""
305334

306335
cooling_ena_switch: bool | None
307336
dhw_cm_switch: bool
@@ -335,50 +364,109 @@ class PlugSwitches:
335364

336365
##################################################
337366
class PlugwiseData
338-
"""
339-
Overview of existing options:
340-
341-
- Gateway Adam
342-
- Climate device
343-
- OnOff
344-
- Opentherm
345-
- Zones (1 to many) with thermostatic and energy sensors summary, with thermostat setpoint- and mode-, preset- & schedule-setter
346-
- Location (Home) with weather data - only outdoor_temp used
347-
- Single devices (appliances) assigned to a Zone, or not
348-
- Anna (wired thermostat)
349-
- Lisa (ZigBee thermostat)
350-
- Jip (ZigBee thermostat)
351-
- Tom/Floor (ZigBee valve/thermostat)
352-
- Plug (energy switch/meter)
353-
- Aqara Plug (energy switch/meter)
354-
- Noname switch (energy switch)
355-
356-
- Gateway SmileT
357-
- Climate device
358-
- OnOff
359-
- OpenTherm
360-
- Zone (Living room) with with thermostatic and energy sensors summary, with thermostat setpoint- and mode-, preset- & schedule-setter
361-
- Location (Home) with weather data - only outdoor_temp used
362-
- Single devices (appliances)
367+
"""
368+
Overview of existing options:
369+
370+
- Gateway Adam
371+
- Climate device
372+
- OnOff
373+
- Opentherm
374+
- Zones (1 to many) with thermostatic and energy sensors summary, with thermostat setpoint- and mode-, preset- & schedule-setter
375+
- Location (Home) with weather data - only outdoor_temp used
376+
- Single devices (appliances) assigned to a Zone, or not
377+
- Anna (wired thermostat)
378+
- Lisa (ZigBee thermostat)
379+
- Jip (ZigBee thermostat)
380+
- Tom/Floor (ZigBee valve/thermostat)
381+
- Plug (energy switch/meter)
382+
- Aqara Plug (energy switch/meter)
383+
- Noname switch (energy switch)
384+
385+
- Gateway SmileT
386+
- Climate device
387+
- OnOff
388+
- OpenTherm
389+
- Zone (Living room) with with thermostatic and energy sensors summary, with thermostat setpoint- and mode-, preset- & schedule-setter
390+
- Location (Home) with weather data - only outdoor_temp used
391+
- Single devices (appliances)
392+
- Anna (wired thermostat)
393+
- P1-DSMR device (new Anna P1) (?)
394+
395+
- Gateway SmileT legacy
396+
- OnOff/OpenTherm device
363397
- Anna (wired thermostat)
364-
- P1-DSMR device (new Anna P1) (?)
365-
366-
- Gateway SmileT legacy
367-
- OnOff/OpenTherm device
368-
- Anna (wired thermostat)
369-
- Location (Home) with weather data (optional?) - only outdoor_temp used
398+
- Location (Home) with weather data (optional?) - only outdoor_temp used
370399
371-
- Gateway P1
372-
- P1-DSMR device (in Home location)
400+
- Gateway P1
401+
- P1-DSMR device (in Home location)
373402
374-
- Gateway P1 legacy
375-
- P1-DSMR device (in modules)
403+
- Gateway P1 legacy
404+
- P1-DSMR device (in modules)
376405
377-
- Gateway Stretch (legacy)
378-
- Single devices (Zigbee)
379-
- ??
406+
- Gateway Stretch (legacy)
407+
- Single devices (Zigbee)
408+
- ??
409+
"""
380410

381-
"""
411+
adam: AdamGateway()
412+
smile_t: SmileTGateway()
413+
smile_t_legacy: SmileTLegacyGateway()
414+
# smile_t_p1: AnnaP1Gateway() # double?
415+
smile_p1: SmileP1Gateway()
416+
smile_p1_legacy: SmileP1LegacyGateway()
417+
stretch: StretchGateway
418+
onoff: OnOff()
419+
opentherm: OpenTherm()
420+
zones: list[Zone()]
421+
weather: Weather()
422+
anna: Anna()
423+
anna_legacy: AnnaLegacy()
424+
anna_adam: AnnaAdam()
425+
lisa: Lisa()
426+
jip: Jip()
427+
tom_floor: TomFloor()
428+
plug: Plug()
429+
plug_legacy: PlugLegacy()
430+
aqara_plug: AqaraPlug()
431+
misc_plug: MiscPlug()
432+
p1_dsmr: P1_DSMR()
433+
434+
def update_from_dict(self, data: dict[str, Any]) -> PlugwiseData:
435+
"""Update the status object with data received from the Plugwise API."""
436+
if "adam" in data:
437+
self.adam.update_from_dict(data["adam"])
438+
if "smile_t" in data:
439+
self.smile_t.update_from_dict(data["smile_t"])
440+
# if "smile_t_p1" in data:
441+
# self.smile_t_p1.update_from_dict(data["smile_t_p1"])
442+
if "smile_p1" in data:
443+
self.smile_p1.update_from_dict(data["smile_p1"])
444+
if "stretch" in data:
445+
self.stretch.update_from_dict(data["stretch"])
446+
if "onoff" in data:
447+
self.onoff.update_from_dict(data["onoff"])
448+
if "opentherm" in data:
449+
self.opentherm.update_from_dict(data["opentherm"])
450+
if "zones" in data:
451+
self.zones.update_from_dict(data["zones"])
452+
if "anna" in data:
453+
self.anna.update_from_dict(data["anna"])
454+
if "anna_adam" in data:
455+
self.anna_adam.update_from_dict(data["anna_adam"])
456+
if "lisa" in data:
457+
self.lisa.update_from_dict(data["lisa"])
458+
if "jip" in data:
459+
self.zones.update_from_dict(data["jip"])
460+
if "tom_floor" in data:
461+
self.tom_floor.update_from_dict(data["tom_floor"])
462+
if "plug" in data:
463+
self.plug.update_from_dict(data["plug"])
464+
if "aqara_plug" in data:
465+
self.opentherm.update_from_dict(data["aqara_plug"])
466+
if "misc_plug" in data:
467+
self.misc_plug.update_from_dict(data["misc_plug"])
468+
if "p1_dsmr" in data:
469+
self.p1_dsmr.update_from_dict(data["p1_dsmr"])
382470
##################################################
383471

384472
# class PlugwiseP1:

0 commit comments

Comments
 (0)