velbus-aio 2024.7.6__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.
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/MANIFEST.in +1 -1
- {velbus_aio-2024.7.6/velbus_aio.egg-info → velbus_aio-2024.10.0}/PKG-INFO +5 -1
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/README.md +4 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/pyproject.toml +2 -2
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0/velbus_aio.egg-info}/PKG-INFO +5 -1
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbus_aio.egg-info/SOURCES.txt +82 -2
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/channels.py +2 -2
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/command_registry.py +6 -5
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/const.py +1 -1
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/controller.py +8 -5
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/handler.py +73 -59
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/__init__.py +2 -2
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/edge_set_color.py +1 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/module.py +45 -26
- velbus_aio-2024.10.0/velbusaio/module_spec/01.json +50 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/02.json +11 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/03.json +18 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/05.json +36 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/06.json +101 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/07.json +11 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/08.json +26 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/09.json +24 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/0A.json +46 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/0B.json +46 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/0C.json +13 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/0E.json +25 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/0F.json +11 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/10.json +100 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/11.json +100 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/12.json +63 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/13.json +4 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/14.json +11 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/15.json +80 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/16.json +119 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/17.json +119 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/18.json +119 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/1A.json +73 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/1B.json +100 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/1D.json +83 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/1E.json +295 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/1F.json +167 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/20.json +167 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/21.json +291 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/22.json +323 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/23.json +129 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/25.json +3 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/28.json +419 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/29.json +228 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/2A.json +239 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/2B.json +239 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/2C.json +257 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/2D.json +295 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/2E.json +212 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/2F.json +208 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/30.json +46 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/31.json +465 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/32.json +357 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/33.json +239 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/34.json +157 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/35.json +157 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/36.json +157 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/37.json +297 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/38.json +102 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/39.json +4 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/3A.json +295 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/3B.json +295 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/3C.json +295 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/3D.json +419 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/3E.json +295 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/3F.json +4 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/40.json +4 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/41.json +233 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/42.json +4 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/43.json +11 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/44.json +26 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/45.json +4 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/48.json +100 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/49.json +100 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/4A.json +4 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/4B.json +118 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/4C.json +119 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/4D.json +108 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/4E.json +443 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/4F.json +89 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/50.json +89 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/51.json +89 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/52.json +189 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/54.json +4 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/55.json +4 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/56.json +4 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/57.json +222 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/5A.json +4 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/5C.json +87 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/5F.json +66 -0
- velbus_aio-2024.10.0/velbusaio/module_spec/broadcast.json +67 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/protocol.py +1 -1
- velbus_aio-2024.7.6/velbusaio/protocol.json +0 -10194
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/LICENSE +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/requirements.txt +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/setup.cfg +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/setup.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbus_aio.egg-info/dependency_links.txt +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbus_aio.egg-info/not-zip-safe +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbus_aio.egg-info/requires.txt +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbus_aio.egg-info/top_level.txt +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/__init__.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/discovery.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/exceptions.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/helpers.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/message.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/blind_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/bus_active.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/bus_error_counter_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/bus_error_counter_status_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/bus_off.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/channel_name_part1.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/channel_name_part2.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/channel_name_part3.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/channel_name_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/clear_led.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/counter_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/counter_status_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/cover_down.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/cover_off.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/cover_position.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/cover_up.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/dali_device_settings.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/dali_device_settings_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/dali_dim_value_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/dimmer_channel_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/dimmer_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/edge_set_custom_color.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/fast_blinking_led.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/forced_off.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/forced_on.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/interface_status_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/ir_receiver_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/kwh_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/light_value_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/memo_text.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/memory_data.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/memory_data_block.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/memory_dump_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/module_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/module_status_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/module_subtype.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/module_type.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/module_type_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/push_button_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/raw.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/read_data_block_from_memory.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/read_data_from_memory.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/realtime_clock_status_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/receive_buffer_full.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/receive_ready.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/relay_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/restore_dimmer.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/select_program.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/sensor_settings_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/sensor_temp_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/sensor_temperature.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/set_date.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/set_daylight_saving.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/set_dimmer.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/set_led.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/set_realtime_clock.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/set_temperature.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/slider_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/slow_blinking_led.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/start_relay_blinking_timer.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/start_relay_timer.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/switch_relay_off.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/switch_relay_on.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/switch_to_comfort.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/switch_to_day.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/switch_to_night.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/switch_to_safe.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_settings_part1.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_settings_part2.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_settings_part3.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_settings_part4.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_settings_request.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/temp_sensor_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/temp_set_cooling.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/temp_set_heating.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/update_led_status.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/very_fast_blinking_led.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/write_data_to_memory.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/write_memory_block.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/messages/write_module_address_and_serial_number.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/py.typed +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/raw_message.py +0 -0
- {velbus_aio-2024.7.6 → velbus_aio-2024.10.0}/velbusaio/util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: velbus-aio
|
|
3
|
-
Version: 2024.
|
|
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
|
|
@@ -32,6 +32,10 @@ Requires-Dist: aiofile
|
|
|
32
32
|

|
|
33
33
|
[](https://results.pre-commit.ci/latest/github/Cereal2nd/velbus-aio/master)
|
|
34
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
|
+
|
|
35
39
|
# velbus-aio
|
|
36
40
|
|
|
37
41
|
Velbus Asyncio, a library to support the [Velbus](https://www.velbus.eu/) home automation system.
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|

|
|
2
2
|
[](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
|
+
version = "2024.10.0"
|
|
8
8
|
description = "Open-source home automation platform running on Python 3."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -51,7 +51,7 @@ exclude_dirs = ["tests"]
|
|
|
51
51
|
skips = ["B301", "B403", "B323", "B104", "B110"]
|
|
52
52
|
|
|
53
53
|
[tool.bumpver]
|
|
54
|
-
current_version = "2024.
|
|
54
|
+
current_version = "2024.10.0"
|
|
55
55
|
version_pattern = "YYYY.MM.INC0"
|
|
56
56
|
commit_message = "bump version {old_version} -> {new_version}"
|
|
57
57
|
commit = true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: velbus-aio
|
|
3
|
-
Version: 2024.
|
|
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
|
|
@@ -32,6 +32,10 @@ Requires-Dist: aiofile
|
|
|
32
32
|

|
|
33
33
|
[](https://results.pre-commit.ci/latest/github/Cereal2nd/velbus-aio/master)
|
|
34
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
|
+
|
|
35
39
|
# velbus-aio
|
|
36
40
|
|
|
37
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
|
|
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
|
-
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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 =
|
|
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
|
|
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 =
|
|
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__, "
|
|
57
|
+
pkg_resources.resource_filename(__name__, "module_spec/broadcast.json")
|
|
57
58
|
) as protocol_file:
|
|
58
|
-
self.
|
|
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.
|
|
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(
|
|
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 =
|
|
124
|
-
while
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
-
|
|
184
|
+
self._typeResponseReceived.set()
|
|
171
185
|
|
|
172
186
|
# handle module subtype response message
|
|
173
|
-
elif command_value in (0xB0, 0xA7, 0xA6):
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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.
|
|
201
|
+
elif command_value in self.broadcast:
|
|
189
202
|
self._log.debug(
|
|
190
203
|
"Received broadcast message {} from {}, ignoring".format(
|
|
191
|
-
self.
|
|
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
|
|
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(
|
|
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
|
-
|
|
234
|
-
|
|
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
|
|
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
|
)
|