boneio 0.9.4.dev3__tar.gz → 0.9.5.dev1__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-0.9.4.dev3 → boneio-0.9.5.dev1}/PKG-INFO +1 -1
- boneio-0.9.4.dev3/boneio/boards/0.8/cover.yaml → boneio-0.9.5.dev1/boneio/boards/0.8/output_cover.yaml +32 -0
- boneio-0.9.5.dev1/boneio/example_config/all_binary_sensor.yaml +106 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/config.yaml +1 -1
- boneio-0.9.5.dev1/boneio/example_config/config_24_16.yaml +28 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/message_bus.py +9 -0
- boneio-0.9.5.dev1/boneio/helper/queue.py +58 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/yaml_util.py +11 -2
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/mqtt_client.py +22 -15
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/runner.py +1 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/schema/schema.yaml +1 -1
- boneio-0.9.5.dev1/boneio/version.py +2 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/config.schema.json +1 -4
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/pyproject.toml +1 -1
- boneio-0.9.4.dev3/boneio/helper/queue.py +0 -32
- boneio-0.9.4.dev3/boneio/version.py +0 -2
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/LICENSE +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/README.md +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/__init__.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/boards/0.7/input.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/boards/0.7/output_32_10.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/boards/0.8/input.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/boards/0.8/output_32_10.yaml +0 -0
- /boneio-0.9.4.dev3/boneio/boards/0.8/cover_mix.yaml → /boneio-0.9.5.dev1/boneio/boards/0.8/output_cover_mix.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/bonecli.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/const.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/cover.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/__init__.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/adc.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/binary_sensor.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/binary_sensor_v_0_7.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/cover.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/event.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/event_all.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/event_v_0_7.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/led32x4A.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/output24x16A.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/output24x16A_v0.3.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/output32x10A.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/output32x10A_new.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/example_config/output32x5A.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/fonts/danube__.ttf +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/group/__init__.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/group/output.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/__init__.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/async_updater.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/click_timer.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/config.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/events.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/exceptions.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/filter.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/gpio.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/gpiod.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/ha_discovery.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/loader.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/logger.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/mqtt.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/oled.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/onewire/W1ThermSensor.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/onewire/__init__.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/onewire/ds2482.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/onewire/onewire.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/pcf8575.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/schema_converter.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/sensor/ina_219_smbus.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/state_manager.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/stats.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/timeperiod.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/helper/util.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/input/__init__.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/input/gpio.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/input/gpio_new.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/manager.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/__init__.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/client.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/cwt.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/dts1964_3f.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/liquid-sensor.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/modbuscli.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/orno-or-we-517.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/pt100.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/r4dcb08.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/sdm120.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/sdm630.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/sensor.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/sht20.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/sht30.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/single_sensor.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/socomec_e03.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/socomec_e23.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/sofar.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/modbus/utils.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/models/__init__.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/models/files.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/models/logs.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/oled.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/relay/__init__.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/relay/basic.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/relay/gpio.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/relay/mcp.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/relay/pca.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/relay/pcf.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/schema/actions.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/schema/actions_sensor.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/schema/actions_switch.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/schema/filters.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/schema/filters_adc.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/schema/id.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/schema/temp_unit.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/schema/update_interval.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/sensor/__init__.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/sensor/adc.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/sensor/gpio.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/sensor/gpio_new.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/sensor/ina219.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/sensor/serial_number.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/sensor/temp/__init__.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/sensor/temp/dallas.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/sensor/temp/lm75.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/sensor/temp/mcp9808.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/app.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/abap-BrgZPUOV.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/apex-DyP6w7ZV.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/azcli-BaLxmfj-.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/bat-CFOPXBzS.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/bicep-BfEKNvv3.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/cameligo-BFG1Mk7z.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/clojure-DTECt2xU.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/codicon-DCmgc-ay.ttf +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/coffee-CDGzqUPQ.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/cpp-CLLBncYj.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/csharp-dUCx_-0o.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/csp-5Rap-vPy.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/css-D3h14YRZ.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/cssMode-CtnT2jQE.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/cypher-DrQuvNYM.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/dart-CFKIUWau.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/dockerfile-Zznr-cwX.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/ecl-Ce3n6wWz.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/editor.worker-D5ngByhL.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/elixir-deUWdS0T.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/flow9-i9-g7ZhI.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/freemarker2-DGuhXH41.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/fsharp-CzKuDChf.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/go-Cphgjts3.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/graphql-Cg7bfA9N.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/handlebars-DB9ioYEj.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/hcl-0cvrggvQ.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/html-B1N3G2t2.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/htmlMode-Bu4tsIzC.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/index-BLdVcyHp.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/index-CCgG6NMg.css +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/ini-Drc7WvVn.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/java-B_fMsGYe.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/javascript-Bc9neA1Z.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/json.worker-F0ZGA5Zk.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/jsonMode-CKQTb-28.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/julia-Bqgm2twL.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/kotlin-BSkB5QuD.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/less-BsTHnhdd.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/lexon-YWi4-JPR.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/liquid-CTaX0gqb.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/lua-nf6ki56Z.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/m3-Cpb6xl2v.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/markdown-DSZPf7rp.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/mdx-5o2ITl9M.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/mips-B_c3zf-v.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/msdax-rUNN04Wq.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/mysql-DDwshQtU.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/objective-c-B5zXfXm9.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/pascal-CXOwvkN_.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/pascaligo-Bc-ZgV77.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/perl-CwNk8-XU.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/pgsql-tGk8EFnU.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/php-CpIb_Oan.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/pla-B03wrqEc.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/postiats-BKlk5iyT.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/powerquery-Bhzvs7bI.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/powershell-Dd3NCNK9.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/protobuf-COyEY5Pt.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/pug-BaJupSGV.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/python-Db8FWkCf.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/qsharp-DXyYeYxl.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/r-CdQndTaG.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/razor-CLTS28q7.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/redis-CVwtpugi.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/redshift-25W9uPmb.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/restructuredtext-DfzH4Xui.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/ruby-Cp1zYvxS.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/rust-D5C2fndG.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/sb-CDntyWJ8.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/scala-BoFRg7Ot.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/scheme-Bio4gycK.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/scss-4Ik7cdeQ.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/shell-CX-rkNHf.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/solidity-Tw7wswEv.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/sophia-C5WLch3f.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/sparql-DHaeiCBh.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/sql-CCSDG5nI.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/st-pnP8ivHi.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/swift-DwJ7jVG9.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/systemverilog-B9Xyijhd.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/tcl-DnHyzjbg.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/tsMode-CrhZjPZD.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/twig-CPajHgWi.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/typescript-BEFA7MWI.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/typespec-D-MeaMDU.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/vb-DgyLZaXg.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/wgsl-BIv9DU6q.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/xml-z_iSgMVJ.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/yaml-3ScDl3Sa.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/assets/yaml.worker-C2uymlqn.js +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/boneio.svg +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/frontend-dist/index.html +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/adc.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/binary_sensor.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/boneio.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/cover.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/dallas.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/ds2482.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/event.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/ina219.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/lm75.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/logger.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/mcp23017.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/mcp9808.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/modbus.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/modbus_sensors.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/mqtt.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/oled.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/output.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/output_group.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/pca9685.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/pcf8575.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/sensor.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/schema/web.schema.json +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/web_server.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/boneio/webui/websocket_manager.py +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/tests/32_5_config.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/tests/bandit.yaml +0 -0
- {boneio-0.9.4.dev3 → boneio-0.9.5.dev1}/tests/relay_32_5.py +0 -0
|
@@ -9,129 +9,161 @@ output_mapping:
|
|
|
9
9
|
kind: mcp
|
|
10
10
|
mcp_id: mcp2
|
|
11
11
|
pin: 7
|
|
12
|
+
output_type: none
|
|
12
13
|
cover_01_down:
|
|
13
14
|
kind: mcp
|
|
14
15
|
mcp_id: mcp2
|
|
15
16
|
pin: 6
|
|
17
|
+
output_type: none
|
|
16
18
|
cover_02_up:
|
|
17
19
|
kind: mcp
|
|
18
20
|
mcp_id: mcp2
|
|
19
21
|
pin: 5
|
|
22
|
+
output_type: none
|
|
20
23
|
cover_02_down:
|
|
21
24
|
kind: mcp
|
|
22
25
|
mcp_id: mcp2
|
|
23
26
|
pin: 4
|
|
27
|
+
output_type: none
|
|
24
28
|
cover_03_up:
|
|
25
29
|
kind: mcp
|
|
26
30
|
mcp_id: mcp2
|
|
27
31
|
pin: 3
|
|
32
|
+
output_type: none
|
|
28
33
|
cover_03_down:
|
|
29
34
|
kind: mcp
|
|
30
35
|
mcp_id: mcp2
|
|
31
36
|
pin: 2
|
|
37
|
+
output_type: none
|
|
32
38
|
cover_04_up:
|
|
33
39
|
kind: mcp
|
|
34
40
|
mcp_id: mcp2
|
|
35
41
|
pin: 1
|
|
42
|
+
output_type: none
|
|
36
43
|
cover_04_down:
|
|
37
44
|
kind: mcp
|
|
38
45
|
mcp_id: mcp2
|
|
39
46
|
pin: 0
|
|
47
|
+
output_type: none
|
|
40
48
|
cover_05_up:
|
|
41
49
|
kind: mcp
|
|
42
50
|
mcp_id: mcp1
|
|
43
51
|
pin: 7
|
|
52
|
+
output_type: none
|
|
44
53
|
cover_05_down:
|
|
45
54
|
kind: mcp
|
|
46
55
|
mcp_id: mcp1
|
|
47
56
|
pin: 6
|
|
57
|
+
output_type: none
|
|
48
58
|
cover_06_up:
|
|
49
59
|
kind: mcp
|
|
50
60
|
mcp_id: mcp1
|
|
51
61
|
pin: 5
|
|
62
|
+
output_type: none
|
|
52
63
|
cover_06_down:
|
|
53
64
|
kind: mcp
|
|
54
65
|
mcp_id: mcp1
|
|
55
66
|
pin: 4
|
|
67
|
+
output_type: none
|
|
56
68
|
cover_07_up:
|
|
57
69
|
kind: mcp
|
|
58
70
|
mcp_id: mcp1
|
|
59
71
|
pin: 3
|
|
72
|
+
output_type: none
|
|
60
73
|
cover_07_down:
|
|
61
74
|
kind: mcp
|
|
62
75
|
mcp_id: mcp1
|
|
63
76
|
pin: 2
|
|
77
|
+
output_type: none
|
|
64
78
|
cover_08_up:
|
|
65
79
|
kind: mcp
|
|
66
80
|
mcp_id: mcp1
|
|
67
81
|
pin: 1
|
|
82
|
+
output_type: none
|
|
68
83
|
cover_08_down:
|
|
69
84
|
kind: mcp
|
|
70
85
|
mcp_id: mcp1
|
|
71
86
|
pin: 0
|
|
87
|
+
output_type: none
|
|
72
88
|
cover_09_up:
|
|
73
89
|
kind: mcp
|
|
74
90
|
mcp_id: mcp2
|
|
75
91
|
pin: 8
|
|
92
|
+
output_type: none
|
|
76
93
|
cover_09_down:
|
|
77
94
|
kind: mcp
|
|
78
95
|
mcp_id: mcp2
|
|
79
96
|
pin: 9
|
|
97
|
+
output_type: none
|
|
80
98
|
cover_10_up:
|
|
81
99
|
kind: mcp
|
|
82
100
|
mcp_id: mcp2
|
|
83
101
|
pin: 10
|
|
102
|
+
output_type: none
|
|
84
103
|
cover_10_down:
|
|
85
104
|
kind: mcp
|
|
86
105
|
mcp_id: mcp2
|
|
87
106
|
pin: 11
|
|
107
|
+
output_type: none
|
|
88
108
|
cover_11_up:
|
|
89
109
|
kind: mcp
|
|
90
110
|
mcp_id: mcp2
|
|
91
111
|
pin: 12
|
|
112
|
+
output_type: none
|
|
92
113
|
cover_11_down:
|
|
93
114
|
kind: mcp
|
|
94
115
|
mcp_id: mcp2
|
|
95
116
|
pin: 13
|
|
117
|
+
output_type: none
|
|
96
118
|
cover_12_up:
|
|
97
119
|
kind: mcp
|
|
98
120
|
mcp_id: mcp2
|
|
99
121
|
pin: 14
|
|
122
|
+
output_type: none
|
|
100
123
|
cover_12_down:
|
|
101
124
|
kind: mcp
|
|
102
125
|
mcp_id: mcp2
|
|
103
126
|
pin: 15
|
|
127
|
+
output_type: none
|
|
104
128
|
cover_13_up:
|
|
105
129
|
kind: mcp
|
|
106
130
|
mcp_id: mcp1
|
|
107
131
|
pin: 8
|
|
132
|
+
output_type: none
|
|
108
133
|
cover_13_down:
|
|
109
134
|
kind: mcp
|
|
110
135
|
mcp_id: mcp1
|
|
111
136
|
pin: 9
|
|
137
|
+
output_type: none
|
|
112
138
|
cover_14_up:
|
|
113
139
|
kind: mcp
|
|
114
140
|
mcp_id: mcp1
|
|
115
141
|
pin: 10
|
|
142
|
+
output_type: none
|
|
116
143
|
cover_14_down:
|
|
117
144
|
kind: mcp
|
|
118
145
|
mcp_id: mcp1
|
|
119
146
|
pin: 11
|
|
147
|
+
output_type: none
|
|
120
148
|
cover_15_up:
|
|
121
149
|
kind: mcp
|
|
122
150
|
mcp_id: mcp1
|
|
123
151
|
pin: 12
|
|
152
|
+
output_type: none
|
|
124
153
|
cover_15_down:
|
|
125
154
|
kind: mcp
|
|
126
155
|
mcp_id: mcp1
|
|
127
156
|
pin: 13
|
|
157
|
+
output_type: none
|
|
128
158
|
cover_16_up:
|
|
129
159
|
kind: mcp
|
|
130
160
|
mcp_id: mcp1
|
|
131
161
|
pin: 14
|
|
162
|
+
output_type: none
|
|
132
163
|
cover_16_down:
|
|
133
164
|
kind: mcp
|
|
134
165
|
mcp_id: mcp1
|
|
135
166
|
pin: 15
|
|
167
|
+
output_type: none
|
|
136
168
|
|
|
137
169
|
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
- id: IN_01
|
|
2
|
+
boneio_input: IN_01
|
|
3
|
+
actions:
|
|
4
|
+
pressed:
|
|
5
|
+
- action: output
|
|
6
|
+
pin: OUT_01
|
|
7
|
+
- id: IN_02
|
|
8
|
+
boneio_input: IN_02
|
|
9
|
+
actions:
|
|
10
|
+
pressed:
|
|
11
|
+
- action: output
|
|
12
|
+
pin: OUT_02
|
|
13
|
+
# - id: IN_03
|
|
14
|
+
# boneio_input: IN_03
|
|
15
|
+
# - id: IN_04
|
|
16
|
+
# boneio_input: IN_04
|
|
17
|
+
# - id: IN_05
|
|
18
|
+
# boneio_input: IN_05
|
|
19
|
+
# - id: IN_06
|
|
20
|
+
# boneio_input: IN_06
|
|
21
|
+
# - id: IN_07
|
|
22
|
+
# boneio_input: IN_07
|
|
23
|
+
# - id: IN_08
|
|
24
|
+
# boneio_input: IN_08
|
|
25
|
+
# - id: IN_09
|
|
26
|
+
# boneio_input: IN_09
|
|
27
|
+
# - id: IN_10
|
|
28
|
+
# boneio_input: IN_10
|
|
29
|
+
# - id: IN_11
|
|
30
|
+
# boneio_input: IN_11
|
|
31
|
+
# - id: IN_12
|
|
32
|
+
# boneio_input: IN_12
|
|
33
|
+
# - id: IN_13
|
|
34
|
+
# boneio_input: IN_13
|
|
35
|
+
# - id: IN_14
|
|
36
|
+
# boneio_input: IN_14
|
|
37
|
+
# - id: IN_15
|
|
38
|
+
# boneio_input: IN_15
|
|
39
|
+
# - id: IN_16
|
|
40
|
+
# boneio_input: IN_16
|
|
41
|
+
# - id: IN_17
|
|
42
|
+
# boneio_input: IN_17
|
|
43
|
+
# - id: IN_18
|
|
44
|
+
# boneio_input: IN_18
|
|
45
|
+
# - id: IN_19
|
|
46
|
+
# boneio_input: IN_19
|
|
47
|
+
# - id: IN_20
|
|
48
|
+
# boneio_input: IN_20
|
|
49
|
+
# - id: IN_21
|
|
50
|
+
# boneio_input: IN_21
|
|
51
|
+
# - id: IN_22
|
|
52
|
+
# boneio_input: IN_22
|
|
53
|
+
# - id: IN_23
|
|
54
|
+
# boneio_input: IN_23
|
|
55
|
+
# - id: IN_24
|
|
56
|
+
# boneio_input: IN_24
|
|
57
|
+
# - id: IN_25
|
|
58
|
+
# boneio_input: IN_25
|
|
59
|
+
# - id: IN_26
|
|
60
|
+
# boneio_input: IN_26
|
|
61
|
+
# - id: IN_27
|
|
62
|
+
# boneio_input: IN_27
|
|
63
|
+
# - id: IN_28
|
|
64
|
+
# boneio_input: IN_28
|
|
65
|
+
# - id: IN_29
|
|
66
|
+
# boneio_input: IN_29
|
|
67
|
+
# - id: IN_30
|
|
68
|
+
# boneio_input: IN_30
|
|
69
|
+
# - id: IN_31
|
|
70
|
+
# boneio_input: IN_31
|
|
71
|
+
# - id: IN_32
|
|
72
|
+
# boneio_input: IN_32
|
|
73
|
+
# - id: IN_33
|
|
74
|
+
# boneio_input: IN_33
|
|
75
|
+
# - id: IN_34
|
|
76
|
+
# boneio_input: IN_34
|
|
77
|
+
# - id: IN_35
|
|
78
|
+
# boneio_input: IN_35
|
|
79
|
+
# - id: IN_36
|
|
80
|
+
# boneio_input: IN_36
|
|
81
|
+
# - id: IN_37
|
|
82
|
+
# boneio_input: IN_37
|
|
83
|
+
# - id: IN_38
|
|
84
|
+
# boneio_input: IN_38
|
|
85
|
+
# - id: IN_39
|
|
86
|
+
# boneio_input: IN_39
|
|
87
|
+
# - id: IN_40
|
|
88
|
+
# boneio_input: IN_40
|
|
89
|
+
# - id: IN_41
|
|
90
|
+
# boneio_input: IN_41
|
|
91
|
+
# - id: IN_42
|
|
92
|
+
# boneio_input: IN_42
|
|
93
|
+
# - id: IN_43
|
|
94
|
+
# boneio_input: IN_43
|
|
95
|
+
# - id: IN_44
|
|
96
|
+
# boneio_input: IN_44
|
|
97
|
+
# - id: IN_45
|
|
98
|
+
# boneio_input: IN_45
|
|
99
|
+
# - id: IN_46
|
|
100
|
+
# boneio_input: IN_46
|
|
101
|
+
# - id: IN_47
|
|
102
|
+
# boneio_input: IN_47
|
|
103
|
+
# - id: IN_48
|
|
104
|
+
# boneio_input: IN_48
|
|
105
|
+
# - id: IN_49
|
|
106
|
+
# boneio_input: IN_49
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
mqtt:
|
|
2
|
+
host: hostname
|
|
3
|
+
username: mqtt
|
|
4
|
+
password: password
|
|
5
|
+
topic_prefix: boneiohome
|
|
6
|
+
ha_discovery:
|
|
7
|
+
enabled: yes
|
|
8
|
+
|
|
9
|
+
oled:
|
|
10
|
+
enabled: yes
|
|
11
|
+
|
|
12
|
+
lm75:
|
|
13
|
+
- id: temp
|
|
14
|
+
address: 0x48
|
|
15
|
+
|
|
16
|
+
mcp23017:
|
|
17
|
+
- id: mcp1
|
|
18
|
+
address: 0x20
|
|
19
|
+
- id: mcp2
|
|
20
|
+
address: 0x21
|
|
21
|
+
|
|
22
|
+
event: !include event.yaml
|
|
23
|
+
binary_sensor: !include binary_sensor.yaml
|
|
24
|
+
|
|
25
|
+
output: !include output24x16A.yaml
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# adc: !include adc.yaml Uncomment only if needed.
|
|
@@ -32,6 +32,11 @@ class MessageBus(ABC):
|
|
|
32
32
|
"""Set manager."""
|
|
33
33
|
pass
|
|
34
34
|
|
|
35
|
+
@abstractmethod
|
|
36
|
+
async def announce_offline(self) -> None:
|
|
37
|
+
"""Announce that the device is offline."""
|
|
38
|
+
pass
|
|
39
|
+
|
|
35
40
|
class LocalMessageBus(MessageBus):
|
|
36
41
|
"""Local message bus that doesn't use MQTT."""
|
|
37
42
|
|
|
@@ -81,3 +86,7 @@ class LocalMessageBus(MessageBus):
|
|
|
81
86
|
def set_manager(self, manager: Manager) -> None:
|
|
82
87
|
"""Set manager."""
|
|
83
88
|
self._manager = manager
|
|
89
|
+
|
|
90
|
+
async def announce_offline(self) -> None:
|
|
91
|
+
"""Announce that the device is offline."""
|
|
92
|
+
pass
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Special unique implementation of asyncio.Queue for boneIO.
|
|
3
|
+
If MQTT is down then regular queue can append multiple ON/OFF for same topic.
|
|
4
|
+
After re-connection it would send all messages. It's not necessary, last payload of same topic is enough.
|
|
5
|
+
"""
|
|
6
|
+
import asyncio
|
|
7
|
+
from typing import Any, Dict, Tuple
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class UniqueQueue(asyncio.Queue):
|
|
11
|
+
"""Unique implementation of asyncio.Queue that handles MQTT connection state."""
|
|
12
|
+
|
|
13
|
+
def __init__(self, maxsize: int = 0):
|
|
14
|
+
"""Initialize the queue."""
|
|
15
|
+
super().__init__(maxsize=maxsize)
|
|
16
|
+
self._unique_items: Dict[str, Tuple[Any, ...]] = {}
|
|
17
|
+
self._is_connected = False
|
|
18
|
+
|
|
19
|
+
def set_connected(self, state: bool) -> None:
|
|
20
|
+
"""Set the connection state."""
|
|
21
|
+
self._is_connected = state
|
|
22
|
+
|
|
23
|
+
def _init(self, maxsize: int) -> None:
|
|
24
|
+
"""Initialize the internal queue storage."""
|
|
25
|
+
super()._init(maxsize=maxsize)
|
|
26
|
+
self._unique_items = {}
|
|
27
|
+
|
|
28
|
+
def _put(self, item: Tuple[str, Any, bool]) -> None:
|
|
29
|
+
"""Put an item into the queue.
|
|
30
|
+
|
|
31
|
+
If MQTT is not connected:
|
|
32
|
+
- If topic exists, replace the old message
|
|
33
|
+
- If topic doesn't exist, add new message
|
|
34
|
+
If MQTT is connected:
|
|
35
|
+
- Add all messages to queue
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
item: Tuple of (topic, payload, retain)
|
|
39
|
+
"""
|
|
40
|
+
topic = item[0]
|
|
41
|
+
|
|
42
|
+
if not self._is_connected:
|
|
43
|
+
# When disconnected, replace existing messages for same topic
|
|
44
|
+
if topic in self._unique_items:
|
|
45
|
+
self._queue.remove(self._unique_items[topic])
|
|
46
|
+
super()._put(item)
|
|
47
|
+
self._unique_items[topic] = item
|
|
48
|
+
else:
|
|
49
|
+
# When connected, queue all messages
|
|
50
|
+
super()._put(item)
|
|
51
|
+
self._unique_items[topic] = item
|
|
52
|
+
|
|
53
|
+
def _get(self) -> Tuple[str, Any, bool]:
|
|
54
|
+
"""Get an item from the queue and remove it from unique items tracking."""
|
|
55
|
+
item = super()._get()
|
|
56
|
+
if item[0] in self._unique_items:
|
|
57
|
+
del self._unique_items[item[0]]
|
|
58
|
+
return item
|
|
@@ -275,7 +275,16 @@ def merge_board_config(config: dict) -> dict:
|
|
|
275
275
|
# Merge mapped output with user config, preserving user-specified values
|
|
276
276
|
input.update({k: v for k, v in mapped_input.items()})
|
|
277
277
|
|
|
278
|
-
|
|
278
|
+
elif "cover" in board_name:
|
|
279
|
+
_LOGGER.debug("Cover config detected without outputs config.")
|
|
280
|
+
output_mapping = board_config.get("output_mapping", {})
|
|
281
|
+
config["output"] = []
|
|
282
|
+
for key, value in output_mapping.items():
|
|
283
|
+
config["output"].append(
|
|
284
|
+
{
|
|
285
|
+
"id": key,
|
|
286
|
+
**value
|
|
287
|
+
})
|
|
279
288
|
return config
|
|
280
289
|
|
|
281
290
|
|
|
@@ -336,7 +345,7 @@ class CustomValidator(Validator):
|
|
|
336
345
|
"""Validate that a field is required if a condition is met.
|
|
337
346
|
|
|
338
347
|
The rule's arguments are validated against this schema:
|
|
339
|
-
{'type': 'dict'}
|
|
348
|
+
{'type' : 'dict'}
|
|
340
349
|
"""
|
|
341
350
|
if not required_if:
|
|
342
351
|
return
|
|
@@ -19,10 +19,10 @@ from paho.mqtt.properties import Properties
|
|
|
19
19
|
from paho.mqtt.subscribeoptions import SubscribeOptions
|
|
20
20
|
|
|
21
21
|
from boneio.const import OFFLINE, PAHO, STATE
|
|
22
|
-
from boneio.helper import UniqueQueue
|
|
23
22
|
from boneio.helper.config import ConfigHelper
|
|
24
23
|
from boneio.helper.events import GracefulExit
|
|
25
24
|
from boneio.helper.message_bus import MessageBus
|
|
25
|
+
from boneio.helper.queue import UniqueQueue
|
|
26
26
|
from boneio.manager import Manager
|
|
27
27
|
|
|
28
28
|
_LOGGER = logging.getLogger(__name__)
|
|
@@ -166,6 +166,14 @@ class MQTTClient(MessageBus):
|
|
|
166
166
|
await self.publish(*to_publish)
|
|
167
167
|
self.publish_queue.task_done()
|
|
168
168
|
|
|
169
|
+
async def announce_offline(self) -> None:
|
|
170
|
+
"""Announce that the device is offline."""
|
|
171
|
+
await self.publish(
|
|
172
|
+
topic=f"{self._config_helper.topic_prefix}/{STATE}",
|
|
173
|
+
payload=OFFLINE,
|
|
174
|
+
retain=True,
|
|
175
|
+
)
|
|
176
|
+
|
|
169
177
|
async def start_client(self) -> None:
|
|
170
178
|
"""Keep the event loop alive and process any periodic tasks."""
|
|
171
179
|
try:
|
|
@@ -174,7 +182,7 @@ class MQTTClient(MessageBus):
|
|
|
174
182
|
await self._subscribe_manager(self._manager)
|
|
175
183
|
except MqttError as err:
|
|
176
184
|
self.reconnect_interval = min(
|
|
177
|
-
self.reconnect_interval * 2,
|
|
185
|
+
self.reconnect_interval * 2, 60
|
|
178
186
|
)
|
|
179
187
|
_LOGGER.error(
|
|
180
188
|
"MQTT error: %s. Reconnecting in %s seconds",
|
|
@@ -182,9 +190,11 @@ class MQTTClient(MessageBus):
|
|
|
182
190
|
self.reconnect_interval,
|
|
183
191
|
)
|
|
184
192
|
self._connection_established = False
|
|
193
|
+
self.publish_queue.set_connected(False)
|
|
185
194
|
await asyncio.sleep(self.reconnect_interval)
|
|
186
195
|
self.create_client() # reset connect/reconnect futures
|
|
187
196
|
except (asyncio.CancelledError, GracefulExit):
|
|
197
|
+
_LOGGER.info("MQTT client shutting down...")
|
|
188
198
|
await self.asyncio_client.disconnect(timeout=1.0)
|
|
189
199
|
# raise
|
|
190
200
|
|
|
@@ -194,21 +204,18 @@ class MQTTClient(MessageBus):
|
|
|
194
204
|
|
|
195
205
|
async def _subscribe_manager(self, manager: Manager) -> None:
|
|
196
206
|
"""Connect and subscribe to manager topics + host stats."""
|
|
197
|
-
# Create a new future for this run
|
|
198
|
-
self._cancel_future = asyncio.Future()
|
|
199
|
-
|
|
200
|
-
async def wait_for_cancel():
|
|
201
|
-
await self._cancel_future
|
|
202
|
-
# When future completes, raise CancelledError to stop other tasks
|
|
203
|
-
raise asyncio.CancelledError("Stop requested")
|
|
204
|
-
|
|
205
207
|
async with AsyncExitStack() as stack:
|
|
206
|
-
tasks: Set[asyncio.Task] = set()
|
|
207
|
-
|
|
208
|
-
# Connect to the MQTT broker.
|
|
209
208
|
await stack.enter_async_context(self.asyncio_client)
|
|
210
|
-
|
|
211
|
-
|
|
209
|
+
self.publish_queue.set_connected(True)
|
|
210
|
+
# Create a new future for this run
|
|
211
|
+
self._cancel_future = asyncio.Future()
|
|
212
|
+
|
|
213
|
+
async def wait_for_cancel():
|
|
214
|
+
await self._cancel_future
|
|
215
|
+
# When future completes, raise CancelledError to stop other tasks
|
|
216
|
+
raise asyncio.CancelledError("Stop requested")
|
|
217
|
+
|
|
218
|
+
tasks: Set[asyncio.Task] = set()
|
|
212
219
|
|
|
213
220
|
publish_task = asyncio.create_task(self._handle_publish())
|
|
214
221
|
tasks.add(publish_task)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
mqtt:
|
|
2
2
|
type: dict
|
|
3
|
-
required:
|
|
3
|
+
required: False
|
|
4
4
|
meta:
|
|
5
5
|
label: "https://boneio.eu/docs/black/configuration/mqtt \n Mqtt section of boneIO Black configuration file. It handled connecting to mqtt broker, which then is connected to Home Assistant or other smart home system."
|
|
6
6
|
schema:
|
|
@@ -2432,8 +2432,5 @@
|
|
|
2432
2432
|
"description": "https://boneio.eu/docs/black/0.9.x-dev/configuration/boneio \n BoneIO configuration section. It's new section for boneIO Black. It enables you to use predefined device types. For now only 0.7 and 0.8 devices are supported.",
|
|
2433
2433
|
"title": "Boneio"
|
|
2434
2434
|
}
|
|
2435
|
-
}
|
|
2436
|
-
"required": [
|
|
2437
|
-
"mqtt"
|
|
2438
|
-
]
|
|
2435
|
+
}
|
|
2439
2436
|
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Special unique implementation of asyncio.Queue for boneIO.
|
|
3
|
-
If MQTT is down then regular queue can append multiple ON/OFF for same topic.
|
|
4
|
-
After re-connection it would send all messages. It's not necessary, last payload of same topic is enough.
|
|
5
|
-
"""
|
|
6
|
-
import asyncio
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class UniqueQueue(asyncio.Queue):
|
|
10
|
-
"""Unique implementation of asyncio.Queue."""
|
|
11
|
-
|
|
12
|
-
def _init(self, maxsize):
|
|
13
|
-
"""Create unique dict of tuple[0]."""
|
|
14
|
-
super()._init(maxsize=maxsize)
|
|
15
|
-
self._unique_set = {}
|
|
16
|
-
|
|
17
|
-
def _put(self, item):
|
|
18
|
-
"""If item does not exists add it.
|
|
19
|
-
If exists remove old one and put new one in the beginning of the queue."""
|
|
20
|
-
if item[0] not in self._unique_set:
|
|
21
|
-
super()._put(item)
|
|
22
|
-
self._unique_set[item[0]] = item
|
|
23
|
-
else:
|
|
24
|
-
self._queue.remove(self._unique_set[item[0]])
|
|
25
|
-
super()._put(item)
|
|
26
|
-
self._unique_set[item[0]] = item
|
|
27
|
-
|
|
28
|
-
def _get(self):
|
|
29
|
-
"""Get item and remove it."""
|
|
30
|
-
item = super()._get()
|
|
31
|
-
del self._unique_set[item[0]]
|
|
32
|
-
return item
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|