velbus-aio 2024.7.5__tar.gz → 2024.10.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 (193) hide show
  1. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/MANIFEST.in +1 -1
  2. {velbus_aio-2024.7.5/velbus_aio.egg-info → velbus_aio-2024.10.0}/PKG-INFO +5 -2
  3. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/README.md +4 -0
  4. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/pyproject.toml +2 -3
  5. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0/velbus_aio.egg-info}/PKG-INFO +5 -2
  6. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbus_aio.egg-info/SOURCES.txt +82 -2
  7. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/channels.py +2 -2
  8. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/command_registry.py +6 -5
  9. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/const.py +1 -1
  10. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/controller.py +8 -5
  11. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/handler.py +73 -59
  12. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/__init__.py +2 -2
  13. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/edge_set_color.py +1 -0
  14. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/module.py +47 -29
  15. velbus_aio-2024.10.0/velbusaio/module_spec/01.json +50 -0
  16. velbus_aio-2024.10.0/velbusaio/module_spec/02.json +11 -0
  17. velbus_aio-2024.10.0/velbusaio/module_spec/03.json +18 -0
  18. velbus_aio-2024.10.0/velbusaio/module_spec/05.json +36 -0
  19. velbus_aio-2024.10.0/velbusaio/module_spec/06.json +101 -0
  20. velbus_aio-2024.10.0/velbusaio/module_spec/07.json +11 -0
  21. velbus_aio-2024.10.0/velbusaio/module_spec/08.json +26 -0
  22. velbus_aio-2024.10.0/velbusaio/module_spec/09.json +24 -0
  23. velbus_aio-2024.10.0/velbusaio/module_spec/0A.json +46 -0
  24. velbus_aio-2024.10.0/velbusaio/module_spec/0B.json +46 -0
  25. velbus_aio-2024.10.0/velbusaio/module_spec/0C.json +13 -0
  26. velbus_aio-2024.10.0/velbusaio/module_spec/0E.json +25 -0
  27. velbus_aio-2024.10.0/velbusaio/module_spec/0F.json +11 -0
  28. velbus_aio-2024.10.0/velbusaio/module_spec/10.json +100 -0
  29. velbus_aio-2024.10.0/velbusaio/module_spec/11.json +100 -0
  30. velbus_aio-2024.10.0/velbusaio/module_spec/12.json +63 -0
  31. velbus_aio-2024.10.0/velbusaio/module_spec/13.json +4 -0
  32. velbus_aio-2024.10.0/velbusaio/module_spec/14.json +11 -0
  33. velbus_aio-2024.10.0/velbusaio/module_spec/15.json +80 -0
  34. velbus_aio-2024.10.0/velbusaio/module_spec/16.json +119 -0
  35. velbus_aio-2024.10.0/velbusaio/module_spec/17.json +119 -0
  36. velbus_aio-2024.10.0/velbusaio/module_spec/18.json +119 -0
  37. velbus_aio-2024.10.0/velbusaio/module_spec/1A.json +73 -0
  38. velbus_aio-2024.10.0/velbusaio/module_spec/1B.json +100 -0
  39. velbus_aio-2024.10.0/velbusaio/module_spec/1D.json +83 -0
  40. velbus_aio-2024.10.0/velbusaio/module_spec/1E.json +295 -0
  41. velbus_aio-2024.10.0/velbusaio/module_spec/1F.json +167 -0
  42. velbus_aio-2024.10.0/velbusaio/module_spec/20.json +167 -0
  43. velbus_aio-2024.10.0/velbusaio/module_spec/21.json +291 -0
  44. velbus_aio-2024.10.0/velbusaio/module_spec/22.json +323 -0
  45. velbus_aio-2024.10.0/velbusaio/module_spec/23.json +129 -0
  46. velbus_aio-2024.10.0/velbusaio/module_spec/25.json +3 -0
  47. velbus_aio-2024.10.0/velbusaio/module_spec/28.json +419 -0
  48. velbus_aio-2024.10.0/velbusaio/module_spec/29.json +228 -0
  49. velbus_aio-2024.10.0/velbusaio/module_spec/2A.json +239 -0
  50. velbus_aio-2024.10.0/velbusaio/module_spec/2B.json +239 -0
  51. velbus_aio-2024.10.0/velbusaio/module_spec/2C.json +257 -0
  52. velbus_aio-2024.10.0/velbusaio/module_spec/2D.json +295 -0
  53. velbus_aio-2024.10.0/velbusaio/module_spec/2E.json +212 -0
  54. velbus_aio-2024.10.0/velbusaio/module_spec/2F.json +208 -0
  55. velbus_aio-2024.10.0/velbusaio/module_spec/30.json +46 -0
  56. velbus_aio-2024.10.0/velbusaio/module_spec/31.json +465 -0
  57. velbus_aio-2024.10.0/velbusaio/module_spec/32.json +357 -0
  58. velbus_aio-2024.10.0/velbusaio/module_spec/33.json +239 -0
  59. velbus_aio-2024.10.0/velbusaio/module_spec/34.json +157 -0
  60. velbus_aio-2024.10.0/velbusaio/module_spec/35.json +157 -0
  61. velbus_aio-2024.10.0/velbusaio/module_spec/36.json +157 -0
  62. velbus_aio-2024.10.0/velbusaio/module_spec/37.json +297 -0
  63. velbus_aio-2024.10.0/velbusaio/module_spec/38.json +102 -0
  64. velbus_aio-2024.10.0/velbusaio/module_spec/39.json +4 -0
  65. velbus_aio-2024.10.0/velbusaio/module_spec/3A.json +295 -0
  66. velbus_aio-2024.10.0/velbusaio/module_spec/3B.json +295 -0
  67. velbus_aio-2024.10.0/velbusaio/module_spec/3C.json +295 -0
  68. velbus_aio-2024.10.0/velbusaio/module_spec/3D.json +419 -0
  69. velbus_aio-2024.10.0/velbusaio/module_spec/3E.json +295 -0
  70. velbus_aio-2024.10.0/velbusaio/module_spec/3F.json +4 -0
  71. velbus_aio-2024.10.0/velbusaio/module_spec/40.json +4 -0
  72. velbus_aio-2024.10.0/velbusaio/module_spec/41.json +233 -0
  73. velbus_aio-2024.10.0/velbusaio/module_spec/42.json +4 -0
  74. velbus_aio-2024.10.0/velbusaio/module_spec/43.json +11 -0
  75. velbus_aio-2024.10.0/velbusaio/module_spec/44.json +26 -0
  76. velbus_aio-2024.10.0/velbusaio/module_spec/45.json +4 -0
  77. velbus_aio-2024.10.0/velbusaio/module_spec/48.json +100 -0
  78. velbus_aio-2024.10.0/velbusaio/module_spec/49.json +100 -0
  79. velbus_aio-2024.10.0/velbusaio/module_spec/4A.json +4 -0
  80. velbus_aio-2024.10.0/velbusaio/module_spec/4B.json +118 -0
  81. velbus_aio-2024.10.0/velbusaio/module_spec/4C.json +119 -0
  82. velbus_aio-2024.10.0/velbusaio/module_spec/4D.json +108 -0
  83. velbus_aio-2024.10.0/velbusaio/module_spec/4E.json +443 -0
  84. velbus_aio-2024.10.0/velbusaio/module_spec/4F.json +89 -0
  85. velbus_aio-2024.10.0/velbusaio/module_spec/50.json +89 -0
  86. velbus_aio-2024.10.0/velbusaio/module_spec/51.json +89 -0
  87. velbus_aio-2024.10.0/velbusaio/module_spec/52.json +189 -0
  88. velbus_aio-2024.10.0/velbusaio/module_spec/54.json +4 -0
  89. velbus_aio-2024.10.0/velbusaio/module_spec/55.json +4 -0
  90. velbus_aio-2024.10.0/velbusaio/module_spec/56.json +4 -0
  91. velbus_aio-2024.10.0/velbusaio/module_spec/57.json +222 -0
  92. velbus_aio-2024.10.0/velbusaio/module_spec/5A.json +4 -0
  93. velbus_aio-2024.10.0/velbusaio/module_spec/5C.json +87 -0
  94. velbus_aio-2024.10.0/velbusaio/module_spec/5F.json +66 -0
  95. velbus_aio-2024.10.0/velbusaio/module_spec/broadcast.json +67 -0
  96. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/protocol.py +1 -1
  97. velbus_aio-2024.7.5/velbusaio/protocol.json +0 -10194
  98. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/LICENSE +0 -0
  99. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/requirements.txt +0 -0
  100. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/setup.cfg +0 -0
  101. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/setup.py +0 -0
  102. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbus_aio.egg-info/dependency_links.txt +0 -0
  103. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbus_aio.egg-info/not-zip-safe +0 -0
  104. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbus_aio.egg-info/requires.txt +0 -0
  105. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbus_aio.egg-info/top_level.txt +0 -0
  106. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/__init__.py +0 -0
  107. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/discovery.py +0 -0
  108. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/exceptions.py +0 -0
  109. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/helpers.py +0 -0
  110. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/message.py +0 -0
  111. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/blind_status.py +0 -0
  112. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/bus_active.py +0 -0
  113. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/bus_error_counter_status.py +0 -0
  114. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/bus_error_counter_status_request.py +0 -0
  115. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/bus_off.py +0 -0
  116. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/channel_name_part1.py +0 -0
  117. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/channel_name_part2.py +0 -0
  118. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/channel_name_part3.py +0 -0
  119. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/channel_name_request.py +0 -0
  120. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/clear_led.py +0 -0
  121. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/counter_status.py +0 -0
  122. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/counter_status_request.py +0 -0
  123. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/cover_down.py +0 -0
  124. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/cover_off.py +0 -0
  125. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/cover_position.py +0 -0
  126. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/cover_up.py +0 -0
  127. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/dali_device_settings.py +0 -0
  128. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/dali_device_settings_request.py +0 -0
  129. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/dali_dim_value_status.py +0 -0
  130. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/dimmer_channel_status.py +0 -0
  131. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/dimmer_status.py +0 -0
  132. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/edge_set_custom_color.py +0 -0
  133. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/fast_blinking_led.py +0 -0
  134. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/forced_off.py +0 -0
  135. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/forced_on.py +0 -0
  136. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/interface_status_request.py +0 -0
  137. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/ir_receiver_status.py +0 -0
  138. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/kwh_status.py +0 -0
  139. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/light_value_request.py +0 -0
  140. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/memo_text.py +0 -0
  141. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/memory_data.py +0 -0
  142. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/memory_data_block.py +0 -0
  143. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/memory_dump_request.py +0 -0
  144. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/module_status.py +0 -0
  145. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/module_status_request.py +0 -0
  146. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/module_subtype.py +0 -0
  147. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/module_type.py +0 -0
  148. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/module_type_request.py +0 -0
  149. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/push_button_status.py +0 -0
  150. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/raw.py +0 -0
  151. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/read_data_block_from_memory.py +0 -0
  152. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/read_data_from_memory.py +0 -0
  153. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/realtime_clock_status_request.py +0 -0
  154. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/receive_buffer_full.py +0 -0
  155. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/receive_ready.py +0 -0
  156. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/relay_status.py +0 -0
  157. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/restore_dimmer.py +0 -0
  158. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/select_program.py +0 -0
  159. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/sensor_settings_request.py +0 -0
  160. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/sensor_temp_request.py +0 -0
  161. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/sensor_temperature.py +0 -0
  162. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/set_date.py +0 -0
  163. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/set_daylight_saving.py +0 -0
  164. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/set_dimmer.py +0 -0
  165. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/set_led.py +0 -0
  166. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/set_realtime_clock.py +0 -0
  167. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/set_temperature.py +0 -0
  168. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/slider_status.py +0 -0
  169. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/slow_blinking_led.py +0 -0
  170. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/start_relay_blinking_timer.py +0 -0
  171. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/start_relay_timer.py +0 -0
  172. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/switch_relay_off.py +0 -0
  173. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/switch_relay_on.py +0 -0
  174. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/switch_to_comfort.py +0 -0
  175. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/switch_to_day.py +0 -0
  176. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/switch_to_night.py +0 -0
  177. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/switch_to_safe.py +0 -0
  178. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_settings_part1.py +0 -0
  179. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_settings_part2.py +0 -0
  180. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_settings_part3.py +0 -0
  181. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_settings_part4.py +0 -0
  182. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_settings_request.py +0 -0
  183. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_status.py +0 -0
  184. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/temp_set_cooling.py +0 -0
  185. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/temp_set_heating.py +0 -0
  186. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/update_led_status.py +0 -0
  187. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/very_fast_blinking_led.py +0 -0
  188. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/write_data_to_memory.py +0 -0
  189. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/write_memory_block.py +0 -0
  190. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/messages/write_module_address_and_serial_number.py +0 -0
  191. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/py.typed +0 -0
  192. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/raw_message.py +0 -0
  193. {velbus_aio-2024.7.5 → velbus_aio-2024.10.0}/velbusaio/util.py +0 -0
@@ -2,4 +2,4 @@ include LICENSE
2
2
  include README.md
3
3
  include requirements.txt
4
4
  include velbusaio/py.typed
5
- include velbusaio/protocol.json
5
+ include velbusaio/module_spec/*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: velbus-aio
3
- Version: 2024.7.5
3
+ Version: 2024.10.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
@@ -14,7 +14,6 @@ Classifier: License :: OSI Approved :: MIT License
14
14
  Classifier: Natural Language :: English
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python
17
- Classifier: Programming Language :: Python :: 3.8
18
17
  Classifier: Programming Language :: Python :: 3.9
19
18
  Classifier: Programming Language :: Python :: 3.10
20
19
  Classifier: Programming Language :: Python :: 3.11
@@ -33,6 +32,10 @@ Requires-Dist: aiofile
33
32
  ![CI](https://github.com/Cereal2nd/velbus-aio/actions/workflows/main.yml/badge.svg)
34
33
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Cereal2nd/velbus-aio/master.svg)](https://results.pre-commit.ci/latest/github/Cereal2nd/velbus-aio/master)
35
34
 
35
+ > This project requires financial support, but it is free for you to use. You can join those helping to keep the lights on at:
36
+ >
37
+ > [<img src="https://raw.githubusercontent.com/Cereal2nd/hassio-velbusd/refs/heads/main/images/bmc-button.svg" width=150 height=40 style="margin: 5px"/>](https://buymeacoffee.com/cereal2nd) [<img src="https://raw.githubusercontent.com/Cereal2nd/hassio-velbusd/refs/heads/main/images/github-sponsors-button.svg" width=150 height=40 style="margin: 5px"/>](https://github.com/sponsors/Cereal2nd/)
38
+
36
39
  # velbus-aio
37
40
 
38
41
  Velbus Asyncio, a library to support the [Velbus](https://www.velbus.eu/) home automation system.
@@ -1,6 +1,10 @@
1
1
  ![CI](https://github.com/Cereal2nd/velbus-aio/actions/workflows/main.yml/badge.svg)
2
2
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Cereal2nd/velbus-aio/master.svg)](https://results.pre-commit.ci/latest/github/Cereal2nd/velbus-aio/master)
3
3
 
4
+ > This project requires financial support, but it is free for you to use. You can join those helping to keep the lights on at:
5
+ >
6
+ > [<img src="https://raw.githubusercontent.com/Cereal2nd/hassio-velbusd/refs/heads/main/images/bmc-button.svg" width=150 height=40 style="margin: 5px"/>](https://buymeacoffee.com/cereal2nd) [<img src="https://raw.githubusercontent.com/Cereal2nd/hassio-velbusd/refs/heads/main/images/github-sponsors-button.svg" width=150 height=40 style="margin: 5px"/>](https://github.com/sponsors/Cereal2nd/)
7
+
4
8
  # velbus-aio
5
9
 
6
10
  Velbus Asyncio, a library to support the [Velbus](https://www.velbus.eu/) home automation system.
@@ -4,7 +4,7 @@ requires = ["setuptools", "wheel"]
4
4
  [project]
5
5
  name = "velbus-aio"
6
6
  license = {text = "MIT"}
7
- version = "2024.7.5"
7
+ version = "2024.10.0"
8
8
  description = "Open-source home automation platform running on Python 3."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -18,7 +18,6 @@ classifiers = [
18
18
  "Natural Language :: English",
19
19
  "Operating System :: OS Independent",
20
20
  "Programming Language :: Python",
21
- "Programming Language :: Python :: 3.8",
22
21
  "Programming Language :: Python :: 3.9",
23
22
  "Programming Language :: Python :: 3.10",
24
23
  "Programming Language :: Python :: 3.11",
@@ -52,7 +51,7 @@ exclude_dirs = ["tests"]
52
51
  skips = ["B301", "B403", "B323", "B104", "B110"]
53
52
 
54
53
  [tool.bumpver]
55
- current_version = "2024.7.5"
54
+ current_version = "2024.10.0"
56
55
  version_pattern = "YYYY.MM.INC0"
57
56
  commit_message = "bump version {old_version} -> {new_version}"
58
57
  commit = true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: velbus-aio
3
- Version: 2024.7.5
3
+ Version: 2024.10.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
@@ -14,7 +14,6 @@ Classifier: License :: OSI Approved :: MIT License
14
14
  Classifier: Natural Language :: English
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python
17
- Classifier: Programming Language :: Python :: 3.8
18
17
  Classifier: Programming Language :: Python :: 3.9
19
18
  Classifier: Programming Language :: Python :: 3.10
20
19
  Classifier: Programming Language :: Python :: 3.11
@@ -33,6 +32,10 @@ Requires-Dist: aiofile
33
32
  ![CI](https://github.com/Cereal2nd/velbus-aio/actions/workflows/main.yml/badge.svg)
34
33
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Cereal2nd/velbus-aio/master.svg)](https://results.pre-commit.ci/latest/github/Cereal2nd/velbus-aio/master)
35
34
 
35
+ > This project requires financial support, but it is free for you to use. You can join those helping to keep the lights on at:
36
+ >
37
+ > [<img src="https://raw.githubusercontent.com/Cereal2nd/hassio-velbusd/refs/heads/main/images/bmc-button.svg" width=150 height=40 style="margin: 5px"/>](https://buymeacoffee.com/cereal2nd) [<img src="https://raw.githubusercontent.com/Cereal2nd/hassio-velbusd/refs/heads/main/images/github-sponsors-button.svg" width=150 height=40 style="margin: 5px"/>](https://github.com/sponsors/Cereal2nd/)
38
+
36
39
  # velbus-aio
37
40
 
38
41
  Velbus Asyncio, a library to support the [Velbus](https://www.velbus.eu/) home automation system.
@@ -21,7 +21,6 @@ velbusaio/handler.py
21
21
  velbusaio/helpers.py
22
22
  velbusaio/message.py
23
23
  velbusaio/module.py
24
- velbusaio/protocol.json
25
24
  velbusaio/protocol.py
26
25
  velbusaio/py.typed
27
26
  velbusaio/raw_message.py
@@ -107,4 +106,85 @@ velbusaio/messages/update_led_status.py
107
106
  velbusaio/messages/very_fast_blinking_led.py
108
107
  velbusaio/messages/write_data_to_memory.py
109
108
  velbusaio/messages/write_memory_block.py
110
- velbusaio/messages/write_module_address_and_serial_number.py
109
+ velbusaio/messages/write_module_address_and_serial_number.py
110
+ velbusaio/module_spec/01.json
111
+ velbusaio/module_spec/02.json
112
+ velbusaio/module_spec/03.json
113
+ velbusaio/module_spec/05.json
114
+ velbusaio/module_spec/06.json
115
+ velbusaio/module_spec/07.json
116
+ velbusaio/module_spec/08.json
117
+ velbusaio/module_spec/09.json
118
+ velbusaio/module_spec/0A.json
119
+ velbusaio/module_spec/0B.json
120
+ velbusaio/module_spec/0C.json
121
+ velbusaio/module_spec/0E.json
122
+ velbusaio/module_spec/0F.json
123
+ velbusaio/module_spec/10.json
124
+ velbusaio/module_spec/11.json
125
+ velbusaio/module_spec/12.json
126
+ velbusaio/module_spec/13.json
127
+ velbusaio/module_spec/14.json
128
+ velbusaio/module_spec/15.json
129
+ velbusaio/module_spec/16.json
130
+ velbusaio/module_spec/17.json
131
+ velbusaio/module_spec/18.json
132
+ velbusaio/module_spec/1A.json
133
+ velbusaio/module_spec/1B.json
134
+ velbusaio/module_spec/1D.json
135
+ velbusaio/module_spec/1E.json
136
+ velbusaio/module_spec/1F.json
137
+ velbusaio/module_spec/20.json
138
+ velbusaio/module_spec/21.json
139
+ velbusaio/module_spec/22.json
140
+ velbusaio/module_spec/23.json
141
+ velbusaio/module_spec/25.json
142
+ velbusaio/module_spec/28.json
143
+ velbusaio/module_spec/29.json
144
+ velbusaio/module_spec/2A.json
145
+ velbusaio/module_spec/2B.json
146
+ velbusaio/module_spec/2C.json
147
+ velbusaio/module_spec/2D.json
148
+ velbusaio/module_spec/2E.json
149
+ velbusaio/module_spec/2F.json
150
+ velbusaio/module_spec/30.json
151
+ velbusaio/module_spec/31.json
152
+ velbusaio/module_spec/32.json
153
+ velbusaio/module_spec/33.json
154
+ velbusaio/module_spec/34.json
155
+ velbusaio/module_spec/35.json
156
+ velbusaio/module_spec/36.json
157
+ velbusaio/module_spec/37.json
158
+ velbusaio/module_spec/38.json
159
+ velbusaio/module_spec/39.json
160
+ velbusaio/module_spec/3A.json
161
+ velbusaio/module_spec/3B.json
162
+ velbusaio/module_spec/3C.json
163
+ velbusaio/module_spec/3D.json
164
+ velbusaio/module_spec/3E.json
165
+ velbusaio/module_spec/3F.json
166
+ velbusaio/module_spec/40.json
167
+ velbusaio/module_spec/41.json
168
+ velbusaio/module_spec/42.json
169
+ velbusaio/module_spec/43.json
170
+ velbusaio/module_spec/44.json
171
+ velbusaio/module_spec/45.json
172
+ velbusaio/module_spec/48.json
173
+ velbusaio/module_spec/49.json
174
+ velbusaio/module_spec/4A.json
175
+ velbusaio/module_spec/4B.json
176
+ velbusaio/module_spec/4C.json
177
+ velbusaio/module_spec/4D.json
178
+ velbusaio/module_spec/4E.json
179
+ velbusaio/module_spec/4F.json
180
+ velbusaio/module_spec/50.json
181
+ velbusaio/module_spec/51.json
182
+ velbusaio/module_spec/52.json
183
+ velbusaio/module_spec/54.json
184
+ velbusaio/module_spec/55.json
185
+ velbusaio/module_spec/56.json
186
+ velbusaio/module_spec/57.json
187
+ velbusaio/module_spec/5A.json
188
+ velbusaio/module_spec/5C.json
189
+ velbusaio/module_spec/5F.json
190
+ velbusaio/module_spec/broadcast.json
@@ -19,7 +19,7 @@ from velbusaio.const import (
19
19
  VOLUME_LITERS_HOUR,
20
20
  )
21
21
  from velbusaio.message import Message
22
- from velbusaio.messages.edge_set_color import SetEdgeColorMessage, CustomColorPriority
22
+ from velbusaio.messages.edge_set_color import CustomColorPriority, SetEdgeColorMessage
23
23
  from velbusaio.messages.module_status import PROGRAM_SELECTION
24
24
 
25
25
  if TYPE_CHECKING:
@@ -508,7 +508,7 @@ class Temperature(Channel):
508
508
  _min = None
509
509
  _target = 0
510
510
  _cmode = None
511
- _coolmode = None
511
+ _cool_mode = None
512
512
  _cstatus = None
513
513
  _thermostat = False
514
514
  _sleep_timer = 0
@@ -9,8 +9,8 @@ MODULE_DIRECTORY = {
9
9
  0x01: "VMB8PB",
10
10
  0x02: "VMB1RY",
11
11
  0x03: "VMB1BL",
12
- 0x04: "VMB4LEDPWM-20",
13
12
  0x05: "VMB6IN",
13
+ 0x06: "VMB4LEDPWM-20",
14
14
  0x07: "VMB1DM",
15
15
  0x08: "VMB4RY",
16
16
  0x09: "VMB2BL",
@@ -73,14 +73,15 @@ MODULE_DIRECTORY = {
73
73
  0x4A: "VMB2BLE-10",
74
74
  0x4B: "VMB8DC-20",
75
75
  0x4C: "VMB6PB-20",
76
+ 0x4D: "VMBPIR-20",
76
77
  0x4F: "VMBEL1-20",
77
78
  0x50: "VMBEL2-20",
78
79
  0x51: "VMBEL4-20",
79
80
  0x52: "VMBELO-20",
80
- 0x53: "VMBGP1-20",
81
- 0x54: "VMBGP2-20",
82
- 0x55: "VMBGP4-20",
83
- 0x56: "VMBGPO-20",
81
+ 0x54: "VMBGP1-20",
82
+ 0x55: "VMBGP2-20",
83
+ 0x56: "VMBGP4-20",
84
+ 0x57: "VMBGPO-20",
84
85
  0x5A: "VMBDALI-20",
85
86
  0x5C: "VMBEL4PIR-20",
86
87
  0x5F: "VMBGP4PIR-20",
@@ -40,7 +40,7 @@ NO_RTR: Final = 0x00
40
40
  CACHEDIR: Final = ".velbuscache"
41
41
 
42
42
  # Module scan timeout values (in mSec)
43
- SCAN_MODULETYPE_TIMEOUT: Final = 2000 # time to wait for ModuleTypeRequest
43
+ SCAN_MODULETYPE_TIMEOUT: Final = 3000 # time to wait for ModuleTypeRequest
44
44
  SCAN_MODULEINFO_TIMEOUT_INITIAL: Final = 1000 # time to wait for first info (status)
45
45
  SCAN_MODULEINFO_TIMEOUT_INTERVAL: Final = (
46
46
  150 # time to wait for info interval (between next message)
@@ -34,6 +34,7 @@ class Velbus:
34
34
  self,
35
35
  dsn: str,
36
36
  cache_dir: str = get_cache_dir(),
37
+ one_address: int | None = None,
37
38
  ) -> None:
38
39
  """Init the Velbus controller."""
39
40
  self._log = logging.getLogger("velbus")
@@ -46,7 +47,7 @@ class Velbus:
46
47
  self._auto_reconnect = True
47
48
 
48
49
  self._dsn = dsn
49
- self._handler = PacketHandler(self)
50
+ self._handler = PacketHandler(self, one_address)
50
51
  self._modules: dict[int, Module] = {}
51
52
  self._submodules: list[int] = []
52
53
  self._send_queue: asyncio.Queue = asyncio.Queue()
@@ -67,11 +68,10 @@ class Velbus:
67
68
  self._log.debug("Reconnecting to transport")
68
69
  asyncio.ensure_future(self.connect())
69
70
 
70
- def add_module(
71
+ async def add_module(
71
72
  self,
72
73
  addr: int,
73
74
  typ: int,
74
- data: dict,
75
75
  serial: int | None = None,
76
76
  memorymap: int | None = None,
77
77
  build_year: int | None = None,
@@ -81,14 +81,13 @@ class Velbus:
81
81
  module = Module.factory(
82
82
  addr,
83
83
  typ,
84
- data,
85
84
  serial=serial,
86
85
  build_year=build_year,
87
86
  build_week=build_week,
88
87
  memorymap=memorymap,
89
88
  cache_dir=self._cache_dir,
90
89
  )
91
- module.initialize(self.send)
90
+ await module.initialize(self.send)
92
91
  self._modules[addr] = module
93
92
  self._log.info(f"Found module {addr}: {module}")
94
93
 
@@ -102,6 +101,10 @@ class Velbus:
102
101
  self._modules[sub_addr] = module
103
102
  module.cleanupSubChannels()
104
103
 
104
+ def addr_is_submodule(self, addr: int) -> bool:
105
+ """Check if an address is a submodule."""
106
+ return addr in self._submodules
107
+
105
108
  def get_modules(self) -> dict:
106
109
  """Return the module cache."""
107
110
  return self._modules
@@ -5,30 +5,29 @@ Velbus packet handler
5
5
 
6
6
  from __future__ import annotations
7
7
 
8
- from velbusaio.const import SCAN_MODULETYPE_TIMEOUT
9
- from velbusaio.const import SCAN_MODULEINFO_TIMEOUT_INITIAL
10
- from velbusaio.const import SCAN_MODULEINFO_TIMEOUT_INTERVAL
11
-
12
8
  import asyncio
13
9
  import json
14
10
  import logging
15
- import threading
16
11
  import os
17
12
  import pathlib
18
-
19
- from aiofile import async_open
20
-
13
+ import pprint
21
14
  from typing import TYPE_CHECKING, Awaitable, Callable
15
+
22
16
  import pkg_resources
17
+ from aiofile import async_open
23
18
 
24
19
  from velbusaio.command_registry import commandRegistry
20
+ from velbusaio.const import (
21
+ SCAN_MODULEINFO_TIMEOUT_INITIAL,
22
+ SCAN_MODULEINFO_TIMEOUT_INTERVAL,
23
+ SCAN_MODULETYPE_TIMEOUT,
24
+ )
25
25
  from velbusaio.helpers import h2, keys_exists
26
26
  from velbusaio.message import Message
27
27
  from velbusaio.messages.module_subtype import ModuleSubTypeMessage
28
- from velbusaio.messages.module_type import ModuleTypeMessage, ModuleType2Message
28
+ from velbusaio.messages.module_type import ModuleType2Message, ModuleTypeMessage
29
29
  from velbusaio.raw_message import RawMessage
30
30
 
31
-
32
31
  if TYPE_CHECKING:
33
32
  from velbusaio.controller import Velbus
34
33
 
@@ -41,21 +40,23 @@ class PacketHandler:
41
40
  def __init__(
42
41
  self,
43
42
  velbus: Velbus,
43
+ one_address: int | None = None,
44
44
  ) -> None:
45
45
  self._log = logging.getLogger("velbus-handler")
46
46
  self._log.setLevel(logging.DEBUG)
47
47
  self._velbus = velbus
48
+ self._one_address = one_address
48
49
  self._typeResponseReceived = asyncio.Event()
49
- self._scanLock = threading.Lock()
50
+ self._scanLock = asyncio.Lock()
50
51
  self._modulescan_address = 0
51
52
  self._scan_complete = False
52
53
  self._scan_delay_msec = 0
53
54
 
54
55
  async def read_protocol_data(self):
55
56
  async with async_open(
56
- pkg_resources.resource_filename(__name__, "protocol.json")
57
+ pkg_resources.resource_filename(__name__, "module_spec/broadcast.json")
57
58
  ) as protocol_file:
58
- self.pdata = json.loads(await protocol_file.read())
59
+ self.broadcast = json.loads(await protocol_file.read())
59
60
 
60
61
  def empty_cache(self) -> bool:
61
62
  if (
@@ -84,12 +85,22 @@ class PacketHandler:
84
85
  while self._modulescan_address < 254:
85
86
  address = 0
86
87
  module = None
87
- with self._scanLock:
88
+ async with self._scanLock:
88
89
  self._modulescan_address = self._modulescan_address + 1
89
90
  address = self._modulescan_address
91
+ if self._velbus.addr_is_submodule(address):
92
+ self._log.info(
93
+ f"Skipping submodule address {address}, already handled"
94
+ )
95
+ continue
96
+ self._log.info(f"Starting handling scan {address}")
90
97
  module = self._velbus.get_module(address)
91
98
 
92
- self._log.info(f"Starting handling scan {address}")
99
+ if self._one_address is not None and address != int(self._one_address):
100
+ self._log.info(
101
+ f"Skipping address {address} as we requested to only scan one address {self._one_address}"
102
+ )
103
+ continue
93
104
 
94
105
  cfile = pathlib.Path(f"{self._velbus.get_cache_dir()}/{address}.json")
95
106
  # cleanup the old module cache if needed
@@ -107,7 +118,7 @@ class PacketHandler:
107
118
  self._typeResponseReceived.wait(),
108
119
  SCAN_MODULETYPE_TIMEOUT / 1000.0,
109
120
  )
110
- with self._scanLock:
121
+ async with self._scanLock:
111
122
  module = self._velbus.get_module(address)
112
123
  except asyncio.TimeoutError:
113
124
  self._log.info(
@@ -115,20 +126,24 @@ class PacketHandler:
115
126
  )
116
127
  if module is not None:
117
128
  try:
118
- self._log.debug(f"Module {address} detected: start loading")
129
+ self._log.debug(
130
+ f"Module {module._address} detected: start loading"
131
+ )
119
132
  await asyncio.wait_for(
120
133
  module.load(from_cache=True),
121
134
  SCAN_MODULEINFO_TIMEOUT_INITIAL / 1000.0,
122
135
  )
123
- self._scan_delay_msec = SCAN_MODULEINFO_TIMEOUT_INITIAL
124
- while self._scan_delay_msec > 50 and not module.is_loaded():
136
+ self._scan_delay_msec = module.get_initial_timeout()
137
+ while (
138
+ self._scan_delay_msec > 50 and not await module.is_loaded()
139
+ ):
125
140
  # self._log.debug(
126
- # f"\t... waiting {self._scan_delay_msec} is_loaded={module.is_loaded()}"
141
+ # f"\t... waiting {self._scan_delay_msec} is_loaded={await module.is_loaded()}"
127
142
  # )
128
143
  self._scan_delay_msec = self._scan_delay_msec - 50
129
144
  await asyncio.sleep(0.05)
130
145
  self._log.info(
131
- f"Scan module {address} completed, module loaded={module.is_loaded()}"
146
+ f"Scan module {address} completed, module loaded={await module.is_loaded()}"
132
147
  )
133
148
  except asyncio.TimeoutError:
134
149
  self._log.error(
@@ -153,49 +168,47 @@ class PacketHandler:
153
168
  data = rawmsg.data_only
154
169
 
155
170
  # handle module type response message
156
- if command_value == 0xFF:
157
- if not self._scan_complete:
158
- tmsg: ModuleTypeMessage = ModuleTypeMessage()
159
- tmsg.populate(priority, address, rtr, data)
160
- with self._scanLock:
161
- self._handle_module_type(tmsg)
162
- if address == self._modulescan_address:
163
- self._typeResponseReceived.set()
164
- else:
165
- self._log.debug(
166
- f"Unexpected module type message module address {address}, Velbuslink scan?"
167
- )
168
- self._modulescan_address = address - 1
171
+ if command_value == 0xFF and not self._scan_complete:
172
+ tmsg: ModuleTypeMessage = ModuleTypeMessage()
173
+ tmsg.populate(priority, address, rtr, data)
174
+ async with self._scanLock:
175
+ await self._handle_module_type(tmsg)
176
+ if address == self._modulescan_address:
177
+ self._typeResponseReceived.set()
178
+ else:
179
+ self._log.debug(
180
+ f"Unexpected module type message module address {address}, Velbuslink scan?"
181
+ )
182
+ self._modulescan_address = address - 1
169
183
 
170
- self._typeResponseReceived.set()
184
+ self._typeResponseReceived.set()
171
185
 
172
186
  # handle module subtype response message
173
- elif command_value in (0xB0, 0xA7, 0xA6):
174
- if not self._scan_complete:
175
- msg: ModuleSubTypeMessage = ModuleSubTypeMessage()
176
- msg.populate(priority, address, rtr, data)
177
- if command_value == 0xB0:
178
- msg.sub_address_offset = 0
179
- elif command_value == 0xA7:
180
- msg.sub_address_offset = 4
181
- elif command_value == 0xA6:
182
- msg.sub_address_offset = 8
183
- with self._scanLock:
184
- self._scan_delay_msec = SCAN_MODULEINFO_TIMEOUT_INITIAL
185
- self._handle_module_subtype(msg)
187
+ elif command_value in (0xB0, 0xA7, 0xA6) and not self._scan_complete:
188
+ msg: ModuleSubTypeMessage = ModuleSubTypeMessage()
189
+ msg.populate(priority, address, rtr, data)
190
+ if command_value == 0xB0:
191
+ msg.sub_address_offset = 0
192
+ elif command_value == 0xA7:
193
+ msg.sub_address_offset = 4
194
+ elif command_value == 0xA6:
195
+ msg.sub_address_offset = 8
196
+ async with self._scanLock:
197
+ self._scan_delay_msec += SCAN_MODULEINFO_TIMEOUT_INTERVAL
198
+ self._handle_module_subtype(msg)
186
199
 
187
200
  # ignore broadcast
188
- elif command_value in self.pdata["MessagesBroadCast"]:
201
+ elif command_value in self.broadcast:
189
202
  self._log.debug(
190
203
  "Received broadcast message {} from {}, ignoring".format(
191
- self.pdata["MessageBroadCast"][str(command_value).upper()], address
204
+ self.broadcast[str(command_value).upper()], address
192
205
  )
193
206
  )
194
207
 
195
208
  # handle other messages for modules that are already scanned
196
209
  else:
197
210
  module = None
198
- with self._scanLock:
211
+ async with self._scanLock:
199
212
  module = self._velbus.get_module(address)
200
213
  if module is not None:
201
214
  module_type = module.get_type()
@@ -214,28 +227,29 @@ class PacketHandler:
214
227
  0xFE,
215
228
  0xCC,
216
229
  ): # names, memory data, memory block
217
- self._scan_delay_msec = SCAN_MODULEINFO_TIMEOUT_INTERVAL
230
+ self._scan_delay_msec += SCAN_MODULEINFO_TIMEOUT_INTERVAL
218
231
  # self._log.debug(f"Restart timeout {msg}")
219
232
  # send the message to the modules
220
233
  await module.on_message(msg)
221
234
  else:
222
235
  self._log.warning(f"NOT FOUND IN command_registry: {rawmsg}")
223
236
 
224
- def _handle_module_type(self, msg: ModuleTypeMessage | ModuleType2Message) -> None:
237
+ async def _handle_module_type(
238
+ self, msg: ModuleTypeMessage | ModuleType2Message
239
+ ) -> None:
225
240
  """
226
241
  load the module data
227
242
  """
228
243
  if msg is not None:
229
244
  module = self._velbus.get_module(msg.address)
230
245
  if module is None:
231
- data = keys_exists(self.pdata, "ModuleTypes", h2(msg.module_type))
232
- if not data:
233
- self._log.warning(f"Module not recognized: {msg.module_type}")
234
- return
235
- self._velbus.add_module(
246
+ # data = keys_exists(self.pdata, "ModuleTypes", h2(msg.module_type))
247
+ # if not data:
248
+ # self._log.warning(f"Module not recognized: {msg.module_type}")
249
+ # return
250
+ await self._velbus.add_module(
236
251
  msg.address,
237
252
  msg.module_type,
238
- data,
239
253
  memorymap=msg.memory_map_version,
240
254
  build_year=msg.build_year,
241
255
  build_week=msg.build_week,
@@ -51,13 +51,13 @@ from velbusaio.messages.memo_text import MemoTextMessage
51
51
  from velbusaio.messages.memory_data import MemoryDataMessage
52
52
  from velbusaio.messages.memory_data_block import MemoryDataBlockMessage
53
53
  from velbusaio.messages.memory_dump_request import MemoryDumpRequestMessage
54
- from velbusaio.messages.raw import MeteoRawMessage, SensorRawMessage
55
54
  from velbusaio.messages.module_status import ModuleStatusMessage, ModuleStatusMessage2
56
55
  from velbusaio.messages.module_status_request import ModuleStatusRequestMessage
57
56
  from velbusaio.messages.module_subtype import ModuleSubTypeMessage
58
- from velbusaio.messages.module_type import ModuleTypeMessage, ModuleType2Message
57
+ from velbusaio.messages.module_type import ModuleType2Message, ModuleTypeMessage
59
58
  from velbusaio.messages.module_type_request import ModuleTypeRequestMessage
60
59
  from velbusaio.messages.push_button_status import PushButtonStatusMessage
60
+ from velbusaio.messages.raw import MeteoRawMessage, SensorRawMessage
61
61
  from velbusaio.messages.read_data_block_from_memory import (
62
62
  ReadDataBlockFromMemoryMessage,
63
63
  )
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from enum import IntEnum
4
+
4
5
  from velbusaio.command_registry import register
5
6
  from velbusaio.message import Message
6
7