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.
Files changed (200) hide show
  1. scripts/parse_specs.py +156 -0
  2. velbus_aio-2025.11.0.dist-info/METADATA +71 -0
  3. velbus_aio-2025.11.0.dist-info/RECORD +194 -0
  4. {velbus_aio-2021.8.7.dist-info → velbus_aio-2025.11.0.dist-info}/WHEEL +1 -1
  5. velbus_aio-2025.11.0.dist-info/top_level.txt +3 -0
  6. velbusaio/channels.py +443 -109
  7. velbusaio/command_registry.py +126 -13
  8. velbusaio/const.py +36 -12
  9. velbusaio/controller.py +252 -177
  10. velbusaio/discovery.py +2 -2
  11. velbusaio/exceptions.py +22 -0
  12. velbusaio/handler.py +311 -145
  13. velbusaio/helpers.py +6 -18
  14. velbusaio/message.py +46 -132
  15. velbusaio/messages/__init__.py +12 -2
  16. velbusaio/messages/blind_status.py +16 -25
  17. velbusaio/messages/bus_active.py +3 -9
  18. velbusaio/messages/bus_error_counter_status.py +3 -4
  19. velbusaio/messages/bus_error_counter_status_request.py +3 -4
  20. velbusaio/messages/bus_off.py +3 -4
  21. velbusaio/messages/channel_name_part1.py +49 -33
  22. velbusaio/messages/channel_name_part2.py +49 -33
  23. velbusaio/messages/channel_name_part3.py +49 -33
  24. velbusaio/messages/channel_name_request.py +26 -12
  25. velbusaio/messages/clear_led.py +3 -4
  26. velbusaio/messages/counter_status.py +3 -17
  27. velbusaio/messages/counter_status_request.py +6 -6
  28. velbusaio/messages/counter_value.py +44 -0
  29. velbusaio/messages/cover_down.py +4 -29
  30. velbusaio/messages/cover_off.py +5 -29
  31. velbusaio/messages/cover_position.py +4 -19
  32. velbusaio/messages/cover_up.py +4 -27
  33. velbusaio/messages/dali_device_settings.py +178 -0
  34. velbusaio/messages/dali_device_settings_request.py +53 -0
  35. velbusaio/messages/dali_dim_value_status.py +44 -0
  36. velbusaio/messages/dimmer_channel_status.py +6 -19
  37. velbusaio/messages/dimmer_status.py +14 -31
  38. velbusaio/messages/edge_set_color.py +114 -0
  39. velbusaio/messages/edge_set_custom_color.py +56 -0
  40. velbusaio/messages/fast_blinking_led.py +3 -4
  41. velbusaio/messages/forced_off.py +3 -4
  42. velbusaio/messages/forced_on.py +3 -4
  43. velbusaio/messages/interface_status_request.py +3 -4
  44. velbusaio/messages/ir_receiver_status.py +18 -0
  45. velbusaio/messages/kwh_status.py +3 -19
  46. velbusaio/messages/light_value_request.py +3 -4
  47. velbusaio/messages/memo_text.py +3 -5
  48. velbusaio/messages/memory_data.py +3 -16
  49. velbusaio/messages/memory_data_block.py +3 -4
  50. velbusaio/messages/memory_dump_request.py +3 -4
  51. velbusaio/messages/module_status.py +107 -55
  52. velbusaio/messages/module_status_request.py +7 -6
  53. velbusaio/messages/module_subtype.py +11 -19
  54. velbusaio/messages/module_type.py +132 -21
  55. velbusaio/messages/module_type_request.py +1 -0
  56. velbusaio/messages/psu_load.py +56 -0
  57. velbusaio/messages/psu_values.py +53 -0
  58. velbusaio/messages/push_button_status.py +3 -16
  59. velbusaio/messages/raw.py +74 -0
  60. velbusaio/messages/read_data_block_from_memory.py +3 -4
  61. velbusaio/messages/read_data_from_memory.py +3 -4
  62. velbusaio/messages/realtime_clock_status_request.py +3 -4
  63. velbusaio/messages/receive_buffer_full.py +3 -4
  64. velbusaio/messages/receive_ready.py +3 -4
  65. velbusaio/messages/relay_status.py +13 -42
  66. velbusaio/messages/restore_dimmer.py +33 -24
  67. velbusaio/messages/select_program.py +35 -0
  68. velbusaio/messages/sensor_settings_request.py +3 -4
  69. velbusaio/messages/sensor_temp_request.py +3 -4
  70. velbusaio/messages/sensor_temperature.py +15 -19
  71. velbusaio/messages/set_date.py +10 -30
  72. velbusaio/messages/set_daylight_saving.py +8 -24
  73. velbusaio/messages/set_dimmer.py +43 -41
  74. velbusaio/messages/set_led.py +3 -4
  75. velbusaio/messages/set_realtime_clock.py +10 -30
  76. velbusaio/messages/set_temperature.py +3 -4
  77. velbusaio/messages/slider_status.py +16 -20
  78. velbusaio/messages/slow_blinking_led.py +3 -4
  79. velbusaio/messages/start_relay_blinking_timer.py +3 -4
  80. velbusaio/messages/start_relay_timer.py +3 -4
  81. velbusaio/messages/switch_relay_off.py +3 -16
  82. velbusaio/messages/switch_relay_on.py +3 -16
  83. velbusaio/messages/switch_to_comfort.py +4 -15
  84. velbusaio/messages/switch_to_day.py +4 -15
  85. velbusaio/messages/switch_to_night.py +4 -15
  86. velbusaio/messages/switch_to_safe.py +4 -15
  87. velbusaio/messages/temp_sensor_settings_part1.py +3 -4
  88. velbusaio/messages/temp_sensor_settings_part2.py +27 -0
  89. velbusaio/messages/temp_sensor_settings_part3.py +27 -0
  90. velbusaio/messages/temp_sensor_settings_part4.py +27 -0
  91. velbusaio/messages/temp_sensor_settings_request.py +3 -4
  92. velbusaio/messages/temp_sensor_status.py +34 -35
  93. velbusaio/messages/temp_set_cooling.py +3 -13
  94. velbusaio/messages/temp_set_heating.py +3 -13
  95. velbusaio/messages/update_led_status.py +3 -4
  96. velbusaio/messages/very_fast_blinking_led.py +3 -4
  97. velbusaio/messages/write_data_to_memory.py +3 -4
  98. velbusaio/messages/write_memory_block.py +3 -4
  99. velbusaio/messages/write_module_address_and_serial_number.py +3 -4
  100. velbusaio/module.py +680 -158
  101. velbusaio/module_spec/01.json +62 -0
  102. velbusaio/module_spec/02.json +16 -0
  103. velbusaio/module_spec/03.json +23 -0
  104. velbusaio/module_spec/04.json +283 -0
  105. velbusaio/module_spec/05.json +54 -0
  106. velbusaio/module_spec/06.json +110 -0
  107. velbusaio/module_spec/07.json +16 -0
  108. velbusaio/module_spec/08.json +38 -0
  109. velbusaio/module_spec/09.json +30 -0
  110. velbusaio/module_spec/0A.json +58 -0
  111. velbusaio/module_spec/0B.json +58 -0
  112. velbusaio/module_spec/0C.json +18 -0
  113. velbusaio/module_spec/0E.json +25 -0
  114. velbusaio/module_spec/0F.json +16 -0
  115. velbusaio/module_spec/10.json +111 -0
  116. velbusaio/module_spec/11.json +111 -0
  117. velbusaio/module_spec/12.json +73 -0
  118. velbusaio/module_spec/13.json +4 -0
  119. velbusaio/module_spec/14.json +16 -0
  120. velbusaio/module_spec/15.json +83 -0
  121. velbusaio/module_spec/16.json +129 -0
  122. velbusaio/module_spec/17.json +129 -0
  123. velbusaio/module_spec/18.json +129 -0
  124. velbusaio/module_spec/1A.json +79 -0
  125. velbusaio/module_spec/1B.json +107 -0
  126. velbusaio/module_spec/1D.json +89 -0
  127. velbusaio/module_spec/1E.json +306 -0
  128. velbusaio/module_spec/1F.json +178 -0
  129. velbusaio/module_spec/20.json +178 -0
  130. velbusaio/module_spec/21.json +326 -0
  131. velbusaio/module_spec/22.json +426 -0
  132. velbusaio/module_spec/23.json +129 -0
  133. velbusaio/module_spec/24.json +30 -0
  134. velbusaio/module_spec/25.json +3 -0
  135. velbusaio/module_spec/28.json +454 -0
  136. velbusaio/module_spec/29.json +235 -0
  137. velbusaio/module_spec/2A.json +239 -0
  138. velbusaio/module_spec/2B.json +239 -0
  139. velbusaio/module_spec/2C.json +257 -0
  140. velbusaio/module_spec/2D.json +270 -0
  141. velbusaio/module_spec/2E.json +215 -0
  142. velbusaio/module_spec/2F.json +211 -0
  143. velbusaio/module_spec/30.json +58 -0
  144. velbusaio/module_spec/31.json +465 -0
  145. velbusaio/module_spec/32.json +385 -0
  146. velbusaio/module_spec/33.json +249 -0
  147. velbusaio/module_spec/34.json +313 -0
  148. velbusaio/module_spec/35.json +313 -0
  149. velbusaio/module_spec/36.json +313 -0
  150. velbusaio/module_spec/37.json +333 -0
  151. velbusaio/module_spec/38.json +111 -0
  152. velbusaio/module_spec/39.json +4 -0
  153. velbusaio/module_spec/3A.json +306 -0
  154. velbusaio/module_spec/3B.json +306 -0
  155. velbusaio/module_spec/3C.json +306 -0
  156. velbusaio/module_spec/3D.json +454 -0
  157. velbusaio/module_spec/3E.json +302 -0
  158. velbusaio/module_spec/3F.json +4 -0
  159. velbusaio/module_spec/40.json +4 -0
  160. velbusaio/module_spec/41.json +241 -0
  161. velbusaio/module_spec/42.json +4 -0
  162. velbusaio/module_spec/43.json +23 -0
  163. velbusaio/module_spec/44.json +38 -0
  164. velbusaio/module_spec/45.json +4 -0
  165. velbusaio/module_spec/48.json +111 -0
  166. velbusaio/module_spec/49.json +111 -0
  167. velbusaio/module_spec/4A.json +89 -0
  168. velbusaio/module_spec/4B.json +138 -0
  169. velbusaio/module_spec/4C.json +129 -0
  170. velbusaio/module_spec/4D.json +108 -0
  171. velbusaio/module_spec/4E.json +787 -0
  172. velbusaio/module_spec/4F.json +114 -0
  173. velbusaio/module_spec/50.json +114 -0
  174. velbusaio/module_spec/51.json +114 -0
  175. velbusaio/module_spec/52.json +456 -0
  176. velbusaio/module_spec/54.json +270 -0
  177. velbusaio/module_spec/55.json +270 -0
  178. velbusaio/module_spec/56.json +270 -0
  179. velbusaio/module_spec/57.json +260 -0
  180. velbusaio/module_spec/5A.json +4 -0
  181. velbusaio/module_spec/5B.json +4 -0
  182. velbusaio/module_spec/5C.json +90 -0
  183. velbusaio/module_spec/5F.json +78 -0
  184. velbusaio/module_spec/60.json +4 -0
  185. velbusaio/module_spec/61.json +89 -0
  186. velbusaio/module_spec/broadcast.json +67 -0
  187. velbusaio/module_spec/ignore.json +22 -0
  188. velbusaio/protocol.py +243 -0
  189. velbusaio/py.typed +0 -0
  190. velbusaio/raw_message.py +149 -0
  191. velbusaio/util.py +55 -0
  192. velbusaio/vlp_reader.py +249 -0
  193. velbus_aio-2021.8.7.dist-info/METADATA +0 -66
  194. velbus_aio-2021.8.7.dist-info/RECORD +0 -90
  195. velbus_aio-2021.8.7.dist-info/top_level.txt +0 -1
  196. velbusaio/messages/meteo_raw.py +0 -52
  197. velbusaio/module_registry.py +0 -64
  198. velbusaio/moduleprotocol/protocol.json +0 -25540
  199. velbusaio/parser.py +0 -142
  200. {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 register_command
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 register_command
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 register_command
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 json
7
- import logging
5
+ from __future__ import annotations
8
6
 
9
- from velbusaio.command_registry import register_command
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 json
7
- import logging
5
+ from __future__ import annotations
8
6
 
9
- from velbusaio.command_registry import register_command
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 json
5
+ from __future__ import annotations
7
6
 
8
- from velbusaio.command_registry import register_command
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, 0x00, 0x00])
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 json
5
+ from __future__ import annotations
7
6
 
8
- from velbusaio.command_registry import register_command
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, 0x00, 0x00])
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 json
5
+ from __future__ import annotations
7
6
 
8
- from velbusaio.command_registry import register_command
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, 0x00, 0x00])
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 json
5
+ from __future__ import annotations
7
6
 
8
- from velbusaio.command_registry import register_command
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, 0x00, 0x00])
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 register_command
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 register_command
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 register_command
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", 1: "manual", 2: "sleep", 4: "disable"}
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 # 0=run, 1=manual, 2=sleep timer, 3=disable
27
+ self.status_mode = 0 # DSTATUS
26
28
  self.status_str = "run"
27
- self.auto_send = 0 # 0=disabled, 1=enabled
28
- self.mode = 0 # 0=safe, 1=night, 2=day, 4=comfort
29
+ self.auto_send = 0 # 0=disabled
30
+ self.mode = 0 # DMODE
29
31
  self.mode_str = "safe"
30
- self.cool = 0 # 0=cool, 1=heat
31
- self.heater = 0 # 0=pff, 1=on
32
- self.boost = 0 # 0=off, 1 = on
33
- self.pump = 0 # 0=on, 1=off
34
- self.cool = 0 # 0=off, 1=on
35
- self.alarm1 = 0 # 0=off, 1=on
36
- self.alarm2 = 0 # 0=off, 1=on
37
- self.alarm3 = 0 # 0=off, 1=on
38
- self.alarm4 = 0 # 0=off, 1=on
39
- self.current_temp = None # current temp
40
- self.target_temp = None # current temp
41
- self.sleep_timer = None # current sleepTimer
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 = pump
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] & 0x206
73
- self._status_str = DSTATUS[self.status_mode]
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.cool = data[0] & 0x80
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.cool = data[2] & 0x08
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["cool"] = self.cool
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["cool"] = self.cool
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 json
5
+ from __future__ import annotations
7
6
 
8
- from velbusaio.command_registry import register_command
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 json
5
+ from __future__ import annotations
7
6
 
8
- from velbusaio.command_registry import register_command
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)