velbus-aio 2023.11.0__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.

Files changed (113) hide show
  1. {velbus-aio-2023.11.0/velbus_aio.egg-info → velbus-aio-2023.12.0}/PKG-INFO +2 -1
  2. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/pyproject.toml +3 -2
  3. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0/velbus_aio.egg-info}/PKG-INFO +2 -1
  4. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/channels.py +15 -0
  5. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/command_registry.py +15 -0
  6. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/__init__.py +1 -1
  7. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/dimmer_status.py +1 -1
  8. velbus-aio-2023.12.0/velbusaio/messages/module_type.py +185 -0
  9. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/restore_dimmer.py +1 -1
  10. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/set_date.py +4 -4
  11. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/set_daylight_saving.py +4 -4
  12. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/set_dimmer.py +1 -1
  13. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/set_realtime_clock.py +4 -4
  14. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/slider_status.py +1 -1
  15. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/module.py +9 -5
  16. velbus-aio-2023.11.0/velbusaio/messages/module_type.py +0 -83
  17. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/LICENSE +0 -0
  18. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/MANIFEST.in +0 -0
  19. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/README.md +0 -0
  20. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/requirements.txt +0 -0
  21. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/setup.cfg +0 -0
  22. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/setup.py +0 -0
  23. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbus_aio.egg-info/SOURCES.txt +0 -0
  24. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbus_aio.egg-info/dependency_links.txt +0 -0
  25. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbus_aio.egg-info/not-zip-safe +0 -0
  26. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbus_aio.egg-info/requires.txt +0 -0
  27. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbus_aio.egg-info/top_level.txt +0 -0
  28. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/__init__.py +0 -0
  29. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/const.py +0 -0
  30. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/controller.py +0 -0
  31. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/discovery.py +0 -0
  32. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/exceptions.py +0 -0
  33. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/handler.py +0 -0
  34. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/helpers.py +0 -0
  35. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/message.py +0 -0
  36. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/blind_status.py +0 -0
  37. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/bus_active.py +0 -0
  38. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/bus_error_counter_status.py +0 -0
  39. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/bus_error_counter_status_request.py +0 -0
  40. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/bus_off.py +0 -0
  41. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/channel_name_part1.py +0 -0
  42. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/channel_name_part2.py +0 -0
  43. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/channel_name_part3.py +0 -0
  44. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/channel_name_request.py +0 -0
  45. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/clear_led.py +0 -0
  46. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/counter_status.py +0 -0
  47. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/counter_status_request.py +0 -0
  48. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/cover_down.py +0 -0
  49. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/cover_off.py +0 -0
  50. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/cover_position.py +0 -0
  51. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/cover_up.py +0 -0
  52. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/dali_device_settings.py +0 -0
  53. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/dali_device_settings_request.py +0 -0
  54. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/dali_dim_value_status.py +0 -0
  55. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/dimmer_channel_status.py +0 -0
  56. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/edge_set_color.py +0 -0
  57. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/edge_set_custom_color.py +0 -0
  58. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/fast_blinking_led.py +0 -0
  59. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/forced_off.py +0 -0
  60. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/forced_on.py +0 -0
  61. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/interface_status_request.py +0 -0
  62. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/ir_receiver_status.py +0 -0
  63. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/kwh_status.py +0 -0
  64. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/light_value_request.py +0 -0
  65. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/memo_text.py +0 -0
  66. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/memory_data.py +0 -0
  67. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/memory_data_block.py +0 -0
  68. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/memory_dump_request.py +0 -0
  69. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/module_status.py +0 -0
  70. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/module_status_request.py +0 -0
  71. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/module_subtype.py +0 -0
  72. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/module_type_request.py +0 -0
  73. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/push_button_status.py +0 -0
  74. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/raw.py +0 -0
  75. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/read_data_block_from_memory.py +0 -0
  76. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/read_data_from_memory.py +0 -0
  77. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/realtime_clock_status_request.py +0 -0
  78. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/receive_buffer_full.py +0 -0
  79. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/receive_ready.py +0 -0
  80. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/relay_status.py +0 -0
  81. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/select_program.py +0 -0
  82. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/sensor_settings_request.py +0 -0
  83. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/sensor_temp_request.py +0 -0
  84. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/sensor_temperature.py +0 -0
  85. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/set_led.py +0 -0
  86. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/set_temperature.py +0 -0
  87. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/slow_blinking_led.py +0 -0
  88. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/start_relay_blinking_timer.py +0 -0
  89. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/start_relay_timer.py +0 -0
  90. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/switch_relay_off.py +0 -0
  91. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/switch_relay_on.py +0 -0
  92. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/switch_to_comfort.py +0 -0
  93. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/switch_to_day.py +0 -0
  94. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/switch_to_night.py +0 -0
  95. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/switch_to_safe.py +0 -0
  96. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part1.py +0 -0
  97. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part2.py +0 -0
  98. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part3.py +0 -0
  99. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_part4.py +0 -0
  100. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_settings_request.py +0 -0
  101. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/temp_sensor_status.py +0 -0
  102. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/temp_set_cooling.py +0 -0
  103. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/temp_set_heating.py +0 -0
  104. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/update_led_status.py +0 -0
  105. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/very_fast_blinking_led.py +0 -0
  106. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/write_data_to_memory.py +0 -0
  107. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/write_memory_block.py +0 -0
  108. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/messages/write_module_address_and_serial_number.py +0 -0
  109. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/moduleprotocol/protocol.json +0 -0
  110. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/protocol.py +0 -0
  111. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/py.typed +0 -0
  112. {velbus-aio-2023.11.0 → velbus-aio-2023.12.0}/velbusaio/raw_message.py +0 -0
  113. {velbus-aio-2023.11.0 → 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.11.0
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.11.0"
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.11.0"
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.11.0
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 = []
@@ -537,6 +549,9 @@ class Temperature(Channel):
537
549
  def get_climate_mode(self) -> str:
538
550
  return self._cstatus
539
551
 
552
+ def get_cool_mode(self) -> str:
553
+ return self._cool_mode
554
+
540
555
  async def set_temp(self, temp: float) -> None:
541
556
  cls = commandRegistry.get_command(0xE4, self._module.get_type())
542
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
 
@@ -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 (
@@ -24,7 +24,7 @@ LED_FAST_BLINKING = 1 << 5
24
24
  LED_VERY_FAST_BLINKING = 1 << 4
25
25
 
26
26
 
27
- @register(COMMAND_CODE, ["VMBDME", "VMB1LED"])
27
+ @register(COMMAND_CODE, ["VMB1DM", "VMBDME", "VMB1LED"])
28
28
  class DimmerStatusMessage(Message):
29
29
  """
30
30
  sent by: VMBDME
@@ -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]
@@ -9,7 +9,7 @@ from velbusaio.message import Message
9
9
  COMMAND_CODE = 0x11
10
10
 
11
11
 
12
- @register(COMMAND_CODE)
12
+ @register(COMMAND_CODE, ["VMB1DM", "VMBDME", "VMBDMI-R", "VMBDMI", "VMB1LED", "VMB4DC"])
13
13
  class RestoreDimmerMessage(Message):
14
14
  """
15
15
  send by:
@@ -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
- raise Exception("No subaddresses defined")
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]) == Button:
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