PyPlumIO 0.5.42__py3-none-any.whl → 0.5.43__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. pyplumio/__init__.py +3 -2
  2. pyplumio/_version.py +2 -2
  3. pyplumio/connection.py +14 -14
  4. pyplumio/const.py +7 -0
  5. pyplumio/devices/__init__.py +32 -19
  6. pyplumio/devices/ecomax.py +112 -128
  7. pyplumio/devices/ecoster.py +5 -0
  8. pyplumio/devices/mixer.py +21 -31
  9. pyplumio/devices/thermostat.py +19 -29
  10. pyplumio/filters.py +166 -147
  11. pyplumio/frames/__init__.py +20 -8
  12. pyplumio/frames/messages.py +3 -0
  13. pyplumio/frames/requests.py +21 -0
  14. pyplumio/frames/responses.py +18 -0
  15. pyplumio/helpers/data_types.py +23 -21
  16. pyplumio/helpers/event_manager.py +40 -3
  17. pyplumio/helpers/factory.py +5 -2
  18. pyplumio/helpers/schedule.py +8 -5
  19. pyplumio/helpers/task_manager.py +3 -0
  20. pyplumio/helpers/timeout.py +8 -8
  21. pyplumio/helpers/uid.py +8 -5
  22. pyplumio/{helpers/parameter.py → parameters/__init__.py} +98 -4
  23. pyplumio/parameters/ecomax.py +868 -0
  24. pyplumio/parameters/mixer.py +245 -0
  25. pyplumio/parameters/thermostat.py +197 -0
  26. pyplumio/protocol.py +6 -3
  27. pyplumio/stream.py +3 -0
  28. pyplumio/structures/__init__.py +3 -0
  29. pyplumio/structures/alerts.py +8 -5
  30. pyplumio/structures/boiler_load.py +3 -0
  31. pyplumio/structures/boiler_power.py +3 -0
  32. pyplumio/structures/ecomax_parameters.py +6 -800
  33. pyplumio/structures/fan_power.py +3 -0
  34. pyplumio/structures/frame_versions.py +3 -0
  35. pyplumio/structures/fuel_consumption.py +3 -0
  36. pyplumio/structures/fuel_level.py +3 -0
  37. pyplumio/structures/lambda_sensor.py +8 -0
  38. pyplumio/structures/mixer_parameters.py +8 -230
  39. pyplumio/structures/mixer_sensors.py +9 -0
  40. pyplumio/structures/modules.py +14 -0
  41. pyplumio/structures/network_info.py +11 -0
  42. pyplumio/structures/output_flags.py +9 -0
  43. pyplumio/structures/outputs.py +21 -0
  44. pyplumio/structures/pending_alerts.py +3 -0
  45. pyplumio/structures/product_info.py +5 -2
  46. pyplumio/structures/program_version.py +3 -0
  47. pyplumio/structures/regulator_data.py +4 -1
  48. pyplumio/structures/regulator_data_schema.py +3 -0
  49. pyplumio/structures/schedules.py +18 -1
  50. pyplumio/structures/statuses.py +9 -0
  51. pyplumio/structures/temperatures.py +22 -0
  52. pyplumio/structures/thermostat_parameters.py +13 -177
  53. pyplumio/structures/thermostat_sensors.py +9 -0
  54. pyplumio/utils.py +14 -12
  55. {pyplumio-0.5.42.dist-info → pyplumio-0.5.43.dist-info}/METADATA +30 -17
  56. pyplumio-0.5.43.dist-info/RECORD +63 -0
  57. {pyplumio-0.5.42.dist-info → pyplumio-0.5.43.dist-info}/WHEEL +1 -1
  58. pyplumio-0.5.42.dist-info/RECORD +0 -60
  59. {pyplumio-0.5.42.dist-info → pyplumio-0.5.43.dist-info}/licenses/LICENSE +0 -0
  60. {pyplumio-0.5.42.dist-info → pyplumio-0.5.43.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,868 @@
1
+ """Contains ecoMAX parameter descriptors."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+ from functools import cache, partial
7
+ from typing import TYPE_CHECKING
8
+
9
+ from dataslots import dataslots
10
+
11
+ from pyplumio.const import (
12
+ ATTR_INDEX,
13
+ ATTR_OFFSET,
14
+ ATTR_SIZE,
15
+ ATTR_VALUE,
16
+ PERCENTAGE,
17
+ FrameType,
18
+ ProductModel,
19
+ ProductType,
20
+ UnitOfMeasurement,
21
+ )
22
+ from pyplumio.frames import Request
23
+ from pyplumio.parameters import (
24
+ OffsetNumber,
25
+ OffsetNumberDescription,
26
+ Parameter,
27
+ ParameterDescription,
28
+ ParameterOverride,
29
+ Switch,
30
+ SwitchDescription,
31
+ patch_parameter_types,
32
+ )
33
+ from pyplumio.structures.ecomax_parameters import ATTR_ECOMAX_CONTROL
34
+ from pyplumio.structures.product_info import ProductInfo
35
+ from pyplumio.structures.thermostat_parameters import ATTR_THERMOSTAT_PROFILE
36
+
37
+ if TYPE_CHECKING:
38
+ from pyplumio.devices.ecomax import EcoMAX
39
+
40
+
41
+ @dataclass
42
+ class EcomaxParameterDescription(ParameterDescription):
43
+ """Represents an ecoMAX parameter description."""
44
+
45
+ __slots__ = ()
46
+
47
+
48
+ class EcomaxParameter(Parameter):
49
+ """Represents an ecoMAX parameter."""
50
+
51
+ __slots__ = ()
52
+
53
+ device: EcoMAX
54
+ description: EcomaxParameterDescription
55
+
56
+ async def create_request(self) -> Request:
57
+ """Create a request to change the parameter."""
58
+ handler = partial(Request.create, recipient=self.device.address)
59
+ if self.description.name == ATTR_ECOMAX_CONTROL:
60
+ return await handler(
61
+ frame_type=FrameType.REQUEST_ECOMAX_CONTROL,
62
+ data={ATTR_VALUE: self.values.value},
63
+ )
64
+
65
+ if self.description.name == ATTR_THERMOSTAT_PROFILE:
66
+ return await handler(
67
+ frame_type=FrameType.REQUEST_SET_THERMOSTAT_PARAMETER,
68
+ data={
69
+ ATTR_INDEX: self._index,
70
+ ATTR_VALUE: self.values.value,
71
+ ATTR_OFFSET: 0,
72
+ ATTR_SIZE: 1,
73
+ },
74
+ )
75
+
76
+ return await handler(
77
+ frame_type=FrameType.REQUEST_SET_ECOMAX_PARAMETER,
78
+ data={ATTR_INDEX: self._index, ATTR_VALUE: self.values.value},
79
+ )
80
+
81
+
82
+ @dataclass
83
+ class EcomaxNumberDescription(EcomaxParameterDescription, OffsetNumberDescription):
84
+ """Represents an ecoMAX number description."""
85
+
86
+ __slots__ = ()
87
+
88
+
89
+ class EcomaxNumber(EcomaxParameter, OffsetNumber):
90
+ """Represents a ecoMAX number."""
91
+
92
+ __slots__ = ()
93
+
94
+ description: EcomaxNumberDescription
95
+
96
+
97
+ @dataslots
98
+ @dataclass
99
+ class EcomaxSwitchDescription(EcomaxParameterDescription, SwitchDescription):
100
+ """Represents an ecoMAX switch description."""
101
+
102
+
103
+ class EcomaxSwitch(EcomaxParameter, Switch):
104
+ """Represents an ecoMAX switch."""
105
+
106
+ __slots__ = ()
107
+
108
+ description: EcomaxSwitchDescription
109
+
110
+
111
+ PARAMETER_TYPES: dict[ProductType, list[EcomaxParameterDescription]] = {
112
+ ProductType.ECOMAX_P: [
113
+ EcomaxNumberDescription(
114
+ name="airflow_power_100",
115
+ unit_of_measurement=PERCENTAGE,
116
+ ),
117
+ EcomaxNumberDescription(
118
+ name="airflow_power_50",
119
+ unit_of_measurement=PERCENTAGE,
120
+ ),
121
+ EcomaxNumberDescription(
122
+ name="airflow_power_30",
123
+ unit_of_measurement=PERCENTAGE,
124
+ ),
125
+ EcomaxNumberDescription(
126
+ name="boiler_power_100",
127
+ unit_of_measurement=UnitOfMeasurement.KILO_WATT,
128
+ ),
129
+ EcomaxNumberDescription(
130
+ name="boiler_power_50",
131
+ unit_of_measurement=UnitOfMeasurement.KILO_WATT,
132
+ ),
133
+ EcomaxNumberDescription(
134
+ name="boiler_power_30",
135
+ unit_of_measurement=UnitOfMeasurement.KILO_WATT,
136
+ ),
137
+ EcomaxNumberDescription(
138
+ name="max_fan_boiler_power",
139
+ unit_of_measurement=PERCENTAGE,
140
+ ),
141
+ EcomaxNumberDescription(
142
+ name="min_fan_boiler_power",
143
+ unit_of_measurement=PERCENTAGE,
144
+ ),
145
+ EcomaxNumberDescription(
146
+ name="fuel_feeding_work_100",
147
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
148
+ ),
149
+ EcomaxNumberDescription(
150
+ name="fuel_feeding_work_50",
151
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
152
+ ),
153
+ EcomaxNumberDescription(
154
+ name="fuel_feeding_work_30",
155
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
156
+ ),
157
+ EcomaxNumberDescription(
158
+ name="fuel_feeding_pause_100",
159
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
160
+ ),
161
+ EcomaxNumberDescription(
162
+ name="fuel_feeding_pause_50",
163
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
164
+ ),
165
+ EcomaxNumberDescription(
166
+ name="fuel_feeding_pause_30",
167
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
168
+ ),
169
+ EcomaxNumberDescription(
170
+ name="cycle_duration",
171
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
172
+ ),
173
+ EcomaxNumberDescription(
174
+ name="h2_hysteresis",
175
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
176
+ ),
177
+ EcomaxNumberDescription(
178
+ name="h1_hysteresis",
179
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
180
+ ),
181
+ EcomaxNumberDescription(
182
+ name="heating_hysteresis",
183
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
184
+ ),
185
+ EcomaxSwitchDescription(
186
+ name="fuzzy_logic",
187
+ ),
188
+ EcomaxNumberDescription(
189
+ name="min_fuzzy_logic_power",
190
+ unit_of_measurement=PERCENTAGE,
191
+ ),
192
+ EcomaxNumberDescription(
193
+ name="max_fuzzy_logic_power",
194
+ unit_of_measurement=PERCENTAGE,
195
+ ),
196
+ EcomaxNumberDescription(
197
+ name="min_boiler_power",
198
+ unit_of_measurement=UnitOfMeasurement.KILO_WATT,
199
+ ),
200
+ EcomaxNumberDescription(
201
+ name="max_boiler_power",
202
+ unit_of_measurement=UnitOfMeasurement.KILO_WATT,
203
+ ),
204
+ EcomaxNumberDescription(
205
+ name="min_fan_power",
206
+ unit_of_measurement=PERCENTAGE,
207
+ ),
208
+ EcomaxNumberDescription(
209
+ name="max_fan_power",
210
+ unit_of_measurement=PERCENTAGE,
211
+ ),
212
+ EcomaxNumberDescription(
213
+ name="reduction_airflow_temp",
214
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
215
+ ),
216
+ EcomaxNumberDescription(
217
+ name="fan_power_gain",
218
+ unit_of_measurement=PERCENTAGE,
219
+ ),
220
+ EcomaxNumberDescription(
221
+ name="fuzzy_logic_fuel_flow_correction",
222
+ unit_of_measurement=PERCENTAGE,
223
+ ),
224
+ EcomaxNumberDescription(
225
+ name="fuel_flow_correction",
226
+ unit_of_measurement=PERCENTAGE,
227
+ ),
228
+ EcomaxNumberDescription(
229
+ name="airflow_correction_100",
230
+ unit_of_measurement=PERCENTAGE,
231
+ ),
232
+ EcomaxNumberDescription(
233
+ name="feeder_correction_100",
234
+ unit_of_measurement=PERCENTAGE,
235
+ ),
236
+ EcomaxNumberDescription(
237
+ name="airflow_correction_50",
238
+ unit_of_measurement=PERCENTAGE,
239
+ ),
240
+ EcomaxNumberDescription(
241
+ name="feeder_correction_50",
242
+ unit_of_measurement=PERCENTAGE,
243
+ ),
244
+ EcomaxNumberDescription(
245
+ name="airflow_correction_30",
246
+ unit_of_measurement=PERCENTAGE,
247
+ ),
248
+ EcomaxNumberDescription(
249
+ name="feeder_correction_30",
250
+ unit_of_measurement=PERCENTAGE,
251
+ ),
252
+ EcomaxNumberDescription(
253
+ name="grate_airflow_power",
254
+ unit_of_measurement=PERCENTAGE,
255
+ ),
256
+ EcomaxNumberDescription(
257
+ name="grate_heating_hysteresis",
258
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
259
+ ),
260
+ EcomaxNumberDescription(
261
+ name="grate_fan_work",
262
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
263
+ ),
264
+ EcomaxNumberDescription(
265
+ name="grate_fan_pause",
266
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
267
+ ),
268
+ EcomaxNumberDescription(
269
+ name="grate_heating_temp",
270
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
271
+ ),
272
+ EcomaxNumberDescription(
273
+ name="grate_fuel_detection_time",
274
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
275
+ ),
276
+ EcomaxNumberDescription(
277
+ name="kindling_airflow_power",
278
+ unit_of_measurement=PERCENTAGE,
279
+ ),
280
+ EcomaxNumberDescription(
281
+ name="kindling_low_airflow_power",
282
+ unit_of_measurement=PERCENTAGE,
283
+ ),
284
+ EcomaxNumberDescription(
285
+ name="kindling_airflow_delay",
286
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
287
+ ),
288
+ EcomaxNumberDescription(
289
+ name="kindling_test_time",
290
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
291
+ ),
292
+ EcomaxNumberDescription(
293
+ name="kindling_feeder_work",
294
+ ),
295
+ EcomaxNumberDescription(
296
+ name="kindling_feeder_dose",
297
+ unit_of_measurement=UnitOfMeasurement.GRAMS,
298
+ ),
299
+ EcomaxNumberDescription(
300
+ name="kindling_time",
301
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
302
+ ),
303
+ EcomaxNumberDescription(
304
+ name="warming_up_time",
305
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
306
+ ),
307
+ EcomaxNumberDescription(
308
+ name="kindling_finish_exhaust_temp",
309
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
310
+ ),
311
+ EcomaxNumberDescription(
312
+ name="kindling_finish_threshold_temp",
313
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
314
+ ),
315
+ EcomaxNumberDescription(
316
+ name="kindling_fumes_delta_temp",
317
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
318
+ ),
319
+ EcomaxNumberDescription(
320
+ name="kindling_delta_temp",
321
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
322
+ ),
323
+ EcomaxNumberDescription(
324
+ name="kindling_min_power_time",
325
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
326
+ ),
327
+ EcomaxNumberDescription(
328
+ name="stabilization_time",
329
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
330
+ ),
331
+ EcomaxNumberDescription(
332
+ name="stabilization_airflow_power",
333
+ unit_of_measurement=PERCENTAGE,
334
+ ),
335
+ EcomaxNumberDescription(
336
+ name="supervision_time",
337
+ ),
338
+ EcomaxNumberDescription(
339
+ name="supervision_feeder_work",
340
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
341
+ ),
342
+ EcomaxNumberDescription(
343
+ name="supervision_feeder_dose",
344
+ unit_of_measurement=UnitOfMeasurement.GRAMS,
345
+ ),
346
+ EcomaxNumberDescription(
347
+ name="supervision_feeder_pause",
348
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
349
+ ),
350
+ EcomaxNumberDescription(
351
+ name="supervision_cycle_duration",
352
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
353
+ ),
354
+ EcomaxNumberDescription(
355
+ name="supervision_airflow_power",
356
+ unit_of_measurement=PERCENTAGE,
357
+ ),
358
+ EcomaxNumberDescription(
359
+ name="supervision_fan_pause",
360
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
361
+ ),
362
+ EcomaxNumberDescription(
363
+ name="supervision_fan_work",
364
+ unit_of_measurement=UnitOfMeasurement.SECONDS,
365
+ ),
366
+ EcomaxNumberDescription(
367
+ name="increase_fan_support_mode",
368
+ ),
369
+ EcomaxNumberDescription(
370
+ name="burning_off_max_time",
371
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
372
+ ),
373
+ EcomaxNumberDescription(
374
+ name="burning_off_min_time",
375
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
376
+ ),
377
+ EcomaxNumberDescription(
378
+ name="burning_off_time",
379
+ ),
380
+ EcomaxNumberDescription(
381
+ name="burning_off_airflow_power",
382
+ unit_of_measurement=PERCENTAGE,
383
+ ),
384
+ EcomaxNumberDescription(
385
+ name="burning_off_fan_work",
386
+ ),
387
+ EcomaxNumberDescription(
388
+ name="burning_off_fan_pause",
389
+ ),
390
+ EcomaxNumberDescription(
391
+ name="start_burning_off",
392
+ unit_of_measurement=PERCENTAGE,
393
+ ),
394
+ EcomaxNumberDescription(
395
+ name="stop_burning_off",
396
+ unit_of_measurement=PERCENTAGE,
397
+ ),
398
+ EcomaxNumberDescription(
399
+ name="cleaning_begin_time",
400
+ ),
401
+ EcomaxNumberDescription(
402
+ name="burning_off_cleaning_time",
403
+ ),
404
+ EcomaxNumberDescription(
405
+ name="cleaning_airflow_power",
406
+ unit_of_measurement=PERCENTAGE,
407
+ ),
408
+ EcomaxNumberDescription(
409
+ name="warming_up_pause_time",
410
+ ),
411
+ EcomaxNumberDescription(
412
+ name="warming_up_cycle_time",
413
+ ),
414
+ EcomaxNumberDescription(
415
+ name="remind_time",
416
+ ),
417
+ EcomaxSwitchDescription(
418
+ name="lambda_control",
419
+ ),
420
+ EcomaxNumberDescription(
421
+ name="lambda_correction_range",
422
+ ),
423
+ EcomaxNumberDescription(
424
+ name="oxygen_100",
425
+ ),
426
+ EcomaxNumberDescription(
427
+ name="oxygen_50",
428
+ ),
429
+ EcomaxNumberDescription(
430
+ name="oxygen_30",
431
+ ),
432
+ EcomaxNumberDescription(
433
+ name="fuzzy_logic_oxygen_correction",
434
+ ),
435
+ EcomaxNumberDescription(
436
+ name="max_fuel_flow",
437
+ step=0.2,
438
+ unit_of_measurement=UnitOfMeasurement.KILOGRAMS_PER_HOUR,
439
+ ),
440
+ EcomaxNumberDescription(
441
+ name="feeder_calibration",
442
+ ),
443
+ EcomaxNumberDescription(
444
+ name="fuel_factor",
445
+ ),
446
+ EcomaxNumberDescription(
447
+ name="fuel_calorific_value",
448
+ step=0.1,
449
+ unit_of_measurement=UnitOfMeasurement.KILO_WATT_HOUR_PER_KILOGRAM,
450
+ ),
451
+ EcomaxNumberDescription(
452
+ name="fuel_detection_time",
453
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
454
+ ),
455
+ EcomaxNumberDescription(
456
+ name="fuel_detection_exhaust_temp",
457
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
458
+ ),
459
+ EcomaxSwitchDescription(
460
+ name="schedule_feeder_2",
461
+ ),
462
+ EcomaxNumberDescription(
463
+ name="feed2_h1",
464
+ ),
465
+ EcomaxNumberDescription(
466
+ name="feed2_h2",
467
+ ),
468
+ EcomaxNumberDescription(
469
+ name="feed2_h3",
470
+ ),
471
+ EcomaxNumberDescription(
472
+ name="feed2_h4",
473
+ ),
474
+ EcomaxNumberDescription(
475
+ name="feed2_work",
476
+ ),
477
+ EcomaxNumberDescription(
478
+ name="feed2_pause",
479
+ ),
480
+ EcomaxNumberDescription(
481
+ name="heating_target_temp",
482
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
483
+ ),
484
+ EcomaxNumberDescription(
485
+ name="min_heating_target_temp",
486
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
487
+ ),
488
+ EcomaxNumberDescription(
489
+ name="max_heating_target_temp",
490
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
491
+ ),
492
+ EcomaxNumberDescription(
493
+ name="heating_pump_enable_temp",
494
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
495
+ ),
496
+ EcomaxNumberDescription(
497
+ name="pause_heating_for_water_heater",
498
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
499
+ ),
500
+ EcomaxNumberDescription(
501
+ name="thermostat_pause",
502
+ ),
503
+ EcomaxNumberDescription(
504
+ name="thermostat_work",
505
+ ),
506
+ EcomaxNumberDescription(
507
+ name="increase_heating_temp_for_water_heater",
508
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
509
+ ),
510
+ EcomaxSwitchDescription(
511
+ name="weather_control",
512
+ ),
513
+ EcomaxNumberDescription(
514
+ name="heating_curve",
515
+ step=0.1,
516
+ ),
517
+ EcomaxNumberDescription(
518
+ name="heating_curve_shift",
519
+ offset=20,
520
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
521
+ ),
522
+ EcomaxNumberDescription(
523
+ name="weather_factor",
524
+ ),
525
+ EcomaxNumberDescription(
526
+ name="thermostat_operation",
527
+ ),
528
+ EcomaxSwitchDescription(
529
+ name="thermostat_mode",
530
+ ),
531
+ EcomaxNumberDescription(
532
+ name="thermostat_decrease_target_temp",
533
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
534
+ ),
535
+ EcomaxSwitchDescription(
536
+ name="disable_pump_on_thermostat",
537
+ ),
538
+ EcomaxNumberDescription(
539
+ name="boiler_alert_temp",
540
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
541
+ ),
542
+ EcomaxNumberDescription(
543
+ name="max_feeder_temp",
544
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
545
+ ),
546
+ EcomaxNumberDescription(
547
+ name="external_boiler_temp",
548
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
549
+ ),
550
+ EcomaxNumberDescription(
551
+ name="alert_notify",
552
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
553
+ ),
554
+ EcomaxNumberDescription(
555
+ name="pump_hysteresis",
556
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
557
+ ),
558
+ EcomaxNumberDescription(
559
+ name="water_heater_target_temp",
560
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
561
+ ),
562
+ EcomaxNumberDescription(
563
+ name="min_water_heater_target_temp",
564
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
565
+ ),
566
+ EcomaxNumberDescription(
567
+ name="max_water_heater_target_temp",
568
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
569
+ ),
570
+ EcomaxNumberDescription(
571
+ name="water_heater_work_mode",
572
+ ),
573
+ EcomaxNumberDescription(
574
+ name="water_heater_hysteresis",
575
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
576
+ ),
577
+ EcomaxSwitchDescription(
578
+ name="water_heater_disinfection",
579
+ ),
580
+ EcomaxNumberDescription(
581
+ name="summer_mode",
582
+ ),
583
+ EcomaxNumberDescription(
584
+ name="summer_mode_enable_temp",
585
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
586
+ ),
587
+ EcomaxNumberDescription(
588
+ name="summer_mode_disable_temp",
589
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
590
+ ),
591
+ EcomaxNumberDescription(
592
+ name="water_heater_work_extension",
593
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
594
+ ),
595
+ EcomaxSwitchDescription(
596
+ name="circulation_control",
597
+ ),
598
+ EcomaxNumberDescription(
599
+ name="circulation_pause",
600
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
601
+ ),
602
+ EcomaxNumberDescription(
603
+ name="circulation_work",
604
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
605
+ ),
606
+ EcomaxNumberDescription(
607
+ name="circulation_start_temp",
608
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
609
+ ),
610
+ EcomaxSwitchDescription(
611
+ name="buffer_control",
612
+ ),
613
+ EcomaxNumberDescription(
614
+ name="max_buffer_temp",
615
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
616
+ ),
617
+ EcomaxNumberDescription(
618
+ name="min_buffer_temp",
619
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
620
+ ),
621
+ EcomaxNumberDescription(
622
+ name="buffer_hysteresis",
623
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
624
+ ),
625
+ EcomaxNumberDescription(
626
+ name="buffer_load_start",
627
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
628
+ ),
629
+ EcomaxNumberDescription(
630
+ name="buffer_load_stop",
631
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
632
+ ),
633
+ ],
634
+ ProductType.ECOMAX_I: [
635
+ EcomaxNumberDescription(
636
+ name="water_heater_target_temp",
637
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
638
+ ),
639
+ EcomaxSwitchDescription(
640
+ name="water_heater_priority",
641
+ ),
642
+ EcomaxNumberDescription(
643
+ name="water_heater_support",
644
+ ),
645
+ EcomaxNumberDescription(
646
+ name="min_water_heater_target_temp",
647
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
648
+ ),
649
+ EcomaxNumberDescription(
650
+ name="max_water_heater_target_temp",
651
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
652
+ ),
653
+ EcomaxNumberDescription(
654
+ name="water_heater_work_extension",
655
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
656
+ ),
657
+ EcomaxNumberDescription(
658
+ name="water_heater_hysteresis",
659
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
660
+ ),
661
+ EcomaxSwitchDescription(
662
+ name="water_heater_disinfection",
663
+ ),
664
+ EcomaxNumberDescription(
665
+ name="water_heater_work_mode",
666
+ ),
667
+ EcomaxSwitchDescription(
668
+ name="solar_support",
669
+ ),
670
+ EcomaxNumberDescription(
671
+ name="solar_pump_on_delta_temp",
672
+ step=0.1,
673
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
674
+ ),
675
+ EcomaxNumberDescription(
676
+ name="solar_pump_off_delta_temp",
677
+ step=0.1,
678
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
679
+ ),
680
+ EcomaxNumberDescription(
681
+ name="min_collector_temp",
682
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
683
+ ),
684
+ EcomaxNumberDescription(
685
+ name="max_collector_temp",
686
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
687
+ ),
688
+ EcomaxNumberDescription(
689
+ name="collector_off_temp",
690
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
691
+ ),
692
+ EcomaxNumberDescription(
693
+ name="min_pump_revolutions",
694
+ ),
695
+ EcomaxNumberDescription(
696
+ name="solar_antifreeze",
697
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
698
+ ),
699
+ EcomaxSwitchDescription(
700
+ name="circulation_control",
701
+ ),
702
+ EcomaxNumberDescription(
703
+ name="circulation_pause",
704
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
705
+ ),
706
+ EcomaxNumberDescription(
707
+ name="circulation_work",
708
+ unit_of_measurement=UnitOfMeasurement.MINUTES,
709
+ ),
710
+ EcomaxNumberDescription(
711
+ name="circulation_start_temp",
712
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
713
+ ),
714
+ EcomaxNumberDescription(
715
+ name="main_heat_source",
716
+ ),
717
+ EcomaxNumberDescription(
718
+ name="min_main_heat_source_temp",
719
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
720
+ ),
721
+ EcomaxNumberDescription(
722
+ name="max_main_heat_source_temp",
723
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
724
+ ),
725
+ EcomaxNumberDescription(
726
+ name="main_heat_source_hysteresis",
727
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
728
+ ),
729
+ EcomaxNumberDescription(
730
+ name="critical_main_heat_source_temp",
731
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
732
+ ),
733
+ EcomaxNumberDescription(
734
+ name="main_heat_source_pump_extension_time",
735
+ ),
736
+ EcomaxNumberDescription(
737
+ name="additional_heat_source",
738
+ ),
739
+ EcomaxNumberDescription(
740
+ name="main_heat_source_off_temp",
741
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
742
+ ),
743
+ EcomaxNumberDescription(
744
+ name="additional_heat_source_pump_startup_temp",
745
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
746
+ ),
747
+ EcomaxNumberDescription(
748
+ name="hydraulic_diagram",
749
+ ),
750
+ EcomaxSwitchDescription(
751
+ name="antifreeze",
752
+ ),
753
+ EcomaxNumberDescription(
754
+ name="antifreeze_delay",
755
+ ),
756
+ EcomaxNumberDescription(
757
+ name="circuit_lock_time",
758
+ ),
759
+ EcomaxNumberDescription(
760
+ name="circuit_work_time",
761
+ ),
762
+ EcomaxNumberDescription(
763
+ name="alert_out_c",
764
+ ),
765
+ EcomaxNumberDescription(
766
+ name="alert_on_out_c",
767
+ ),
768
+ EcomaxNumberDescription(
769
+ name="thermostat_hysteresis",
770
+ step=0.1,
771
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
772
+ ),
773
+ EcomaxNumberDescription(
774
+ name="critial_additional_heat_source_temp",
775
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
776
+ ),
777
+ EcomaxNumberDescription(
778
+ name="automatic_pump_lock_time",
779
+ ),
780
+ EcomaxNumberDescription(
781
+ name="summer_mode",
782
+ ),
783
+ EcomaxNumberDescription(
784
+ name="summer_mode_enable_temp",
785
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
786
+ ),
787
+ EcomaxNumberDescription(
788
+ name="summer_mode_disable_temp",
789
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
790
+ ),
791
+ ],
792
+ }
793
+
794
+
795
+ ECOMAX_CONTROL_PARAMETER = EcomaxSwitchDescription(
796
+ name=ATTR_ECOMAX_CONTROL, optimistic=True
797
+ )
798
+ THERMOSTAT_PROFILE_PARAMETER = EcomaxNumberDescription(name=ATTR_THERMOSTAT_PROFILE)
799
+
800
+
801
+ @dataclass
802
+ class EcomaxParameterOverride(ParameterOverride):
803
+ """Represents an ecoMAX parameter override."""
804
+
805
+ __slots__ = ()
806
+
807
+ replacement: EcomaxParameterDescription
808
+
809
+
810
+ PARAMETER_OVERRIDES: tuple[EcomaxParameterOverride, ...] = (
811
+ EcomaxParameterOverride(
812
+ original="summer_mode_disable_temp",
813
+ replacement=EcomaxNumberDescription(name="__unknown_parameter_1"),
814
+ product_model=ProductModel.ECOMAX_860D3_HB,
815
+ product_id=48,
816
+ ),
817
+ EcomaxParameterOverride(
818
+ original="water_heater_target_temp",
819
+ replacement=EcomaxNumberDescription(name="summer_mode"),
820
+ product_model=ProductModel.ECOMAX_860D3_HB,
821
+ product_id=48,
822
+ ),
823
+ EcomaxParameterOverride(
824
+ original="min_water_heater_target_temp",
825
+ replacement=EcomaxNumberDescription(
826
+ name="summer_mode_enable_temp",
827
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
828
+ ),
829
+ product_model=ProductModel.ECOMAX_860D3_HB,
830
+ product_id=48,
831
+ ),
832
+ EcomaxParameterOverride(
833
+ original="max_water_heater_target_temp",
834
+ replacement=EcomaxNumberDescription(
835
+ name="summer_mode_disable_temp",
836
+ unit_of_measurement=UnitOfMeasurement.CELSIUS,
837
+ ),
838
+ product_model=ProductModel.ECOMAX_860D3_HB,
839
+ product_id=48,
840
+ ),
841
+ )
842
+
843
+
844
+ @cache
845
+ def get_ecomax_parameter_types(
846
+ product_info: ProductInfo,
847
+ ) -> list[EcomaxParameterDescription]:
848
+ """Return ecoMAX parameter types for specific product."""
849
+ return patch_parameter_types(
850
+ product_info,
851
+ parameter_types=PARAMETER_TYPES[product_info.type],
852
+ parameter_overrides=PARAMETER_OVERRIDES,
853
+ )
854
+
855
+
856
+ __all__ = [
857
+ "ATTR_ECOMAX_CONTROL",
858
+ "EcomaxNumber",
859
+ "EcomaxNumberDescription",
860
+ "EcomaxParameter",
861
+ "EcomaxParameterDescription",
862
+ "EcomaxSwitch",
863
+ "EcomaxSwitchDescription",
864
+ "get_ecomax_parameter_types",
865
+ "PARAMETER_OVERRIDES",
866
+ "PARAMETER_TYPES",
867
+ "THERMOSTAT_PROFILE_PARAMETER",
868
+ ]