velbus-aio 2025.3.1__tar.gz → 2025.4.2__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-2025.3.1/velbus_aio.egg-info → velbus_aio-2025.4.2}/PKG-INFO +3 -2
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/pyproject.toml +2 -2
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2/velbus_aio.egg-info}/PKG-INFO +3 -2
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbus_aio.egg-info/SOURCES.txt +5 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/channels.py +7 -1
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/command_registry.py +4 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/__init__.py +3 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/channel_name_part1.py +1 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/channel_name_part2.py +1 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/channel_name_part3.py +1 -0
- velbus_aio-2025.4.2/velbusaio/messages/counter_value.py +44 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/dimmer_channel_status.py +1 -1
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/module_status.py +1 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/module_type.py +3 -0
- velbus_aio-2025.4.2/velbusaio/messages/psu_load.py +56 -0
- velbus_aio-2025.4.2/velbusaio/messages/psu_values.py +53 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/restore_dimmer.py +10 -1
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/set_dimmer.py +4 -1
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/slider_status.py +10 -1
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module.py +7 -0
- velbus_aio-2025.4.2/velbusaio/module_spec/04.json +282 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/06.json +1 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/4B.json +1 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/4E.json +150 -50
- velbus_aio-2025.4.2/velbusaio/vlp_reader.py +33 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/LICENSE +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/MANIFEST.in +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/README.md +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/requirements.txt +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/setup.cfg +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/setup.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbus_aio.egg-info/dependency_links.txt +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbus_aio.egg-info/not-zip-safe +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbus_aio.egg-info/requires.txt +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbus_aio.egg-info/top_level.txt +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/__init__.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/const.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/controller.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/discovery.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/exceptions.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/handler.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/helpers.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/message.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/blind_status.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/bus_active.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/bus_error_counter_status.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/bus_error_counter_status_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/bus_off.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/channel_name_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/clear_led.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/counter_status.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/counter_status_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/cover_down.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/cover_off.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/cover_position.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/cover_up.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/dali_device_settings.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/dali_device_settings_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/dali_dim_value_status.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/dimmer_status.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/edge_set_color.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/edge_set_custom_color.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/fast_blinking_led.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/forced_off.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/forced_on.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/interface_status_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/ir_receiver_status.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/kwh_status.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/light_value_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/memo_text.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/memory_data.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/memory_data_block.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/memory_dump_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/module_status_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/module_subtype.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/module_type_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/push_button_status.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/raw.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/read_data_block_from_memory.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/read_data_from_memory.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/realtime_clock_status_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/receive_buffer_full.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/receive_ready.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/relay_status.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/select_program.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/sensor_settings_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/sensor_temp_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/sensor_temperature.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/set_date.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/set_daylight_saving.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/set_led.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/set_realtime_clock.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/set_temperature.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/slow_blinking_led.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/start_relay_blinking_timer.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/start_relay_timer.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/switch_relay_off.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/switch_relay_on.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/switch_to_comfort.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/switch_to_day.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/switch_to_night.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/switch_to_safe.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/temp_sensor_settings_part1.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/temp_sensor_settings_part2.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/temp_sensor_settings_part3.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/temp_sensor_settings_part4.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/temp_sensor_settings_request.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/temp_sensor_status.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/temp_set_cooling.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/temp_set_heating.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/update_led_status.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/very_fast_blinking_led.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/write_data_to_memory.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/write_memory_block.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/messages/write_module_address_and_serial_number.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/01.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/02.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/03.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/05.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/07.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/08.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/09.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/0A.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/0B.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/0C.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/0E.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/0F.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/10.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/11.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/12.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/13.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/14.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/15.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/16.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/17.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/18.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/1A.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/1B.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/1D.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/1E.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/1F.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/20.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/21.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/22.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/23.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/25.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/28.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/29.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/2A.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/2B.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/2C.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/2D.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/2E.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/2F.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/30.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/31.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/32.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/33.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/34.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/35.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/36.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/37.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/38.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/39.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/3A.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/3B.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/3C.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/3D.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/3E.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/3F.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/40.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/41.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/42.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/43.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/44.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/45.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/48.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/49.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/4A.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/4C.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/4D.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/4F.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/50.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/51.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/52.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/54.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/55.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/56.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/57.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/5A.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/5B.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/5C.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/5F.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/60.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/module_spec/broadcast.json +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/protocol.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/py.typed +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/raw_message.py +0 -0
- {velbus_aio-2025.3.1 → velbus_aio-2025.4.2}/velbusaio/util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: velbus-aio
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.4.2
|
|
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
|
|
@@ -29,6 +29,7 @@ Requires-Dist: pyserial>=3.5.0
|
|
|
29
29
|
Requires-Dist: pyserial-asyncio_fast>=0.11
|
|
30
30
|
Requires-Dist: backoff>=1.10.0
|
|
31
31
|
Requires-Dist: aiofile
|
|
32
|
+
Dynamic: license-file
|
|
32
33
|
|
|
33
34
|

|
|
34
35
|
[](https://results.pre-commit.ci/latest/github/Cereal2nd/velbus-aio/master)
|
|
@@ -4,7 +4,7 @@ requires = ["setuptools", "wheel"]
|
|
|
4
4
|
[project]
|
|
5
5
|
name = "velbus-aio"
|
|
6
6
|
license = {text = "MIT"}
|
|
7
|
-
version = "2025.
|
|
7
|
+
version = "2025.4.2"
|
|
8
8
|
description = "Open-source home automation platform running on Python 3."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -52,7 +52,7 @@ exclude_dirs = ["tests"]
|
|
|
52
52
|
skips = ["B301", "B403", "B323", "B104", "B110"]
|
|
53
53
|
|
|
54
54
|
[tool.bumpver]
|
|
55
|
-
current_version = "2025.
|
|
55
|
+
current_version = "2025.4.2"
|
|
56
56
|
version_pattern = "YYYY.MM.INC0"
|
|
57
57
|
commit_message = "bump version {old_version} -> {new_version}"
|
|
58
58
|
commit = true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: velbus-aio
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.4.2
|
|
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
|
|
@@ -29,6 +29,7 @@ Requires-Dist: pyserial>=3.5.0
|
|
|
29
29
|
Requires-Dist: pyserial-asyncio_fast>=0.11
|
|
30
30
|
Requires-Dist: backoff>=1.10.0
|
|
31
31
|
Requires-Dist: aiofile
|
|
32
|
+
Dynamic: license-file
|
|
32
33
|
|
|
33
34
|

|
|
34
35
|
[](https://results.pre-commit.ci/latest/github/Cereal2nd/velbus-aio/master)
|
|
@@ -25,6 +25,7 @@ velbusaio/protocol.py
|
|
|
25
25
|
velbusaio/py.typed
|
|
26
26
|
velbusaio/raw_message.py
|
|
27
27
|
velbusaio/util.py
|
|
28
|
+
velbusaio/vlp_reader.py
|
|
28
29
|
velbusaio/messages/__init__.py
|
|
29
30
|
velbusaio/messages/blind_status.py
|
|
30
31
|
velbusaio/messages/bus_active.py
|
|
@@ -38,6 +39,7 @@ velbusaio/messages/channel_name_request.py
|
|
|
38
39
|
velbusaio/messages/clear_led.py
|
|
39
40
|
velbusaio/messages/counter_status.py
|
|
40
41
|
velbusaio/messages/counter_status_request.py
|
|
42
|
+
velbusaio/messages/counter_value.py
|
|
41
43
|
velbusaio/messages/cover_down.py
|
|
42
44
|
velbusaio/messages/cover_off.py
|
|
43
45
|
velbusaio/messages/cover_position.py
|
|
@@ -65,6 +67,8 @@ velbusaio/messages/module_status_request.py
|
|
|
65
67
|
velbusaio/messages/module_subtype.py
|
|
66
68
|
velbusaio/messages/module_type.py
|
|
67
69
|
velbusaio/messages/module_type_request.py
|
|
70
|
+
velbusaio/messages/psu_load.py
|
|
71
|
+
velbusaio/messages/psu_values.py
|
|
68
72
|
velbusaio/messages/push_button_status.py
|
|
69
73
|
velbusaio/messages/raw.py
|
|
70
74
|
velbusaio/messages/read_data_block_from_memory.py
|
|
@@ -110,6 +114,7 @@ velbusaio/messages/write_module_address_and_serial_number.py
|
|
|
110
114
|
velbusaio/module_spec/01.json
|
|
111
115
|
velbusaio/module_spec/02.json
|
|
112
116
|
velbusaio/module_spec/03.json
|
|
117
|
+
velbusaio/module_spec/04.json
|
|
113
118
|
velbusaio/module_spec/05.json
|
|
114
119
|
velbusaio/module_spec/06.json
|
|
115
120
|
velbusaio/module_spec/07.json
|
|
@@ -379,6 +379,8 @@ class ButtonCounter(Button):
|
|
|
379
379
|
_pulses = None
|
|
380
380
|
_counter = None
|
|
381
381
|
_delay = None
|
|
382
|
+
_power = None
|
|
383
|
+
_energy = None
|
|
382
384
|
|
|
383
385
|
def get_categories(self) -> list[str]:
|
|
384
386
|
if self._counter:
|
|
@@ -391,11 +393,13 @@ class ButtonCounter(Button):
|
|
|
391
393
|
return False
|
|
392
394
|
|
|
393
395
|
def get_state(self) -> int:
|
|
394
|
-
|
|
396
|
+
if self._energy:
|
|
397
|
+
return self._energy
|
|
395
398
|
# if we don't know the delay
|
|
396
399
|
# or we don't know the unit
|
|
397
400
|
# or the delay is the max value
|
|
398
401
|
# we always return 0
|
|
402
|
+
val = 0
|
|
399
403
|
if not self._delay or not self._Unit or self._delay == 0xFFFF:
|
|
400
404
|
return round(0, 2)
|
|
401
405
|
if self._Unit == VOLUME_LITERS_HOUR:
|
|
@@ -418,6 +422,8 @@ class ButtonCounter(Button):
|
|
|
418
422
|
return None
|
|
419
423
|
|
|
420
424
|
def get_counter_state(self) -> int:
|
|
425
|
+
if self._power:
|
|
426
|
+
return self._power
|
|
421
427
|
return round((self._counter / self._pulses), 2)
|
|
422
428
|
|
|
423
429
|
def get_counter_unit(self) -> str:
|
|
@@ -9,6 +9,7 @@ MODULE_DIRECTORY = {
|
|
|
9
9
|
0x01: "VMB8PB",
|
|
10
10
|
0x02: "VMB1RY",
|
|
11
11
|
0x03: "VMB1BL",
|
|
12
|
+
0x04: "VMBPSUMNGR-20",
|
|
12
13
|
0x05: "VMB6IN",
|
|
13
14
|
0x06: "VMB4LEDPWM-20",
|
|
14
15
|
0x07: "VMB1DM",
|
|
@@ -39,6 +40,8 @@ MODULE_DIRECTORY = {
|
|
|
39
40
|
0x20: "VMBGP4",
|
|
40
41
|
0x21: "VMBGPO",
|
|
41
42
|
0x22: "VMB7IN",
|
|
43
|
+
0x23: "VMBPIRO-10",
|
|
44
|
+
0x24: "VMBGPTC",
|
|
42
45
|
0x28: "VMBGPOD",
|
|
43
46
|
0x29: "VMB1RYNOS",
|
|
44
47
|
0x2A: "VMBPIRM",
|
|
@@ -47,6 +50,7 @@ MODULE_DIRECTORY = {
|
|
|
47
50
|
0x2D: "VMBGP4PIR",
|
|
48
51
|
0x2E: "VMB1BLS",
|
|
49
52
|
0x2F: "VMBDMI-R",
|
|
53
|
+
0x30: "VMBRFR8S",
|
|
50
54
|
0x31: "VMBMETEO",
|
|
51
55
|
0x32: "VMB4AN",
|
|
52
56
|
0x33: "VMBVP01",
|
|
@@ -33,6 +33,7 @@ from velbusaio.messages.channel_name_request import (
|
|
|
33
33
|
from velbusaio.messages.clear_led import ClearLedMessage
|
|
34
34
|
from velbusaio.messages.counter_status import CounterStatusMessage
|
|
35
35
|
from velbusaio.messages.counter_status_request import CounterStatusRequestMessage
|
|
36
|
+
from velbusaio.messages.counter_value import CounterValueMessage
|
|
36
37
|
from velbusaio.messages.cover_down import CoverDownMessage, CoverDownMessage2
|
|
37
38
|
from velbusaio.messages.cover_off import CoverOffMessage, CoverOffMessage2
|
|
38
39
|
from velbusaio.messages.cover_position import CoverPosMessage
|
|
@@ -56,6 +57,8 @@ from velbusaio.messages.module_status_request import ModuleStatusRequestMessage
|
|
|
56
57
|
from velbusaio.messages.module_subtype import ModuleSubTypeMessage
|
|
57
58
|
from velbusaio.messages.module_type import ModuleType2Message, ModuleTypeMessage
|
|
58
59
|
from velbusaio.messages.module_type_request import ModuleTypeRequestMessage
|
|
60
|
+
from velbusaio.messages.psu_load import PsuLoadMessage
|
|
61
|
+
from velbusaio.messages.psu_values import PsuValuesMessage
|
|
59
62
|
from velbusaio.messages.push_button_status import PushButtonStatusMessage
|
|
60
63
|
from velbusaio.messages.raw import MeteoRawMessage, SensorRawMessage
|
|
61
64
|
from velbusaio.messages.read_data_block_from_memory import (
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""
|
|
2
|
+
:author: Maikel Punie <maikel.punie@gmail.com>
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from velbusaio.command_registry import register
|
|
8
|
+
from velbusaio.message import Message
|
|
9
|
+
|
|
10
|
+
COMMAND_CODE = 0xA4
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@register(COMMAND_CODE, ["VMB8IN-20"])
|
|
14
|
+
class CounterValueMessage(Message):
|
|
15
|
+
|
|
16
|
+
def __init__(self, address=None):
|
|
17
|
+
Message.__init__(self)
|
|
18
|
+
self.channel = 0
|
|
19
|
+
self.power = 0
|
|
20
|
+
self.energy = 0
|
|
21
|
+
|
|
22
|
+
def populate(self, priority, address, rtr, data):
|
|
23
|
+
"""
|
|
24
|
+
-DB0 bit 0-4 = channel
|
|
25
|
+
-DB0 bit 5-7 = Highest nibble (bits 19…16) of Power
|
|
26
|
+
-DB1 = bits 15…8 of Power
|
|
27
|
+
-DB2 = bits 7…0 of Power
|
|
28
|
+
-DB3 bit 0-7 = energy counter
|
|
29
|
+
-DB4 bit 0-7 = energy counter
|
|
30
|
+
-DB5 bit 0-7 = energy counter
|
|
31
|
+
:return: None
|
|
32
|
+
"""
|
|
33
|
+
self.needs_no_rtr(rtr)
|
|
34
|
+
self.needs_data(data, 7)
|
|
35
|
+
self.set_attributes(priority, address, rtr)
|
|
36
|
+
self.channel = (data[0] & 0x0F0) + 1
|
|
37
|
+
self.power = (data[0] << 16) + (data[1] << 8) + data[2]
|
|
38
|
+
self.energy = (data[3] << 16) + (data[4] << 8) + data[5]
|
|
39
|
+
|
|
40
|
+
def get_channels(self):
|
|
41
|
+
"""
|
|
42
|
+
:return: list
|
|
43
|
+
"""
|
|
44
|
+
return self.channel
|
|
@@ -22,7 +22,7 @@ LED_FAST_BLINKING = 1 << 5
|
|
|
22
22
|
LED_VERY_FAST_BLINKING = 1 << 4
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
@register(COMMAND_CODE, ["VMB4DC", "VMBDMI", "VMBDMI-R", "VMB8DC-20"])
|
|
25
|
+
@register(COMMAND_CODE, ["VMB4DC", "VMBDMI", "VMBDMI-R", "VMB8DC-20", "VMB4LEDPWM-20"])
|
|
26
26
|
class DimmerChannelStatusMessage(Message):
|
|
27
27
|
"""
|
|
28
28
|
sent by: VMB4DC
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
:author: Maikel Punie
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import struct
|
|
8
|
+
|
|
9
|
+
from velbusaio.command_registry import register
|
|
10
|
+
from velbusaio.message import Message
|
|
11
|
+
|
|
12
|
+
COMMAND_CODE = 0xA2
|
|
13
|
+
BALANCED = 0x01
|
|
14
|
+
BOOST = 0x02
|
|
15
|
+
BACKUP = 0x03
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@register(COMMAND_CODE, ["VMBPSUMNGR-20"])
|
|
19
|
+
class PsuLoadMessage(Message):
|
|
20
|
+
|
|
21
|
+
def __init__(self, address=None):
|
|
22
|
+
Message.__init__(self)
|
|
23
|
+
self.mode = 0
|
|
24
|
+
self.load_1 = 0
|
|
25
|
+
self.load_2 = 0
|
|
26
|
+
self.out = 0
|
|
27
|
+
|
|
28
|
+
def populate(self, priority, address, rtr, data):
|
|
29
|
+
"""
|
|
30
|
+
:return: None
|
|
31
|
+
"""
|
|
32
|
+
self.needs_low_priority(priority)
|
|
33
|
+
self.needs_no_rtr(rtr)
|
|
34
|
+
self.needs_data(data, 3)
|
|
35
|
+
self.set_attributes(priority, address, rtr)
|
|
36
|
+
self.mode = data[0]
|
|
37
|
+
self.load_1 = data[1]
|
|
38
|
+
self.load_2 = data[2]
|
|
39
|
+
self.out = data[3]
|
|
40
|
+
|
|
41
|
+
def data_to_binary(self):
|
|
42
|
+
"""
|
|
43
|
+
:return: bytes
|
|
44
|
+
"""
|
|
45
|
+
return (
|
|
46
|
+
bytes(
|
|
47
|
+
[
|
|
48
|
+
COMMAND_CODE,
|
|
49
|
+
self.mode,
|
|
50
|
+
self.load_1,
|
|
51
|
+
self.load_2,
|
|
52
|
+
self.out,
|
|
53
|
+
]
|
|
54
|
+
)
|
|
55
|
+
+ struct.pack(">L", self.delay_time)[-3:]
|
|
56
|
+
)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""
|
|
2
|
+
:author: Maikel Punie
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import struct
|
|
8
|
+
|
|
9
|
+
from velbusaio.command_registry import register
|
|
10
|
+
from velbusaio.message import Message
|
|
11
|
+
|
|
12
|
+
COMMAND_CODE = 0xA3
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@register(COMMAND_CODE, ["VMBPSUMNGR-20"])
|
|
16
|
+
class PsuValuesMessage(Message):
|
|
17
|
+
|
|
18
|
+
def __init__(self, address=None):
|
|
19
|
+
Message.__init__(self)
|
|
20
|
+
self.channel = 0
|
|
21
|
+
self.watt = 0
|
|
22
|
+
self.volt = 0
|
|
23
|
+
self.amp = 0
|
|
24
|
+
|
|
25
|
+
def populate(self, priority, address, rtr, data):
|
|
26
|
+
"""
|
|
27
|
+
:return: None
|
|
28
|
+
"""
|
|
29
|
+
self.needs_low_priority(priority)
|
|
30
|
+
self.needs_no_rtr(rtr)
|
|
31
|
+
self.needs_data(data, 3)
|
|
32
|
+
self.set_attributes(priority, address, rtr)
|
|
33
|
+
self.channel = (data[0] & 0xF0) >> 4
|
|
34
|
+
self.watt = ((data[0] & 0x0F) << 16 | data[1] << 8 | data[2]) / 1000
|
|
35
|
+
self.volt = (data[3] << 8 | data[4]) / 1000
|
|
36
|
+
self.amp = (data[5] << 8 | data[6]) / 1000
|
|
37
|
+
|
|
38
|
+
def data_to_binary(self):
|
|
39
|
+
"""
|
|
40
|
+
:return: bytes
|
|
41
|
+
"""
|
|
42
|
+
return (
|
|
43
|
+
bytes(
|
|
44
|
+
[
|
|
45
|
+
COMMAND_CODE,
|
|
46
|
+
self.mode,
|
|
47
|
+
self.load_1,
|
|
48
|
+
self.load_2,
|
|
49
|
+
self.out,
|
|
50
|
+
]
|
|
51
|
+
)
|
|
52
|
+
+ struct.pack(">L", self.delay_time)[-3:]
|
|
53
|
+
)
|
|
@@ -12,7 +12,16 @@ COMMAND_CODE = 0x11
|
|
|
12
12
|
|
|
13
13
|
@register(
|
|
14
14
|
COMMAND_CODE,
|
|
15
|
-
[
|
|
15
|
+
[
|
|
16
|
+
"VMB1DM",
|
|
17
|
+
"VMBDME",
|
|
18
|
+
"VMBDMI-R",
|
|
19
|
+
"VMBDMI",
|
|
20
|
+
"VMB1LED",
|
|
21
|
+
"VMB4DC",
|
|
22
|
+
"VMB8DC-20",
|
|
23
|
+
"VMB4LEDPWM-20",
|
|
24
|
+
],
|
|
16
25
|
)
|
|
17
26
|
class RestoreDimmerMessage(Message):
|
|
18
27
|
"""
|
|
@@ -54,7 +54,10 @@ class SetDimmerMessage(Message):
|
|
|
54
54
|
) + self.dimmer_transitiontime.to_bytes(2, byteorder="big", signed=False)
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
@register(
|
|
57
|
+
@register(
|
|
58
|
+
COMMAND_CODE,
|
|
59
|
+
["VMBDALI", "VMBDALI-20", "VMBDMI", "VMBDMI-R", "VMB8DC-20", "VMB4LEDPWM-20"],
|
|
60
|
+
)
|
|
58
61
|
class SetDimmerMessage2(SetDimmerMessage):
|
|
59
62
|
"""This with this message the channel numbering is an integer
|
|
60
63
|
send by:
|
|
@@ -12,7 +12,16 @@ COMMAND_CODE = 0x0F
|
|
|
12
12
|
|
|
13
13
|
@register(
|
|
14
14
|
COMMAND_CODE,
|
|
15
|
-
[
|
|
15
|
+
[
|
|
16
|
+
"VMB1DM",
|
|
17
|
+
"VMBDME",
|
|
18
|
+
"VMB4DC",
|
|
19
|
+
"VMBDMI",
|
|
20
|
+
"VMBDMI-R",
|
|
21
|
+
"VMB1LED",
|
|
22
|
+
"VMB8DC-20",
|
|
23
|
+
"VMB4LEDPWM-20",
|
|
24
|
+
],
|
|
16
25
|
)
|
|
17
26
|
class SliderStatusMessage(Message):
|
|
18
27
|
"""
|
|
@@ -69,6 +69,7 @@ from velbusaio.messages.channel_name_request import (
|
|
|
69
69
|
from velbusaio.messages.clear_led import ClearLedMessage
|
|
70
70
|
from velbusaio.messages.counter_status import CounterStatusMessage
|
|
71
71
|
from velbusaio.messages.counter_status_request import CounterStatusRequestMessage
|
|
72
|
+
from velbusaio.messages.counter_value import CounterValueMessage
|
|
72
73
|
from velbusaio.messages.dali_device_settings import DaliDeviceSettingMsg
|
|
73
74
|
from velbusaio.messages.dali_device_settings import DeviceType as DaliDeviceType
|
|
74
75
|
from velbusaio.messages.dali_device_settings import DeviceTypeMsg as DaliDeviceTypeMsg
|
|
@@ -545,6 +546,10 @@ class Module:
|
|
|
545
546
|
await self._update_channel(
|
|
546
547
|
message.sensor, {"cur": message.value, "unit": message.unit}
|
|
547
548
|
)
|
|
549
|
+
elif isinstance(message, CounterValueMessage):
|
|
550
|
+
await self._update_channel(
|
|
551
|
+
message.channel, {"power": message.power, "energy": message.energy}
|
|
552
|
+
)
|
|
548
553
|
|
|
549
554
|
async def _update_channel(self, channel: int, updates: dict):
|
|
550
555
|
try:
|
|
@@ -785,6 +790,8 @@ class Module:
|
|
|
785
790
|
"ThermostatAddr" in self._data and self._data["ThermostatAddr"] != 0
|
|
786
791
|
):
|
|
787
792
|
await self._update_channel(int(chan), {"thermostat": True})
|
|
793
|
+
if chan_data["Type"] == "Dimmer" and "sliderScale" in self._data:
|
|
794
|
+
self._channels[int(chan)].slider_scale = self._data["sliderScale"]
|
|
788
795
|
|
|
789
796
|
|
|
790
797
|
class VmbDali(Module):
|