velbus-aio 2023.10.2__tar.gz → 2023.12.0__tar.gz
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.
Potentially problematic release.
This version of velbus-aio might be problematic. Click here for more details.
- {velbus-aio-2023.10.2/velbus_aio.egg-info → velbus-aio-2023.12.0}/PKG-INFO +2 -1
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/pyproject.toml +3 -2
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0/velbus_aio.egg-info}/PKG-INFO +2 -1
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/channels.py +23 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/command_registry.py +15 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/const.py +2 -2
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/controller.py +0 -1
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/exceptions.py +3 -3
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/__init__.py +1 -1
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/dimmer_status.py +1 -1
- velbus-aio-2023.12.0/velbusaio/messages/module_type.py +185 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/restore_dimmer.py +1 -1
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/set_date.py +4 -4
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/set_daylight_saving.py +4 -4
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/set_dimmer.py +1 -1
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/set_realtime_clock.py +4 -4
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/slider_status.py +1 -1
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/module.py +9 -5
- velbus-aio-2023.10.2/velbusaio/messages/module_type.py +0 -83
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/LICENSE +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/MANIFEST.in +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/README.md +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/requirements.txt +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/setup.cfg +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/setup.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbus_aio.egg-info/SOURCES.txt +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbus_aio.egg-info/dependency_links.txt +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbus_aio.egg-info/not-zip-safe +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbus_aio.egg-info/requires.txt +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbus_aio.egg-info/top_level.txt +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/__init__.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/discovery.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/handler.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/helpers.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/message.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/blind_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/bus_active.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/bus_error_counter_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/bus_error_counter_status_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/bus_off.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/channel_name_part1.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/channel_name_part2.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/channel_name_part3.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/channel_name_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/clear_led.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/counter_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/counter_status_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/cover_down.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/cover_off.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/cover_position.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/cover_up.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/dali_device_settings.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/dali_device_settings_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/dali_dim_value_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/dimmer_channel_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/edge_set_color.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/edge_set_custom_color.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/fast_blinking_led.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/forced_off.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/forced_on.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/interface_status_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/ir_receiver_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/kwh_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/light_value_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/memo_text.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/memory_data.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/memory_data_block.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/memory_dump_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/module_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/module_status_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/module_subtype.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/module_type_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/push_button_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/raw.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/read_data_block_from_memory.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/read_data_from_memory.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/realtime_clock_status_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/receive_buffer_full.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/receive_ready.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/relay_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/select_program.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/sensor_settings_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/sensor_temp_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/sensor_temperature.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/set_led.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/set_temperature.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/slow_blinking_led.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/start_relay_blinking_timer.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/start_relay_timer.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/switch_relay_off.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/switch_relay_on.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/switch_to_comfort.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/switch_to_day.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/switch_to_night.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/switch_to_safe.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part1.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part2.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part3.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part4.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_request.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_set_cooling.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_set_heating.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/update_led_status.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/very_fast_blinking_led.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/write_data_to_memory.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/write_memory_block.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/write_module_address_and_serial_number.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/moduleprotocol/protocol.json +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/protocol.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/py.typed +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/raw_message.py +0 -0
- {velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: velbus-aio
|
|
3
|
-
Version: 2023.
|
|
3
|
+
Version: 2023.12.0
|
|
4
4
|
Summary: Open-source home automation platform running on Python 3.
|
|
5
5
|
Author-email: Maikel Punie <maikel.punie@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.9
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
22
|
Classifier: Topic :: Home Automation
|
|
22
23
|
Classifier: Topic :: Software Development :: Libraries
|
|
23
24
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
@@ -4,7 +4,7 @@ requires = ["setuptools", "wheel"]
|
|
|
4
4
|
[project]
|
|
5
5
|
name = "velbus-aio"
|
|
6
6
|
license = {text = "MIT"}
|
|
7
|
-
version = "2023.
|
|
7
|
+
version = "2023.12.0"
|
|
8
8
|
description = "Open-source home automation platform running on Python 3."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -22,6 +22,7 @@ classifiers = [
|
|
|
22
22
|
"Programming Language :: Python :: 3.9",
|
|
23
23
|
"Programming Language :: Python :: 3.10",
|
|
24
24
|
"Programming Language :: Python :: 3.11",
|
|
25
|
+
"Programming Language :: Python :: 3.12",
|
|
25
26
|
"Topic :: Home Automation",
|
|
26
27
|
"Topic :: Software Development :: Libraries",
|
|
27
28
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
@@ -50,7 +51,7 @@ exclude_dirs = ["tests"]
|
|
|
50
51
|
skips = ["B301", "B403", "B323", "B104", "B110"]
|
|
51
52
|
|
|
52
53
|
[tool.bumpver]
|
|
53
|
-
current_version = "2023.
|
|
54
|
+
current_version = "2023.12.0"
|
|
54
55
|
version_pattern = "YYYY.MM.INC0"
|
|
55
56
|
commit_message = "bump version {old_version} -> {new_version}"
|
|
56
57
|
commit = true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: velbus-aio
|
|
3
|
-
Version: 2023.
|
|
3
|
+
Version: 2023.12.0
|
|
4
4
|
Summary: Open-source home automation platform running on Python 3.
|
|
5
5
|
Author-email: Maikel Punie <maikel.punie@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.9
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
22
|
Classifier: Topic :: Home Automation
|
|
22
23
|
Classifier: Topic :: Software Development :: Libraries
|
|
23
24
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
@@ -135,6 +135,18 @@ class Channel:
|
|
|
135
135
|
if k != "_writer" and k != "_on_status_update" and k != "_name_parts"
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
+
def to_json(self) -> dict:
|
|
139
|
+
d = self.__dict__
|
|
140
|
+
return {
|
|
141
|
+
k: d[k]
|
|
142
|
+
for k in d
|
|
143
|
+
if k != "_writer"
|
|
144
|
+
and k != "_on_status_update"
|
|
145
|
+
and k != "_name_parts"
|
|
146
|
+
and k != "_module"
|
|
147
|
+
and k != "__name__"
|
|
148
|
+
}
|
|
149
|
+
|
|
138
150
|
def __setstate__(self, state):
|
|
139
151
|
self.__dict__.update(state)
|
|
140
152
|
self._on_status_update = []
|
|
@@ -191,6 +203,9 @@ class Channel:
|
|
|
191
203
|
def get_min(self) -> int:
|
|
192
204
|
raise NotImplementedError()
|
|
193
205
|
|
|
206
|
+
def is_water(self) -> bool:
|
|
207
|
+
return False
|
|
208
|
+
|
|
194
209
|
async def press(self) -> None:
|
|
195
210
|
raise NotImplementedError()
|
|
196
211
|
|
|
@@ -395,6 +410,11 @@ class ButtonCounter(Button):
|
|
|
395
410
|
def get_counter_unit(self) -> str:
|
|
396
411
|
return self._Unit
|
|
397
412
|
|
|
413
|
+
def is_water(self) -> bool:
|
|
414
|
+
if self._counter and self._Unit == VOLUME_LITERS_HOUR:
|
|
415
|
+
return True
|
|
416
|
+
return False
|
|
417
|
+
|
|
398
418
|
|
|
399
419
|
class Sensor(Button):
|
|
400
420
|
"""
|
|
@@ -529,6 +549,9 @@ class Temperature(Channel):
|
|
|
529
549
|
def get_climate_mode(self) -> str:
|
|
530
550
|
return self._cstatus
|
|
531
551
|
|
|
552
|
+
def get_cool_mode(self) -> str:
|
|
553
|
+
return self._cool_mode
|
|
554
|
+
|
|
532
555
|
async def set_temp(self, temp: float) -> None:
|
|
533
556
|
cls = commandRegistry.get_command(0xE4, self._module.get_type())
|
|
534
557
|
msg = cls(self._address)
|
|
@@ -65,6 +65,21 @@ MODULE_DIRECTORY = {
|
|
|
65
65
|
0x43: "VMBIN",
|
|
66
66
|
0x44: "VMB4PB",
|
|
67
67
|
0x45: "VMBDALI",
|
|
68
|
+
0x48: "VMB4RYLD-10",
|
|
69
|
+
0x49: "VMB4RYNO-10",
|
|
70
|
+
0x4A: "VMB2BLE-10",
|
|
71
|
+
0x4C: "VMB6PB-20",
|
|
72
|
+
0x4F: "VMBEL1-20",
|
|
73
|
+
0x50: "VMBEL2-20",
|
|
74
|
+
0x51: "VMBEL4-20",
|
|
75
|
+
0x52: "VMBELO-20",
|
|
76
|
+
0x53: "VMBGP1-20",
|
|
77
|
+
0x54: "VMBGP2-20",
|
|
78
|
+
0x55: "VMBGP4-20",
|
|
79
|
+
0x56: "VMBGPO-20",
|
|
80
|
+
0x5A: "VMBDALI-20",
|
|
81
|
+
0x5C: "VMBEL4PIR-20",
|
|
82
|
+
0x5F: "VMBGP4PIR-20",
|
|
68
83
|
}
|
|
69
84
|
|
|
70
85
|
|
|
@@ -43,8 +43,8 @@ DEVICE_CLASS_TEMPERATURE: Final = "temperature"
|
|
|
43
43
|
TEMP_CELSIUS: Final = "°C"
|
|
44
44
|
ENERGY_KILO_WATT_HOUR: Final = "kWh"
|
|
45
45
|
ENERGY_WATT_HOUR: Final = "Wh"
|
|
46
|
-
VOLUME_CUBIC_METER: Final = "
|
|
47
|
-
VOLUME_CUBIC_METER_HOUR: Final = "
|
|
46
|
+
VOLUME_CUBIC_METER: Final = "m³" # Not an official constant at HA yet
|
|
47
|
+
VOLUME_CUBIC_METER_HOUR: Final = "m³/h" # Not an official constant at HA yet
|
|
48
48
|
VOLUME_LITERS: Final = "L"
|
|
49
49
|
VOLUME_LITERS_HOUR: Final = "L/h" # Not an official constant at HA yet
|
|
50
50
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
class VelbusException(Exception):
|
|
5
5
|
"""Velbus Exception."""
|
|
6
6
|
|
|
7
|
-
def __init__(self, value):
|
|
7
|
+
def __init__(self, value: str) -> None:
|
|
8
8
|
Exception.__init__(self)
|
|
9
9
|
self.value = value
|
|
10
10
|
|
|
@@ -13,10 +13,10 @@ class VelbusException(Exception):
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class VelbusConnectionFailed(VelbusException):
|
|
16
|
-
def __init__(self):
|
|
16
|
+
def __init__(self) -> None:
|
|
17
17
|
super().__init__("Connection setup failed")
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class VelbusConnectionTerminated(VelbusException):
|
|
21
|
-
def __init__(self):
|
|
21
|
+
def __init__(self) -> None:
|
|
22
22
|
super().__init__("Connection terminated")
|
|
@@ -54,7 +54,7 @@ from velbusaio.messages.raw import MeteoRawMessage, SensorRawMessage
|
|
|
54
54
|
from velbusaio.messages.module_status import ModuleStatusMessage, ModuleStatusMessage2
|
|
55
55
|
from velbusaio.messages.module_status_request import ModuleStatusRequestMessage
|
|
56
56
|
from velbusaio.messages.module_subtype import ModuleSubTypeMessage
|
|
57
|
-
from velbusaio.messages.module_type import ModuleTypeMessage
|
|
57
|
+
from velbusaio.messages.module_type import ModuleTypeMessage, ModuleType2Message
|
|
58
58
|
from velbusaio.messages.module_type_request import ModuleTypeRequestMessage
|
|
59
59
|
from velbusaio.messages.push_button_status import PushButtonStatusMessage
|
|
60
60
|
from velbusaio.messages.read_data_block_from_memory import (
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"""
|
|
2
|
+
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import struct
|
|
7
|
+
|
|
8
|
+
from velbusaio.command_registry import register
|
|
9
|
+
from velbusaio.message import Message
|
|
10
|
+
|
|
11
|
+
COMMAND_CODE = 0xFF
|
|
12
|
+
MODULES_WITHOUT_SERIAL = {
|
|
13
|
+
0x01: "VMB8PB",
|
|
14
|
+
0x02: "VMB1RY",
|
|
15
|
+
0x03: "VMB1BL",
|
|
16
|
+
0x05: "VMB6IN",
|
|
17
|
+
0x07: "VMB1DM",
|
|
18
|
+
0x08: "VMB4RY",
|
|
19
|
+
0x09: "VMB2BL",
|
|
20
|
+
0x0C: "VMB1TS",
|
|
21
|
+
0x0D: "VMB1TH",
|
|
22
|
+
0x0E: "VMB1TC",
|
|
23
|
+
0x0F: "VMB1LED",
|
|
24
|
+
0x14: "VMBDME",
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@register(
|
|
29
|
+
COMMAND_CODE,
|
|
30
|
+
[
|
|
31
|
+
"VMB1BL",
|
|
32
|
+
"VMB6IN",
|
|
33
|
+
"VMB1DM",
|
|
34
|
+
"VMB4RY",
|
|
35
|
+
"VMB2BL",
|
|
36
|
+
"VMB8IR",
|
|
37
|
+
"VMB4PD",
|
|
38
|
+
"VMB1TS",
|
|
39
|
+
"VMB1TH",
|
|
40
|
+
"VMB1TC",
|
|
41
|
+
"VMB1LED",
|
|
42
|
+
"VMB4RYLD",
|
|
43
|
+
"VMB4RYNO",
|
|
44
|
+
"VMB4DC",
|
|
45
|
+
"VMBLCDWB",
|
|
46
|
+
"VMBDME",
|
|
47
|
+
"VMBDMI",
|
|
48
|
+
"VMB8PBU",
|
|
49
|
+
"VMB6PBN",
|
|
50
|
+
"VMB2PBN",
|
|
51
|
+
"VMB6PBB",
|
|
52
|
+
"VMB4RF",
|
|
53
|
+
"VMB1RYNO",
|
|
54
|
+
"VMB1BLE",
|
|
55
|
+
"VMB2BLE",
|
|
56
|
+
"VMBGP1",
|
|
57
|
+
"VMBGP2",
|
|
58
|
+
"VMBGP4",
|
|
59
|
+
"VMBGPO",
|
|
60
|
+
"VMB7IN",
|
|
61
|
+
"VMBGPOD",
|
|
62
|
+
"VMB1RYNOS",
|
|
63
|
+
"VMBPIRM",
|
|
64
|
+
"VMBPIRC",
|
|
65
|
+
"VMBPIRO",
|
|
66
|
+
"VMBGP4PIR",
|
|
67
|
+
"VMB1BLS",
|
|
68
|
+
"VMBDMI-R",
|
|
69
|
+
"VMBMETEO",
|
|
70
|
+
"VMB4AN",
|
|
71
|
+
"VMBVP01",
|
|
72
|
+
"VMBEL1",
|
|
73
|
+
"VMBEL2",
|
|
74
|
+
"VMBEL4",
|
|
75
|
+
"VMBELO",
|
|
76
|
+
"VMBELPIR",
|
|
77
|
+
"VMBSIG",
|
|
78
|
+
"VMBGP1-2",
|
|
79
|
+
"VMBGP2-2",
|
|
80
|
+
"VMBGP4-2",
|
|
81
|
+
"VMBGPOD-2",
|
|
82
|
+
"VMBGP4PIR-2",
|
|
83
|
+
"VMCM3",
|
|
84
|
+
"VMBUSBIP",
|
|
85
|
+
"VMB1RYS",
|
|
86
|
+
"VMBKP",
|
|
87
|
+
"VMBIN",
|
|
88
|
+
"VMB4PB",
|
|
89
|
+
"VMBDALI",
|
|
90
|
+
],
|
|
91
|
+
)
|
|
92
|
+
class ModuleTypeMessage(Message):
|
|
93
|
+
"""
|
|
94
|
+
send by: VMB6IN, VMB4RYLD
|
|
95
|
+
received by:
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
# pylint: disable-msg=R0902
|
|
99
|
+
|
|
100
|
+
def __init__(self, address=None):
|
|
101
|
+
Message.__init__(self)
|
|
102
|
+
self.module_type = 0x00
|
|
103
|
+
self.led_on = []
|
|
104
|
+
self.led_slow_blinking = []
|
|
105
|
+
self.led_fast_blinking = []
|
|
106
|
+
self.serial = 0
|
|
107
|
+
self.memory_map_version = 0
|
|
108
|
+
self.build_year = 0
|
|
109
|
+
self.build_week = 0
|
|
110
|
+
self.set_defaults(address)
|
|
111
|
+
|
|
112
|
+
def module_name(self):
|
|
113
|
+
"""
|
|
114
|
+
:return: str
|
|
115
|
+
"""
|
|
116
|
+
return "Unknown"
|
|
117
|
+
|
|
118
|
+
def populate(self, priority, address, rtr, data):
|
|
119
|
+
"""
|
|
120
|
+
:return: None
|
|
121
|
+
"""
|
|
122
|
+
self.needs_low_priority(priority)
|
|
123
|
+
self.needs_no_rtr(rtr)
|
|
124
|
+
self.set_attributes(priority, address, rtr)
|
|
125
|
+
self.module_type = data[0]
|
|
126
|
+
if data[0] not in MODULES_WITHOUT_SERIAL:
|
|
127
|
+
(self.serial,) = struct.unpack(">L", bytes([0, 0, data[1], data[2]]))
|
|
128
|
+
self.memory_map_version = data[3]
|
|
129
|
+
self.build_year = data[-2]
|
|
130
|
+
self.build_week = data[-1]
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
@register(
|
|
134
|
+
COMMAND_CODE,
|
|
135
|
+
[
|
|
136
|
+
"VMB4RYLD-10",
|
|
137
|
+
"VMB4RYNO-10",
|
|
138
|
+
"VMB2BLE-10",
|
|
139
|
+
"VMB6PB-20",
|
|
140
|
+
"VMBEL1-20",
|
|
141
|
+
"VMBEL2-20",
|
|
142
|
+
"VMBEL4-20",
|
|
143
|
+
"VMBELO-20",
|
|
144
|
+
"VMBGP1-20",
|
|
145
|
+
"VMBGP2-20",
|
|
146
|
+
"VMBGP4-20",
|
|
147
|
+
"VMBGPO-20",
|
|
148
|
+
"VMBEL4PIR-20",
|
|
149
|
+
"VMBGP4PIR-20",
|
|
150
|
+
],
|
|
151
|
+
)
|
|
152
|
+
class ModuleType2Message(Message):
|
|
153
|
+
def __init__(self, address=None):
|
|
154
|
+
Message.__init__(self)
|
|
155
|
+
self.module_type = 0x00
|
|
156
|
+
self.led_on = []
|
|
157
|
+
self.led_slow_blinking = []
|
|
158
|
+
self.led_fast_blinking = []
|
|
159
|
+
self.serial = 0
|
|
160
|
+
self.memory_map_version = 0
|
|
161
|
+
self.build_year = 0
|
|
162
|
+
self.build_week = 0
|
|
163
|
+
self.term = 0
|
|
164
|
+
self.set_defaults(address)
|
|
165
|
+
|
|
166
|
+
def module_name(self):
|
|
167
|
+
"""
|
|
168
|
+
:return: str
|
|
169
|
+
"""
|
|
170
|
+
return "Unknown"
|
|
171
|
+
|
|
172
|
+
def populate(self, priority, address, rtr, data):
|
|
173
|
+
"""
|
|
174
|
+
:return: None
|
|
175
|
+
"""
|
|
176
|
+
self.needs_low_priority(priority)
|
|
177
|
+
self.needs_no_rtr(rtr)
|
|
178
|
+
self.set_attributes(priority, address, rtr)
|
|
179
|
+
self.module_type = data[0]
|
|
180
|
+
if data[0] not in MODULES_WITHOUT_SERIAL:
|
|
181
|
+
(self.serial,) = struct.unpack(">L", bytes([0, 0, data[1], data[2]]))
|
|
182
|
+
self.memory_map_version = data[3]
|
|
183
|
+
self.build_year = data[-3]
|
|
184
|
+
self.build_week = data[-2]
|
|
185
|
+
self.term = data[-1]
|
|
@@ -17,14 +17,14 @@ class SetDate(Message):
|
|
|
17
17
|
received by all modules
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
def __init__(self, address=0x00):
|
|
20
|
+
def __init__(self, address=0x00) -> None:
|
|
21
21
|
Message.__init__(self)
|
|
22
22
|
self._day = None
|
|
23
23
|
self._mon = None
|
|
24
24
|
self._year = None
|
|
25
25
|
self.set_defaults(address)
|
|
26
26
|
|
|
27
|
-
def set_defaults(self, address):
|
|
27
|
+
def set_defaults(self, address) -> None:
|
|
28
28
|
if address is not None:
|
|
29
29
|
self.set_address(address)
|
|
30
30
|
self.set_low_priority()
|
|
@@ -34,7 +34,7 @@ class SetDate(Message):
|
|
|
34
34
|
self._mon = lclt[1]
|
|
35
35
|
self._year = lclt[0]
|
|
36
36
|
|
|
37
|
-
def populate(self, priority, address, rtr, data):
|
|
37
|
+
def populate(self, priority, address, rtr, data) -> None:
|
|
38
38
|
"""
|
|
39
39
|
:return: None
|
|
40
40
|
"""
|
|
@@ -46,7 +46,7 @@ class SetDate(Message):
|
|
|
46
46
|
self._mon = data[1]
|
|
47
47
|
self._year = (data[2] << 8) + data[3]
|
|
48
48
|
|
|
49
|
-
def data_to_binary(self):
|
|
49
|
+
def data_to_binary(self) -> bytes:
|
|
50
50
|
"""
|
|
51
51
|
:return: bytes
|
|
52
52
|
"""
|
|
@@ -17,12 +17,12 @@ class SetDaylightSaving(Message):
|
|
|
17
17
|
received by all modules
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
def __init__(self, address=0x00):
|
|
20
|
+
def __init__(self, address=0x00) -> None:
|
|
21
21
|
Message.__init__(self)
|
|
22
22
|
self._ds = None
|
|
23
23
|
self.set_defaults(address)
|
|
24
24
|
|
|
25
|
-
def set_defaults(self, address):
|
|
25
|
+
def set_defaults(self, address) -> None:
|
|
26
26
|
if address is not None:
|
|
27
27
|
self.set_address(address)
|
|
28
28
|
self.set_low_priority()
|
|
@@ -30,7 +30,7 @@ class SetDaylightSaving(Message):
|
|
|
30
30
|
lclt = time.localtime()
|
|
31
31
|
self._ds = not lclt[8]
|
|
32
32
|
|
|
33
|
-
def populate(self, priority, address, rtr, data):
|
|
33
|
+
def populate(self, priority, address, rtr, data) -> None:
|
|
34
34
|
"""
|
|
35
35
|
:return: None
|
|
36
36
|
"""
|
|
@@ -40,7 +40,7 @@ class SetDaylightSaving(Message):
|
|
|
40
40
|
self.set_attributes(priority, address, rtr)
|
|
41
41
|
self._ds = data[0]
|
|
42
42
|
|
|
43
|
-
def data_to_binary(self):
|
|
43
|
+
def data_to_binary(self) -> bytes:
|
|
44
44
|
"""
|
|
45
45
|
:return: bytes
|
|
46
46
|
"""
|
|
@@ -9,7 +9,7 @@ from velbusaio.message import Message
|
|
|
9
9
|
COMMAND_CODE = 0x07
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
@register(COMMAND_CODE, ["VMBDME", "VMB4DC", "VMBDMI", "VMBDMI-R", "VMB1LED"])
|
|
12
|
+
@register(COMMAND_CODE, ["VMB1DM", "VMBDME", "VMB4DC", "VMBDMI", "VMBDMI-R", "VMB1LED"])
|
|
13
13
|
class SetDimmerMessage(Message):
|
|
14
14
|
"""
|
|
15
15
|
send by:
|
|
@@ -17,14 +17,14 @@ class SetRealtimeClock(Message):
|
|
|
17
17
|
received by all modules
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
def __init__(self, address=0x00):
|
|
20
|
+
def __init__(self, address=0x00) -> None:
|
|
21
21
|
Message.__init__(self)
|
|
22
22
|
self._wday = None
|
|
23
23
|
self._hour = None
|
|
24
24
|
self._min = None
|
|
25
25
|
self.set_defaults(address)
|
|
26
26
|
|
|
27
|
-
def set_defaults(self, address):
|
|
27
|
+
def set_defaults(self, address) -> None:
|
|
28
28
|
if address is not None:
|
|
29
29
|
self.set_address(address)
|
|
30
30
|
self.set_low_priority()
|
|
@@ -34,7 +34,7 @@ class SetRealtimeClock(Message):
|
|
|
34
34
|
self._hour = lclt[3]
|
|
35
35
|
self._min = lclt[4]
|
|
36
36
|
|
|
37
|
-
def populate(self, priority, address, rtr, data):
|
|
37
|
+
def populate(self, priority, address, rtr, data) -> None:
|
|
38
38
|
"""
|
|
39
39
|
:return: None
|
|
40
40
|
"""
|
|
@@ -46,7 +46,7 @@ class SetRealtimeClock(Message):
|
|
|
46
46
|
self._hour = data[1]
|
|
47
47
|
self._min = data[2]
|
|
48
48
|
|
|
49
|
-
def data_to_binary(self):
|
|
49
|
+
def data_to_binary(self) -> bytes:
|
|
50
50
|
"""
|
|
51
51
|
:return: bytes
|
|
52
52
|
"""
|
|
@@ -9,7 +9,7 @@ from velbusaio.message import Message
|
|
|
9
9
|
COMMAND_CODE = 0x0F
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
@register(COMMAND_CODE, ["VMBDME", "VMB4DC", "VMBDMI", "VMBDMI-R", "VMB1LED"])
|
|
12
|
+
@register(COMMAND_CODE, ["VMB1DM", "VMBDME", "VMB4DC", "VMBDMI", "VMBDMI-R", "VMB1LED"])
|
|
13
13
|
class SliderStatusMessage(Message):
|
|
14
14
|
"""
|
|
15
15
|
sent by: VMBDME
|
|
@@ -81,7 +81,7 @@ from velbusaio.messages.module_status import (
|
|
|
81
81
|
)
|
|
82
82
|
from velbusaio.messages.module_status_request import ModuleStatusRequestMessage
|
|
83
83
|
from velbusaio.messages.module_subtype import ModuleSubTypeMessage
|
|
84
|
-
from velbusaio.messages.module_type import ModuleTypeMessage
|
|
84
|
+
from velbusaio.messages.module_type import ModuleTypeMessage, ModuleType2Message
|
|
85
85
|
from velbusaio.messages.push_button_status import PushButtonStatusMessage
|
|
86
86
|
from velbusaio.messages.read_data_from_memory import ReadDataFromMemoryMessage
|
|
87
87
|
from velbusaio.messages.relay_status import RelayStatusMessage, RelayStatusMessage2
|
|
@@ -91,6 +91,7 @@ from velbusaio.messages.slider_status import SliderStatusMessage
|
|
|
91
91
|
from velbusaio.messages.slow_blinking_led import SlowBlinkingLedMessage
|
|
92
92
|
from velbusaio.messages.temp_sensor_status import TempSensorStatusMessage
|
|
93
93
|
from velbusaio.messages.update_led_status import UpdateLedStatusMessage
|
|
94
|
+
from velbusaio.channels import Temperature as TemperatureChannelType
|
|
94
95
|
|
|
95
96
|
|
|
96
97
|
class Module:
|
|
@@ -175,12 +176,14 @@ class Module:
|
|
|
175
176
|
#
|
|
176
177
|
# The solution would be that this functions knows were the temperature channels are located
|
|
177
178
|
# and/or what the max number of subaddresses are for each module.
|
|
178
|
-
if self._sub_address == {} and self.loaded:
|
|
179
|
-
|
|
179
|
+
# if self._sub_address == {} and self.loaded:
|
|
180
|
+
# raise Exception("No subaddresses defined")
|
|
180
181
|
for sub in range(1, 4):
|
|
181
182
|
if sub not in self._sub_address:
|
|
182
183
|
for i in range(((sub * 8) + 1), (((sub + 1) * 8) + 1)):
|
|
183
|
-
if i in self._channels
|
|
184
|
+
if i in self._channels and not isinstance(
|
|
185
|
+
self._channels[i], TemperatureChannelType
|
|
186
|
+
):
|
|
184
187
|
del self._channels[i]
|
|
185
188
|
|
|
186
189
|
def _cache(self) -> None:
|
|
@@ -321,6 +324,7 @@ class Module:
|
|
|
321
324
|
"cmode": message.mode_str,
|
|
322
325
|
"cstatus": message.status_str,
|
|
323
326
|
"sleep_timer": message.sleep_timer,
|
|
327
|
+
"cool_mode": message.cool_mode,
|
|
324
328
|
},
|
|
325
329
|
)
|
|
326
330
|
await self._channels[chan].maybe_update_temperature(
|
|
@@ -445,7 +449,7 @@ class Module:
|
|
|
445
449
|
await self._update_channel(
|
|
446
450
|
channel, {"closed": channel_id in message.closed}
|
|
447
451
|
)
|
|
448
|
-
if type(self._channels[channel])
|
|
452
|
+
if type(self._channels[channel]) is Button:
|
|
449
453
|
# only treat 'enabled' if the channel is a Button
|
|
450
454
|
await self._update_channel(
|
|
451
455
|
channel, {"enabled": channel_id in message.enabled}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
|
-
"""
|
|
4
|
-
from __future__ import annotations
|
|
5
|
-
|
|
6
|
-
import struct
|
|
7
|
-
|
|
8
|
-
from velbusaio.command_registry import register
|
|
9
|
-
from velbusaio.message import Message
|
|
10
|
-
|
|
11
|
-
COMMAND_CODE = 0xFF
|
|
12
|
-
MODULES_WITHOUT_SERIAL = {
|
|
13
|
-
0x01: "VMB8PB",
|
|
14
|
-
0x02: "VMB1RY",
|
|
15
|
-
0x03: "VMB1BL",
|
|
16
|
-
0x05: "VMB6IN",
|
|
17
|
-
0x07: "VMB1DM",
|
|
18
|
-
0x08: "VMB4RY",
|
|
19
|
-
0x09: "VMB2BL",
|
|
20
|
-
0x0C: "VMB1TS",
|
|
21
|
-
0x0D: "VMB1TH",
|
|
22
|
-
0x0E: "VMB1TC",
|
|
23
|
-
0x0F: "VMB1LED",
|
|
24
|
-
0x14: "VMBDME",
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
@register(COMMAND_CODE)
|
|
29
|
-
class ModuleTypeMessage(Message):
|
|
30
|
-
"""
|
|
31
|
-
send by: VMB6IN, VMB4RYLD
|
|
32
|
-
received by:
|
|
33
|
-
"""
|
|
34
|
-
|
|
35
|
-
# pylint: disable-msg=R0902
|
|
36
|
-
|
|
37
|
-
def __init__(self, address=None):
|
|
38
|
-
Message.__init__(self)
|
|
39
|
-
self.module_type = 0x00
|
|
40
|
-
self.led_on = []
|
|
41
|
-
self.led_slow_blinking = []
|
|
42
|
-
self.led_fast_blinking = []
|
|
43
|
-
self.serial = 0
|
|
44
|
-
self.memory_map_version = 0
|
|
45
|
-
self.build_year = 0
|
|
46
|
-
self.build_week = 0
|
|
47
|
-
self.set_defaults(address)
|
|
48
|
-
|
|
49
|
-
def module_name(self):
|
|
50
|
-
"""
|
|
51
|
-
:return: str
|
|
52
|
-
"""
|
|
53
|
-
return "Unknown"
|
|
54
|
-
|
|
55
|
-
def populate(self, priority, address, rtr, data):
|
|
56
|
-
"""
|
|
57
|
-
:return: None
|
|
58
|
-
"""
|
|
59
|
-
self.needs_low_priority(priority)
|
|
60
|
-
self.needs_no_rtr(rtr)
|
|
61
|
-
self.set_attributes(priority, address, rtr)
|
|
62
|
-
self.module_type = data[0]
|
|
63
|
-
if data[0] not in MODULES_WITHOUT_SERIAL:
|
|
64
|
-
(self.serial,) = struct.unpack(">L", bytes([0, 0, data[1], data[2]]))
|
|
65
|
-
self.memory_map_version = data[3]
|
|
66
|
-
self.build_year = data[-2]
|
|
67
|
-
self.build_week = data[-1]
|
|
68
|
-
|
|
69
|
-
def data_to_binary(self):
|
|
70
|
-
"""
|
|
71
|
-
:return: bytes
|
|
72
|
-
"""
|
|
73
|
-
return bytes(
|
|
74
|
-
[
|
|
75
|
-
COMMAND_CODE,
|
|
76
|
-
self.module_type,
|
|
77
|
-
self.channels_to_byte(self.led_on),
|
|
78
|
-
self.channels_to_byte(self.led_slow_blinking),
|
|
79
|
-
self.channels_to_byte(self.led_fast_blinking),
|
|
80
|
-
self.build_year,
|
|
81
|
-
self.build_week,
|
|
82
|
-
]
|
|
83
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/bus_error_counter_status.py
RENAMED
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/bus_error_counter_status_request.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/dali_device_settings_request.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/interface_status_request.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/read_data_block_from_memory.py
RENAMED
|
File without changes
|
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/realtime_clock_status_request.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/start_relay_blinking_timer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part1.py
RENAMED
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part2.py
RENAMED
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part3.py
RENAMED
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part4.py
RENAMED
|
File without changes
|
{velbus-aio-2023.10.2 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_request.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|