boneIO 1.0.0.dev20__tar.gz → 1.0.0.dev21__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.0.0.dev20/boneio.egg-info → boneio-1.0.0.dev21}/PKG-INFO +3 -1
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/config/config_helper.py +10 -2
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/manager/manager.py +19 -2
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/manager/modbus.py +15 -1
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/manager/remote.py +147 -7
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/messaging/basic.py +3 -2
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/messaging/local.py +2 -2
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/messaging/mqtt.py +4 -1
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/remote/__init__.py +13 -1
- boneio-1.0.0.dev21/boneio/core/remote/esphome.py +1022 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/integration/__init__.py +0 -2
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/integration/homeassistant.py +174 -101
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/coordinator.py +75 -11
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/base.py +17 -7
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/derived/select.py +7 -3
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/derived/text.py +8 -4
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/sensor/binary.py +8 -3
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/sensor/text.py +8 -4
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/writeable/binary.py +9 -4
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/writeable/numeric.py +18 -8
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/runner.py +15 -1
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/schema/actions.yaml +30 -4
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/schema/remote_devices.yaml +157 -34
- boneio-1.0.0.dev21/boneio/version.py +2 -0
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/cssMode-e0s0S-AL.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/cssMode-Cf6c8Rak.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/freemarker2-CWkMJ7Dx.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/freemarker2-Dx0BWjru.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/handlebars-zUpC2ck8.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/handlebars-BTuLZVfx.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/html-2WKFlvIv.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/html-BB3T_3_K.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/htmlMode-DMvlWHlg.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/htmlMode-yP62Fr3K.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/index-CZVHDDiR.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/index-GG4_twIa.js +209 -209
- boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/index-cAyuaVJ4.css +1 -0
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/javascript-1u9ejw2d.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/javascript-fCd4TqkY.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/jsonMode-vTnsI9a9.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/jsonMode-CChUrnET.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/liquid-BnEFi6su.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/liquid-DdLOtKyT.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/mdx-CiaE4Hfr.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/mdx-wnkV-3mF.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/python-2FhK2A3H.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/python-BU1BlHpX.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/razor-mmdOzr3O.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/razor-DNgLOtn7.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/tsMode-aWDaZew7.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/tsMode-CINGfPlt.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/typescript-CP3BHqV0.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/typescript-CkWSk1mf.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/xml-afQscpJf.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/xml-DlZcKj6v.js +1 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/yaml-8Z7cC_Pk.js → boneio-1.0.0.dev21/boneio/webui/frontend-dist/assets/yaml-CDmetGCQ.js +1 -1
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/index.html +2 -2
- {boneio-1.0.0.dev20/boneio/webui/schema → boneio-1.0.0.dev21/boneio/webui/frontend-dist/schem}/adc.schema.json +6 -6
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/areas.schema.json +2 -2
- {boneio-1.0.0.dev20/boneio/webui/schema → boneio-1.0.0.dev21/boneio/webui/frontend-dist/schem}/binary_sensor.schema.json +50 -10
- {boneio-1.0.0.dev20/boneio/webui/schema → boneio-1.0.0.dev21/boneio/webui/frontend-dist/schem}/boneio.schema.json +2 -2
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/config.schema.json +627 -145
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/cover.schema.json +10 -10
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/ds2482.schema.json +2 -2
- {boneio-1.0.0.dev20/boneio/webui/schema → boneio-1.0.0.dev21/boneio/webui/frontend-dist/schem}/event.schema.json +171 -31
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/ina219.schema.json +8 -8
- {boneio-1.0.0.dev20/boneio/webui/schema → boneio-1.0.0.dev21/boneio/webui/frontend-dist/schem}/lm75.schema.json +6 -6
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/mcp23017.schema.json +4 -4
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/mcp9808.schema.json +6 -6
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/modbus_devices.schema.json +12 -12
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/oled.schema.json +6 -6
- {boneio-1.0.0.dev20/boneio/webui/schema → boneio-1.0.0.dev21/boneio/webui/frontend-dist/schem}/output.schema.json +8 -8
- {boneio-1.0.0.dev20/boneio/webui/schema → boneio-1.0.0.dev21/boneio/webui/frontend-dist/schem}/output_group.schema.json +4 -4
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/pca9685.schema.json +4 -4
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/pcf8575.schema.json +4 -4
- boneio-1.0.0.dev21/boneio/webui/frontend-dist/schem/remote_devices.schema.json +437 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/sensor.schema.json +6 -6
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/virtual_energy_sensor.schema.json +2 -2
- {boneio-1.0.0.dev20/boneio/webui/schema → boneio-1.0.0.dev21/boneio/webui/frontend-dist/schem}/web.schema.json +5 -5
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/routes/config.py +38 -1
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/routes/remote_devices.py +102 -1
- {boneio-1.0.0.dev20/boneio/webui/frontend-dist/schem → boneio-1.0.0.dev21/boneio/webui/schema}/adc.schema.json +6 -6
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/areas.schema.json +2 -2
- {boneio-1.0.0.dev20/boneio/webui/frontend-dist/schem → boneio-1.0.0.dev21/boneio/webui/schema}/binary_sensor.schema.json +50 -10
- {boneio-1.0.0.dev20/boneio/webui/frontend-dist/schem → boneio-1.0.0.dev21/boneio/webui/schema}/boneio.schema.json +2 -2
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/config.schema.json +627 -145
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/cover.schema.json +10 -10
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/ds2482.schema.json +2 -2
- {boneio-1.0.0.dev20/boneio/webui/frontend-dist/schem → boneio-1.0.0.dev21/boneio/webui/schema}/event.schema.json +171 -31
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/ina219.schema.json +8 -8
- {boneio-1.0.0.dev20/boneio/webui/frontend-dist/schem → boneio-1.0.0.dev21/boneio/webui/schema}/lm75.schema.json +6 -6
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/mcp23017.schema.json +4 -4
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/mcp9808.schema.json +6 -6
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/modbus_devices.schema.json +12 -12
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/oled.schema.json +6 -6
- {boneio-1.0.0.dev20/boneio/webui/frontend-dist/schem → boneio-1.0.0.dev21/boneio/webui/schema}/output.schema.json +8 -8
- {boneio-1.0.0.dev20/boneio/webui/frontend-dist/schem → boneio-1.0.0.dev21/boneio/webui/schema}/output_group.schema.json +4 -4
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/pca9685.schema.json +4 -4
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/pcf8575.schema.json +4 -4
- boneio-1.0.0.dev21/boneio/webui/schema/remote_devices.schema.json +437 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/sensor.schema.json +6 -6
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/virtual_energy_sensor.schema.json +2 -2
- {boneio-1.0.0.dev20/boneio/webui/frontend-dist/schem → boneio-1.0.0.dev21/boneio/webui/schema}/web.schema.json +5 -5
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21/boneio.egg-info}/PKG-INFO +3 -1
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio.egg-info/SOURCES.txt +18 -17
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio.egg-info/requires.txt +2 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/pyproject.toml +3 -1
- boneio-1.0.0.dev20/boneio/version.py +0 -2
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/assets/index-B5sThJWr.css +0 -1
- boneio-1.0.0.dev20/boneio/webui/frontend-dist/schem/remote_devices.schema.json +0 -135
- boneio-1.0.0.dev20/boneio/webui/schema/remote_devices.schema.json +0 -135
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/LICENSE +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/MANIFEST.in +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/README.md +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.2/input.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.2/output_24_16.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.2/output_32_10.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.2/output_32_5.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.2/output_cover.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.3/input.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.3/output_24_16.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.3/output_32_10.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.3/output_32_5.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.3/output_cover.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.4/input.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.4/output_24_16.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.4/output_32_10.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.4/output_32_5.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.4/output_cover.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.5/input.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.5/output_24_16.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.5/output_32_10.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.5/output_cover.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.6/input.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.6/output_24_16.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.6/output_32_10.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.6/output_cover.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.7/input.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.7/output_24_16.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.7/output_32_10.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.7/output_cover.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.8/input.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.8/output_24_16.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.8/output_32_10.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.8/output_cover.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/bonecli.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/cover/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/cover/cover.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/cover/previous.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/cover/time_based.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/cover/venetian.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/group/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/group/output_group.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/input/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/input/binary_sensor.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/input/detectors.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/input/event.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/output/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/output/basic.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/output/mcp.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/output/pca.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/output/pcf.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/sensor/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/components/sensor/virtual_energy.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/const.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/config/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/config/package-lock.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/config/package.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/config/schema_converter.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/config/yaml_util.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/discovery.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/events/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/events/bus.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/manager/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/manager/covers.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/manager/display.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/manager/inputs.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/manager/outputs.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/manager/sensors.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/messaging/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/messaging/basic_mqtt.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/messaging/queue.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/remote/base.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/remote/mqtt.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/sensor/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/sensor/base.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/sensor/system.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/state/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/state/manager.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/system/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/system/host_data.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/system/monitor.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/utils/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/utils/async_updater.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/utils/filter.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/utils/font_util.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/utils/logger.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/utils/timeperiod.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/core/utils/util.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/24x16/adc.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/24x16/config.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/24x16/event.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/24x16/mqtt.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/24x16/output24x16A.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/32x10/adc.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/32x10/config.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/32x10/event.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/32x10/mqtt.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/32x10/output32x10A.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover/adc.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover/binary_sensor.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover/config.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover/cover.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover/event.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover/mqtt.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover/outputCover.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover_mix/adc.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover_mix/config.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover_mix/cover.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover_mix/event.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/adc.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/event_all.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/exceptions.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/analog/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/analog/adc.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/display/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/display/fonts/danube__.ttf +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/display/oled.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/gpio/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/gpio/expanders/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/gpio/input/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/gpio/input/base.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/gpio/input/manager.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/i2c/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/i2c/bus.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/i2c/ina219.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/i2c/ina219_driver.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/i2c/mcp9808.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/i2c/pct2075.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/onewire/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/onewire/bus.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/onewire/dallas.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/onewire/ds2482.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/sensor/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/sensor/temperature/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/sensor/temperature/base.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/integration/interlock.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/cli.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/client.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/hvac/ventclear.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/inverters/sofar.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/inverters/thessla.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/other/r4dcb08.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/other/wanas415.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/sensors/cwt.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/sensors/dts1964_3f.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/sensors/pt100.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/sensors/sht20.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/devices/sensors/sht30.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/derived/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/derived/numeric.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/derived/switch.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/sensor/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/sensor/numeric.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/entities/writeable/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/modbus/utils.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/models/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/models/actions.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/models/events.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/models/files.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/models/logs.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/models/mqtt.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/models/state.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/schema/actions_sensor.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/schema/actions_switch.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/schema/filters.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/schema/filters_adc.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/schema/id.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/schema/schema.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/schema/temp_unit.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/schema/update_interval.yaml +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/app.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/abap-CRCWOmpq.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/apex-DnsZk_dE.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/azcli-1IWB1ccx.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/bat-DPkNLes8.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/bicep-Corcdgou.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/cameligo-CGrWLZr3.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/clojure-D9WOWImG.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/codicon-DCmgc-ay.ttf +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/coffee-B7EJu28W.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/cpp-SEyurbux.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/csharp-BoL64M5l.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/csp-C46ZqvIl.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/css-DQU6DXDx.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/cypher-D84EuPTj.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/dart-D8lhlL1r.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/dockerfile-DLk6rpji.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/ecl-BO6FnfXk.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/editor.worker-DsAeyiJ5.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/elixir-BRjLKONM.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/flow9-Cac8vKd7.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/fsharp-fd1GTHhf.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/go-O9LJTZXk.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/graphql-LQdxqEYJ.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/hcl-DxDQ3s82.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/ini-BvajGCUy.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/java-SYsfObOQ.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/json.worker-DaRII17c.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/julia-DQXNmw_w.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/kotlin-qQ0MG-9I.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/less-GGFNNJHn.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/lexon-Canl7DCW.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/lua-D28Ae8-K.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/m3-DPitgjJI.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/markdown-B811l8j2.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/mips-CdjsipkG.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/msdax-CYqgjx_P.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/mysql-BHd6q0vd.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/objective-c-B1aVtJYH.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/pascal-BhNW15KB.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/pascaligo-5jv8CcQD.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/perl-DlYyT36c.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/pgsql-Dy0bjov7.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/php-120yhfDK.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/pla-CjnFlu4u.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/postiats-CQpG440k.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/powerquery-DdJtto1Z.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/powershell-Bu_VLpJB.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/protobuf-IBS6jZEB.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/pug-kFxLfcjb.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/qsharp-q7JyzKFN.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/r-BIFz-_sK.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/redis-CHOsPHWR.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/redshift-CBifECDb.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/restructuredtext-CghPJEOS.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/ruby-CYWGW-b1.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/rust-DMDD0SHb.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/sb-BYAiYHFx.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/scala-Bqvq8jcR.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/scheme-Dhb-2j9p.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/scss-CTwUZ5N7.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/shell-CsDZo4DB.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/solidity-CME5AdoB.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/sophia-RYC1BQQz.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/sparql-KEyrF7De.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/sql-BdTr02Mf.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/st-C7iG7M4S.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/swift-D7IUmUK8.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/systemverilog-DgMryOEJ.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/tcl-PloMZuKG.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/twig-BfRIq3la.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/typespec-CzxlYoT_.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/vb-BwAE3J76.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/wgsl-B_1kOXbF.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/assets/yaml.worker-BTE-_K6g.js +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/boneio.svg +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/dallas.schema.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/logger.schema.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/modbus.schema.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/frontend-dist/schem/mqtt.schema.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/middleware/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/middleware/auth.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/routes/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/routes/auth.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/routes/caddy.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/routes/covers.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/routes/modbus.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/routes/outputs.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/routes/sensors.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/routes/system.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/routes/update.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/dallas.schema.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/logger.schema.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/modbus.schema.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/schema/mqtt.schema.json +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/services/__init__.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/services/logs.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/web_server.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio/webui/websocket_manager.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio.egg-info/dependency_links.txt +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio.egg-info/entry_points.txt +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/boneio.egg-info/top_level.txt +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/setup.cfg +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/setup.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/tests/test_i2c_smbus2.py +0 -0
- {boneio-1.0.0.dev20 → boneio-1.0.0.dev21}/tests/test_py313_compatibility.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boneio
|
|
3
|
-
Version: 1.0.0.
|
|
3
|
+
Version: 1.0.0.dev21
|
|
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
|
|
@@ -32,6 +32,8 @@ Requires-Dist: qrcode==8.2
|
|
|
32
32
|
Requires-Dist: gpiod==2.3.0
|
|
33
33
|
Requires-Dist: requests==2.32.5
|
|
34
34
|
Requires-Dist: packaging==25.0
|
|
35
|
+
Requires-Dist: aioesphomeapi>=29.0.0
|
|
36
|
+
Requires-Dist: zeroconf>=0.148.0
|
|
35
37
|
Dynamic: license-file
|
|
36
38
|
|
|
37
39
|
Example usage:
|
|
@@ -5,7 +5,10 @@ from __future__ import annotations
|
|
|
5
5
|
|
|
6
6
|
import logging
|
|
7
7
|
from _collections_abc import dict_values
|
|
8
|
-
from typing import Any
|
|
8
|
+
from typing import Any, TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from boneio.integration.homeassistant import HomeAssistantDiscoveryMessage
|
|
9
12
|
|
|
10
13
|
from boneio.const import (
|
|
11
14
|
BINARY_SENSOR,
|
|
@@ -222,7 +225,12 @@ class ConfigHelper:
|
|
|
222
225
|
def subscribe_topic(self) -> str:
|
|
223
226
|
return f"{self.cmd_topic_prefix}+/+/#"
|
|
224
227
|
|
|
225
|
-
def add_autodiscovery_msg(
|
|
228
|
+
def add_autodiscovery_msg(
|
|
229
|
+
self,
|
|
230
|
+
ha_type: str,
|
|
231
|
+
topic: str,
|
|
232
|
+
payload: str | dict[str, Any] | "HomeAssistantDiscoveryMessage" | None
|
|
233
|
+
):
|
|
226
234
|
"""Add autodiscovery message."""
|
|
227
235
|
self._autodiscovery_messages[ha_type][topic] = {"topic": topic, "payload": payload}
|
|
228
236
|
|
|
@@ -22,6 +22,8 @@ from boneio.const import (
|
|
|
22
22
|
ONLINE,
|
|
23
23
|
OUTPUT,
|
|
24
24
|
OUTPUT_OVER_MQTT,
|
|
25
|
+
REMOTE_COVER,
|
|
26
|
+
REMOTE_OUTPUT,
|
|
25
27
|
SET_BRIGHTNESS,
|
|
26
28
|
STATE,
|
|
27
29
|
cover_actions,
|
|
@@ -192,6 +194,7 @@ class Manager:
|
|
|
192
194
|
message_bus=message_bus,
|
|
193
195
|
remote_devices_config=remote_devices,
|
|
194
196
|
own_serial=config_helper.serial_no,
|
|
197
|
+
name=self.config_helper.name
|
|
195
198
|
)
|
|
196
199
|
|
|
197
200
|
# 8. BlackDiscoveryPublisher (publishes device info for autodiscovery of neighboring BoneIO devices)
|
|
@@ -207,6 +210,20 @@ class Manager:
|
|
|
207
210
|
# (removing duplicate registration here that caused double event handling)
|
|
208
211
|
|
|
209
212
|
_LOGGER.info("Manager initialization complete")
|
|
213
|
+
|
|
214
|
+
async def stop(self) -> None:
|
|
215
|
+
"""Stop manager async tasks.
|
|
216
|
+
|
|
217
|
+
This should be called during shutdown to cleanly stop:
|
|
218
|
+
- ESPHome connections
|
|
219
|
+
- Other async tasks
|
|
220
|
+
"""
|
|
221
|
+
_LOGGER.info("Stopping manager async tasks")
|
|
222
|
+
|
|
223
|
+
# Stop ESPHome connections
|
|
224
|
+
await self.remote_devices.stop_all_connections()
|
|
225
|
+
|
|
226
|
+
_LOGGER.info("Manager async tasks stopped")
|
|
210
227
|
|
|
211
228
|
@property
|
|
212
229
|
def loop(self) -> asyncio.AbstractEventLoop:
|
|
@@ -521,7 +538,7 @@ class Manager:
|
|
|
521
538
|
Args:
|
|
522
539
|
actions: List of actions to execute
|
|
523
540
|
"""
|
|
524
|
-
|
|
541
|
+
|
|
525
542
|
|
|
526
543
|
start_time = time.time()
|
|
527
544
|
|
|
@@ -604,7 +621,7 @@ class Manager:
|
|
|
604
621
|
)
|
|
605
622
|
|
|
606
623
|
elif action == REMOTE_COVER:
|
|
607
|
-
# Control cover on remote device
|
|
624
|
+
# Control cover on remote device (BoneIO MQTT or ESPHome API)
|
|
608
625
|
remote_device_id = action_definition.get("remote_device")
|
|
609
626
|
cover_id = action_definition.get("cover_id")
|
|
610
627
|
action_cover = action_definition.get("action_cover", "TOGGLE")
|
|
@@ -131,7 +131,8 @@ class ModbusManager:
|
|
|
131
131
|
model = device_config.get(MODEL, "")
|
|
132
132
|
|
|
133
133
|
# Generate ID from address and model if not provided
|
|
134
|
-
|
|
134
|
+
has_custom_id = bool(device_config.get(ID))
|
|
135
|
+
if has_custom_id:
|
|
135
136
|
device_id = str(device_config[ID]).replace(" ", "").lower()
|
|
136
137
|
else:
|
|
137
138
|
device_id = f"{address}_{model}".lower().replace(" ", "_")
|
|
@@ -160,6 +161,7 @@ class ModbusManager:
|
|
|
160
161
|
sensors_filters=device_config.get("sensors_filters", {}),
|
|
161
162
|
additional_data=additional_data,
|
|
162
163
|
area=area,
|
|
164
|
+
has_custom_id=has_custom_id,
|
|
163
165
|
)
|
|
164
166
|
coordinators[device_id] = coordinator
|
|
165
167
|
_LOGGER.info("Configured Modbus coordinator: %s", device_id)
|
|
@@ -358,6 +360,18 @@ class ModbusManager:
|
|
|
358
360
|
new_coordinators = self._configure_modbus_coordinators(devices=configs_to_add)
|
|
359
361
|
self._modbus_coordinators.update(new_coordinators)
|
|
360
362
|
_LOGGER.info("Added/recreated %d Modbus devices", len(new_coordinators))
|
|
363
|
+
|
|
364
|
+
# Send online status for newly created/recreated coordinators
|
|
365
|
+
# This ensures the new availability topic gets the online status immediately
|
|
366
|
+
for coordinator in new_coordinators.values():
|
|
367
|
+
try:
|
|
368
|
+
await coordinator.send_online_status()
|
|
369
|
+
except Exception as err:
|
|
370
|
+
_LOGGER.error(
|
|
371
|
+
"Failed to send online status for coordinator %s: %s",
|
|
372
|
+
coordinator.id,
|
|
373
|
+
err
|
|
374
|
+
)
|
|
361
375
|
|
|
362
376
|
_LOGGER.info(
|
|
363
377
|
"Modbus devices reload complete: %d coordinators (removed=%d, added=%d, recreated=%d)",
|
|
@@ -6,6 +6,7 @@ Supports autodiscovery of neighboring BoneIO Black devices via MQTT.
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
import asyncio
|
|
9
10
|
import json
|
|
10
11
|
import logging
|
|
11
12
|
from typing import TYPE_CHECKING, Any
|
|
@@ -16,6 +17,7 @@ from boneio.core.remote.base import (
|
|
|
16
17
|
RemoteDeviceType,
|
|
17
18
|
)
|
|
18
19
|
from boneio.core.remote.mqtt import MQTTRemoteDevice
|
|
20
|
+
from boneio.core.remote.esphome import ESPHomeRemoteDevice, ESPHOME_API_AVAILABLE
|
|
19
21
|
|
|
20
22
|
if TYPE_CHECKING:
|
|
21
23
|
from boneio.core.messaging import MessageBus
|
|
@@ -173,8 +175,7 @@ class RemoteDeviceManager:
|
|
|
173
175
|
_LOGGER.warning("ESPHome UDP protocol not yet implemented for device '%s'", device_id)
|
|
174
176
|
return None
|
|
175
177
|
elif protocol == RemoteDeviceProtocol.ESPHOME_API:
|
|
176
|
-
|
|
177
|
-
return None
|
|
178
|
+
return self._create_esphome_device(device_id, name, config)
|
|
178
179
|
else:
|
|
179
180
|
_LOGGER.error("Unsupported protocol '%s' for device '%s'", protocol, device_id)
|
|
180
181
|
return None
|
|
@@ -209,6 +210,103 @@ class RemoteDeviceManager:
|
|
|
209
210
|
covers=covers,
|
|
210
211
|
)
|
|
211
212
|
|
|
213
|
+
def _create_esphome_device(
|
|
214
|
+
self,
|
|
215
|
+
device_id: str,
|
|
216
|
+
name: str,
|
|
217
|
+
config: dict[str, Any],
|
|
218
|
+
) -> ESPHomeRemoteDevice | None:
|
|
219
|
+
"""Create ESPHome API remote device.
|
|
220
|
+
|
|
221
|
+
Args:
|
|
222
|
+
device_id: Device ID
|
|
223
|
+
name: Device name
|
|
224
|
+
config: Full device configuration
|
|
225
|
+
|
|
226
|
+
Returns:
|
|
227
|
+
ESPHomeRemoteDevice instance or None if creation failed
|
|
228
|
+
"""
|
|
229
|
+
if not ESPHOME_API_AVAILABLE:
|
|
230
|
+
_LOGGER.error(
|
|
231
|
+
"aioesphomeapi not installed - cannot create ESPHome device '%s'",
|
|
232
|
+
device_id
|
|
233
|
+
)
|
|
234
|
+
return None
|
|
235
|
+
|
|
236
|
+
esphome_config = config.get("esphome_api", {})
|
|
237
|
+
host = esphome_config.get("host")
|
|
238
|
+
|
|
239
|
+
if not host:
|
|
240
|
+
_LOGGER.error("ESPHome device '%s' missing 'host' in esphome_api config", device_id)
|
|
241
|
+
return None
|
|
242
|
+
|
|
243
|
+
port = esphome_config.get("port", 6053)
|
|
244
|
+
password = esphome_config.get("password", "")
|
|
245
|
+
encryption_key = esphome_config.get("encryption_key", "")
|
|
246
|
+
switches = esphome_config.get("switches", [])
|
|
247
|
+
lights = esphome_config.get("lights", [])
|
|
248
|
+
covers = esphome_config.get("covers", [])
|
|
249
|
+
|
|
250
|
+
return ESPHomeRemoteDevice(
|
|
251
|
+
id=device_id,
|
|
252
|
+
name=name,
|
|
253
|
+
host=host,
|
|
254
|
+
port=port,
|
|
255
|
+
password=password,
|
|
256
|
+
encryption_key=encryption_key,
|
|
257
|
+
switches=switches,
|
|
258
|
+
lights=lights,
|
|
259
|
+
covers=covers,
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
async def start_all_connections(self, delay_seconds: float = 10.0) -> None:
|
|
263
|
+
"""Start persistent connections for all ESPHome devices.
|
|
264
|
+
|
|
265
|
+
This should be called during application startup to establish
|
|
266
|
+
connections to all ESPHome devices with ReconnectLogic.
|
|
267
|
+
|
|
268
|
+
ESPHome connections are delayed to prioritize local device functionality
|
|
269
|
+
(GPIO, MQTT) over remote device connections.
|
|
270
|
+
|
|
271
|
+
Args:
|
|
272
|
+
delay_seconds: Seconds to wait before starting ESPHome connections
|
|
273
|
+
"""
|
|
274
|
+
esphome_devices = [
|
|
275
|
+
(device_id, device)
|
|
276
|
+
for device_id, device in self._devices.items()
|
|
277
|
+
if isinstance(device, ESPHomeRemoteDevice)
|
|
278
|
+
]
|
|
279
|
+
|
|
280
|
+
if not esphome_devices:
|
|
281
|
+
return
|
|
282
|
+
|
|
283
|
+
_LOGGER.info(
|
|
284
|
+
"Delaying ESPHome connections by %.1f seconds (found %d devices)",
|
|
285
|
+
delay_seconds, len(esphome_devices)
|
|
286
|
+
)
|
|
287
|
+
await asyncio.sleep(delay_seconds)
|
|
288
|
+
|
|
289
|
+
_LOGGER.info("Starting ESPHome connections...")
|
|
290
|
+
for device_id, device in esphome_devices:
|
|
291
|
+
try:
|
|
292
|
+
await device.start_connection()
|
|
293
|
+
_LOGGER.info("Started connection for ESPHome device '%s'", device_id)
|
|
294
|
+
except Exception as e:
|
|
295
|
+
_LOGGER.error("Failed to start connection for ESPHome device '%s': %s", device_id, e)
|
|
296
|
+
|
|
297
|
+
async def stop_all_connections(self) -> None:
|
|
298
|
+
"""Stop all persistent connections.
|
|
299
|
+
|
|
300
|
+
This should be called during application shutdown.
|
|
301
|
+
"""
|
|
302
|
+
for device_id, device in self._devices.items():
|
|
303
|
+
if isinstance(device, ESPHomeRemoteDevice):
|
|
304
|
+
try:
|
|
305
|
+
await device.disconnect()
|
|
306
|
+
_LOGGER.info("Stopped connection for ESPHome device '%s'", device_id)
|
|
307
|
+
except Exception as e:
|
|
308
|
+
_LOGGER.error("Failed to stop connection for ESPHome device '%s': %s", device_id, e)
|
|
309
|
+
|
|
212
310
|
def get_device(self, device_id: str) -> RemoteDevice | None:
|
|
213
311
|
"""Get remote device by ID.
|
|
214
312
|
|
|
@@ -233,13 +331,20 @@ class RemoteDeviceManager:
|
|
|
233
331
|
device_id: str,
|
|
234
332
|
output_id: str,
|
|
235
333
|
action: str,
|
|
334
|
+
brightness: int | None = None,
|
|
335
|
+
transition: float | None = None,
|
|
236
336
|
) -> bool:
|
|
237
|
-
"""Control output on remote device.
|
|
337
|
+
"""Control output on remote device (BoneIO MQTT or ESPHome API).
|
|
338
|
+
|
|
339
|
+
Automatically detects device protocol and routes to appropriate method.
|
|
340
|
+
For ESPHome devices, output_id can be a switch or light entity.
|
|
238
341
|
|
|
239
342
|
Args:
|
|
240
343
|
device_id: ID of the remote device
|
|
241
|
-
output_id: ID of the output to control
|
|
242
|
-
action: Action to perform (ON, OFF, TOGGLE)
|
|
344
|
+
output_id: ID of the output/switch/light to control
|
|
345
|
+
action: Action to perform (ON, OFF, TOGGLE, BRIGHTNESS_UP, BRIGHTNESS_DOWN, SET_BRIGHTNESS)
|
|
346
|
+
brightness: Brightness level (0-255) - only for ESPHome lights
|
|
347
|
+
transition: Transition time in seconds - only for ESPHome lights
|
|
243
348
|
|
|
244
349
|
Returns:
|
|
245
350
|
True if command was sent successfully
|
|
@@ -249,6 +354,25 @@ class RemoteDeviceManager:
|
|
|
249
354
|
_LOGGER.error("Remote device '%s' not found", device_id)
|
|
250
355
|
return False
|
|
251
356
|
|
|
357
|
+
# For ESPHome devices, try to determine if it's a switch or light
|
|
358
|
+
if isinstance(device, ESPHomeRemoteDevice):
|
|
359
|
+
# Check if output_id is a light
|
|
360
|
+
if device.has_light(output_id):
|
|
361
|
+
_LOGGER.debug("Controlling ESPHome light '%s' on device '%s'", output_id, device_id)
|
|
362
|
+
return await device.control_light(
|
|
363
|
+
light_id=output_id,
|
|
364
|
+
action=action,
|
|
365
|
+
brightness=brightness,
|
|
366
|
+
transition=transition if transition is not None else 0.0,
|
|
367
|
+
)
|
|
368
|
+
# Otherwise treat as switch
|
|
369
|
+
_LOGGER.debug("Controlling ESPHome switch '%s' on device '%s'", output_id, device_id)
|
|
370
|
+
return await device.control_switch(
|
|
371
|
+
switch_id=output_id,
|
|
372
|
+
action=action,
|
|
373
|
+
)
|
|
374
|
+
|
|
375
|
+
# For MQTT devices, use standard control_output
|
|
252
376
|
return await device.control_output(
|
|
253
377
|
output_id=output_id,
|
|
254
378
|
action=action,
|
|
@@ -262,12 +386,14 @@ class RemoteDeviceManager:
|
|
|
262
386
|
action: str,
|
|
263
387
|
**kwargs,
|
|
264
388
|
) -> bool:
|
|
265
|
-
"""Control cover on remote device.
|
|
389
|
+
"""Control cover on remote device (BoneIO MQTT or ESPHome API).
|
|
390
|
+
|
|
391
|
+
Automatically detects device protocol and routes to appropriate method.
|
|
266
392
|
|
|
267
393
|
Args:
|
|
268
394
|
device_id: ID of the remote device
|
|
269
395
|
cover_id: ID of the cover to control
|
|
270
|
-
action: Action to perform (OPEN, CLOSE, STOP, etc.)
|
|
396
|
+
action: Action to perform (OPEN, CLOSE, STOP, TOGGLE, etc.)
|
|
271
397
|
**kwargs: Additional parameters (position, tilt_position)
|
|
272
398
|
|
|
273
399
|
Returns:
|
|
@@ -278,6 +404,15 @@ class RemoteDeviceManager:
|
|
|
278
404
|
_LOGGER.error("Remote device '%s' not found", device_id)
|
|
279
405
|
return False
|
|
280
406
|
|
|
407
|
+
# For ESPHome devices, use native API
|
|
408
|
+
if isinstance(device, ESPHomeRemoteDevice):
|
|
409
|
+
_LOGGER.debug("Controlling ESPHome cover '%s' on device '%s'", cover_id, device_id)
|
|
410
|
+
return await device.control_cover(
|
|
411
|
+
cover_id=cover_id,
|
|
412
|
+
action=action,
|
|
413
|
+
)
|
|
414
|
+
|
|
415
|
+
# For MQTT devices, use standard control_cover
|
|
281
416
|
return await device.control_cover(
|
|
282
417
|
cover_id=cover_id,
|
|
283
418
|
action=action,
|
|
@@ -585,6 +720,11 @@ class RemoteDeviceManager:
|
|
|
585
720
|
Returns:
|
|
586
721
|
Dictionary with autodiscovered devices information
|
|
587
722
|
"""
|
|
723
|
+
_LOGGER.debug(
|
|
724
|
+
"autodiscovered_to_dict called, _autodiscovered_devices has %d items: %s",
|
|
725
|
+
len(self._autodiscovered_devices),
|
|
726
|
+
list(self._autodiscovered_devices.keys())
|
|
727
|
+
)
|
|
588
728
|
return {
|
|
589
729
|
device_id: device.to_dict()
|
|
590
730
|
for device_id, device in self._autodiscovered_devices.items()
|
|
@@ -3,11 +3,12 @@ from __future__ import annotations
|
|
|
3
3
|
|
|
4
4
|
import logging
|
|
5
5
|
from abc import ABC, abstractmethod
|
|
6
|
-
from typing import TYPE_CHECKING
|
|
6
|
+
from typing import TYPE_CHECKING, Any
|
|
7
7
|
from collections.abc import Awaitable, Callable
|
|
8
8
|
|
|
9
9
|
if TYPE_CHECKING:
|
|
10
10
|
from boneio.core.manager import Manager
|
|
11
|
+
from boneio.integration.homeassistant import HomeAssistantDiscoveryMessage
|
|
11
12
|
|
|
12
13
|
_LOGGER = logging.getLogger(__name__)
|
|
13
14
|
|
|
@@ -18,7 +19,7 @@ class MessageBus(ABC):
|
|
|
18
19
|
def send_message(
|
|
19
20
|
self,
|
|
20
21
|
topic: str,
|
|
21
|
-
payload: str | int | dict[str,
|
|
22
|
+
payload: str | int | dict[str, Any] | "HomeAssistantDiscoveryMessage" | None,
|
|
22
23
|
retain: bool = False,
|
|
23
24
|
qos: int = 0,
|
|
24
25
|
) -> None:
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import logging
|
|
5
5
|
from collections.abc import Callable
|
|
6
|
-
from typing import TYPE_CHECKING, Optional
|
|
6
|
+
from typing import TYPE_CHECKING, Optional, Any
|
|
7
7
|
|
|
8
8
|
if TYPE_CHECKING:
|
|
9
9
|
from boneio.core.manager import Manager
|
|
@@ -26,7 +26,7 @@ class LocalMessageBus(MessageBus):
|
|
|
26
26
|
def send_message(
|
|
27
27
|
self,
|
|
28
28
|
topic: str,
|
|
29
|
-
payload: str | int | dict[str,
|
|
29
|
+
payload: str | int | dict[str, Any] | None,
|
|
30
30
|
retain: bool = False,
|
|
31
31
|
qos: int = 0,
|
|
32
32
|
) -> None:
|
|
@@ -13,6 +13,9 @@ from collections.abc import Awaitable, Callable
|
|
|
13
13
|
from contextlib import AsyncExitStack
|
|
14
14
|
from typing import TYPE_CHECKING, Any, override
|
|
15
15
|
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from boneio.integration.homeassistant import HomeAssistantDiscoveryMessage
|
|
18
|
+
|
|
16
19
|
from aiomqtt import Client as AsyncioClient
|
|
17
20
|
from aiomqtt import MqttError, Will
|
|
18
21
|
from paho.mqtt.properties import Properties
|
|
@@ -164,7 +167,7 @@ class MQTTClient(MessageBus):
|
|
|
164
167
|
def send_message(
|
|
165
168
|
self,
|
|
166
169
|
topic: str,
|
|
167
|
-
payload: str | int | bytes | dict[str,
|
|
170
|
+
payload: str | int | bytes | dict[str, Any] | None,
|
|
168
171
|
retain: bool = False,
|
|
169
172
|
qos: int = 0,
|
|
170
173
|
) -> None:
|
|
@@ -2,16 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
Supports multiple protocols:
|
|
4
4
|
- MQTT: Standard MQTT communication (boneIO Black, ESPHome, etc.)
|
|
5
|
+
- ESPHome API: Native ESPHome API via TCP/IP
|
|
5
6
|
- CAN: CAN bus communication (future)
|
|
6
7
|
- Loxone: Loxone Miniserver integration (future)
|
|
7
|
-
- ESPHome API: Native ESPHome API (future)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
from boneio.core.remote.base import RemoteDevice, RemoteDeviceProtocol
|
|
11
11
|
from boneio.core.remote.mqtt import MQTTRemoteDevice
|
|
12
|
+
from boneio.core.remote.esphome import (
|
|
13
|
+
ESPHomeRemoteDevice,
|
|
14
|
+
discover_esphome_entities,
|
|
15
|
+
scan_esphome_devices,
|
|
16
|
+
ESPHOME_API_AVAILABLE,
|
|
17
|
+
ZEROCONF_AVAILABLE,
|
|
18
|
+
)
|
|
12
19
|
|
|
13
20
|
__all__ = [
|
|
14
21
|
"RemoteDevice",
|
|
15
22
|
"RemoteDeviceProtocol",
|
|
16
23
|
"MQTTRemoteDevice",
|
|
24
|
+
"ESPHomeRemoteDevice",
|
|
25
|
+
"discover_esphome_entities",
|
|
26
|
+
"scan_esphome_devices",
|
|
27
|
+
"ESPHOME_API_AVAILABLE",
|
|
28
|
+
"ZEROCONF_AVAILABLE",
|
|
17
29
|
]
|