boneio 1.1.0.dev2__tar.gz → 1.1.0.dev4__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.
- {boneio-1.1.0.dev2/boneio.egg-info → boneio-1.1.0.dev4}/PKG-INFO +2 -1
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/config/config_helper.py +8 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/manager/inputs.py +8 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/manager/manager.py +32 -3
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/manager/remote.py +113 -4
- boneio-1.1.0.dev4/boneio/core/manager/update.py +341 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/remote/__init__.py +9 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/remote/base.py +2 -0
- boneio-1.1.0.dev4/boneio/core/remote/wled.py +572 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/integration/homeassistant.py +45 -2
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/runner.py +3 -2
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/schema/actions.yaml +18 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/schema/remote_devices.yaml +106 -3
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/schema/schema.yaml +12 -0
- boneio-1.1.0.dev4/boneio/version.py +2 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/app.py +2 -0
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/cssMode-Ca1DAf9-.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/cssMode-CfBnHhQI.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/freemarker2-C5IgNKwL.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/freemarker2-Bh2BQpSG.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/handlebars-coN2SbcA.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/handlebars-D68RL95z.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/html-DauOMz0u.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/html-XKVYovyY.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/htmlMode-CmodurAE.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/htmlMode-QT0rbnhL.js +1 -1
- boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/index-D0XGmf2O.css +1 -0
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/index-CeFOvpPM.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/index-NKuu8fvk.js +201 -201
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/javascript-N6k9oxRy.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/javascript-CxT2_Xcl.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/jsonMode-DCkYHItT.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/jsonMode-mhlSbJro.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/liquid-CuYEfgul.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/liquid-D62PitRX.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/mdx-DEiUIP8w.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/mdx-C5xjvE7q.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/python-DBpf3_HZ.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/python-B5fpI3od.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/razor-S1P72cEP.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/razor-DaPtFLXE.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/tsMode-A2L2Jxa9.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/tsMode-ltYtI_us.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/typescript-CupJHRfY.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/typescript-DwdFtOSo.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/xml-DDPTy55c.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/xml-CiaIsyq7.js +1 -1
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/yaml-CuImUjrc.js → boneio-1.1.0.dev4/boneio/webui/frontend-dist/assets/yaml-DWYHE4pc.js +1 -1
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/index.html +2 -2
- {boneio-1.1.0.dev2/boneio/webui/schema → boneio-1.1.0.dev4/boneio/webui/frontend-dist/schem}/binary_sensor.schema.json +32 -0
- {boneio-1.1.0.dev2/boneio/webui/schema → boneio-1.1.0.dev4/boneio/webui/frontend-dist/schem}/config.schema.json +338 -3
- {boneio-1.1.0.dev2/boneio/webui/schema → boneio-1.1.0.dev4/boneio/webui/frontend-dist/schem}/event.schema.json +112 -0
- {boneio-1.1.0.dev2/boneio/webui/schema → boneio-1.1.0.dev4/boneio/webui/frontend-dist/schem}/mqtt.schema.json +13 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/remote_devices.schema.json +179 -1
- {boneio-1.1.0.dev2/boneio/webui/schema → boneio-1.1.0.dev4/boneio/webui/frontend-dist/schem}/web.schema.json +2 -2
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/routes/config.py +3 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/routes/remote_devices.py +84 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/routes/update.py +42 -1
- {boneio-1.1.0.dev2/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev4/boneio/webui/schema}/binary_sensor.schema.json +32 -0
- {boneio-1.1.0.dev2/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev4/boneio/webui/schema}/config.schema.json +338 -3
- {boneio-1.1.0.dev2/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev4/boneio/webui/schema}/event.schema.json +112 -0
- {boneio-1.1.0.dev2/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev4/boneio/webui/schema}/mqtt.schema.json +13 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/remote_devices.schema.json +179 -1
- {boneio-1.1.0.dev2/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev4/boneio/webui/schema}/web.schema.json +2 -2
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/web_server.py +34 -29
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4/boneio.egg-info}/PKG-INFO +2 -1
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio.egg-info/SOURCES.txt +19 -17
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio.egg-info/requires.txt +1 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/pyproject.toml +1 -0
- boneio-1.1.0.dev2/boneio/version.py +0 -2
- boneio-1.1.0.dev2/boneio/webui/frontend-dist/assets/index-BGHXdp7U.css +0 -1
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/LICENSE +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/MANIFEST.in +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/README.md +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.2/input.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.2/output_24_16.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.2/output_32_10.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.2/output_32_5.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.2/output_cover.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.3/input.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.3/output_24_16.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.3/output_32_10.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.3/output_32_5.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.3/output_cover.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.4/input.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.4/output_24_16.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.4/output_32_10.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.4/output_32_5.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.4/output_cover.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.5/input.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.5/output_24_16.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.5/output_32_10.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.5/output_cover.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.6/input.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.6/output_24_16.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.6/output_32_10.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.6/output_cover.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.7/input.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.7/output_24_16.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.7/output_32_10.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.7/output_cover.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.8/input.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.8/output_24_16.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.8/output_32_10.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.8/output_cover.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/bonecli.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/cover/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/cover/cover.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/cover/previous.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/cover/time_based.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/cover/venetian.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/group/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/group/output_group.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/input/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/input/binary_sensor.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/input/detectors.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/input/event.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/output/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/output/basic.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/output/mcp.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/output/pca.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/output/pcf.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/sensor/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/components/sensor/virtual_energy.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/const.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/config/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/config/package-lock.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/config/package.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/config/schema_converter.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/config/yaml_util.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/discovery.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/events/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/events/bus.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/manager/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/manager/covers.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/manager/display.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/manager/modbus.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/manager/outputs.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/manager/sensors.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/messaging/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/messaging/basic.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/messaging/basic_mqtt.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/messaging/local.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/messaging/mqtt.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/messaging/queue.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/remote/esphome.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/remote/mqtt.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/sensor/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/sensor/base.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/sensor/system.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/state/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/state/manager.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/system/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/system/host_data.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/system/monitor.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/utils/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/utils/async_updater.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/utils/filter.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/utils/font_util.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/utils/logger.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/utils/timeperiod.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/core/utils/util.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/24x16/adc.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/24x16/config.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/24x16/event.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/24x16/mqtt.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/24x16/output24x16A.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/32x10/adc.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/32x10/config.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/32x10/event.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/32x10/mqtt.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/32x10/output32x10A.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover/adc.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover/binary_sensor.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover/config.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover/cover.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover/event.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover/mqtt.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover/outputCover.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover_mix/adc.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover_mix/config.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover_mix/cover.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover_mix/event.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/adc.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/event_all.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/exceptions.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/analog/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/analog/adc.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/display/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/display/fonts/danube__.ttf +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/display/oled.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/gpio/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/gpio/expanders/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/gpio/input/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/gpio/input/base.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/gpio/input/manager.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/i2c/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/i2c/bus.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/i2c/ina219.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/i2c/ina219_driver.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/i2c/mcp9808.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/i2c/pct2075.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/onewire/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/onewire/bus.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/onewire/dallas.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/onewire/ds2482.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/sensor/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/sensor/temperature/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/sensor/temperature/base.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/integration/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/integration/interlock.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/cli.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/client.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/coordinator.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/hvac/ventclear.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/inverters/sofar.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/inverters/thessla.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/other/r4dcb08.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/other/wanas415.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/sensors/cwt.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/sensors/dts1964_3f.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/sensors/pt100.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/sensors/sht20.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/devices/sensors/sht30.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/base.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/derived/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/derived/numeric.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/derived/select.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/derived/switch.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/derived/text.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/sensor/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/sensor/binary.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/sensor/numeric.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/sensor/text.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/writeable/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/writeable/binary.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/entities/writeable/numeric.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/modbus/utils.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/models/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/models/actions.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/models/events.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/models/files.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/models/logs.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/models/mqtt.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/models/state.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/schema/actions_sensor.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/schema/actions_switch.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/schema/filters.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/schema/filters_adc.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/schema/id.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/schema/temp_unit.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/schema/update_interval.yaml +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/abap-CRCWOmpq.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/apex-DnsZk_dE.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/azcli-1IWB1ccx.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/bat-DPkNLes8.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/bicep-Corcdgou.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/cameligo-CGrWLZr3.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/clojure-D9WOWImG.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/codicon-DCmgc-ay.ttf +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/coffee-B7EJu28W.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/cpp-SEyurbux.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/csharp-BoL64M5l.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/csp-C46ZqvIl.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/css-DQU6DXDx.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/cypher-D84EuPTj.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/dart-D8lhlL1r.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/dockerfile-DLk6rpji.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/ecl-BO6FnfXk.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/editor.worker-DsAeyiJ5.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/elixir-BRjLKONM.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/flow9-Cac8vKd7.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/fsharp-fd1GTHhf.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/go-O9LJTZXk.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/graphql-LQdxqEYJ.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/hcl-DxDQ3s82.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/ini-BvajGCUy.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/java-SYsfObOQ.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/json.worker-DaRII17c.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/julia-DQXNmw_w.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/kotlin-qQ0MG-9I.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/less-GGFNNJHn.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/lexon-Canl7DCW.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/lua-D28Ae8-K.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/m3-DPitgjJI.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/markdown-B811l8j2.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/mips-CdjsipkG.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/msdax-CYqgjx_P.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/mysql-BHd6q0vd.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/objective-c-B1aVtJYH.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/pascal-BhNW15KB.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/pascaligo-5jv8CcQD.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/perl-DlYyT36c.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/pgsql-Dy0bjov7.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/php-120yhfDK.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/pla-CjnFlu4u.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/postiats-CQpG440k.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/powerquery-DdJtto1Z.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/powershell-Bu_VLpJB.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/protobuf-IBS6jZEB.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/pug-kFxLfcjb.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/qsharp-q7JyzKFN.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/r-BIFz-_sK.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/redis-CHOsPHWR.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/redshift-CBifECDb.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/restructuredtext-CghPJEOS.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/ruby-CYWGW-b1.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/rust-DMDD0SHb.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/sb-BYAiYHFx.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/scala-Bqvq8jcR.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/scheme-Dhb-2j9p.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/scss-CTwUZ5N7.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/shell-CsDZo4DB.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/solidity-CME5AdoB.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/sophia-RYC1BQQz.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/sparql-KEyrF7De.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/sql-BdTr02Mf.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/st-C7iG7M4S.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/swift-D7IUmUK8.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/systemverilog-DgMryOEJ.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/tcl-PloMZuKG.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/twig-BfRIq3la.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/typespec-CzxlYoT_.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/vb-BwAE3J76.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/wgsl-B_1kOXbF.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/assets/yaml.worker-BTE-_K6g.js +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/boneio.svg +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/adc.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/areas.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/boneio.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/cover.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/dallas.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/ds2482.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/ina219.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/lm75.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/logger.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/mcp23017.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/mcp9808.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/modbus.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/modbus_devices.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/oled.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/output.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/output_group.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/pca9685.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/pcf8575.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/sensor.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/frontend-dist/schem/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/middleware/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/middleware/auth.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/routes/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/routes/auth.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/routes/caddy.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/routes/covers.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/routes/modbus.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/routes/outputs.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/routes/sensors.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/routes/system.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/adc.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/areas.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/boneio.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/cover.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/dallas.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/ds2482.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/ina219.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/lm75.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/logger.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/mcp23017.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/mcp9808.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/modbus.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/modbus_devices.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/oled.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/output.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/output_group.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/pca9685.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/pcf8575.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/sensor.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/services/__init__.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/services/logs.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio/webui/websocket_manager.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio.egg-info/dependency_links.txt +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio.egg-info/entry_points.txt +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/boneio.egg-info/top_level.txt +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/setup.cfg +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/setup.py +0 -0
- {boneio-1.1.0.dev2 → boneio-1.1.0.dev4}/tests/test_py313_compatibility.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boneio
|
|
3
|
-
Version: 1.1.0.
|
|
3
|
+
Version: 1.1.0.dev4
|
|
4
4
|
Summary: Python App for BoneIO
|
|
5
5
|
Author-email: Paweł Szafer <pszafer@gmail.com>
|
|
6
6
|
License: GNU General Public License v3.0
|
|
@@ -13,6 +13,7 @@ Description-Content-Type: text/markdown
|
|
|
13
13
|
License-File: LICENSE
|
|
14
14
|
Requires-Dist: smbus2==0.4.3
|
|
15
15
|
Requires-Dist: aiomqtt==2.4.0
|
|
16
|
+
Requires-Dist: aiohttp==3.13.3
|
|
16
17
|
Requires-Dist: Cerberus==1.3.7
|
|
17
18
|
Requires-Dist: colorlog==6.9.0
|
|
18
19
|
Requires-Dist: luma-core==2.5.1
|
|
@@ -45,6 +45,7 @@ class ConfigHelper:
|
|
|
45
45
|
config_file_path: str | None = None,
|
|
46
46
|
send_boneio_autodiscovery: bool = True,
|
|
47
47
|
receive_boneio_autodiscovery: bool = True,
|
|
48
|
+
update_channel: str = "stable",
|
|
48
49
|
):
|
|
49
50
|
self._name = name
|
|
50
51
|
|
|
@@ -63,6 +64,7 @@ class ConfigHelper:
|
|
|
63
64
|
self._ha_discovery_prefix = ha_discovery_prefix
|
|
64
65
|
self._send_boneio_autodiscovery = send_boneio_autodiscovery
|
|
65
66
|
self._receive_boneio_autodiscovery = receive_boneio_autodiscovery
|
|
67
|
+
self._update_channel = update_channel
|
|
66
68
|
self._device_type = device_type
|
|
67
69
|
self._web_port = web_port
|
|
68
70
|
self._proxy_port = proxy_port
|
|
@@ -79,6 +81,7 @@ class ConfigHelper:
|
|
|
79
81
|
TEXT_SENSOR: {},
|
|
80
82
|
SELECT: {},
|
|
81
83
|
NUMERIC: {},
|
|
84
|
+
"update": {}
|
|
82
85
|
}
|
|
83
86
|
self.manager_ready: bool = False
|
|
84
87
|
self._network_info = network_info
|
|
@@ -181,6 +184,11 @@ class ConfigHelper:
|
|
|
181
184
|
"""Check if BoneIO autodiscovery receiving is enabled."""
|
|
182
185
|
return self._receive_boneio_autodiscovery
|
|
183
186
|
|
|
187
|
+
@property
|
|
188
|
+
def update_channel(self) -> str:
|
|
189
|
+
"""Get update channel (stable or dev)."""
|
|
190
|
+
return self._update_channel
|
|
191
|
+
|
|
184
192
|
@property
|
|
185
193
|
def device_type(self) -> str:
|
|
186
194
|
return self._device_type
|
|
@@ -687,6 +687,14 @@ class InputManager:
|
|
|
687
687
|
# Send event to MQTT for Home Assistant
|
|
688
688
|
self._publish_input_event_to_mqtt(input_instance, event)
|
|
689
689
|
|
|
690
|
+
# If publish_only is set, skip action execution (used for initial state sync)
|
|
691
|
+
if event.publish_only:
|
|
692
|
+
_LOGGER.debug(
|
|
693
|
+
"Skipping action execution for %s (publish_only=True)",
|
|
694
|
+
event.entity_id
|
|
695
|
+
)
|
|
696
|
+
return
|
|
697
|
+
|
|
690
698
|
# Execute actions with duration threshold support
|
|
691
699
|
if actions and event.click_type == LONG:
|
|
692
700
|
# Get executed_actions from detector state
|
|
@@ -39,6 +39,7 @@ from boneio.core.manager.modbus import ModbusManager
|
|
|
39
39
|
from boneio.core.manager.outputs import OutputManager
|
|
40
40
|
from boneio.core.manager.sensors import SensorManager
|
|
41
41
|
from boneio.core.manager.remote import RemoteDeviceManager
|
|
42
|
+
from boneio.core.manager.update import UpdateManager
|
|
42
43
|
from boneio.core.discovery import BlackDiscoveryPublisher
|
|
43
44
|
from boneio.core.messaging import MessageBus
|
|
44
45
|
from boneio.core.state import StateManager
|
|
@@ -204,6 +205,11 @@ class Manager:
|
|
|
204
205
|
message_bus=message_bus,
|
|
205
206
|
)
|
|
206
207
|
|
|
208
|
+
# 9. UpdateManager (checks for software updates and publishes to HA)
|
|
209
|
+
self.update_manager = UpdateManager(
|
|
210
|
+
manager=self,
|
|
211
|
+
)
|
|
212
|
+
|
|
207
213
|
# Configure virtual energy sensors (must be after outputs are initialized)
|
|
208
214
|
self.sensors.configure_virtual_energy_sensors()
|
|
209
215
|
|
|
@@ -323,6 +329,7 @@ class Manager:
|
|
|
323
329
|
await self.sensors.send_ha_autodiscovery()
|
|
324
330
|
await self.modbus.send_ha_autodiscovery()
|
|
325
331
|
await self.display.send_ha_autodiscovery()
|
|
332
|
+
await self.update_manager.send_ha_autodiscovery()
|
|
326
333
|
|
|
327
334
|
def send_ha_autodiscovery(
|
|
328
335
|
self,
|
|
@@ -380,6 +387,9 @@ class Manager:
|
|
|
380
387
|
availability_msg_func = ha_cover_availabilty_message
|
|
381
388
|
elif ha_type == BUTTON:
|
|
382
389
|
availability_msg_func = ha_button_availabilty_message
|
|
390
|
+
elif ha_type == "update":
|
|
391
|
+
from boneio.integration.homeassistant import ha_update_availability_message
|
|
392
|
+
availability_msg_func = ha_update_availability_message
|
|
383
393
|
|
|
384
394
|
# Use availability_msg_func from kwargs if provided (for sensors)
|
|
385
395
|
if 'availability_msg_func' in kwargs:
|
|
@@ -400,6 +410,16 @@ class Manager:
|
|
|
400
410
|
)
|
|
401
411
|
self.send_message(topic=topic, payload=payload, retain=True)
|
|
402
412
|
|
|
413
|
+
async def _handle_update_install_command(self, topic: str, payload: str) -> None:
|
|
414
|
+
"""Handle update install command from Home Assistant.
|
|
415
|
+
|
|
416
|
+
Args:
|
|
417
|
+
topic: MQTT topic
|
|
418
|
+
payload: MQTT payload (should be "INSTALL")
|
|
419
|
+
"""
|
|
420
|
+
_LOGGER.info("Received update install command: %s", payload)
|
|
421
|
+
await self.update_manager.handle_install_command(payload)
|
|
422
|
+
|
|
403
423
|
def parse_actions(self, pin: str, actions: dict) -> dict:
|
|
404
424
|
"""Parse actions configuration.
|
|
405
425
|
|
|
@@ -698,7 +718,7 @@ class Manager:
|
|
|
698
718
|
)
|
|
699
719
|
|
|
700
720
|
elif action == REMOTE_OUTPUT:
|
|
701
|
-
# Control output on remote device
|
|
721
|
+
# Control output on remote device (supports ESPHome lights with brightness/color and WLED effects)
|
|
702
722
|
remote_device_id = action_definition.get("remote_device")
|
|
703
723
|
output_id = action_definition.get("output_id")
|
|
704
724
|
action_output = action_definition.get("action_output", "TOGGLE")
|
|
@@ -706,6 +726,14 @@ class Manager:
|
|
|
706
726
|
device_id=remote_device_id,
|
|
707
727
|
output_id=output_id,
|
|
708
728
|
action=action_output,
|
|
729
|
+
brightness=action_definition.get("brightness"),
|
|
730
|
+
color_temp=action_definition.get("color_temp"),
|
|
731
|
+
rgb=action_definition.get("rgb"),
|
|
732
|
+
transition=action_definition.get("transition"),
|
|
733
|
+
effect=action_definition.get("effect"),
|
|
734
|
+
palette=action_definition.get("palette"),
|
|
735
|
+
effect_speed=action_definition.get("effect_speed"),
|
|
736
|
+
effect_intensity=action_definition.get("effect_intensity"),
|
|
709
737
|
)
|
|
710
738
|
|
|
711
739
|
elif action == REMOTE_COVER:
|
|
@@ -740,16 +768,17 @@ class Manager:
|
|
|
740
768
|
configure_logger(log_config, debug=0)
|
|
741
769
|
_LOGGER.info("Logger configuration reloaded successfully")
|
|
742
770
|
|
|
743
|
-
def _reload_remote_devices(self) -> None:
|
|
771
|
+
async def _reload_remote_devices(self) -> None:
|
|
744
772
|
"""Reload remote devices configuration from config file.
|
|
745
773
|
|
|
746
774
|
This allows hot-reloading of remote devices without restarting the application.
|
|
775
|
+
Handles ESPHome connections properly (stops old, starts new).
|
|
747
776
|
"""
|
|
748
777
|
config = self._config_helper.get_config()
|
|
749
778
|
remote_devices_config = config.get("remote_devices", [])
|
|
750
779
|
|
|
751
780
|
_LOGGER.info("Reloading remote devices configuration")
|
|
752
|
-
self.remote_devices.reload(remote_devices_config)
|
|
781
|
+
await self.remote_devices.reload(remote_devices_config)
|
|
753
782
|
_LOGGER.info("Remote devices configuration reloaded successfully")
|
|
754
783
|
|
|
755
784
|
async def publish_discovery(self) -> None:
|
|
@@ -18,6 +18,7 @@ from boneio.core.remote.base import (
|
|
|
18
18
|
)
|
|
19
19
|
from boneio.core.remote.mqtt import MQTTRemoteDevice
|
|
20
20
|
from boneio.core.remote.esphome import ESPHomeRemoteDevice, ESPHOME_API_AVAILABLE
|
|
21
|
+
from boneio.core.remote.wled import WLEDRemoteDevice
|
|
21
22
|
|
|
22
23
|
if TYPE_CHECKING:
|
|
23
24
|
from boneio.core.messaging import MessageBus
|
|
@@ -176,6 +177,8 @@ class RemoteDeviceManager:
|
|
|
176
177
|
return None
|
|
177
178
|
elif protocol == RemoteDeviceProtocol.ESPHOME_API:
|
|
178
179
|
return self._create_esphome_device(device_id, name, config)
|
|
180
|
+
elif protocol == RemoteDeviceProtocol.WLED:
|
|
181
|
+
return self._create_wled_device(device_id, name, config)
|
|
179
182
|
else:
|
|
180
183
|
_LOGGER.error("Unsupported protocol '%s' for device '%s'", protocol, device_id)
|
|
181
184
|
return None
|
|
@@ -259,6 +262,40 @@ class RemoteDeviceManager:
|
|
|
259
262
|
covers=covers,
|
|
260
263
|
)
|
|
261
264
|
|
|
265
|
+
def _create_wled_device(
|
|
266
|
+
self,
|
|
267
|
+
device_id: str,
|
|
268
|
+
name: str,
|
|
269
|
+
config: dict[str, Any],
|
|
270
|
+
) -> WLEDRemoteDevice | None:
|
|
271
|
+
"""Create WLED remote device.
|
|
272
|
+
|
|
273
|
+
Args:
|
|
274
|
+
device_id: Device ID
|
|
275
|
+
name: Device name
|
|
276
|
+
config: Full device configuration
|
|
277
|
+
|
|
278
|
+
Returns:
|
|
279
|
+
WLEDRemoteDevice instance or None if creation failed
|
|
280
|
+
"""
|
|
281
|
+
wled_config = config.get("wled", {})
|
|
282
|
+
host = wled_config.get("host")
|
|
283
|
+
|
|
284
|
+
if not host:
|
|
285
|
+
_LOGGER.error("WLED device '%s' missing 'host' in wled config", device_id)
|
|
286
|
+
return None
|
|
287
|
+
|
|
288
|
+
port = wled_config.get("port", 80)
|
|
289
|
+
segments = wled_config.get("segments", [])
|
|
290
|
+
|
|
291
|
+
return WLEDRemoteDevice(
|
|
292
|
+
id=device_id,
|
|
293
|
+
name=name,
|
|
294
|
+
host=host,
|
|
295
|
+
port=port,
|
|
296
|
+
segments=segments,
|
|
297
|
+
)
|
|
298
|
+
|
|
262
299
|
async def start_all_connections(self, delay_seconds: float = 10.0) -> None:
|
|
263
300
|
"""Start persistent connections for all ESPHome devices.
|
|
264
301
|
|
|
@@ -332,19 +369,32 @@ class RemoteDeviceManager:
|
|
|
332
369
|
output_id: str,
|
|
333
370
|
action: str,
|
|
334
371
|
brightness: int | None = None,
|
|
372
|
+
color_temp: int | None = None,
|
|
373
|
+
rgb: list[int] | tuple[int, int, int] | None = None,
|
|
335
374
|
transition: float | None = None,
|
|
375
|
+
effect: int | None = None,
|
|
376
|
+
palette: int | None = None,
|
|
377
|
+
effect_speed: int | None = None,
|
|
378
|
+
effect_intensity: int | None = None,
|
|
336
379
|
) -> bool:
|
|
337
|
-
"""Control output on remote device (BoneIO MQTT
|
|
380
|
+
"""Control output on remote device (BoneIO MQTT, ESPHome API, or WLED).
|
|
338
381
|
|
|
339
382
|
Automatically detects device protocol and routes to appropriate method.
|
|
340
383
|
For ESPHome devices, output_id can be a switch or light entity.
|
|
384
|
+
For WLED devices, output_id can be "main" or segment ID.
|
|
341
385
|
|
|
342
386
|
Args:
|
|
343
387
|
device_id: ID of the remote device
|
|
344
388
|
output_id: ID of the output/switch/light to control
|
|
345
389
|
action: Action to perform (ON, OFF, TOGGLE, BRIGHTNESS_UP, BRIGHTNESS_DOWN, SET_BRIGHTNESS)
|
|
346
|
-
brightness: Brightness level (0-255) -
|
|
347
|
-
|
|
390
|
+
brightness: Brightness level (0-255) - for ESPHome/WLED lights
|
|
391
|
+
color_temp: Color temperature in mireds - only for ESPHome lights
|
|
392
|
+
rgb: RGB color as [R, G, B] list or tuple (0-255 each) - for ESPHome/WLED lights
|
|
393
|
+
transition: Transition time in seconds - for ESPHome/WLED lights
|
|
394
|
+
effect: WLED effect ID
|
|
395
|
+
palette: WLED color palette ID
|
|
396
|
+
effect_speed: WLED effect speed (0-255)
|
|
397
|
+
effect_intensity: WLED effect intensity (0-255)
|
|
348
398
|
|
|
349
399
|
Returns:
|
|
350
400
|
True if command was sent successfully
|
|
@@ -359,10 +409,16 @@ class RemoteDeviceManager:
|
|
|
359
409
|
# Check if output_id is a light
|
|
360
410
|
if device.has_light(output_id):
|
|
361
411
|
_LOGGER.debug("Controlling ESPHome light '%s' on device '%s'", output_id, device_id)
|
|
412
|
+
# Convert rgb list to tuple[int, int, int] if needed
|
|
413
|
+
rgb_tuple: tuple[int, int, int] | None = None
|
|
414
|
+
if rgb and len(rgb) >= 3:
|
|
415
|
+
rgb_tuple = (int(rgb[0]), int(rgb[1]), int(rgb[2]))
|
|
362
416
|
return await device.control_light(
|
|
363
417
|
light_id=output_id,
|
|
364
418
|
action=action,
|
|
365
419
|
brightness=brightness,
|
|
420
|
+
color_temp=color_temp,
|
|
421
|
+
rgb=rgb_tuple,
|
|
366
422
|
transition=transition if transition is not None else 0.0,
|
|
367
423
|
)
|
|
368
424
|
# Otherwise treat as switch
|
|
@@ -372,6 +428,27 @@ class RemoteDeviceManager:
|
|
|
372
428
|
action=action,
|
|
373
429
|
)
|
|
374
430
|
|
|
431
|
+
# For WLED devices, use HTTP JSON API
|
|
432
|
+
if isinstance(device, WLEDRemoteDevice):
|
|
433
|
+
_LOGGER.debug("Controlling WLED '%s' segment '%s' on device '%s'", output_id, action, device_id)
|
|
434
|
+
# Parse segment_id - "main" means whole device, otherwise it's segment ID
|
|
435
|
+
segment_id = None if output_id == "main" else int(output_id)
|
|
436
|
+
# Convert rgb list to tuple if needed
|
|
437
|
+
wled_rgb: tuple[int, int, int] | None = None
|
|
438
|
+
if rgb and len(rgb) >= 3:
|
|
439
|
+
wled_rgb = (int(rgb[0]), int(rgb[1]), int(rgb[2]))
|
|
440
|
+
return await device.control_light(
|
|
441
|
+
segment_id=segment_id,
|
|
442
|
+
action=action,
|
|
443
|
+
brightness=brightness,
|
|
444
|
+
rgb=wled_rgb,
|
|
445
|
+
transition=transition if transition is not None else 0.0,
|
|
446
|
+
effect=effect,
|
|
447
|
+
palette=palette,
|
|
448
|
+
effect_speed=effect_speed,
|
|
449
|
+
effect_intensity=effect_intensity,
|
|
450
|
+
)
|
|
451
|
+
|
|
375
452
|
# For MQTT devices, use standard control_output
|
|
376
453
|
return await device.control_output(
|
|
377
454
|
output_id=output_id,
|
|
@@ -420,20 +497,52 @@ class RemoteDeviceManager:
|
|
|
420
497
|
**kwargs,
|
|
421
498
|
)
|
|
422
499
|
|
|
423
|
-
def reload(self, remote_devices_config: list[dict[str, Any]] | None = None) -> None:
|
|
500
|
+
async def reload(self, remote_devices_config: list[dict[str, Any]] | None = None) -> None:
|
|
424
501
|
"""Reload remote devices from config.
|
|
425
502
|
|
|
503
|
+
Stops existing ESPHome connections, reconfigures devices,
|
|
504
|
+
and starts new ESPHome connections.
|
|
505
|
+
|
|
426
506
|
Args:
|
|
427
507
|
remote_devices_config: New list of remote device configurations
|
|
428
508
|
"""
|
|
429
509
|
_LOGGER.info("Reloading remote devices configuration")
|
|
510
|
+
|
|
511
|
+
# Stop existing ESPHome connections first
|
|
512
|
+
await self.stop_all_connections()
|
|
513
|
+
|
|
430
514
|
self._devices.clear()
|
|
431
515
|
|
|
432
516
|
if remote_devices_config:
|
|
433
517
|
self._configure_devices(remote_devices_config)
|
|
434
518
|
|
|
519
|
+
# Start ESPHome connections immediately (no delay for reload)
|
|
520
|
+
await self._start_esphome_connections_immediate()
|
|
521
|
+
|
|
435
522
|
_LOGGER.info("Reloaded %d remote devices", len(self._devices))
|
|
436
523
|
|
|
524
|
+
async def _start_esphome_connections_immediate(self) -> None:
|
|
525
|
+
"""Start ESPHome connections immediately without delay.
|
|
526
|
+
|
|
527
|
+
Used during reload when we want connections to start right away.
|
|
528
|
+
"""
|
|
529
|
+
esphome_devices = [
|
|
530
|
+
(device_id, device)
|
|
531
|
+
for device_id, device in self._devices.items()
|
|
532
|
+
if isinstance(device, ESPHomeRemoteDevice)
|
|
533
|
+
]
|
|
534
|
+
|
|
535
|
+
if not esphome_devices:
|
|
536
|
+
return
|
|
537
|
+
|
|
538
|
+
_LOGGER.info("Starting %d ESPHome connection(s)...", len(esphome_devices))
|
|
539
|
+
for device_id, device in esphome_devices:
|
|
540
|
+
try:
|
|
541
|
+
await device.start_connection()
|
|
542
|
+
_LOGGER.info("Started connection for ESPHome device '%s'", device_id)
|
|
543
|
+
except Exception as e:
|
|
544
|
+
_LOGGER.error("Failed to start connection for ESPHome device '%s': %s", device_id, e)
|
|
545
|
+
|
|
437
546
|
def to_dict(self) -> dict[str, Any]:
|
|
438
547
|
"""Convert to dictionary representation.
|
|
439
548
|
|