velbus-aio 2021.8.7__py3-none-any.whl → 2025.11.0__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.
- scripts/parse_specs.py +156 -0
- velbus_aio-2025.11.0.dist-info/METADATA +71 -0
- velbus_aio-2025.11.0.dist-info/RECORD +194 -0
- {velbus_aio-2021.8.7.dist-info → velbus_aio-2025.11.0.dist-info}/WHEEL +1 -1
- velbus_aio-2025.11.0.dist-info/top_level.txt +3 -0
- velbusaio/channels.py +443 -109
- velbusaio/command_registry.py +126 -13
- velbusaio/const.py +36 -12
- velbusaio/controller.py +252 -177
- velbusaio/discovery.py +2 -2
- velbusaio/exceptions.py +22 -0
- velbusaio/handler.py +311 -145
- velbusaio/helpers.py +6 -18
- velbusaio/message.py +46 -132
- velbusaio/messages/__init__.py +12 -2
- velbusaio/messages/blind_status.py +16 -25
- velbusaio/messages/bus_active.py +3 -9
- velbusaio/messages/bus_error_counter_status.py +3 -4
- velbusaio/messages/bus_error_counter_status_request.py +3 -4
- velbusaio/messages/bus_off.py +3 -4
- velbusaio/messages/channel_name_part1.py +49 -33
- velbusaio/messages/channel_name_part2.py +49 -33
- velbusaio/messages/channel_name_part3.py +49 -33
- velbusaio/messages/channel_name_request.py +26 -12
- velbusaio/messages/clear_led.py +3 -4
- velbusaio/messages/counter_status.py +3 -17
- velbusaio/messages/counter_status_request.py +6 -6
- velbusaio/messages/counter_value.py +44 -0
- velbusaio/messages/cover_down.py +4 -29
- velbusaio/messages/cover_off.py +5 -29
- velbusaio/messages/cover_position.py +4 -19
- velbusaio/messages/cover_up.py +4 -27
- velbusaio/messages/dali_device_settings.py +178 -0
- velbusaio/messages/dali_device_settings_request.py +53 -0
- velbusaio/messages/dali_dim_value_status.py +44 -0
- velbusaio/messages/dimmer_channel_status.py +6 -19
- velbusaio/messages/dimmer_status.py +14 -31
- velbusaio/messages/edge_set_color.py +114 -0
- velbusaio/messages/edge_set_custom_color.py +56 -0
- velbusaio/messages/fast_blinking_led.py +3 -4
- velbusaio/messages/forced_off.py +3 -4
- velbusaio/messages/forced_on.py +3 -4
- velbusaio/messages/interface_status_request.py +3 -4
- velbusaio/messages/ir_receiver_status.py +18 -0
- velbusaio/messages/kwh_status.py +3 -19
- velbusaio/messages/light_value_request.py +3 -4
- velbusaio/messages/memo_text.py +3 -5
- velbusaio/messages/memory_data.py +3 -16
- velbusaio/messages/memory_data_block.py +3 -4
- velbusaio/messages/memory_dump_request.py +3 -4
- velbusaio/messages/module_status.py +107 -55
- velbusaio/messages/module_status_request.py +7 -6
- velbusaio/messages/module_subtype.py +11 -19
- velbusaio/messages/module_type.py +132 -21
- velbusaio/messages/module_type_request.py +1 -0
- velbusaio/messages/psu_load.py +56 -0
- velbusaio/messages/psu_values.py +53 -0
- velbusaio/messages/push_button_status.py +3 -16
- velbusaio/messages/raw.py +74 -0
- velbusaio/messages/read_data_block_from_memory.py +3 -4
- velbusaio/messages/read_data_from_memory.py +3 -4
- velbusaio/messages/realtime_clock_status_request.py +3 -4
- velbusaio/messages/receive_buffer_full.py +3 -4
- velbusaio/messages/receive_ready.py +3 -4
- velbusaio/messages/relay_status.py +13 -42
- velbusaio/messages/restore_dimmer.py +33 -24
- velbusaio/messages/select_program.py +35 -0
- velbusaio/messages/sensor_settings_request.py +3 -4
- velbusaio/messages/sensor_temp_request.py +3 -4
- velbusaio/messages/sensor_temperature.py +15 -19
- velbusaio/messages/set_date.py +10 -30
- velbusaio/messages/set_daylight_saving.py +8 -24
- velbusaio/messages/set_dimmer.py +43 -41
- velbusaio/messages/set_led.py +3 -4
- velbusaio/messages/set_realtime_clock.py +10 -30
- velbusaio/messages/set_temperature.py +3 -4
- velbusaio/messages/slider_status.py +16 -20
- velbusaio/messages/slow_blinking_led.py +3 -4
- velbusaio/messages/start_relay_blinking_timer.py +3 -4
- velbusaio/messages/start_relay_timer.py +3 -4
- velbusaio/messages/switch_relay_off.py +3 -16
- velbusaio/messages/switch_relay_on.py +3 -16
- velbusaio/messages/switch_to_comfort.py +4 -15
- velbusaio/messages/switch_to_day.py +4 -15
- velbusaio/messages/switch_to_night.py +4 -15
- velbusaio/messages/switch_to_safe.py +4 -15
- velbusaio/messages/temp_sensor_settings_part1.py +3 -4
- velbusaio/messages/temp_sensor_settings_part2.py +27 -0
- velbusaio/messages/temp_sensor_settings_part3.py +27 -0
- velbusaio/messages/temp_sensor_settings_part4.py +27 -0
- velbusaio/messages/temp_sensor_settings_request.py +3 -4
- velbusaio/messages/temp_sensor_status.py +34 -35
- velbusaio/messages/temp_set_cooling.py +3 -13
- velbusaio/messages/temp_set_heating.py +3 -13
- velbusaio/messages/update_led_status.py +3 -4
- velbusaio/messages/very_fast_blinking_led.py +3 -4
- velbusaio/messages/write_data_to_memory.py +3 -4
- velbusaio/messages/write_memory_block.py +3 -4
- velbusaio/messages/write_module_address_and_serial_number.py +3 -4
- velbusaio/module.py +680 -158
- velbusaio/module_spec/01.json +62 -0
- velbusaio/module_spec/02.json +16 -0
- velbusaio/module_spec/03.json +23 -0
- velbusaio/module_spec/04.json +283 -0
- velbusaio/module_spec/05.json +54 -0
- velbusaio/module_spec/06.json +110 -0
- velbusaio/module_spec/07.json +16 -0
- velbusaio/module_spec/08.json +38 -0
- velbusaio/module_spec/09.json +30 -0
- velbusaio/module_spec/0A.json +58 -0
- velbusaio/module_spec/0B.json +58 -0
- velbusaio/module_spec/0C.json +18 -0
- velbusaio/module_spec/0E.json +25 -0
- velbusaio/module_spec/0F.json +16 -0
- velbusaio/module_spec/10.json +111 -0
- velbusaio/module_spec/11.json +111 -0
- velbusaio/module_spec/12.json +73 -0
- velbusaio/module_spec/13.json +4 -0
- velbusaio/module_spec/14.json +16 -0
- velbusaio/module_spec/15.json +83 -0
- velbusaio/module_spec/16.json +129 -0
- velbusaio/module_spec/17.json +129 -0
- velbusaio/module_spec/18.json +129 -0
- velbusaio/module_spec/1A.json +79 -0
- velbusaio/module_spec/1B.json +107 -0
- velbusaio/module_spec/1D.json +89 -0
- velbusaio/module_spec/1E.json +306 -0
- velbusaio/module_spec/1F.json +178 -0
- velbusaio/module_spec/20.json +178 -0
- velbusaio/module_spec/21.json +326 -0
- velbusaio/module_spec/22.json +426 -0
- velbusaio/module_spec/23.json +129 -0
- velbusaio/module_spec/24.json +30 -0
- velbusaio/module_spec/25.json +3 -0
- velbusaio/module_spec/28.json +454 -0
- velbusaio/module_spec/29.json +235 -0
- velbusaio/module_spec/2A.json +239 -0
- velbusaio/module_spec/2B.json +239 -0
- velbusaio/module_spec/2C.json +257 -0
- velbusaio/module_spec/2D.json +270 -0
- velbusaio/module_spec/2E.json +215 -0
- velbusaio/module_spec/2F.json +211 -0
- velbusaio/module_spec/30.json +58 -0
- velbusaio/module_spec/31.json +465 -0
- velbusaio/module_spec/32.json +385 -0
- velbusaio/module_spec/33.json +249 -0
- velbusaio/module_spec/34.json +313 -0
- velbusaio/module_spec/35.json +313 -0
- velbusaio/module_spec/36.json +313 -0
- velbusaio/module_spec/37.json +333 -0
- velbusaio/module_spec/38.json +111 -0
- velbusaio/module_spec/39.json +4 -0
- velbusaio/module_spec/3A.json +306 -0
- velbusaio/module_spec/3B.json +306 -0
- velbusaio/module_spec/3C.json +306 -0
- velbusaio/module_spec/3D.json +454 -0
- velbusaio/module_spec/3E.json +302 -0
- velbusaio/module_spec/3F.json +4 -0
- velbusaio/module_spec/40.json +4 -0
- velbusaio/module_spec/41.json +241 -0
- velbusaio/module_spec/42.json +4 -0
- velbusaio/module_spec/43.json +23 -0
- velbusaio/module_spec/44.json +38 -0
- velbusaio/module_spec/45.json +4 -0
- velbusaio/module_spec/48.json +111 -0
- velbusaio/module_spec/49.json +111 -0
- velbusaio/module_spec/4A.json +89 -0
- velbusaio/module_spec/4B.json +138 -0
- velbusaio/module_spec/4C.json +129 -0
- velbusaio/module_spec/4D.json +108 -0
- velbusaio/module_spec/4E.json +787 -0
- velbusaio/module_spec/4F.json +114 -0
- velbusaio/module_spec/50.json +114 -0
- velbusaio/module_spec/51.json +114 -0
- velbusaio/module_spec/52.json +456 -0
- velbusaio/module_spec/54.json +270 -0
- velbusaio/module_spec/55.json +270 -0
- velbusaio/module_spec/56.json +270 -0
- velbusaio/module_spec/57.json +260 -0
- velbusaio/module_spec/5A.json +4 -0
- velbusaio/module_spec/5B.json +4 -0
- velbusaio/module_spec/5C.json +90 -0
- velbusaio/module_spec/5F.json +78 -0
- velbusaio/module_spec/60.json +4 -0
- velbusaio/module_spec/61.json +89 -0
- velbusaio/module_spec/broadcast.json +67 -0
- velbusaio/module_spec/ignore.json +22 -0
- velbusaio/protocol.py +243 -0
- velbusaio/py.typed +0 -0
- velbusaio/raw_message.py +149 -0
- velbusaio/util.py +55 -0
- velbusaio/vlp_reader.py +249 -0
- velbus_aio-2021.8.7.dist-info/METADATA +0 -66
- velbus_aio-2021.8.7.dist-info/RECORD +0 -90
- velbus_aio-2021.8.7.dist-info/top_level.txt +0 -1
- velbusaio/messages/meteo_raw.py +0 -52
- velbusaio/module_registry.py +0 -64
- velbusaio/moduleprotocol/protocol.json +0 -25540
- velbusaio/parser.py +0 -142
- {velbus_aio-2021.8.7.dist-info → velbus_aio-2025.11.0.dist-info/licenses}/LICENSE +0 -0
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
3
|
"""
|
|
4
|
+
|
|
4
5
|
from __future__ import annotations
|
|
5
6
|
|
|
6
|
-
from velbusaio.command_registry import
|
|
7
|
+
from velbusaio.command_registry import register
|
|
7
8
|
from velbusaio.message import Message
|
|
8
9
|
|
|
9
10
|
COMMAND_CODE = 0xF7
|
|
10
11
|
|
|
11
12
|
|
|
13
|
+
@register(COMMAND_CODE)
|
|
12
14
|
class SlowBlinkingLedMessage(Message):
|
|
13
15
|
"""
|
|
14
16
|
send by: VMB4RYLD
|
|
@@ -35,6 +37,3 @@ class SlowBlinkingLedMessage(Message):
|
|
|
35
37
|
:return: bytes
|
|
36
38
|
"""
|
|
37
39
|
return bytes([COMMAND_CODE, self.channels_to_byte(self.leds)])
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
register_command(COMMAND_CODE, SlowBlinkingLedMessage)
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
3
|
"""
|
|
4
|
+
|
|
4
5
|
from __future__ import annotations
|
|
5
6
|
|
|
6
7
|
import struct
|
|
7
8
|
|
|
8
|
-
from velbusaio.command_registry import
|
|
9
|
+
from velbusaio.command_registry import register
|
|
9
10
|
from velbusaio.message import Message
|
|
10
11
|
|
|
11
12
|
COMMAND_CODE = 0x0D
|
|
12
13
|
|
|
13
14
|
|
|
15
|
+
@register(COMMAND_CODE)
|
|
14
16
|
class StartRelayBlinkingTimerMessage(Message):
|
|
15
17
|
"""
|
|
16
18
|
send by:
|
|
@@ -48,6 +50,3 @@ class StartRelayBlinkingTimerMessage(Message):
|
|
|
48
50
|
bytes([COMMAND_CODE, self.channels_to_byte(self.relay_channels)])
|
|
49
51
|
+ struct.pack(">L", self.delay_time)[-3:]
|
|
50
52
|
)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
register_command(COMMAND_CODE, StartRelayBlinkingTimerMessage)
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
3
|
"""
|
|
4
|
+
|
|
4
5
|
from __future__ import annotations
|
|
5
6
|
|
|
6
7
|
import struct
|
|
7
8
|
|
|
8
|
-
from velbusaio.command_registry import
|
|
9
|
+
from velbusaio.command_registry import register
|
|
9
10
|
from velbusaio.message import Message
|
|
10
11
|
|
|
11
12
|
COMMAND_CODE = 0x03
|
|
12
13
|
|
|
13
14
|
|
|
15
|
+
@register(COMMAND_CODE)
|
|
14
16
|
class StartRelayTimerMessage(Message):
|
|
15
17
|
"""
|
|
16
18
|
send by:
|
|
@@ -48,6 +50,3 @@ class StartRelayTimerMessage(Message):
|
|
|
48
50
|
bytes([COMMAND_CODE, self.channels_to_byte(self.relay_channels)])
|
|
49
51
|
+ struct.pack(">L", self.delay_time)[-3:]
|
|
50
52
|
)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
register_command(COMMAND_CODE, StartRelayTimerMessage)
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
3
|
"""
|
|
4
|
-
from __future__ import annotations
|
|
5
4
|
|
|
6
|
-
import
|
|
7
|
-
import logging
|
|
5
|
+
from __future__ import annotations
|
|
8
6
|
|
|
9
|
-
from velbusaio.command_registry import
|
|
7
|
+
from velbusaio.command_registry import register
|
|
10
8
|
from velbusaio.message import Message
|
|
11
9
|
|
|
12
10
|
COMMAND_CODE = 0x01
|
|
13
11
|
|
|
14
12
|
|
|
13
|
+
@register(COMMAND_CODE)
|
|
15
14
|
class SwitchRelayOffMessage(Message):
|
|
16
15
|
"""
|
|
17
16
|
send by:
|
|
@@ -21,7 +20,6 @@ class SwitchRelayOffMessage(Message):
|
|
|
21
20
|
def __init__(self, address=None):
|
|
22
21
|
Message.__init__(self)
|
|
23
22
|
self.relay_channels = []
|
|
24
|
-
self.logger = logging.getLogger("velbus")
|
|
25
23
|
self.set_defaults(address)
|
|
26
24
|
|
|
27
25
|
def populate(self, priority, address, rtr, data):
|
|
@@ -34,14 +32,6 @@ class SwitchRelayOffMessage(Message):
|
|
|
34
32
|
self.set_attributes(priority, address, rtr)
|
|
35
33
|
self.relay_channels = self.byte_to_channels(data[0])
|
|
36
34
|
|
|
37
|
-
def to_json(self):
|
|
38
|
-
"""
|
|
39
|
-
:return: str
|
|
40
|
-
"""
|
|
41
|
-
json_dict = self.to_json_basic()
|
|
42
|
-
json_dict["channels"] = self.relay_channels
|
|
43
|
-
return json.dumps(json_dict)
|
|
44
|
-
|
|
45
35
|
def set_defaults(self, address):
|
|
46
36
|
if address is not None:
|
|
47
37
|
self.set_address(address)
|
|
@@ -53,6 +43,3 @@ class SwitchRelayOffMessage(Message):
|
|
|
53
43
|
:return: bytes
|
|
54
44
|
"""
|
|
55
45
|
return bytes([COMMAND_CODE, self.channels_to_byte(self.relay_channels)])
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
register_command(COMMAND_CODE, SwitchRelayOffMessage)
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
3
|
"""
|
|
4
|
-
from __future__ import annotations
|
|
5
4
|
|
|
6
|
-
import
|
|
7
|
-
import logging
|
|
5
|
+
from __future__ import annotations
|
|
8
6
|
|
|
9
|
-
from velbusaio.command_registry import
|
|
7
|
+
from velbusaio.command_registry import register
|
|
10
8
|
from velbusaio.message import Message
|
|
11
9
|
|
|
12
10
|
COMMAND_CODE = 0x02
|
|
13
11
|
|
|
14
12
|
|
|
13
|
+
@register(COMMAND_CODE)
|
|
15
14
|
class SwitchRelayOnMessage(Message):
|
|
16
15
|
"""
|
|
17
16
|
send by:
|
|
@@ -21,7 +20,6 @@ class SwitchRelayOnMessage(Message):
|
|
|
21
20
|
def __init__(self, address=None):
|
|
22
21
|
Message.__init__(self)
|
|
23
22
|
self.relay_channels = []
|
|
24
|
-
self.logger = logging.getLogger("velbus")
|
|
25
23
|
self.set_defaults(address)
|
|
26
24
|
|
|
27
25
|
def set_defaults(self, address):
|
|
@@ -40,19 +38,8 @@ class SwitchRelayOnMessage(Message):
|
|
|
40
38
|
self.set_attributes(priority, address, rtr)
|
|
41
39
|
self.relay_channels = self.byte_to_channels(data[0])
|
|
42
40
|
|
|
43
|
-
def to_json(self):
|
|
44
|
-
"""
|
|
45
|
-
:return: str
|
|
46
|
-
"""
|
|
47
|
-
json_dict = self.to_json_basic()
|
|
48
|
-
json_dict["channels"] = self.relay_channels
|
|
49
|
-
return json.dumps(json_dict)
|
|
50
|
-
|
|
51
41
|
def data_to_binary(self):
|
|
52
42
|
"""
|
|
53
43
|
:return: bytes
|
|
54
44
|
"""
|
|
55
45
|
return bytes([COMMAND_CODE, self.channels_to_byte(self.relay_channels)])
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
register_command(COMMAND_CODE, SwitchRelayOnMessage)
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
3
|
"""
|
|
4
|
-
from __future__ import annotations
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
from __future__ import annotations
|
|
7
6
|
|
|
8
|
-
from velbusaio.command_registry import
|
|
7
|
+
from velbusaio.command_registry import register
|
|
9
8
|
from velbusaio.message import Message
|
|
10
9
|
|
|
11
10
|
COMMAND_CODE = 0xDB
|
|
12
11
|
|
|
13
12
|
|
|
13
|
+
@register(COMMAND_CODE)
|
|
14
14
|
class SwitchToComfortMessage(Message):
|
|
15
15
|
"""
|
|
16
16
|
send by:
|
|
@@ -29,19 +29,8 @@ class SwitchToComfortMessage(Message):
|
|
|
29
29
|
self.needs_no_rtr(rtr)
|
|
30
30
|
self.set_attributes(priority, address, rtr)
|
|
31
31
|
|
|
32
|
-
def to_json(self):
|
|
33
|
-
"""
|
|
34
|
-
:return: str
|
|
35
|
-
"""
|
|
36
|
-
json_dict = self.to_json_basic()
|
|
37
|
-
json_dict["sleep_time"] = self.sleep
|
|
38
|
-
return json.dumps(json_dict)
|
|
39
|
-
|
|
40
32
|
def data_to_binary(self):
|
|
41
33
|
"""
|
|
42
34
|
:return: bytes
|
|
43
35
|
"""
|
|
44
|
-
return bytes([COMMAND_CODE,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
register_command(COMMAND_CODE, SwitchToComfortMessage)
|
|
36
|
+
return bytes([COMMAND_CODE, self.sleep >> 8, self.sleep & 0xFF])
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
3
|
"""
|
|
4
|
-
from __future__ import annotations
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
from __future__ import annotations
|
|
7
6
|
|
|
8
|
-
from velbusaio.command_registry import
|
|
7
|
+
from velbusaio.command_registry import register
|
|
9
8
|
from velbusaio.message import Message
|
|
10
9
|
|
|
11
10
|
COMMAND_CODE = 0xDC
|
|
12
11
|
|
|
13
12
|
|
|
13
|
+
@register(COMMAND_CODE)
|
|
14
14
|
class SwitchToDayMessage(Message):
|
|
15
15
|
"""
|
|
16
16
|
send by:
|
|
@@ -29,19 +29,8 @@ class SwitchToDayMessage(Message):
|
|
|
29
29
|
self.needs_no_rtr(rtr)
|
|
30
30
|
self.set_attributes(priority, address, rtr)
|
|
31
31
|
|
|
32
|
-
def to_json(self):
|
|
33
|
-
"""
|
|
34
|
-
:return: str
|
|
35
|
-
"""
|
|
36
|
-
json_dict = self.to_json_basic()
|
|
37
|
-
json_dict["sleep_time"] = self.sleep
|
|
38
|
-
return json.dumps(json_dict)
|
|
39
|
-
|
|
40
32
|
def data_to_binary(self):
|
|
41
33
|
"""
|
|
42
34
|
:return: bytes
|
|
43
35
|
"""
|
|
44
|
-
return bytes([COMMAND_CODE,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
register_command(COMMAND_CODE, SwitchToDayMessage)
|
|
36
|
+
return bytes([COMMAND_CODE, self.sleep >> 8, self.sleep & 0xFF])
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
3
|
"""
|
|
4
|
-
from __future__ import annotations
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
from __future__ import annotations
|
|
7
6
|
|
|
8
|
-
from velbusaio.command_registry import
|
|
7
|
+
from velbusaio.command_registry import register
|
|
9
8
|
from velbusaio.message import Message
|
|
10
9
|
|
|
11
10
|
COMMAND_CODE = 0xDD
|
|
12
11
|
|
|
13
12
|
|
|
13
|
+
@register(COMMAND_CODE)
|
|
14
14
|
class SwitchToNightMessage(Message):
|
|
15
15
|
"""
|
|
16
16
|
send by:
|
|
@@ -29,19 +29,8 @@ class SwitchToNightMessage(Message):
|
|
|
29
29
|
self.needs_no_rtr(rtr)
|
|
30
30
|
self.set_attributes(priority, address, rtr)
|
|
31
31
|
|
|
32
|
-
def to_json(self):
|
|
33
|
-
"""
|
|
34
|
-
:return: str
|
|
35
|
-
"""
|
|
36
|
-
json_dict = self.to_json_basic()
|
|
37
|
-
json_dict["sleep_time"] = self.sleep
|
|
38
|
-
return json.dumps(json_dict)
|
|
39
|
-
|
|
40
32
|
def data_to_binary(self):
|
|
41
33
|
"""
|
|
42
34
|
:return: bytes
|
|
43
35
|
"""
|
|
44
|
-
return bytes([COMMAND_CODE,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
register_command(COMMAND_CODE, SwitchToNightMessage)
|
|
36
|
+
return bytes([COMMAND_CODE, self.sleep >> 8, self.sleep & 0xFF])
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
3
|
"""
|
|
4
|
-
from __future__ import annotations
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
from __future__ import annotations
|
|
7
6
|
|
|
8
|
-
from velbusaio.command_registry import
|
|
7
|
+
from velbusaio.command_registry import register
|
|
9
8
|
from velbusaio.message import Message
|
|
10
9
|
|
|
11
10
|
COMMAND_CODE = 0xDE
|
|
12
11
|
|
|
13
12
|
|
|
13
|
+
@register(COMMAND_CODE)
|
|
14
14
|
class SwitchToSafeMessage(Message):
|
|
15
15
|
"""
|
|
16
16
|
send by:
|
|
@@ -29,19 +29,8 @@ class SwitchToSafeMessage(Message):
|
|
|
29
29
|
self.needs_no_rtr(rtr)
|
|
30
30
|
self.set_attributes(priority, address, rtr)
|
|
31
31
|
|
|
32
|
-
def to_json(self):
|
|
33
|
-
"""
|
|
34
|
-
:return: str
|
|
35
|
-
"""
|
|
36
|
-
json_dict = self.to_json_basic()
|
|
37
|
-
json_dict["sleep_time"] = self.sleep
|
|
38
|
-
return json.dumps(json_dict)
|
|
39
|
-
|
|
40
32
|
def data_to_binary(self):
|
|
41
33
|
"""
|
|
42
34
|
:return: bytes
|
|
43
35
|
"""
|
|
44
|
-
return bytes([COMMAND_CODE,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
register_command(COMMAND_CODE, SwitchToSafeMessage)
|
|
36
|
+
return bytes([COMMAND_CODE, self.sleep >> 8, self.sleep & 0xFF])
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Maikel Punie <maikel.punie@gmail.com>
|
|
3
3
|
"""
|
|
4
|
+
|
|
4
5
|
from __future__ import annotations
|
|
5
6
|
|
|
6
|
-
from velbusaio.command_registry import
|
|
7
|
+
from velbusaio.command_registry import register
|
|
7
8
|
from velbusaio.message import Message
|
|
8
9
|
|
|
9
10
|
COMMAND_CODE = 0xE8
|
|
10
11
|
|
|
11
12
|
|
|
13
|
+
@register(COMMAND_CODE)
|
|
12
14
|
class TempSensorSettingsPart1(Message):
|
|
13
15
|
def populate(self, priority, address, rtr, data):
|
|
14
16
|
"""
|
|
@@ -23,6 +25,3 @@ class TempSensorSettingsPart1(Message):
|
|
|
23
25
|
:return: bytes
|
|
24
26
|
"""
|
|
25
27
|
return bytes([COMMAND_CODE])
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
register_command(COMMAND_CODE, TempSensorSettingsPart1)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""
|
|
2
|
+
:author: Danny De Gaspari
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from velbusaio.command_registry import register
|
|
8
|
+
from velbusaio.message import Message
|
|
9
|
+
|
|
10
|
+
COMMAND_CODE = 0xE9
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@register(COMMAND_CODE)
|
|
14
|
+
class TempSensorSettingsPart2(Message):
|
|
15
|
+
def populate(self, priority, address, rtr, data):
|
|
16
|
+
"""
|
|
17
|
+
:return: None
|
|
18
|
+
"""
|
|
19
|
+
self.needs_low_priority(priority)
|
|
20
|
+
self.needs_no_rtr(rtr)
|
|
21
|
+
self.set_attributes(priority, address, rtr)
|
|
22
|
+
|
|
23
|
+
def data_to_binary(self):
|
|
24
|
+
"""
|
|
25
|
+
:return: bytes
|
|
26
|
+
"""
|
|
27
|
+
return bytes([COMMAND_CODE])
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""
|
|
2
|
+
:author: Danny De Gaspari
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from velbusaio.command_registry import register
|
|
8
|
+
from velbusaio.message import Message
|
|
9
|
+
|
|
10
|
+
COMMAND_CODE = 0xC6
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@register(COMMAND_CODE)
|
|
14
|
+
class TempSensorSettingsPart3(Message):
|
|
15
|
+
def populate(self, priority, address, rtr, data):
|
|
16
|
+
"""
|
|
17
|
+
:return: None
|
|
18
|
+
"""
|
|
19
|
+
self.needs_low_priority(priority)
|
|
20
|
+
self.needs_no_rtr(rtr)
|
|
21
|
+
self.set_attributes(priority, address, rtr)
|
|
22
|
+
|
|
23
|
+
def data_to_binary(self):
|
|
24
|
+
"""
|
|
25
|
+
:return: bytes
|
|
26
|
+
"""
|
|
27
|
+
return bytes([COMMAND_CODE])
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""
|
|
2
|
+
:author: Danny De Gaspari
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from velbusaio.command_registry import register
|
|
8
|
+
from velbusaio.message import Message
|
|
9
|
+
|
|
10
|
+
COMMAND_CODE = 0xB9
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@register(COMMAND_CODE)
|
|
14
|
+
class TempSensorSettingsPart4(Message):
|
|
15
|
+
def populate(self, priority, address, rtr, data):
|
|
16
|
+
"""
|
|
17
|
+
:return: None
|
|
18
|
+
"""
|
|
19
|
+
self.needs_low_priority(priority)
|
|
20
|
+
self.needs_no_rtr(rtr)
|
|
21
|
+
self.set_attributes(priority, address, rtr)
|
|
22
|
+
|
|
23
|
+
def data_to_binary(self):
|
|
24
|
+
"""
|
|
25
|
+
:return: bytes
|
|
26
|
+
"""
|
|
27
|
+
return bytes([COMMAND_CODE])
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Maikel Punie <maikel.punie@gmail.com>
|
|
3
3
|
"""
|
|
4
|
+
|
|
4
5
|
from __future__ import annotations
|
|
5
6
|
|
|
6
|
-
from velbusaio.command_registry import
|
|
7
|
+
from velbusaio.command_registry import register
|
|
7
8
|
from velbusaio.message import Message
|
|
8
9
|
|
|
9
10
|
COMMAND_CODE = 0xE7
|
|
10
11
|
|
|
11
12
|
|
|
13
|
+
@register(COMMAND_CODE)
|
|
12
14
|
class TempSensorSettingsRequest(Message):
|
|
13
15
|
def populate(self, priority, address, rtr, data):
|
|
14
16
|
"""
|
|
@@ -23,6 +25,3 @@ class TempSensorSettingsRequest(Message):
|
|
|
23
25
|
:return: bytes
|
|
24
26
|
"""
|
|
25
27
|
return bytes([COMMAND_CODE])
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
register_command(COMMAND_CODE, TempSensorSettingsRequest)
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Maikel Punie <maikel.punie@gmail.com>
|
|
3
3
|
"""
|
|
4
|
+
|
|
4
5
|
from __future__ import annotations
|
|
5
6
|
|
|
6
7
|
import json
|
|
7
8
|
|
|
8
|
-
from velbusaio.command_registry import
|
|
9
|
+
from velbusaio.command_registry import register
|
|
9
10
|
from velbusaio.message import Message
|
|
10
11
|
|
|
11
12
|
COMMAND_CODE = 0xEA
|
|
12
|
-
DSTATUS = {0: "run",
|
|
13
|
+
DSTATUS = {0: "run", 2: "manual", 4: "sleep", 6: "disable"}
|
|
13
14
|
DMODE = {0: "safe", 16: "night", 32: "day", 64: "comfort"}
|
|
14
15
|
|
|
15
16
|
|
|
17
|
+
@register(COMMAND_CODE)
|
|
16
18
|
class TempSensorStatusMessage(Message):
|
|
17
19
|
"""
|
|
18
20
|
send by: VMBGPOD
|
|
@@ -22,23 +24,23 @@ class TempSensorStatusMessage(Message):
|
|
|
22
24
|
def __init__(self, address=None):
|
|
23
25
|
Message.__init__(self)
|
|
24
26
|
self.local_control = 0 # 0=unlocked, 1 =locked
|
|
25
|
-
self.status_mode = 0 #
|
|
27
|
+
self.status_mode = 0 # DSTATUS
|
|
26
28
|
self.status_str = "run"
|
|
27
|
-
self.auto_send = 0 # 0=disabled
|
|
28
|
-
self.mode = 0 #
|
|
29
|
+
self.auto_send = 0 # 0=disabled
|
|
30
|
+
self.mode = 0 # DMODE
|
|
29
31
|
self.mode_str = "safe"
|
|
30
|
-
self.
|
|
31
|
-
self.heater =
|
|
32
|
-
self.boost =
|
|
33
|
-
self.pump =
|
|
34
|
-
self.
|
|
35
|
-
self.alarm1 =
|
|
36
|
-
self.alarm2 =
|
|
37
|
-
self.alarm3 =
|
|
38
|
-
self.alarm4 =
|
|
39
|
-
self.current_temp = None
|
|
40
|
-
self.target_temp = None
|
|
41
|
-
self.sleep_timer = None
|
|
32
|
+
self.cool_mode = False
|
|
33
|
+
self.heater = False
|
|
34
|
+
self.boost = False
|
|
35
|
+
self.pump = False
|
|
36
|
+
self.cooler = False
|
|
37
|
+
self.alarm1 = False
|
|
38
|
+
self.alarm2 = False
|
|
39
|
+
self.alarm3 = False
|
|
40
|
+
self.alarm4 = False
|
|
41
|
+
self.current_temp = None
|
|
42
|
+
self.target_temp = None
|
|
43
|
+
self.sleep_timer = None
|
|
42
44
|
|
|
43
45
|
def getCurTemp(self):
|
|
44
46
|
return self.current_temp
|
|
@@ -49,12 +51,12 @@ class TempSensorStatusMessage(Message):
|
|
|
49
51
|
-DB1 bit 2+3 = status_mode
|
|
50
52
|
-DB1 bit 4 = auto send
|
|
51
53
|
-DB1 bit 5+6+7 = mode
|
|
52
|
-
-DB1 bit 8 = cool
|
|
54
|
+
-DB1 bit 8 = cool/heat
|
|
53
55
|
-DB2 = program (not used)
|
|
54
56
|
-DB3 last bit = heater
|
|
55
57
|
-DB3 bit 2 = boost
|
|
56
58
|
-DB3 bit 3 = pump
|
|
57
|
-
-DB3 bit 4 =
|
|
59
|
+
-DB3 bit 4 = cooler
|
|
58
60
|
-DB4 bit 5 = alarm 1
|
|
59
61
|
-DB4 bit 6 = alarm 2
|
|
60
62
|
-DB4 bit 7 = alarm 3
|
|
@@ -69,21 +71,21 @@ class TempSensorStatusMessage(Message):
|
|
|
69
71
|
self.set_attributes(priority, address, rtr)
|
|
70
72
|
|
|
71
73
|
self.local_control = data[0] & 0x01
|
|
72
|
-
self.status_mode = data[0] &
|
|
73
|
-
self.
|
|
74
|
+
self.status_mode = data[0] & 0x06
|
|
75
|
+
self.status_str = DSTATUS[self.status_mode]
|
|
74
76
|
self.auto_send = data[0] & 0x08
|
|
75
77
|
self.mode = data[0] & 0x70
|
|
76
78
|
self.mode_str = DMODE[self.mode]
|
|
77
|
-
self.
|
|
79
|
+
self.cool_mode = (data[0] & 0x80) == 0x80
|
|
78
80
|
|
|
79
|
-
self.heater = data[2] & 0x01
|
|
80
|
-
self.boost = data[2] & 0x02
|
|
81
|
-
self.pump = data[2] & 0x04
|
|
82
|
-
self.
|
|
83
|
-
self.alarm1 = data[2] & 0x10
|
|
84
|
-
self.alarm2 = data[2] & 0x20
|
|
85
|
-
self.alarm3 = data[2] & 0x40
|
|
86
|
-
self.alarm4 = data[2] & 0x80
|
|
81
|
+
self.heater = (data[2] & 0x01) == 0x01
|
|
82
|
+
self.boost = (data[2] & 0x02) == 0x02
|
|
83
|
+
self.pump = (data[2] & 0x04) == 0x04
|
|
84
|
+
self.cooler = (data[2] & 0x08) == 0x08
|
|
85
|
+
self.alarm1 = (data[2] & 0x10) == 0x10
|
|
86
|
+
self.alarm2 = (data[2] & 0x20) == 0x20
|
|
87
|
+
self.alarm3 = (data[2] & 0x40) == 0x40
|
|
88
|
+
self.alarm4 = (data[2] & 0x80) == 0x80
|
|
87
89
|
|
|
88
90
|
self.current_temp = data[3] / 2
|
|
89
91
|
self.target_temp = data[4] / 2
|
|
@@ -99,11 +101,11 @@ class TempSensorStatusMessage(Message):
|
|
|
99
101
|
json_dict["status_mode"] = DSTATUS[self.status_mode]
|
|
100
102
|
json_dict["auto_send"] = self.auto_send
|
|
101
103
|
json_dict["mode"] = DMODE[self.mode]
|
|
102
|
-
json_dict["
|
|
104
|
+
json_dict["cool_mode"] = self.cool_mode
|
|
103
105
|
json_dict["heater"] = self.heater
|
|
104
106
|
json_dict["boost"] = self.boost
|
|
105
107
|
json_dict["pump"] = self.pump
|
|
106
|
-
json_dict["
|
|
108
|
+
json_dict["cooler"] = self.cooler
|
|
107
109
|
json_dict["alarm1"] = self.alarm1
|
|
108
110
|
json_dict["alarm2"] = self.alarm2
|
|
109
111
|
json_dict["alarm3"] = self.alarm3
|
|
@@ -112,6 +114,3 @@ class TempSensorStatusMessage(Message):
|
|
|
112
114
|
json_dict["target_temp"] = self.target_temp
|
|
113
115
|
json_dict["sleep_timer"] = self.sleep_timer
|
|
114
116
|
return json.dumps(json_dict)
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
register_command(COMMAND_CODE, TempSensorStatusMessage)
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
3
|
"""
|
|
4
|
-
from __future__ import annotations
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
from __future__ import annotations
|
|
7
6
|
|
|
8
|
-
from velbusaio.command_registry import
|
|
7
|
+
from velbusaio.command_registry import register
|
|
9
8
|
from velbusaio.message import Message
|
|
10
9
|
|
|
11
10
|
COMMAND_CODE = 0xDF
|
|
12
11
|
|
|
13
12
|
|
|
13
|
+
@register(COMMAND_CODE)
|
|
14
14
|
class TempSetCoolingMessage(Message):
|
|
15
15
|
"""
|
|
16
16
|
send by:
|
|
@@ -28,18 +28,8 @@ class TempSetCoolingMessage(Message):
|
|
|
28
28
|
self.needs_no_rtr(rtr)
|
|
29
29
|
self.set_attributes(priority, address, rtr)
|
|
30
30
|
|
|
31
|
-
def to_json(self):
|
|
32
|
-
"""
|
|
33
|
-
:return: str
|
|
34
|
-
"""
|
|
35
|
-
json_dict = self.to_json_basic()
|
|
36
|
-
return json.dumps(json_dict)
|
|
37
|
-
|
|
38
31
|
def data_to_binary(self):
|
|
39
32
|
"""
|
|
40
33
|
:return: bytes
|
|
41
34
|
"""
|
|
42
35
|
return bytes([COMMAND_CODE, 0xAA])
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
register_command(COMMAND_CODE, TempSetCoolingMessage)
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"""
|
|
2
2
|
:author: Thomas Delaet <thomas@delaet.org>
|
|
3
3
|
"""
|
|
4
|
-
from __future__ import annotations
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
from __future__ import annotations
|
|
7
6
|
|
|
8
|
-
from velbusaio.command_registry import
|
|
7
|
+
from velbusaio.command_registry import register
|
|
9
8
|
from velbusaio.message import Message
|
|
10
9
|
|
|
11
10
|
COMMAND_CODE = 0xE0
|
|
12
11
|
|
|
13
12
|
|
|
13
|
+
@register(COMMAND_CODE)
|
|
14
14
|
class TempSetHeatingMessage(Message):
|
|
15
15
|
"""
|
|
16
16
|
send by:
|
|
@@ -28,18 +28,8 @@ class TempSetHeatingMessage(Message):
|
|
|
28
28
|
self.needs_no_rtr(rtr)
|
|
29
29
|
self.set_attributes(priority, address, rtr)
|
|
30
30
|
|
|
31
|
-
def to_json(self):
|
|
32
|
-
"""
|
|
33
|
-
:return: str
|
|
34
|
-
"""
|
|
35
|
-
json_dict = self.to_json_basic()
|
|
36
|
-
return json.dumps(json_dict)
|
|
37
|
-
|
|
38
31
|
def data_to_binary(self):
|
|
39
32
|
"""
|
|
40
33
|
:return: bytes
|
|
41
34
|
"""
|
|
42
35
|
return bytes([COMMAND_CODE, 0xAA])
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
register_command(COMMAND_CODE, TempSetHeatingMessage)
|