boneIO 1.3.0__tar.gz → 1.3.0.dev3__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.dev3}/PKG-INFO +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/bonecli.py +1 -38
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/cover/cover.py +17 -33
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/cover/time_based.py +8 -23
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/group/output_group.py +0 -5
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/input/binary_sensor.py +2 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/input/event.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/output/basic.py +9 -99
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/sensor/virtual_energy.py +80 -101
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/template/alarm_panel.py +7 -7
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/template/gate_cover.py +10 -10
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/template/thermostat.py +6 -6
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/const.py +0 -6
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/registration.py +7 -7
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/config_helper.py +9 -28
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/migrations/__init__.py +5 -8
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/migrations/v1_proxy_port.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/migrations/v2_transition.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/schema_converter.py +4 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/yaml_util.py +260 -302
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/discovery.py +71 -99
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/events/bus.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/__init__.py +0 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/canopen.py +4 -11
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/covers.py +96 -144
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/display.py +2 -76
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/inputs.py +190 -183
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/manager.py +244 -466
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/modbus.py +4 -4
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/outputs.py +5 -66
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/remote.py +236 -206
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/sensors.py +246 -296
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/templates/__init__.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/templates/alarm.py +3 -3
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/templates/gate_cover.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/templates/thermostat.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/templates.py +4 -4
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/update.py +204 -313
- boneio-1.3.0.dev3/boneio/core/messaging/__init__.py +13 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/messaging/basic.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/messaging/local.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/messaging/mqtt.py +7 -22
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/__init__.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/base.py +8 -21
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/esphome.py +1 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/mqtt.py +2 -14
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/wled.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/state/manager.py +10 -17
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/system/host_data.py +1 -18
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/async_updater.py +3 -3
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/conditions.py +2 -3
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/util.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/analog/adc.py +3 -3
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/client.py +6 -21
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/interface.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/node.py +2 -2
- boneio-1.3.0.dev3/boneio/hardware/can/test_od.py +10 -0
- boneio-1.3.0.dev3/boneio/hardware/display/__init__.py +7 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/display/oled.py +87 -82
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/input/base.py +1 -12
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/input/manager.py +11 -11
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/bus.py +5 -5
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/onewire/__init__.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/integration/homeassistant.py +4 -288
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/cli.py +1 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/client.py +2 -116
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/coordinator.py +2 -9
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/derived/numeric.py +1 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/sensor/binary.py +1 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/sensor/text.py +2 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/utils.py +1 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/__init__.py +1 -3
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/actions.py +0 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/events.py +1 -17
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/state.py +0 -6
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/runner.py +113 -116
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/remote_devices.yaml +8 -8
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/schema.yaml +8 -463
- boneio-1.3.0.dev3/boneio/version.py +2 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/app.py +8 -32
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/ConfigEditor-DCabX5qK.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/abap-CRCWOmpq.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/aiWizardPrompt-B5y1tw6O.js +2 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/apex-DnsZk_dE.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/azcli-1IWB1ccx.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/bat-DPkNLes8.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/bicep-Corcdgou.js +2 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/cameligo-CGrWLZr3.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/clojure-D9WOWImG.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/coffee-B7EJu28W.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/cpp-SEyurbux.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/csharp-BoL64M5l.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/csp-C46ZqvIl.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/css-DQU6DXDx.js +3 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/cssMode-DShylJqh.js +4 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/cypher-D84EuPTj.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/dart-D8lhlL1r.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/dockerfile-DLk6rpji.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/ecl-BO6FnfXk.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/editor.worker-B4pQIWZD.js +12 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/elixir-BRjLKONM.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/flow9-Cac8vKd7.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/freemarker2-CdX7KyE5.js +3 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/fsharp-fd1GTHhf.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/go-O9LJTZXk.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/graphql-LQdxqEYJ.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/handlebars-C3LDizRo.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/hcl-DxDQ3s82.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/html-z-YV0Mzh.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/htmlMode-D7IIR2va.js +4 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/index-CYk12kJk.js +105 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/index-CmBl6pFS.css +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/ini-BvajGCUy.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/java-SYsfObOQ.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/javascript-CH6jkTQ0.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/json.worker-aFakAbRR.js +44 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/jsonMode-CLzeI5HJ.js +10 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/julia-DQXNmw_w.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/kotlin-qQ0MG-9I.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/less-GGFNNJHn.js +2 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/lexon-Canl7DCW.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/liquid-DuoI_Tv0.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/lua-D28Ae8-K.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/m3-DPitgjJI.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/markdown-B811l8j2.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/mdx-C2KSoPE6.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/mips-CdjsipkG.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/monaco-DVn9mNSL.js +739 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/monaco-xnhJeWAr.css +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/msdax-CYqgjx_P.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/mysql-BHd6q0vd.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/objective-c-B1aVtJYH.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/pascal-BhNW15KB.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/pascaligo-5jv8CcQD.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/perl-DlYyT36c.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/pgsql-Dy0bjov7.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/php-120yhfDK.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/pla-CjnFlu4u.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/postiats-CQpG440k.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/powerquery-DdJtto1Z.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/powershell-Bu_VLpJB.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/protobuf-IBS6jZEB.js +2 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/pug-kFxLfcjb.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/python-Dh7Kzq6D.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/qsharp-q7JyzKFN.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/r-BIFz-_sK.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/razor-CJwYmOfy.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/redis-CHOsPHWR.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/redshift-CBifECDb.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/restructuredtext-CghPJEOS.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/ruby-CYWGW-b1.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/rust-DMDD0SHb.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/sb-BYAiYHFx.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/scala-Bqvq8jcR.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/scheme-Dhb-2j9p.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/scss-CTwUZ5N7.js +3 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/shell-CsDZo4DB.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/solidity-CME5AdoB.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/sophia-RYC1BQQz.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/sparql-KEyrF7De.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/sql-BdTr02Mf.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/st-C7iG7M4S.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/swift-D7IUmUK8.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/systemverilog-DgMryOEJ.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/tcl-PloMZuKG.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/tsMode-VSMpyycN.js +11 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/twig-BfRIq3la.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/typescript-C4HjhnfC.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/typespec-CzxlYoT_.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/vb-BwAE3J76.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/vendor-8TE4Uyqi.js +3 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/wgsl-B_1kOXbF.js +298 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-BIl4cyR9.js +2 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/xml-ByUHJiRO.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/yaml-CTy8Ej0Q.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/yaml.worker-DBeHcBRc.js +411 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/index.html +5 -8
- {boneio-1.3.0/boneio/webui → boneio-1.3.0.dev3/boneio/webui/frontend-dist}/schema/boneio.schema.json +0 -14
- {boneio-1.3.0/boneio/webui → boneio-1.3.0.dev3/boneio/webui/frontend-dist}/schema/config.schema.json +118 -911
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -3
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -22
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/output.schema.json +0 -62
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/template.schema.json +11 -299
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/sw.js +1 -0
- boneio-1.3.0.dev3/boneio/webui/frontend-dist/workbox-226dbdbf.js +1 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/middleware/auth.py +3 -3
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/__init__.py +1 -5
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/caddy.py +14 -14
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/can.py +5 -42
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/config.py +265 -410
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/modbus.py +10 -76
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/outputs.py +0 -62
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/remote_devices.py +3 -3
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/system.py +5 -258
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/update.py +38 -70
- {boneio-1.3.0/boneio/webui/frontend-dist → boneio-1.3.0.dev3/boneio/webui}/schema/boneio.schema.json +0 -14
- {boneio-1.3.0/boneio/webui/frontend-dist → boneio-1.3.0.dev3/boneio/webui}/schema/config.schema.json +118 -911
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/modbus_devices.schema.json +0 -3
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/mqtt.schema.json +0 -22
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/output.schema.json +0 -62
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/template.schema.json +11 -299
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/web_server.py +1 -3
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/websocket_manager.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3/boneio.egg-info}/PKG-INFO +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio.egg-info/SOURCES.txt +97 -59
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio.egg-info/requires.txt +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/pyproject.toml +28 -40
- 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/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/version.py +0 -2
- 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.dev3}/LICENSE +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/MANIFEST.in +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/README.md +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/output_32_5.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/output_32_5.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/output_32_5.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.5/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.5/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.5/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.5/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.6/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.6/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.6/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.6/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/output_48_4.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/input.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/output_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/output_32_10.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/output_48_4.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/output_cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/cover/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/cover/venetian.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/group/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/input/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/input/detectors.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/output/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/output/mcp.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/output/pca.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/output/pcf.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/sensor/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/template/__init__.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/data/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/data/docker-compose.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/secrets.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/package-lock.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/package.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/events/__init__.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/messaging/basic_mqtt.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/messaging/queue.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/can.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/sensor/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/sensor/base.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/sensor/system.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/state/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/system/__init__.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/system/monitor.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/filter.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/font_util.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/logger.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/timeperiod.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/config.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/event.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/mqtt.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/output24x16A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/config.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/event.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/mqtt.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/output32x10A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/config.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/event.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/mqtt.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/output48x4A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/can_master.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/can_slave.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/config.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/event.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/mqtt.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/outputCover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/config.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/cover.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/event.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/event_all.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/exceptions.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/analog/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/bridge.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/node_id.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/display/fonts/danube__.ttf +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/expanders/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/input/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/ina219.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/ina219_driver.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/mcp9808.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/pct2075.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/onewire/bus.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/onewire/dallas.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/onewire/ds2482.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/sensor/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/sensor/temperature/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/sensor/temperature/base.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/integration/__init__.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/integration/interlock.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/hvac/ventclear.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/inverters/sofar.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/inverters/thessla.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/other/n4dsc08.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/other/r4dcb08.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/other/wanas415.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/cwt.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/dts1964_3f.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/gdfs.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/gdfx.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/pt100.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/sht20.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/sht30.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/__init__.py +4 -4
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/base.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/derived/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/derived/select.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/derived/switch.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/derived/text.py +1 -1
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/sensor/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/sensor/numeric.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/writeable/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/writeable/binary.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/writeable/numeric.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/files.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/logs.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/mqtt.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/actions.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/actions_sensor.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/actions_switch.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/condition.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/filters.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/filters_adc.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/id.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/temp_unit.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/update_interval.yaml +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/action_validation.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/assets/codicon-DCmgc-ay.ttf +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/boneio-192.png +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/boneio-512.png +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/boneio.svg +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/middleware/__init__.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/auth.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/covers.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/sensors.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/templates.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/tools.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/adc.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/areas.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/binary_sensor.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/can.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/cover.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/dallas.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/ds2482.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/event.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/ina219.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/lm75.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/logger.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/mcp23017.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/mcp9808.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/modbus.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/oled.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/output_group.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/pca9685.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/pcf8575.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/remote_devices.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/sensor.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/web.schema.json +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/services/__init__.py +2 -2
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/services/logs.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio.egg-info/dependency_links.txt +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio.egg-info/entry_points.txt +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio.egg-info/top_level.txt +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/setup.cfg +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/setup.py +0 -0
- {boneio-1.3.0 → boneio-1.3.0.dev3}/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.dev3
|
|
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:
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import time as _boot_time
|
|
6
|
-
|
|
7
6
|
_BOOT_T0 = _boot_time.monotonic()
|
|
8
7
|
|
|
9
8
|
import logging
|
|
@@ -21,7 +20,6 @@ print(f"[BOOT TIMING] stdlib imports: {_boot_time.monotonic() - _BOOT_T0:.2f}s",
|
|
|
21
20
|
# startup time. Only version is imported here for --version CLI flag.
|
|
22
21
|
_t_ver = _boot_time.monotonic()
|
|
23
22
|
from boneio.version import __version__
|
|
24
|
-
|
|
25
23
|
print(f"[BOOT TIMING] ALL imports: {_boot_time.monotonic() - _BOOT_T0:.2f}s", flush=True)
|
|
26
24
|
|
|
27
25
|
TASK_CANCELATION_TIMEOUT = 1
|
|
@@ -207,9 +205,7 @@ def run(
|
|
|
207
205
|
) -> int:
|
|
208
206
|
"""Run BoneIO."""
|
|
209
207
|
import time as _time
|
|
210
|
-
|
|
211
208
|
from yaml import MarkedYAMLError
|
|
212
|
-
|
|
213
209
|
from boneio.core.config import load_config_from_file
|
|
214
210
|
from boneio.core.events import GracefulExit
|
|
215
211
|
from boneio.core.utils.logger import configure_logger, setup_logging
|
|
@@ -218,38 +214,14 @@ def run(
|
|
|
218
214
|
setup_logging(debug_level=debug)
|
|
219
215
|
_LOGGER.info("BoneIO %s starting.", __version__)
|
|
220
216
|
_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
217
|
try:
|
|
242
218
|
_t1 = _time.monotonic()
|
|
243
|
-
_config = load_config_from_file(
|
|
244
|
-
config_file=config, progress_callback=draw_status,
|
|
245
|
-
)
|
|
219
|
+
_config = load_config_from_file(config_file=config)
|
|
246
220
|
_LOGGER.debug("[STARTUP TIMING] load_config_from_file: %.2fs", _time.monotonic() - _t1)
|
|
247
221
|
if not _config:
|
|
248
222
|
_LOGGER.error("Config not loaded. Exiting.")
|
|
249
|
-
draw_config_error("Config file is empty or missing")
|
|
250
223
|
return 1
|
|
251
224
|
configure_logger(log_config=_config.get("logger") or {}, debug=debug)
|
|
252
|
-
draw_status("Importing modules...")
|
|
253
225
|
# Granular timing of runner sub-imports to find the bottleneck
|
|
254
226
|
_t_a = _time.monotonic()
|
|
255
227
|
from boneio.const import ACTION
|
|
@@ -270,9 +242,6 @@ def run(
|
|
|
270
242
|
from boneio.runner import async_run
|
|
271
243
|
_LOGGER.debug("[RUNNER IMPORT] boneio.runner (rest): %.2fs", _time.monotonic() - _t_a)
|
|
272
244
|
_LOGGER.debug("[STARTUP TIMING] total before async_run: %.2fs", _time.monotonic() - _t0)
|
|
273
|
-
|
|
274
|
-
draw_status("Starting...")
|
|
275
|
-
|
|
276
245
|
ret = asyncio.run(
|
|
277
246
|
async_run(
|
|
278
247
|
config=_config,
|
|
@@ -291,11 +260,6 @@ def run(
|
|
|
291
260
|
return 0
|
|
292
261
|
except (ConfigurationException, MarkedYAMLError) as err:
|
|
293
262
|
_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
263
|
return 1
|
|
300
264
|
|
|
301
265
|
|
|
@@ -304,7 +268,6 @@ def run_modbus_command(
|
|
|
304
268
|
) -> int:
|
|
305
269
|
"""Run BoneIO."""
|
|
306
270
|
from yaml import MarkedYAMLError
|
|
307
|
-
|
|
308
271
|
from boneio.core.events import GracefulExit
|
|
309
272
|
from boneio.core.utils.logger import configure_logger, setup_logging
|
|
310
273
|
from boneio.exceptions import ConfigurationException, RestartRequestException
|
|
@@ -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."""
|