boneIO 1.3.0__tar.gz → 1.3.0.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-1.3.0/boneio.egg-info → boneio-1.3.0.dev1}/PKG-INFO +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/bonecli.py +17 -82
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/cover/cover.py +17 -33
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/cover/time_based.py +8 -23
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/group/output_group.py +0 -5
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/input/binary_sensor.py +2 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/input/event.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/output/basic.py +9 -99
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/sensor/virtual_energy.py +80 -101
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/template/alarm_panel.py +7 -7
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/template/gate_cover.py +10 -10
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/template/thermostat.py +6 -6
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/const.py +0 -6
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/registration.py +36 -46
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/config_helper.py +9 -28
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/migrations/__init__.py +5 -16
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/migrations/v1_proxy_port.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/migrations/v2_transition.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/schema_converter.py +4 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/yaml_util.py +245 -498
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/discovery.py +71 -99
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/events/bus.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/__init__.py +0 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/canopen.py +81 -234
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/covers.py +96 -144
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/display.py +4 -87
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/inputs.py +190 -183
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/manager.py +211 -516
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/modbus.py +4 -4
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/outputs.py +9 -90
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/remote.py +267 -245
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/sensors.py +232 -426
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/templates/__init__.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/templates/alarm.py +3 -3
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/templates/gate_cover.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/templates/thermostat.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/templates.py +4 -4
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/update.py +204 -313
- boneio-1.3.0.dev1/boneio/core/messaging/__init__.py +13 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/messaging/basic.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/messaging/local.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/messaging/mqtt.py +7 -22
- boneio-1.3.0.dev1/boneio/core/remote/__init__.py +40 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/remote/base.py +8 -21
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/remote/can.py +6 -39
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/remote/esphome.py +7 -7
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/remote/mqtt.py +2 -14
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/remote/wled.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/state/manager.py +10 -17
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/system/host_data.py +1 -18
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/async_updater.py +3 -3
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/util.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/can_master.yaml +0 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/analog/adc.py +4 -29
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/client.py +67 -211
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/interface.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/node.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/node_id.py +19 -27
- boneio-1.3.0.dev1/boneio/hardware/display/__init__.py +7 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/display/oled.py +95 -95
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/input/base.py +1 -12
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/input/manager.py +11 -11
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/bus.py +5 -5
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/onewire/__init__.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/integration/homeassistant.py +11 -305
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/cli.py +1 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/client.py +2 -116
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/coordinator.py +3 -25
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/boneio-edge-temp.json +4 -44
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/base.py +3 -11
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/derived/numeric.py +4 -5
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/derived/select.py +2 -21
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/derived/switch.py +2 -18
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/derived/text.py +1 -3
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/sensor/binary.py +1 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/sensor/numeric.py +4 -6
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/sensor/text.py +6 -7
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/writeable/numeric.py +1 -8
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/utils.py +1 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/__init__.py +1 -3
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/actions.py +0 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/events.py +1 -17
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/state.py +0 -6
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/runner.py +83 -183
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/actions.yaml +0 -27
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/remote_devices.yaml +8 -8
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/schema.yaml +13 -481
- boneio-1.3.0.dev1/boneio/version.py +2 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/app.py +67 -180
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/abap-CRCWOmpq.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/apex-DnsZk_dE.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/azcli-1IWB1ccx.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/bat-DPkNLes8.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/bicep-Corcdgou.js +2 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/cameligo-CGrWLZr3.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/clojure-D9WOWImG.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/coffee-B7EJu28W.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/cpp-SEyurbux.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/csharp-BoL64M5l.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/csp-C46ZqvIl.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/css-DQU6DXDx.js +3 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/cssMode-DYzYCxj1.js +4 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/cypher-D84EuPTj.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/dart-D8lhlL1r.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/dockerfile-DLk6rpji.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/ecl-BO6FnfXk.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/editor.worker-B4pQIWZD.js +12 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/elixir-BRjLKONM.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/flow9-Cac8vKd7.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/freemarker2-Bemoup4X.js +3 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/fsharp-fd1GTHhf.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/go-O9LJTZXk.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/graphql-LQdxqEYJ.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/handlebars-3t5vS37H.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/hcl-DxDQ3s82.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/html-Cq68Vj92.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/htmlMode-zRg51dux.js +4 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/index-CedvLek6.js +836 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/index-yfVmKD9N.css +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/ini-BvajGCUy.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/java-SYsfObOQ.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/javascript-BeqHop1l.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/json.worker-aFakAbRR.js +44 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/jsonMode-B_TKboJF.js +10 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/julia-DQXNmw_w.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/kotlin-qQ0MG-9I.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/less-GGFNNJHn.js +2 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/lexon-Canl7DCW.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/liquid-BK7PsOyv.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/lua-D28Ae8-K.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/m3-DPitgjJI.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/markdown-B811l8j2.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/mdx-Ckb8-VUx.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/mips-CdjsipkG.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/msdax-CYqgjx_P.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/mysql-BHd6q0vd.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/objective-c-B1aVtJYH.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/pascal-BhNW15KB.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/pascaligo-5jv8CcQD.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/perl-DlYyT36c.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/pgsql-Dy0bjov7.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/php-120yhfDK.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/pla-CjnFlu4u.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/postiats-CQpG440k.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/powerquery-DdJtto1Z.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/powershell-Bu_VLpJB.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/protobuf-IBS6jZEB.js +2 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/pug-kFxLfcjb.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/python-CO1-gBqF.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/qsharp-q7JyzKFN.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/r-BIFz-_sK.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/razor-Dx6x9ypa.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/redis-CHOsPHWR.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/redshift-CBifECDb.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/restructuredtext-CghPJEOS.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/ruby-CYWGW-b1.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/rust-DMDD0SHb.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/sb-BYAiYHFx.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/scala-Bqvq8jcR.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/scheme-Dhb-2j9p.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/scss-CTwUZ5N7.js +3 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/shell-CsDZo4DB.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/solidity-CME5AdoB.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/sophia-RYC1BQQz.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/sparql-KEyrF7De.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/sql-BdTr02Mf.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/st-C7iG7M4S.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/swift-D7IUmUK8.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/systemverilog-DgMryOEJ.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/tcl-PloMZuKG.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/tsMode-Deid1skj.js +11 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/twig-BfRIq3la.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/typescript-JSH4I7cf.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/typespec-CzxlYoT_.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/vb-BwAE3J76.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/wgsl-B_1kOXbF.js +298 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-BIl4cyR9.js +2 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/xml-BX_Opm8D.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/yaml-BRsnPpO3.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/yaml.worker-DBeHcBRc.js +411 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/index.html +2 -8
- {boneio-1.3.0/boneio/webui → boneio-1.3.0.dev1/boneio/webui/frontend-dist}/schema/adc.schema.json +1 -11
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -332
- {boneio-1.3.0/boneio/webui → boneio-1.3.0.dev1/boneio/webui/frontend-dist}/schema/boneio.schema.json +0 -20
- {boneio-1.3.0/boneio/webui → boneio-1.3.0.dev1/boneio/webui/frontend-dist}/schema/config.schema.json +15 -2318
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/event.schema.json +0 -1162
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/ina219.schema.json +3 -3
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -3
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -22
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/output.schema.json +0 -62
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/template.schema.json +11 -299
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/sw.js +1 -0
- boneio-1.3.0.dev1/boneio/webui/frontend-dist/workbox-226dbdbf.js +1 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/middleware/auth.py +3 -3
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/__init__.py +1 -5
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/caddy.py +14 -14
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/can.py +18 -177
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/config.py +270 -542
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/modbus.py +10 -76
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/outputs.py +0 -62
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/remote_devices.py +3 -3
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/system.py +5 -258
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/update.py +39 -151
- {boneio-1.3.0/boneio/webui/frontend-dist → boneio-1.3.0.dev1/boneio/webui}/schema/adc.schema.json +1 -11
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/binary_sensor.schema.json +0 -332
- {boneio-1.3.0/boneio/webui/frontend-dist → boneio-1.3.0.dev1/boneio/webui}/schema/boneio.schema.json +0 -20
- {boneio-1.3.0/boneio/webui/frontend-dist → boneio-1.3.0.dev1/boneio/webui}/schema/config.schema.json +15 -2318
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/event.schema.json +0 -1162
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/ina219.schema.json +3 -3
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/modbus_devices.schema.json +0 -3
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/mqtt.schema.json +0 -22
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/output.schema.json +0 -62
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/template.schema.json +11 -299
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/web_server.py +9 -90
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/websocket_manager.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1/boneio.egg-info}/PKG-INFO +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio.egg-info/SOURCES.txt +92 -71
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio.egg-info/requires.txt +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/pyproject.toml +28 -40
- boneio-1.3.0/boneio/boards/0.7/output_48_4.yaml +0 -250
- boneio-1.3.0/boneio/boards/0.8/output_48_4.yaml +0 -250
- boneio-1.3.0/boneio/components/irrigation/__init__.py +0 -6
- boneio-1.3.0/boneio/components/irrigation/controller.py +0 -899
- boneio-1.3.0/boneio/components/irrigation/water_source.py +0 -64
- boneio-1.3.0/boneio/core/manager/action_conditions.py +0 -351
- boneio-1.3.0/boneio/core/manager/irrigation.py +0 -582
- boneio-1.3.0/boneio/core/messaging/__init__.py +0 -21
- boneio-1.3.0/boneio/core/messaging/composite.py +0 -85
- boneio-1.3.0/boneio/core/messaging/lox.py +0 -221
- boneio-1.3.0/boneio/core/messaging/loxone.py +0 -181
- boneio-1.3.0/boneio/core/remote/__init__.py +0 -9
- boneio-1.3.0/boneio/core/utils/conditions.py +0 -310
- boneio-1.3.0/boneio/example_config/48x4/binary_sensor.yaml +0 -17
- boneio-1.3.0/boneio/example_config/48x4/config.yaml +0 -41
- boneio-1.3.0/boneio/example_config/48x4/event.yaml +0 -300
- boneio-1.3.0/boneio/example_config/48x4/output48x4A.yaml +0 -192
- boneio-1.3.0/boneio/example_config/cover_mix/mqtt.yaml +0 -6
- boneio-1.3.0/boneio/example_config/different_configs/adc.yaml +0 -14
- boneio-1.3.0/boneio/hardware/can/sudoers.py +0 -199
- boneio-1.3.0/boneio/hardware/can/test_od.py +0 -15
- boneio-1.3.0/boneio/hardware/display/__init__.py +0 -33
- boneio-1.3.0/boneio/hardware/display/early_oled.py +0 -238
- boneio-1.3.0/boneio/integration/lox_template.py +0 -243
- boneio-1.3.0/boneio/migrations/__init__.py +0 -10
- boneio-1.3.0/boneio/migrations/actions.py +0 -230
- boneio-1.3.0/boneio/migrations/assets/MANIFEST.sha256 +0 -15
- boneio-1.3.0/boneio/migrations/assets/docker/daemon.json +0 -7
- boneio-1.3.0/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -30
- boneio-1.3.0/boneio/migrations/assets/docker/nodered/nginx/default.conf +0 -50
- boneio-1.3.0/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -5
- boneio-1.3.0/boneio/migrations/assets/journald/journald.conf +0 -6
- boneio-1.3.0/boneio/migrations/assets/mosquitto/boneio.conf +0 -2
- boneio-1.3.0/boneio/migrations/assets/sudoers/boneio +0 -15
- boneio-1.3.0/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -17
- boneio-1.3.0/boneio/migrations/assets/systemd/boneio.service +0 -15
- boneio-1.3.0/boneio/migrations/assets/systemd/set-hostname-once.service +0 -12
- boneio-1.3.0/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -10
- boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -257
- boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -18
- boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -110
- boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -17
- boneio-1.3.0/boneio/migrations/bootstrap/boneio-migrate +0 -389
- boneio-1.3.0/boneio/migrations/bootstrap/install-helper.sh +0 -43
- boneio-1.3.0/boneio/migrations/bootstrap/sudoers-migrate +0 -2
- boneio-1.3.0/boneio/migrations/runner.py +0 -489
- boneio-1.3.0/boneio/migrations/versions/__init__.py +0 -1
- boneio-1.3.0/boneio/migrations/versions/v1_3_0_baseline.py +0 -173
- boneio-1.3.0/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -75
- boneio-1.3.0/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -172
- boneio-1.3.0/boneio/schema/condition.yaml +0 -75
- boneio-1.3.0/boneio/version.py +0 -2
- boneio-1.3.0/boneio/webui/action_validation.py +0 -205
- boneio-1.3.0/boneio/webui/frontend-dist/assets/ConfigEditor-CHKSC9tj.js +0 -1
- boneio-1.3.0/boneio/webui/frontend-dist/assets/aiConfig-LL3nlemJ.js +0 -2
- boneio-1.3.0/boneio/webui/frontend-dist/assets/aiWizardPrompt-CmumVq54.js +0 -2
- boneio-1.3.0/boneio/webui/frontend-dist/assets/editor.worker-BVjSvWeP.js +0 -12
- boneio-1.3.0/boneio/webui/frontend-dist/assets/index-C_S5rhz7.css +0 -2
- boneio-1.3.0/boneio/webui/frontend-dist/assets/index-DSf-Ci6g.js +0 -44
- boneio-1.3.0/boneio/webui/frontend-dist/assets/json.worker-CqOJL4FD.js +0 -51
- boneio-1.3.0/boneio/webui/frontend-dist/assets/monaco-B9WiNxkw.css +0 -1
- boneio-1.3.0/boneio/webui/frontend-dist/assets/monaco-CAZoGZNF.js +0 -1047
- boneio-1.3.0/boneio/webui/frontend-dist/assets/rolldown-runtime-Dw2cE7zH.js +0 -1
- boneio-1.3.0/boneio/webui/frontend-dist/assets/useTranslation-C7rZEcwj.js +0 -13
- boneio-1.3.0/boneio/webui/frontend-dist/assets/vendor-BD5Ml_Uz.js +0 -55
- boneio-1.3.0/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-BJd1pjeW.js +0 -2
- boneio-1.3.0/boneio/webui/frontend-dist/assets/yaml.worker-nZQZSRZ7.js +0 -375
- boneio-1.3.0/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -352
- boneio-1.3.0/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -64
- boneio-1.3.0/boneio/webui/frontend-dist/sw.js +0 -1
- boneio-1.3.0/boneio/webui/frontend-dist/workbox-4eca85ba.js +0 -1
- boneio-1.3.0/boneio/webui/routes/irrigation.py +0 -323
- boneio-1.3.0/boneio/webui/routes/migrations.py +0 -187
- boneio-1.3.0/boneio/webui/routes/timezone_sudoers.py +0 -202
- boneio-1.3.0/boneio/webui/schema/irrigation.schema.json +0 -352
- boneio-1.3.0/boneio/webui/schema/lox_udp.schema.json +0 -64
- {boneio-1.3.0 → boneio-1.3.0.dev1}/LICENSE +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/MANIFEST.in +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/README.md +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/output_32_5.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/output_32_5.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/output_32_5.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.5/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.5/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.5/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.5/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.6/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.6/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.6/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.6/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.7/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.7/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.7/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.7/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.8/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.8/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.8/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.8/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/cover/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/cover/venetian.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/group/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/input/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/input/detectors.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/output/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/output/mcp.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/output/pca.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/output/pcf.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/sensor/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/template/__init__.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/data/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/data/docker-compose.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/secrets.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/package-lock.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/package.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/events/__init__.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/messaging/basic_mqtt.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/messaging/queue.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/sensor/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/sensor/base.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/sensor/system.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/state/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/system/__init__.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/system/monitor.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/filter.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/font_util.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/logger.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/timeperiod.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/config.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/event.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/mqtt.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/output24x16A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/config.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/event.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/mqtt.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/output32x10A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/can_slave.yaml +0 -0
- {boneio-1.3.0/boneio/example_config/48x4 → boneio-1.3.0.dev1/boneio/example_config/cover}/adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover/binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover/config.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover/cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover/event.yaml +0 -0
- {boneio-1.3.0/boneio/example_config/48x4 → boneio-1.3.0.dev1/boneio/example_config/cover}/mqtt.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover/outputCover.yaml +0 -0
- {boneio-1.3.0/boneio/example_config/cover → boneio-1.3.0.dev1/boneio/example_config/cover_mix}/adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover_mix/config.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover_mix/cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover_mix/event.yaml +0 -0
- {boneio-1.3.0/boneio/example_config/cover → boneio-1.3.0.dev1/boneio/example_config/cover_mix}/mqtt.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
- {boneio-1.3.0/boneio/example_config/cover_mix → boneio-1.3.0.dev1/boneio/example_config/different_configs}/adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/event_all.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/exceptions.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/analog/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/bridge.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/display/fonts/danube__.ttf +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/expanders/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/input/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/ina219.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/ina219_driver.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/mcp9808.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/pct2075.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/onewire/bus.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/onewire/dallas.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/onewire/ds2482.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/sensor/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/sensor/temperature/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/sensor/temperature/base.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/integration/__init__.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/integration/interlock.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/hvac/ventclear.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/inverters/sofar.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/inverters/thessla.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/other/n4dsc08.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/other/r4dcb08.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/other/wanas415.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/cwt.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/dts1964_3f.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/gdfs.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/gdfx.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/pt100.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/sht20.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/sht30.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/__init__.py +4 -4
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/derived/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/sensor/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/writeable/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/writeable/binary.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/files.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/logs.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/mqtt.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/actions_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/actions_switch.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/filters.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/filters_adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/id.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/temp_unit.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/update_interval.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/assets/codicon-DCmgc-ay.ttf +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/boneio-192.png +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/boneio-512.png +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/boneio.svg +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/middleware/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/auth.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/covers.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/sensors.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/templates.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/tools.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/areas.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/can.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/cover.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/dallas.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/ds2482.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/lm75.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/logger.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/mcp23017.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/mcp9808.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/modbus.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/oled.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/output_group.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/pca9685.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/pcf8575.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/remote_devices.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/sensor.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/web.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/services/__init__.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/services/logs.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio.egg-info/dependency_links.txt +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio.egg-info/entry_points.txt +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio.egg-info/top_level.txt +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/setup.cfg +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/setup.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev1}/tests/test_py313_compatibility.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boneio
|
|
3
|
-
Version: 1.3.0
|
|
3
|
+
Version: 1.3.0.dev1
|
|
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
|
|
@@ -35,7 +35,7 @@ Requires-Dist: requests==2.32.5
|
|
|
35
35
|
Requires-Dist: packaging==25.0
|
|
36
36
|
Requires-Dist: aioesphomeapi>=29.0.0
|
|
37
37
|
Requires-Dist: zeroconf>=0.148.0
|
|
38
|
-
Requires-Dist: canopen-asyncio>=2.
|
|
38
|
+
Requires-Dist: canopen-asyncio>=2.3.0
|
|
39
39
|
Dynamic: license-file
|
|
40
40
|
|
|
41
41
|
Example usage:
|
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
import time as _boot_time
|
|
6
|
-
|
|
7
|
-
_BOOT_T0 = _boot_time.monotonic()
|
|
8
|
-
|
|
9
5
|
import logging
|
|
10
6
|
import os
|
|
11
7
|
|
|
@@ -15,15 +11,22 @@ import argparse
|
|
|
15
11
|
import asyncio
|
|
16
12
|
import sys
|
|
17
13
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
from yaml import MarkedYAMLError
|
|
15
|
+
|
|
16
|
+
from boneio.const import ACTION
|
|
17
|
+
from boneio.core.config import load_config_from_file
|
|
18
|
+
from boneio.core.events import GracefulExit
|
|
19
|
+
from boneio.core.utils.logger import configure_logger, setup_logging
|
|
20
|
+
from boneio.exceptions import (
|
|
21
|
+
ConfigurationException,
|
|
22
|
+
RestartRequestException,
|
|
23
|
+
)
|
|
24
|
+
# Lazy import modbus CLI to save ~0.35s on startup for 'run' command
|
|
25
|
+
# from boneio.modbus.cli import async_run_modbus_get, async_run_modbus_search, async_run_modbus_set
|
|
26
|
+
# from boneio.modbus.client import VALUE_TYPES
|
|
27
|
+
from boneio.runner import async_run
|
|
23
28
|
from boneio.version import __version__
|
|
24
29
|
|
|
25
|
-
print(f"[BOOT TIMING] ALL imports: {_boot_time.monotonic() - _BOOT_T0:.2f}s", flush=True)
|
|
26
|
-
|
|
27
30
|
TASK_CANCELATION_TIMEOUT = 1
|
|
28
31
|
|
|
29
32
|
_LOGGER = logging.getLogger(__name__)
|
|
@@ -31,7 +34,6 @@ _LOGGER = logging.getLogger(__name__)
|
|
|
31
34
|
|
|
32
35
|
def get_arguments() -> argparse.Namespace:
|
|
33
36
|
"""Get parsed passed in arguments."""
|
|
34
|
-
from boneio.const import ACTION
|
|
35
37
|
|
|
36
38
|
parser = argparse.ArgumentParser(
|
|
37
39
|
description="boneIO app for BeagleBone Black.",
|
|
@@ -206,73 +208,14 @@ def run(
|
|
|
206
208
|
config: str, debug: int, mqttusername: str = "", mqttpassword: str = ""
|
|
207
209
|
) -> int:
|
|
208
210
|
"""Run BoneIO."""
|
|
209
|
-
import time as _time
|
|
210
|
-
|
|
211
|
-
from yaml import MarkedYAMLError
|
|
212
|
-
|
|
213
|
-
from boneio.core.config import load_config_from_file
|
|
214
|
-
from boneio.core.events import GracefulExit
|
|
215
|
-
from boneio.core.utils.logger import configure_logger, setup_logging
|
|
216
|
-
from boneio.exceptions import ConfigurationException
|
|
217
|
-
_t0 = _time.monotonic()
|
|
218
211
|
setup_logging(debug_level=debug)
|
|
219
212
|
_LOGGER.info("BoneIO %s starting.", __version__)
|
|
220
|
-
_LOGGER.debug("[STARTUP TIMING] after setup_logging: %.2fs", _time.monotonic() - _t0)
|
|
221
|
-
|
|
222
|
-
# --- Initialize OLED before anything else (independent of config) ---
|
|
223
|
-
# This is wrapped in try/except so the app always starts even if
|
|
224
|
-
# OLED hardware is missing, broken, or display libraries aren't installed.
|
|
225
|
-
try:
|
|
226
|
-
from boneio.hardware.display.early_oled import (
|
|
227
|
-
draw_config_error,
|
|
228
|
-
draw_crash,
|
|
229
|
-
draw_status,
|
|
230
|
-
init_early_oled,
|
|
231
|
-
)
|
|
232
|
-
init_early_oled()
|
|
233
|
-
draw_status("Loading config...")
|
|
234
|
-
except Exception:
|
|
235
|
-
# OLED is optional — define no-op stubs so rest of the function works
|
|
236
|
-
_LOGGER.debug("Early OLED not available, continuing without display")
|
|
237
|
-
def draw_status(msg: str) -> None: pass # noqa: E731
|
|
238
|
-
def draw_config_error(msg: str) -> None: pass # noqa: E731
|
|
239
|
-
def draw_crash(exc: BaseException) -> None: pass # noqa: E731
|
|
240
|
-
|
|
241
213
|
try:
|
|
242
|
-
|
|
243
|
-
_config = load_config_from_file(
|
|
244
|
-
config_file=config, progress_callback=draw_status,
|
|
245
|
-
)
|
|
246
|
-
_LOGGER.debug("[STARTUP TIMING] load_config_from_file: %.2fs", _time.monotonic() - _t1)
|
|
214
|
+
_config = load_config_from_file(config_file=config)
|
|
247
215
|
if not _config:
|
|
248
216
|
_LOGGER.error("Config not loaded. Exiting.")
|
|
249
|
-
draw_config_error("Config file is empty or missing")
|
|
250
217
|
return 1
|
|
251
218
|
configure_logger(log_config=_config.get("logger") or {}, debug=debug)
|
|
252
|
-
draw_status("Importing modules...")
|
|
253
|
-
# Granular timing of runner sub-imports to find the bottleneck
|
|
254
|
-
_t_a = _time.monotonic()
|
|
255
|
-
from boneio.const import ACTION
|
|
256
|
-
_LOGGER.debug("[RUNNER IMPORT] boneio.const: %.2fs", _time.monotonic() - _t_a)
|
|
257
|
-
_t_a = _time.monotonic()
|
|
258
|
-
from boneio.core.cloud import CloudRegistration
|
|
259
|
-
_LOGGER.debug("[RUNNER IMPORT] boneio.core.cloud: %.2fs", _time.monotonic() - _t_a)
|
|
260
|
-
_t_a = _time.monotonic()
|
|
261
|
-
from boneio.core.manager import Manager
|
|
262
|
-
_LOGGER.debug("[RUNNER IMPORT] boneio.core.manager: %.2fs", _time.monotonic() - _t_a)
|
|
263
|
-
_t_a = _time.monotonic()
|
|
264
|
-
from boneio.core.messaging import MQTTClient
|
|
265
|
-
_LOGGER.debug("[RUNNER IMPORT] boneio.core.messaging: %.2fs", _time.monotonic() - _t_a)
|
|
266
|
-
_t_a = _time.monotonic()
|
|
267
|
-
from boneio.hardware.gpio.input import get_gpio_manager
|
|
268
|
-
_LOGGER.debug("[RUNNER IMPORT] boneio.hardware.gpio.input: %.2fs", _time.monotonic() - _t_a)
|
|
269
|
-
_t_a = _time.monotonic()
|
|
270
|
-
from boneio.runner import async_run
|
|
271
|
-
_LOGGER.debug("[RUNNER IMPORT] boneio.runner (rest): %.2fs", _time.monotonic() - _t_a)
|
|
272
|
-
_LOGGER.debug("[STARTUP TIMING] total before async_run: %.2fs", _time.monotonic() - _t0)
|
|
273
|
-
|
|
274
|
-
draw_status("Starting...")
|
|
275
|
-
|
|
276
219
|
ret = asyncio.run(
|
|
277
220
|
async_run(
|
|
278
221
|
config=_config,
|
|
@@ -291,11 +234,6 @@ def run(
|
|
|
291
234
|
return 0
|
|
292
235
|
except (ConfigurationException, MarkedYAMLError) as err:
|
|
293
236
|
_LOGGER.error("Failed to load config. %s Exiting.", err)
|
|
294
|
-
draw_config_error(str(err)[:100])
|
|
295
|
-
return 1
|
|
296
|
-
except Exception as err:
|
|
297
|
-
_LOGGER.error("Unexpected error during startup: %s", err, exc_info=True)
|
|
298
|
-
draw_crash(err)
|
|
299
237
|
return 1
|
|
300
238
|
|
|
301
239
|
|
|
@@ -303,16 +241,13 @@ def run_modbus_command(
|
|
|
303
241
|
args: argparse.Namespace,
|
|
304
242
|
) -> int:
|
|
305
243
|
"""Run BoneIO."""
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
from boneio.core.events import GracefulExit
|
|
309
|
-
from boneio.core.utils.logger import configure_logger, setup_logging
|
|
310
|
-
from boneio.exceptions import ConfigurationException, RestartRequestException
|
|
244
|
+
# Lazy import modbus CLI only when needed
|
|
311
245
|
from boneio.modbus.cli import (
|
|
312
246
|
async_run_modbus_get,
|
|
313
247
|
async_run_modbus_search,
|
|
314
248
|
async_run_modbus_set,
|
|
315
249
|
)
|
|
250
|
+
|
|
316
251
|
setup_logging(debug_level=args.debug)
|
|
317
252
|
_LOGGER.info("BoneIO %s starting.", __version__)
|
|
318
253
|
try:
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
-
import json
|
|
5
4
|
import logging
|
|
5
|
+
import json
|
|
6
6
|
import threading
|
|
7
7
|
import time
|
|
8
8
|
from abc import ABC, abstractmethod
|
|
9
9
|
from collections.abc import Callable
|
|
10
10
|
|
|
11
|
-
from boneio.components.output import BasicOutput
|
|
12
11
|
from boneio.const import (
|
|
13
12
|
CLOSED,
|
|
14
13
|
CLOSING,
|
|
@@ -21,6 +20,7 @@ from boneio.core.events import EventBus
|
|
|
21
20
|
from boneio.core.messaging import BasicMqtt
|
|
22
21
|
from boneio.core.utils import TimePeriod
|
|
23
22
|
from boneio.models import CoverState, PositionDict
|
|
23
|
+
from boneio.components.output import BasicOutput
|
|
24
24
|
from boneio.models.events import CoverEvent
|
|
25
25
|
|
|
26
26
|
_LOGGER = logging.getLogger(__name__)
|
|
@@ -187,17 +187,13 @@ class BaseCover(BaseCoverABC, BasicMqtt):
|
|
|
187
187
|
|
|
188
188
|
self._event_bus.add_sigterm_listener(self.on_exit)
|
|
189
189
|
|
|
190
|
-
|
|
191
|
-
self._loop.
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
)
|
|
198
|
-
except RuntimeError:
|
|
199
|
-
# Event loop is closed (e.g. during tests)
|
|
200
|
-
pass
|
|
190
|
+
self._loop.call_soon_threadsafe(
|
|
191
|
+
self._loop.call_later,
|
|
192
|
+
0.5,
|
|
193
|
+
self.send_state,
|
|
194
|
+
self.state,
|
|
195
|
+
self.json_position
|
|
196
|
+
)
|
|
201
197
|
|
|
202
198
|
async def on_exit(self) -> None:
|
|
203
199
|
"""Stop on exit."""
|
|
@@ -210,12 +206,8 @@ class BaseCover(BaseCoverABC, BasicMqtt):
|
|
|
210
206
|
self._open_relay.turn_off()
|
|
211
207
|
self._close_relay.turn_off()
|
|
212
208
|
# Send relay states to WebSocket (not MQTT - that's handled by output_type check)
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
asyncio.create_task(self._close_relay.async_send_state())
|
|
216
|
-
except RuntimeError:
|
|
217
|
-
# Event loop is closed (e.g. during tests or shutdown)
|
|
218
|
-
pass
|
|
209
|
+
asyncio.create_task(self._open_relay.async_send_state())
|
|
210
|
+
asyncio.create_task(self._close_relay.async_send_state())
|
|
219
211
|
if self._current_operation in (OPENING, CLOSING):
|
|
220
212
|
self._last_operation = self._current_operation
|
|
221
213
|
self._current_operation = IDLE
|
|
@@ -275,7 +267,9 @@ class BaseCover(BaseCoverABC, BasicMqtt):
|
|
|
275
267
|
await self.stop()
|
|
276
268
|
elif self._position >= 100:
|
|
277
269
|
await self.close()
|
|
278
|
-
elif self._position <= 0
|
|
270
|
+
elif self._position <= 0:
|
|
271
|
+
await self.open()
|
|
272
|
+
elif self._last_operation == CLOSING:
|
|
279
273
|
await self.open()
|
|
280
274
|
else:
|
|
281
275
|
await self.close()
|
|
@@ -315,7 +309,9 @@ class BaseCover(BaseCoverABC, BasicMqtt):
|
|
|
315
309
|
await self.open()
|
|
316
310
|
elif self._position >= 100:
|
|
317
311
|
await self.close()
|
|
318
|
-
elif self._position <= 0
|
|
312
|
+
elif self._position <= 0:
|
|
313
|
+
await self.open()
|
|
314
|
+
elif self._last_operation == CLOSING:
|
|
319
315
|
await self.open()
|
|
320
316
|
else:
|
|
321
317
|
await self.close()
|
|
@@ -329,18 +325,6 @@ class BaseCover(BaseCoverABC, BasicMqtt):
|
|
|
329
325
|
else:
|
|
330
326
|
return CLOSED if self._position == 0 else OPEN
|
|
331
327
|
|
|
332
|
-
@property
|
|
333
|
-
def is_open(self) -> bool:
|
|
334
|
-
"""Whether the cover is currently open (position > 0).
|
|
335
|
-
|
|
336
|
-
Used by the action conditions system to evaluate ``is_open`` / ``is_closed``
|
|
337
|
-
checks for covers.
|
|
338
|
-
|
|
339
|
-
Returns:
|
|
340
|
-
True if the cover is not fully closed.
|
|
341
|
-
"""
|
|
342
|
-
return self._position > 0
|
|
343
|
-
|
|
344
328
|
@property
|
|
345
329
|
def position(self) -> int:
|
|
346
330
|
return round(self._position, 0)
|
|
@@ -6,11 +6,11 @@ import threading
|
|
|
6
6
|
import time
|
|
7
7
|
from collections.abc import Callable
|
|
8
8
|
|
|
9
|
-
from boneio.components.cover.cover import BaseCover
|
|
10
|
-
from boneio.components.output import BasicOutput
|
|
11
9
|
from boneio.const import CLOSE, CLOSING, IDLE, OPEN, OPENING, STOP
|
|
10
|
+
from boneio.components.cover.cover import BaseCover
|
|
12
11
|
from boneio.core.events import EventBus
|
|
13
12
|
from boneio.core.utils import TimePeriod
|
|
13
|
+
from boneio.components.output import BasicOutput
|
|
14
14
|
|
|
15
15
|
_LOGGER = logging.getLogger(__name__)
|
|
16
16
|
DEFAULT_RESTORED_STATE = {"position": 100}
|
|
@@ -43,7 +43,7 @@ class TimeBasedCover(BaseCover):
|
|
|
43
43
|
|
|
44
44
|
def _move_cover(self, direction: str, duration: float, target_position: int | None = None):
|
|
45
45
|
"""Run in sepearate thread.
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
Args:
|
|
48
48
|
direction: Direction of movement (OPEN or CLOSE)
|
|
49
49
|
duration: Full time for 0-100% movement in milliseconds
|
|
@@ -60,10 +60,7 @@ class TimeBasedCover(BaseCover):
|
|
|
60
60
|
|
|
61
61
|
if total_steps == 0 or duration == 0:
|
|
62
62
|
self._current_operation = IDLE
|
|
63
|
-
|
|
64
|
-
self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
|
|
65
|
-
except RuntimeError:
|
|
66
|
-
pass
|
|
63
|
+
self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
|
|
67
64
|
return
|
|
68
65
|
|
|
69
66
|
# Calculate actual duration based on remaining distance
|
|
@@ -72,10 +69,7 @@ class TimeBasedCover(BaseCover):
|
|
|
72
69
|
|
|
73
70
|
relay.turn_on()
|
|
74
71
|
# Send relay state to WebSocket (not MQTT - that's handled by output_type check)
|
|
75
|
-
|
|
76
|
-
self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
|
|
77
|
-
except RuntimeError:
|
|
78
|
-
pass
|
|
72
|
+
self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
|
|
79
73
|
start_time = time.monotonic()
|
|
80
74
|
|
|
81
75
|
while not self._stop_event.is_set():
|
|
@@ -90,10 +84,7 @@ class TimeBasedCover(BaseCover):
|
|
|
90
84
|
|
|
91
85
|
self._last_timestamp = current_time # Użyj pobranego czasu
|
|
92
86
|
if current_time - self._last_update_time >= 1:
|
|
93
|
-
|
|
94
|
-
self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
|
|
95
|
-
except RuntimeError:
|
|
96
|
-
break
|
|
87
|
+
self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
|
|
97
88
|
self._last_update_time = current_time
|
|
98
89
|
|
|
99
90
|
if target_position is not None:
|
|
@@ -107,15 +98,9 @@ class TimeBasedCover(BaseCover):
|
|
|
107
98
|
time.sleep(0.05) # Małe opóźnienie, aby nie blokować CPU
|
|
108
99
|
relay.turn_off()
|
|
109
100
|
# Send relay state to WebSocket (not MQTT - that's handled by output_type check)
|
|
110
|
-
|
|
111
|
-
self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
|
|
112
|
-
except RuntimeError:
|
|
113
|
-
pass
|
|
101
|
+
self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
|
|
114
102
|
self._current_operation = IDLE
|
|
115
|
-
|
|
116
|
-
self._loop.call_soon_threadsafe(lambda: self.send_state_and_save(self.json_position))
|
|
117
|
-
except RuntimeError:
|
|
118
|
-
pass
|
|
103
|
+
self._loop.call_soon_threadsafe(lambda: self.send_state_and_save(self.json_position))
|
|
119
104
|
self._last_update_time = time.monotonic() # Upewnij się, że aktualizacja jest wysłana na końcu ruchu
|
|
120
105
|
|
|
121
106
|
async def run_cover(self, current_operation: str, target_position: int | None = None) -> None:
|
|
@@ -112,11 +112,6 @@ class OutputGroup(BasicOutput):
|
|
|
112
112
|
"""Check if group is active (ON state)."""
|
|
113
113
|
return self._state == ON
|
|
114
114
|
|
|
115
|
-
@property
|
|
116
|
-
def group_members(self) -> list[BasicOutput]:
|
|
117
|
-
"""Return list of member outputs."""
|
|
118
|
-
return self._group_members
|
|
119
|
-
|
|
120
115
|
@override
|
|
121
116
|
async def async_send_state(self, optimized_value: str | None = None) -> None:
|
|
122
117
|
"""Send state to message bus and event bus for WebSocket."""
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
|
+
|
|
6
7
|
import time
|
|
7
8
|
from typing import cast
|
|
8
9
|
|
|
9
10
|
from boneio.components.input.detectors import BinarySensorDetector
|
|
10
|
-
from boneio.const import
|
|
11
|
+
from boneio.const import BinaryStateTypes, ClickTypes, PRESSED, RELEASED
|
|
11
12
|
from boneio.hardware.gpio.input import GpioBaseClass, get_gpio_manager
|
|
12
13
|
from boneio.models import InputState
|
|
13
14
|
from boneio.models.events import InputEvent
|
|
@@ -5,10 +5,10 @@ from __future__ import annotations
|
|
|
5
5
|
import logging
|
|
6
6
|
import time
|
|
7
7
|
|
|
8
|
-
from boneio.components.input.detectors import MultiClickDetector
|
|
9
8
|
from boneio.const import ClickTypes
|
|
10
|
-
from boneio.
|
|
9
|
+
from boneio.components.input.detectors import MultiClickDetector
|
|
11
10
|
from boneio.hardware.gpio.input import GpioBaseClass, get_gpio_manager
|
|
11
|
+
from boneio.core.utils import TimePeriod
|
|
12
12
|
|
|
13
13
|
_LOGGER = logging.getLogger(__name__)
|
|
14
14
|
|
|
@@ -6,13 +6,12 @@ import logging
|
|
|
6
6
|
import time
|
|
7
7
|
|
|
8
8
|
from boneio.const import COVER, LIGHT, NONE, OFF, ON, OUTPUT, STATE, SWITCH
|
|
9
|
-
from boneio.core.events import EventBus, async_track_point_in_time, utcnow
|
|
10
9
|
from boneio.core.messaging import BasicMqtt
|
|
11
|
-
from boneio.
|
|
12
|
-
from boneio.core.
|
|
10
|
+
from boneio.models.events import OutputEvent
|
|
11
|
+
from boneio.core.events import EventBus, async_track_point_in_time, utcnow
|
|
13
12
|
from boneio.integration.interlock import SoftwareInterlockManager
|
|
13
|
+
from boneio.core.utils import callback
|
|
14
14
|
from boneio.models import OutputState
|
|
15
|
-
from boneio.models.events import OutputEvent
|
|
16
15
|
|
|
17
16
|
_LOGGER = logging.getLogger(__name__)
|
|
18
17
|
|
|
@@ -44,26 +43,6 @@ class BasicOutput(BasicMqtt):
|
|
|
44
43
|
"""Initialize Basic output."""
|
|
45
44
|
self._momentary_turn_on = kwargs.pop("momentary_turn_on", None)
|
|
46
45
|
self._momentary_turn_off = kwargs.pop("momentary_turn_off", None)
|
|
47
|
-
|
|
48
|
-
# --- Adjustable duration (editable momentary_turn_on via HA number) ---
|
|
49
|
-
self._adjustable_duration_enabled: bool = kwargs.pop("adjustable_duration", False)
|
|
50
|
-
_dur_default_raw = kwargs.pop("duration_default", None)
|
|
51
|
-
_dur_min_raw = kwargs.pop("duration_min", None)
|
|
52
|
-
_dur_max_raw = kwargs.pop("duration_max", None)
|
|
53
|
-
self._duration_unit: str = kwargs.pop("duration_unit", "s")
|
|
54
|
-
# Pop legacy field in case it still exists in config
|
|
55
|
-
kwargs.pop("duration_step", None)
|
|
56
|
-
|
|
57
|
-
from boneio.core.utils.timeperiod import parse_time_to_seconds
|
|
58
|
-
|
|
59
|
-
self._duration_min: float = max(1.0, parse_time_to_seconds(_dur_min_raw, 1.0))
|
|
60
|
-
self._duration_max: float = max(self._duration_min, parse_time_to_seconds(_dur_max_raw, 3600.0))
|
|
61
|
-
self._duration_default: float = parse_time_to_seconds(_dur_default_raw, 60.0)
|
|
62
|
-
# Current adjustable duration value in seconds (will be overwritten by restored state)
|
|
63
|
-
self._adjustable_duration: float = max(
|
|
64
|
-
self._duration_min, min(self._duration_max, self._duration_default)
|
|
65
|
-
)
|
|
66
|
-
|
|
67
46
|
super().__init__(id=id, name=name or id, topic_type=topic_type, topic_prefix=topic_prefix, **kwargs)
|
|
68
47
|
self._output_type: str = output_type
|
|
69
48
|
self._event_bus: EventBus = event_bus
|
|
@@ -72,7 +51,6 @@ class BasicOutput(BasicMqtt):
|
|
|
72
51
|
if output_type == COVER:
|
|
73
52
|
self._momentary_turn_on = None
|
|
74
53
|
self._momentary_turn_off = None
|
|
75
|
-
self._adjustable_duration_enabled = False
|
|
76
54
|
self._state = ON if restored_state else OFF
|
|
77
55
|
self._momentary_action = None
|
|
78
56
|
self._last_timestamp = 0.0
|
|
@@ -161,10 +139,6 @@ class BasicOutput(BasicMqtt):
|
|
|
161
139
|
expander_id=self.expander_id,
|
|
162
140
|
area=self.area,
|
|
163
141
|
interlock_groups=self._interlock_groups,
|
|
164
|
-
adjustable_duration=self._adjustable_duration_enabled,
|
|
165
|
-
adjustable_duration_value=self._adjustable_duration if self._adjustable_duration_enabled else None,
|
|
166
|
-
duration_min=self._duration_min if self._adjustable_duration_enabled else None,
|
|
167
|
-
duration_max=self._duration_max if self._adjustable_duration_enabled else None,
|
|
168
142
|
)
|
|
169
143
|
|
|
170
144
|
output_event = OutputEvent(
|
|
@@ -220,26 +194,15 @@ class BasicOutput(BasicMqtt):
|
|
|
220
194
|
_LOGGER.warning("set_brightness not supported for %s output type", self.output_type)
|
|
221
195
|
|
|
222
196
|
def _execute_momentary_turn(self, momentary_type: str) -> None:
|
|
223
|
-
"""Execute momentary action.
|
|
224
|
-
|
|
225
|
-
If adjustable_duration is enabled and this is a turn-ON action,
|
|
226
|
-
use the dynamic duration instead of the static momentary_turn_on.
|
|
227
|
-
"""
|
|
197
|
+
"""Execute momentary action."""
|
|
228
198
|
if self._momentary_action:
|
|
229
199
|
_LOGGER.debug("Cancelling momentary action for %s", self.name)
|
|
230
200
|
self._momentary_action()
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
delayed_action = TimePeriod(seconds=self._adjustable_duration)
|
|
237
|
-
else:
|
|
238
|
-
delayed_action = self._momentary_turn_on
|
|
239
|
-
else:
|
|
240
|
-
action = self.async_turn_on
|
|
241
|
-
delayed_action = self._momentary_turn_off
|
|
242
|
-
|
|
201
|
+
(action, delayed_action) = (
|
|
202
|
+
(self.async_turn_off, self._momentary_turn_on)
|
|
203
|
+
if momentary_type == ON
|
|
204
|
+
else (self.async_turn_on, self._momentary_turn_off)
|
|
205
|
+
)
|
|
243
206
|
if delayed_action:
|
|
244
207
|
_LOGGER.debug("Applying momentary action for %s in %s", self.name, delayed_action.as_timedelta)
|
|
245
208
|
self._momentary_action = async_track_point_in_time(
|
|
@@ -255,59 +218,6 @@ class BasicOutput(BasicMqtt):
|
|
|
255
218
|
await action(timestamp=timestamp)
|
|
256
219
|
self._momentary_action = None
|
|
257
220
|
|
|
258
|
-
# -- Adjustable duration -------------------------------------------------
|
|
259
|
-
|
|
260
|
-
@property
|
|
261
|
-
def adjustable_duration_enabled(self) -> bool:
|
|
262
|
-
"""Whether this output has an adjustable duration (HA number entity)."""
|
|
263
|
-
return self._adjustable_duration_enabled
|
|
264
|
-
|
|
265
|
-
@property
|
|
266
|
-
def adjustable_duration(self) -> float:
|
|
267
|
-
"""Current adjustable duration value in seconds."""
|
|
268
|
-
return self._adjustable_duration
|
|
269
|
-
|
|
270
|
-
@property
|
|
271
|
-
def duration_min(self) -> float:
|
|
272
|
-
"""Minimum duration in seconds for HA slider."""
|
|
273
|
-
return self._duration_min
|
|
274
|
-
|
|
275
|
-
@property
|
|
276
|
-
def duration_max(self) -> float:
|
|
277
|
-
"""Maximum duration in seconds for HA slider."""
|
|
278
|
-
return self._duration_max
|
|
279
|
-
|
|
280
|
-
@property
|
|
281
|
-
def duration_unit(self) -> str:
|
|
282
|
-
"""Unit of measurement for HA number entity ('s' or 'min')."""
|
|
283
|
-
return self._duration_unit
|
|
284
|
-
|
|
285
|
-
def set_adjustable_duration(self, seconds: float) -> None:
|
|
286
|
-
"""Set the adjustable duration value.
|
|
287
|
-
|
|
288
|
-
Clamps to [duration_min, duration_max].
|
|
289
|
-
OutputManager handles persistence and MQTT publishing.
|
|
290
|
-
|
|
291
|
-
Args:
|
|
292
|
-
seconds: New duration in seconds.
|
|
293
|
-
"""
|
|
294
|
-
self._adjustable_duration = max(
|
|
295
|
-
self._duration_min, min(self._duration_max, float(seconds))
|
|
296
|
-
)
|
|
297
|
-
_LOGGER.debug(
|
|
298
|
-
"Output '%s' adjustable duration set to %.1fs", self.id, self._adjustable_duration
|
|
299
|
-
)
|
|
300
|
-
|
|
301
|
-
def restore_adjustable_duration(self, seconds: float) -> None:
|
|
302
|
-
"""Restore persisted duration value (called during init by OutputManager).
|
|
303
|
-
|
|
304
|
-
Args:
|
|
305
|
-
seconds: Persisted duration value.
|
|
306
|
-
"""
|
|
307
|
-
self._adjustable_duration = max(
|
|
308
|
-
self._duration_min, min(self._duration_max, float(seconds))
|
|
309
|
-
)
|
|
310
|
-
|
|
311
221
|
@property
|
|
312
222
|
def is_active(self) -> bool:
|
|
313
223
|
"""Is active check."""
|