velbus-aio 2024.10.0__tar.gz → 2024.11.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.10.0/velbus_aio.egg-info → velbus_aio-2024.11.0}/PKG-INFO +10 -2
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/README.md +7 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/pyproject.toml +4 -3
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0/velbus_aio.egg-info}/PKG-INFO +10 -2
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/channels.py +14 -2
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/command_registry.py +1 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/handler.py +17 -5
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/blind_status.py +1 -1
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/channel_name_part1.py +1 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/channel_name_part2.py +1 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/channel_name_part3.py +1 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/cover_down.py +1 -1
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/cover_off.py +1 -1
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/cover_position.py +1 -1
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/cover_up.py +1 -1
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module.py +39 -10
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/05.json +12 -6
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/06.json +8 -4
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/08.json +8 -4
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/10.json +8 -4
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/11.json +8 -4
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/12.json +8 -4
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/22.json +14 -7
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/32.json +16 -8
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/48.json +8 -4
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/49.json +8 -4
- velbus_aio-2024.11.0/velbusaio/module_spec/4A.json +83 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/4B.json +16 -8
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/4E.json +16 -8
- velbus_aio-2024.10.0/velbusaio/module_spec/4A.json +0 -4
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/LICENSE +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/MANIFEST.in +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/requirements.txt +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/setup.cfg +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/setup.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbus_aio.egg-info/SOURCES.txt +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbus_aio.egg-info/dependency_links.txt +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbus_aio.egg-info/not-zip-safe +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbus_aio.egg-info/requires.txt +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbus_aio.egg-info/top_level.txt +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/__init__.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/const.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/controller.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/discovery.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/exceptions.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/helpers.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/message.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/__init__.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/bus_active.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/bus_error_counter_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/bus_error_counter_status_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/bus_off.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/channel_name_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/clear_led.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/counter_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/counter_status_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/dali_device_settings.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/dali_device_settings_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/dali_dim_value_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/dimmer_channel_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/dimmer_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/edge_set_color.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/edge_set_custom_color.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/fast_blinking_led.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/forced_off.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/forced_on.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/interface_status_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/ir_receiver_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/kwh_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/light_value_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/memo_text.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/memory_data.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/memory_data_block.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/memory_dump_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/module_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/module_status_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/module_subtype.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/module_type.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/module_type_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/push_button_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/raw.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/read_data_block_from_memory.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/read_data_from_memory.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/realtime_clock_status_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/receive_buffer_full.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/receive_ready.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/relay_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/restore_dimmer.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/select_program.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/sensor_settings_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/sensor_temp_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/sensor_temperature.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/set_date.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/set_daylight_saving.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/set_dimmer.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/set_led.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/set_realtime_clock.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/set_temperature.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/slider_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/slow_blinking_led.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/start_relay_blinking_timer.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/start_relay_timer.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/switch_relay_off.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/switch_relay_on.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/switch_to_comfort.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/switch_to_day.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/switch_to_night.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/switch_to_safe.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/temp_sensor_settings_part1.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/temp_sensor_settings_part2.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/temp_sensor_settings_part3.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/temp_sensor_settings_part4.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/temp_sensor_settings_request.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/temp_sensor_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/temp_set_cooling.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/temp_set_heating.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/update_led_status.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/very_fast_blinking_led.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/write_data_to_memory.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/write_memory_block.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/messages/write_module_address_and_serial_number.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/01.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/02.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/03.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/07.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/09.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/0A.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/0B.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/0C.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/0E.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/0F.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/13.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/14.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/15.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/16.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/17.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/18.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/1A.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/1B.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/1D.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/1E.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/1F.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/20.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/21.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/23.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/25.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/28.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/29.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/2A.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/2B.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/2C.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/2D.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/2E.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/2F.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/30.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/31.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/33.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/34.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/35.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/36.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/37.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/38.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/39.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/3A.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/3B.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/3C.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/3D.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/3E.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/3F.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/40.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/41.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/42.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/43.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/44.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/45.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/4C.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/4D.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/4F.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/50.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/51.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/52.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/54.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/55.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/56.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/57.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/5A.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/5C.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/5F.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/module_spec/broadcast.json +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/protocol.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/py.typed +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.0}/velbusaio/raw_message.py +0 -0
- {velbus_aio-2024.10.0 → velbus_aio-2024.11.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.11.0
|
|
4
4
|
Summary: Open-source home automation platform running on Python 3.
|
|
5
5
|
Author-email: Maikel Punie <maikel.punie@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -18,10 +18,11 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
22
|
Classifier: Topic :: Home Automation
|
|
22
23
|
Classifier: Topic :: Software Development :: Libraries
|
|
23
24
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
-
Requires-Python: >=3.
|
|
25
|
+
Requires-Python: >=3.9.0
|
|
25
26
|
Description-Content-Type: text/markdown
|
|
26
27
|
License-File: LICENSE
|
|
27
28
|
Requires-Dist: pyserial>=3.5.0
|
|
@@ -31,6 +32,13 @@ Requires-Dist: aiofile
|
|
|
31
32
|
|
|
32
33
|

|
|
33
34
|
[](https://results.pre-commit.ci/latest/github/Cereal2nd/velbus-aio/master)
|
|
35
|
+
[](https://badge.fury.io/py/velbus-aio)
|
|
36
|
+
[](https://github.com/Cereal2nd/velbus-aio)
|
|
37
|
+
[](https://github.com/cereal2nd/velbus-aio/blob/master/LICENSE)
|
|
38
|
+
[](https://pepy.tech/project/velbus-aio)
|
|
39
|
+
[](https://pepy.tech/project/velbus-aio)
|
|
40
|
+
[](https://pepy.tech/project/velbus-aio)
|
|
41
|
+
[](https://github.com/psf/black)
|
|
34
42
|
|
|
35
43
|
> 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
44
|
>
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|

|
|
2
2
|
[](https://results.pre-commit.ci/latest/github/Cereal2nd/velbus-aio/master)
|
|
3
|
+
[](https://badge.fury.io/py/velbus-aio)
|
|
4
|
+
[](https://github.com/Cereal2nd/velbus-aio)
|
|
5
|
+
[](https://github.com/cereal2nd/velbus-aio/blob/master/LICENSE)
|
|
6
|
+
[](https://pepy.tech/project/velbus-aio)
|
|
7
|
+
[](https://pepy.tech/project/velbus-aio)
|
|
8
|
+
[](https://pepy.tech/project/velbus-aio)
|
|
9
|
+
[](https://github.com/psf/black)
|
|
3
10
|
|
|
4
11
|
> 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
12
|
>
|
|
@@ -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.11.0"
|
|
8
8
|
description = "Open-source home automation platform running on Python 3."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -22,11 +22,12 @@ classifiers = [
|
|
|
22
22
|
"Programming Language :: Python :: 3.10",
|
|
23
23
|
"Programming Language :: Python :: 3.11",
|
|
24
24
|
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Programming Language :: Python :: 3.13",
|
|
25
26
|
"Topic :: Home Automation",
|
|
26
27
|
"Topic :: Software Development :: Libraries",
|
|
27
28
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
28
29
|
]
|
|
29
|
-
requires-python = ">=3.
|
|
30
|
+
requires-python = ">=3.9.0"
|
|
30
31
|
dependencies = [
|
|
31
32
|
"pyserial>=3.5.0",
|
|
32
33
|
"pyserial-asyncio_fast>=0.11",
|
|
@@ -51,7 +52,7 @@ exclude_dirs = ["tests"]
|
|
|
51
52
|
skips = ["B301", "B403", "B323", "B104", "B110"]
|
|
52
53
|
|
|
53
54
|
[tool.bumpver]
|
|
54
|
-
current_version = "2024.
|
|
55
|
+
current_version = "2024.11.0"
|
|
55
56
|
version_pattern = "YYYY.MM.INC0"
|
|
56
57
|
commit_message = "bump version {old_version} -> {new_version}"
|
|
57
58
|
commit = true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: velbus-aio
|
|
3
|
-
Version: 2024.
|
|
3
|
+
Version: 2024.11.0
|
|
4
4
|
Summary: Open-source home automation platform running on Python 3.
|
|
5
5
|
Author-email: Maikel Punie <maikel.punie@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -18,10 +18,11 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
22
|
Classifier: Topic :: Home Automation
|
|
22
23
|
Classifier: Topic :: Software Development :: Libraries
|
|
23
24
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
-
Requires-Python: >=3.
|
|
25
|
+
Requires-Python: >=3.9.0
|
|
25
26
|
Description-Content-Type: text/markdown
|
|
26
27
|
License-File: LICENSE
|
|
27
28
|
Requires-Dist: pyserial>=3.5.0
|
|
@@ -31,6 +32,13 @@ Requires-Dist: aiofile
|
|
|
31
32
|
|
|
32
33
|

|
|
33
34
|
[](https://results.pre-commit.ci/latest/github/Cereal2nd/velbus-aio/master)
|
|
35
|
+
[](https://badge.fury.io/py/velbus-aio)
|
|
36
|
+
[](https://github.com/Cereal2nd/velbus-aio)
|
|
37
|
+
[](https://github.com/cereal2nd/velbus-aio/blob/master/LICENSE)
|
|
38
|
+
[](https://pepy.tech/project/velbus-aio)
|
|
39
|
+
[](https://pepy.tech/project/velbus-aio)
|
|
40
|
+
[](https://pepy.tech/project/velbus-aio)
|
|
41
|
+
[](https://github.com/psf/black)
|
|
34
42
|
|
|
35
43
|
> 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
44
|
>
|
|
@@ -38,12 +38,14 @@ class Channel:
|
|
|
38
38
|
num: int,
|
|
39
39
|
name: str,
|
|
40
40
|
nameEditable: bool,
|
|
41
|
+
subDevice: bool,
|
|
41
42
|
writer: Callable[[Message], Awaitable[None]],
|
|
42
43
|
address: int,
|
|
43
44
|
):
|
|
44
45
|
self._num = num
|
|
45
46
|
self._module = module
|
|
46
47
|
self._name = name
|
|
48
|
+
self._subDevice = subDevice
|
|
47
49
|
if not nameEditable:
|
|
48
50
|
self._is_loaded = True
|
|
49
51
|
else:
|
|
@@ -80,6 +82,8 @@ class Channel:
|
|
|
80
82
|
return self._num
|
|
81
83
|
|
|
82
84
|
def get_full_name(self) -> str:
|
|
85
|
+
if self._subDevice:
|
|
86
|
+
return f"{self._module.get_name()} ({self._module.get_type_name()}) - {self._name}"
|
|
83
87
|
return f"{self._module.get_name()} ({self._module.get_type_name()})"
|
|
84
88
|
|
|
85
89
|
def is_loaded(self) -> bool:
|
|
@@ -94,6 +98,9 @@ class Channel:
|
|
|
94
98
|
def is_temperature(self) -> bool:
|
|
95
99
|
return False
|
|
96
100
|
|
|
101
|
+
def is_sub_device(self) -> bool:
|
|
102
|
+
return self._subDevice
|
|
103
|
+
|
|
97
104
|
def get_name(self) -> str:
|
|
98
105
|
"""
|
|
99
106
|
:return: the channel name
|
|
@@ -137,7 +144,11 @@ class Channel:
|
|
|
137
144
|
}
|
|
138
145
|
|
|
139
146
|
def to_cache(self) -> dict:
|
|
140
|
-
dst = {
|
|
147
|
+
dst = {
|
|
148
|
+
"name": self._name,
|
|
149
|
+
"type": type(self).__name__,
|
|
150
|
+
"subdevice": self._subDevice,
|
|
151
|
+
}
|
|
141
152
|
if hasattr(self, "_Unit"):
|
|
142
153
|
dst["Unit"] = self._Unit
|
|
143
154
|
return dst
|
|
@@ -448,11 +459,12 @@ class Dimmer(Channel):
|
|
|
448
459
|
num: int,
|
|
449
460
|
name: str,
|
|
450
461
|
nameEditable: bool,
|
|
462
|
+
subDevice: bool,
|
|
451
463
|
writer: Callable[[Message], Awaitable[None]],
|
|
452
464
|
address: int,
|
|
453
465
|
slider_scale: int = 100,
|
|
454
466
|
):
|
|
455
|
-
super().__init__(module, num, name, nameEditable, writer, address)
|
|
467
|
+
super().__init__(module, num, name, nameEditable, subDevice, writer, address)
|
|
456
468
|
|
|
457
469
|
self.slider_scale = slider_scale
|
|
458
470
|
# VMB4DC has dim values 0(off), 1-99(dimmed), 100(full on)
|
|
@@ -6,14 +6,15 @@ Velbus packet handler
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
8
|
import asyncio
|
|
9
|
+
import importlib.resources
|
|
9
10
|
import json
|
|
10
11
|
import logging
|
|
11
12
|
import os
|
|
12
13
|
import pathlib
|
|
13
14
|
import pprint
|
|
15
|
+
import sys
|
|
14
16
|
from typing import TYPE_CHECKING, Awaitable, Callable
|
|
15
17
|
|
|
16
|
-
import pkg_resources
|
|
17
18
|
from aiofile import async_open
|
|
18
19
|
|
|
19
20
|
from velbusaio.command_registry import commandRegistry
|
|
@@ -53,10 +54,21 @@ class PacketHandler:
|
|
|
53
54
|
self._scan_delay_msec = 0
|
|
54
55
|
|
|
55
56
|
async def read_protocol_data(self):
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
if sys.version_info >= (3, 13):
|
|
58
|
+
with importlib.resources.path(
|
|
59
|
+
__name__, "module_spec/broadcast.json"
|
|
60
|
+
) as fspath:
|
|
61
|
+
async with async_open(fspath) as protocol_file:
|
|
62
|
+
self.broadcast = json.loads(await protocol_file.read())
|
|
63
|
+
else:
|
|
64
|
+
async with async_open(
|
|
65
|
+
str(
|
|
66
|
+
importlib.resources.files(__name__.split(".")[0]).joinpath(
|
|
67
|
+
"module_spec/broadcast.json"
|
|
68
|
+
)
|
|
69
|
+
)
|
|
70
|
+
) as protocol_file:
|
|
71
|
+
self.broadcast = json.loads(await protocol_file.read())
|
|
60
72
|
|
|
61
73
|
def empty_cache(self) -> bool:
|
|
62
74
|
if (
|
|
@@ -13,7 +13,7 @@ COMMAND_CODE = 0xEC
|
|
|
13
13
|
DSTATUS = {0: "off", 1: "up", 2: "down"}
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
@register(COMMAND_CODE, ["VMB1BLE", "VMB2BLE", "VMB1BLS"])
|
|
16
|
+
@register(COMMAND_CODE, ["VMB1BLE", "VMB2BLE", "VMB1BLS", "VMB2BLE-10"])
|
|
17
17
|
class BlindStatusNgMessage(Message):
|
|
18
18
|
"""
|
|
19
19
|
sent by: VMB2BLE
|
|
@@ -4,6 +4,7 @@ This represents a velbus module
|
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
+
import importlib.resources
|
|
7
8
|
import json
|
|
8
9
|
import logging
|
|
9
10
|
import os
|
|
@@ -12,7 +13,6 @@ import struct
|
|
|
12
13
|
import sys
|
|
13
14
|
from typing import Awaitable, Callable
|
|
14
15
|
|
|
15
|
-
import pkg_resources
|
|
16
16
|
from aiofile import async_open
|
|
17
17
|
|
|
18
18
|
from velbusaio.channels import (
|
|
@@ -166,12 +166,21 @@ class Module:
|
|
|
166
166
|
self._log = logging.getLogger("velbus-module")
|
|
167
167
|
# load the protocol data
|
|
168
168
|
try:
|
|
169
|
-
|
|
170
|
-
|
|
169
|
+
if sys.version_info >= (3, 13):
|
|
170
|
+
with importlib.resources.path(
|
|
171
171
|
__name__, f"module_spec/{h2(self._type)}.json"
|
|
172
|
-
)
|
|
173
|
-
|
|
174
|
-
|
|
172
|
+
) as fspath:
|
|
173
|
+
async with async_open(fspath) as protocol_file:
|
|
174
|
+
self._data = json.loads(await protocol_file.read())
|
|
175
|
+
else:
|
|
176
|
+
async with async_open(
|
|
177
|
+
str(
|
|
178
|
+
importlib.resources.files(__name__.split(".")[0]).joinpath(
|
|
179
|
+
f"module_spec/{h2(self._type)}.json"
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
) as protocol_file:
|
|
183
|
+
self._data = json.loads(await protocol_file.read())
|
|
175
184
|
self._log.debug(f"Module spec {h2(self._type)} loaded")
|
|
176
185
|
except FileNotFoundError:
|
|
177
186
|
self._log.warning(f"No module spec for {h2(self._type)}")
|
|
@@ -204,8 +213,8 @@ class Module:
|
|
|
204
213
|
|
|
205
214
|
async def _cache(self) -> None:
|
|
206
215
|
cfile = pathlib.Path(f"{self._cache_dir}/{self._address}.json")
|
|
207
|
-
with
|
|
208
|
-
json.
|
|
216
|
+
async with async_open(cfile, "w") as fl:
|
|
217
|
+
await fl.write(json.dumps(self.to_cache(), indent=4))
|
|
209
218
|
|
|
210
219
|
def __getstate__(self) -> dict:
|
|
211
220
|
d = self.__dict__
|
|
@@ -569,6 +578,10 @@ class Module:
|
|
|
569
578
|
if "channels" in cache:
|
|
570
579
|
for num, chan in cache["channels"].items():
|
|
571
580
|
self._channels[int(num)]._name = chan["name"]
|
|
581
|
+
if "sub_device" in chan:
|
|
582
|
+
self._channels[int(num)]._sub_device = chan["sub_device"]
|
|
583
|
+
else:
|
|
584
|
+
self._channels[int(num)]._sub_device = False
|
|
572
585
|
if "Unit" in chan:
|
|
573
586
|
self._channels[int(num)]._Unit = chan["Unit"]
|
|
574
587
|
self._channels[int(num)]._is_loaded = True
|
|
@@ -746,11 +759,20 @@ class Module:
|
|
|
746
759
|
|
|
747
760
|
for chan, chan_data in self._data["Channels"].items():
|
|
748
761
|
edit = True
|
|
762
|
+
sub = True
|
|
749
763
|
if "Editable" not in chan_data or chan_data["Editable"] != "yes":
|
|
750
764
|
edit = False
|
|
765
|
+
if "Subdevice" not in chan_data or chan_data["Subdevice"] != "yes":
|
|
766
|
+
sub = False
|
|
751
767
|
cls = getattr(sys.modules[__name__], chan_data["Type"])
|
|
752
768
|
self._channels[int(chan)] = cls(
|
|
753
|
-
self,
|
|
769
|
+
module=self,
|
|
770
|
+
num=int(chan),
|
|
771
|
+
name=chan_data["Name"],
|
|
772
|
+
nameEditable=edit,
|
|
773
|
+
subDevice=sub,
|
|
774
|
+
writer=self._writer,
|
|
775
|
+
address=self._address,
|
|
754
776
|
)
|
|
755
777
|
if chan_data["Type"] == "Temperature":
|
|
756
778
|
if "Thermostat" in self._data or (
|
|
@@ -792,7 +814,13 @@ class VmbDali(Module):
|
|
|
792
814
|
async def _load_default_channels(self) -> None:
|
|
793
815
|
for chan in range(1, 64 + 1):
|
|
794
816
|
self._channels[chan] = Channel(
|
|
795
|
-
self,
|
|
817
|
+
module=self,
|
|
818
|
+
num=chan,
|
|
819
|
+
name="placeholder",
|
|
820
|
+
nameEditable=True,
|
|
821
|
+
subDevice=True,
|
|
822
|
+
writer=self._writer,
|
|
823
|
+
address=self._address,
|
|
796
824
|
)
|
|
797
825
|
# Placeholders will keep this module loading
|
|
798
826
|
# Until the DaliDeviceSettings messages either delete or replace these placeholder's
|
|
@@ -823,6 +851,7 @@ class VmbDali(Module):
|
|
|
823
851
|
message.channel,
|
|
824
852
|
None,
|
|
825
853
|
True,
|
|
854
|
+
True,
|
|
826
855
|
self._writer,
|
|
827
856
|
self._address,
|
|
828
857
|
slider_scale=254,
|
|
@@ -3,32 +3,38 @@
|
|
|
3
3
|
"01": {
|
|
4
4
|
"Editable": "yes",
|
|
5
5
|
"Name": "Push button 1",
|
|
6
|
-
"Type": "Button"
|
|
6
|
+
"Type": "Button",
|
|
7
|
+
"Subdevice": "yes"
|
|
7
8
|
},
|
|
8
9
|
"02": {
|
|
9
10
|
"Editable": "yes",
|
|
10
11
|
"Name": "Push button 2",
|
|
11
|
-
"Type": "Button"
|
|
12
|
+
"Type": "Button",
|
|
13
|
+
"Subdevice": "yes"
|
|
12
14
|
},
|
|
13
15
|
"03": {
|
|
14
16
|
"Editable": "yes",
|
|
15
17
|
"Name": "Push button 3",
|
|
16
|
-
"Type": "Button"
|
|
18
|
+
"Type": "Button",
|
|
19
|
+
"Subdevice": "yes"
|
|
17
20
|
},
|
|
18
21
|
"04": {
|
|
19
22
|
"Editable": "yes",
|
|
20
23
|
"Name": "Push button 4",
|
|
21
|
-
"Type": "Button"
|
|
24
|
+
"Type": "Button",
|
|
25
|
+
"Subdevice": "yes"
|
|
22
26
|
},
|
|
23
27
|
"05": {
|
|
24
28
|
"Editable": "yes",
|
|
25
29
|
"Name": "Push button 5",
|
|
26
|
-
"Type": "Button"
|
|
30
|
+
"Type": "Button",
|
|
31
|
+
"Subdevice": "yes"
|
|
27
32
|
},
|
|
28
33
|
"06": {
|
|
29
34
|
"Editable": "yes",
|
|
30
35
|
"Name": "Push button 6",
|
|
31
|
-
"Type": "Button"
|
|
36
|
+
"Type": "Button",
|
|
37
|
+
"Subdevice": "yes"
|
|
32
38
|
}
|
|
33
39
|
},
|
|
34
40
|
"Info": "6-Channel Input Module",
|
|
@@ -3,22 +3,26 @@
|
|
|
3
3
|
"01": {
|
|
4
4
|
"Editable": "yes",
|
|
5
5
|
"Name": "Dimmer 1",
|
|
6
|
-
"Type": "Dimmer"
|
|
6
|
+
"Type": "Dimmer",
|
|
7
|
+
"Subdevice": "yes"
|
|
7
8
|
},
|
|
8
9
|
"02": {
|
|
9
10
|
"Editable": "yes",
|
|
10
11
|
"Name": "Dimmer 2",
|
|
11
|
-
"Type": "Dimmer"
|
|
12
|
+
"Type": "Dimmer",
|
|
13
|
+
"Subdevice": "yes"
|
|
12
14
|
},
|
|
13
15
|
"03": {
|
|
14
16
|
"Editable": "yes",
|
|
15
17
|
"Name": "Dimmer 3",
|
|
16
|
-
"Type": "Dimmer"
|
|
18
|
+
"Type": "Dimmer",
|
|
19
|
+
"Subdevice": "yes"
|
|
17
20
|
},
|
|
18
21
|
"04": {
|
|
19
22
|
"Editable": "yes",
|
|
20
23
|
"Name": "Dimmer 4",
|
|
21
|
-
"Type": "Dimmer"
|
|
24
|
+
"Type": "Dimmer",
|
|
25
|
+
"Subdevice": "yes"
|
|
22
26
|
},
|
|
23
27
|
"96": {
|
|
24
28
|
"Name": "SelectedProgram",
|
|
@@ -3,22 +3,26 @@
|
|
|
3
3
|
"01": {
|
|
4
4
|
"Editable": "yes",
|
|
5
5
|
"Name": "Relay 1",
|
|
6
|
-
"Type": "Relay"
|
|
6
|
+
"Type": "Relay",
|
|
7
|
+
"Subdevice": "yes"
|
|
7
8
|
},
|
|
8
9
|
"02": {
|
|
9
10
|
"Editable": "yes",
|
|
10
11
|
"Name": "Relay 2",
|
|
11
|
-
"Type": "Relay"
|
|
12
|
+
"Type": "Relay",
|
|
13
|
+
"Subdevice": "yes"
|
|
12
14
|
},
|
|
13
15
|
"03": {
|
|
14
16
|
"Editable": "yes",
|
|
15
17
|
"Name": "Relay 3",
|
|
16
|
-
"Type": "Relay"
|
|
18
|
+
"Type": "Relay",
|
|
19
|
+
"Subdevice": "yes"
|
|
17
20
|
},
|
|
18
21
|
"04": {
|
|
19
22
|
"Editable": "yes",
|
|
20
23
|
"Name": "Relay 4",
|
|
21
|
-
"Type": "Relay"
|
|
24
|
+
"Type": "Relay",
|
|
25
|
+
"Subdevice": "yes"
|
|
22
26
|
}
|
|
23
27
|
},
|
|
24
28
|
"Info": "4 channel relay module",
|
|
@@ -3,22 +3,26 @@
|
|
|
3
3
|
"01": {
|
|
4
4
|
"Editable": "yes",
|
|
5
5
|
"Name": "Relay 1",
|
|
6
|
-
"Type": "Relay"
|
|
6
|
+
"Type": "Relay",
|
|
7
|
+
"Subdevice": "yes"
|
|
7
8
|
},
|
|
8
9
|
"02": {
|
|
9
10
|
"Editable": "yes",
|
|
10
11
|
"Name": "Relay 2",
|
|
11
|
-
"Type": "Relay"
|
|
12
|
+
"Type": "Relay",
|
|
13
|
+
"Subdevice": "yes"
|
|
12
14
|
},
|
|
13
15
|
"03": {
|
|
14
16
|
"Editable": "yes",
|
|
15
17
|
"Name": "Relay 3",
|
|
16
|
-
"Type": "Relay"
|
|
18
|
+
"Type": "Relay",
|
|
19
|
+
"Subdevice": "yes"
|
|
17
20
|
},
|
|
18
21
|
"04": {
|
|
19
22
|
"Editable": "yes",
|
|
20
23
|
"Name": "Relay 4",
|
|
21
|
-
"Type": "Relay"
|
|
24
|
+
"Type": "Relay",
|
|
25
|
+
"Subdevice": "yes"
|
|
22
26
|
},
|
|
23
27
|
"05": {
|
|
24
28
|
"Editable": "yes",
|
|
@@ -3,22 +3,26 @@
|
|
|
3
3
|
"01": {
|
|
4
4
|
"Editable": "yes",
|
|
5
5
|
"Name": "Relay 1",
|
|
6
|
-
"Type": "Relay"
|
|
6
|
+
"Type": "Relay",
|
|
7
|
+
"Subdevice": "yes"
|
|
7
8
|
},
|
|
8
9
|
"02": {
|
|
9
10
|
"Editable": "yes",
|
|
10
11
|
"Name": "Relay 2",
|
|
11
|
-
"Type": "Relay"
|
|
12
|
+
"Type": "Relay",
|
|
13
|
+
"Subdevice": "yes"
|
|
12
14
|
},
|
|
13
15
|
"03": {
|
|
14
16
|
"Editable": "yes",
|
|
15
17
|
"Name": "Relay 3",
|
|
16
|
-
"Type": "Relay"
|
|
18
|
+
"Type": "Relay",
|
|
19
|
+
"Subdevice": "yes"
|
|
17
20
|
},
|
|
18
21
|
"04": {
|
|
19
22
|
"Editable": "yes",
|
|
20
23
|
"Name": "Relay 4",
|
|
21
|
-
"Type": "Relay"
|
|
24
|
+
"Type": "Relay",
|
|
25
|
+
"Subdevice": "yes"
|
|
22
26
|
},
|
|
23
27
|
"05": {
|
|
24
28
|
"Editable": "yes",
|
|
@@ -3,22 +3,26 @@
|
|
|
3
3
|
"01": {
|
|
4
4
|
"Editable": "yes",
|
|
5
5
|
"Name": "Dimmer 1",
|
|
6
|
-
"Type": "Dimmer"
|
|
6
|
+
"Type": "Dimmer",
|
|
7
|
+
"Subdevice": "yes"
|
|
7
8
|
},
|
|
8
9
|
"02": {
|
|
9
10
|
"Editable": "yes",
|
|
10
11
|
"Name": "Dimmer 2",
|
|
11
|
-
"Type": "Dimmer"
|
|
12
|
+
"Type": "Dimmer",
|
|
13
|
+
"Subdevice": "yes"
|
|
12
14
|
},
|
|
13
15
|
"03": {
|
|
14
16
|
"Editable": "yes",
|
|
15
17
|
"Name": "Dimmer 3",
|
|
16
|
-
"Type": "Dimmer"
|
|
18
|
+
"Type": "Dimmer",
|
|
19
|
+
"Subdevice": "yes"
|
|
17
20
|
},
|
|
18
21
|
"04": {
|
|
19
22
|
"Editable": "yes",
|
|
20
23
|
"Name": "Dimmer 4",
|
|
21
|
-
"Type": "Dimmer"
|
|
24
|
+
"Type": "Dimmer",
|
|
25
|
+
"Subdevice": "yes"
|
|
22
26
|
}
|
|
23
27
|
},
|
|
24
28
|
"Info": "0/1 to 10V dimmer controller module",
|