boneio 1.6.0.dev25__tar.gz → 1.6.0.dev26__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.6.0.dev25/boneio.egg-info → boneio-1.6.0.dev26}/PKG-INFO +1 -1
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/cover/cover.py +1 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/cover/remote.py +1 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/group/output_group.py +1 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/input/binary_sensor.py +2 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/input/event.py +2 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/output/remote.py +5 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/sensor/virtual_energy.py +12 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/template/alarm_panel.py +10 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/template/gate_cover.py +14 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/template/thermostat.py +10 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/const.py +3 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/config_helper.py +20 -7
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/covers.py +64 -22
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/inputs.py +32 -4
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/irrigation.py +61 -22
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/manager.py +3 -1
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/outputs.py +141 -15
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/sensors.py +46 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/templates/__init__.py +14 -0
- boneio-1.6.0.dev26/boneio/core/messaging/broker_tls.py +305 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/messaging/mqtt.py +120 -16
- boneio-1.6.0.dev26/boneio/core/messaging/mqtt_tls.py +403 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/security/certificate.py +6 -5
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/system_ops.py +36 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/utils/overlay.py +35 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/gpio/input/base.py +19 -1
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/MANIFEST.sha256 +2 -1
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/helpers/boneio-system +452 -5
- boneio-1.6.0.dev26/boneio/migrations/assets/overlays/BONEIO-BLACK-PINS-v0.2-v0.3.dtbo +0 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.17.json +1 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.17.sig +2 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.18.json +1 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.18.sig +2 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.22.json +1 -1
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.22.sig +0 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.26.json +1 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.26.sig +2 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.27.json +1 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.27.sig +2 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.29.json +1 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.29.sig +2 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.30.json +1 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.30.sig +2 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.31.json +1 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.31.sig +1 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.32.json +1 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.32.sig +1 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.5.json +1 -1
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.5.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.8.json +1 -1
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.8.sig +1 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.9.json +1 -0
- boneio-1.6.0.dev26/boneio/migrations/plans/1.6.9.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/manifest.json +1 -1
- boneio-1.6.0.dev26/boneio/migrations/plans/manifest.sig +1 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/runner.py +37 -9
- boneio-1.6.0.dev26/boneio/migrations/versions/v1_6_30_os_update_apt_cache.py +48 -0
- boneio-1.6.0.dev26/boneio/migrations/versions/v1_6_31_overlay_v02_v03_inputs.py +56 -0
- boneio-1.6.0.dev26/boneio/migrations/versions/v1_6_32_mqtt_broker_tls.py +69 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/coordinator.py +25 -8
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/base.py +6 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/models/state.py +2 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/runner.py +36 -1
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/schema.yaml +44 -0
- boneio-1.6.0.dev26/boneio/version.py +2 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/app.py +12 -10
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/AccountsView-Cc8wXm_F.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/AccountsView-Cc8wXm_F.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/AppInitContext-DOBA1DBK.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/AppInitContext-DfLc_q_P.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/AppInitContext-DfLc_q_P.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/BackupSection-D4HCBK7n.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/BackupSection-CANC-QUH.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/BackupSection-CANC-QUH.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/BindingMatrix-BYKOMR_H.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/BindingMatrix-Cnc4E7Ck.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/BindingMatrix-Cnc4E7Ck.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/DeviceControlSection-EGRQa-cw.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/DeviceControlSection-B-1_kWF1.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/DeviceControlSection-B-1_kWF1.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/DiagnosticsView-DFsDoMWx.js +5 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/DiagnosticsView-DFsDoMWx.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/EntityGrid-CXCnm_HS.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/EntityGrid-BwEzKli2.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/EntityGrid-BwEzKli2.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/FactoryResetSection-B0txYzJ_.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/FactoryResetSection-D_G_VAeM.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/FactoryResetSection-D_G_VAeM.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/FormInputToggle-B898WonD.js +11 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/FormInputToggle-B898WonD.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/HaDashboardWizard-TD5ww8Lf.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/HaDashboardWizard-TD5ww8Lf.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/HostnameSection-aditrQPz.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/HostnameSection-LSNZqCTA.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/HostnameSection-LSNZqCTA.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/InputsView-BDfNmnke.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/InputsView-BDfNmnke.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/LoadingState-CF8IBrwt.js +1 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/LocationSection-Bpw9zCWc.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/LocationSection-DYoCIZf_.js +2 -2
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/LocationSection-DYoCIZf_.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/LoggerForm-CXQrEooe.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/LoggerForm-Dnw4sgOf.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/LoggerForm-Dnw4sgOf.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/LongPressWrapper-CYnkc_VU.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/LongPressWrapper-BxjMNFSl.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/LongPressWrapper-BxjMNFSl.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/MigrationsSection-CQKagjWj.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/MigrationsSection-CQKagjWj.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/ModbusView-CAsX3S9V.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/ModbusView-ZKWH9V8v.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/ModbusView-ZKWH9V8v.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/MqttPasswordsSection-B_2lQ0J_.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/MqttPasswordsSection-B_2lQ0J_.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/NodeRedManagement-DOhCny2V.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/NodeRedManagement-Cqfd-1g-.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/NodeRedManagement-Cqfd-1g-.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/NodeRedView-DD4OSonB.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/NodeRedView-CP86NnC4.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/NodeRedView-CP86NnC4.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/NumericInput-CrVNlFps.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/NumericInput-CrVNlFps.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/OutputsView-BI5d0PeA.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/OutputsView-BI5d0PeA.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/SecurityView-Bsr2xgPj.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/SecurityView-Bsr2xgPj.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/SensorView-CfLjixHz.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/SensorView-CfLjixHz.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/Sparkline-BFRz293c.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/Sparkline-6iDv_8hd.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/Sparkline-6iDv_8hd.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/SystemState-CSKA4Ac6.js +2 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/SystemState-CSKA4Ac6.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/TemplatesView-C_JHGVdU.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/TemplatesView-C_JHGVdU.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/TilePicker-CyMD71jq.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/TilePicker-BnzNZcwt.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/TilePicker-BnzNZcwt.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/TimezoneSection-C5ECnCJw.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/TimezoneSection-C5ECnCJw.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/UISettings-BqBctElx.js +102 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/UISettings-BqBctElx.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-Bil5a-dp.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-BUEBUdRM.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-BUEBUdRM.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/ViewToggle-CVWoIKqI.js +1 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/aiConfig-B-TXfzlS.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/aiConfig-BoKwS2Tr.js +2 -2
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/aiConfig-BoKwS2Tr.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/aiWizardPrompt-yegKyL0d.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/aiWizardPrompt-BNk30wKS.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/aiWizardPrompt-BNk30wKS.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/axios-DulIOGd1.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/axios-DyqbZVcF.js +2 -2
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/axios-DyqbZVcF.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/configCache-CPKXFBoa.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/configCache-DZ0vWq_Z.js +1 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/dialog-CkWtsgYG.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/dialog-DMaCttcv.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/dialog-DMaCttcv.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/editor.worker-O-CH8JUO.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/fa-i12cJwlu.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/fa-ChDOCx3T.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/fa-ChDOCx3T.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/gi-BK6tS-OO.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/gi-DiFRP1nv.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/groupByArea-BNh9L1kK.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/groupByArea-BNh9L1kK.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/index-CzuwPT1R.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/index-DdpYSFUj.js +9 -9
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/index-DdpYSFUj.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/index-PEnzoPuG.css +2 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/index-PEnzoPuG.css.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/monaco-Cf4GYOeN.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/monaco-DPvWnxix.js +3 -3
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/monaco-DPvWnxix.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/monaco-Bk59qWmZ.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/monaco-DSP2pMyI.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/monaco-DSP2pMyI.js.gz +0 -0
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/select-DsR6_rF9.js → boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/select-iQAUlBVk.js +1 -1
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/select-iQAUlBVk.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/utils-DOQQTBMN.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js.gz +0 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/assets/yaml.worker-CeS-z5zL.js.gz +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/index.html +7 -7
- {boneio-1.6.0.dev25/boneio/webui → boneio-1.6.0.dev26/boneio/webui/frontend-dist}/schema/config.schema.json +71 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/mqtt.schema.json +71 -0
- boneio-1.6.0.dev26/boneio/webui/frontend-dist/sw.js +1 -0
- boneio-1.6.0.dev26/boneio/webui/input_validation.py +75 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/middleware/policy.py +9 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/__init__.py +2 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/accounts.py +2 -2
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/config_core.py +16 -1
- boneio-1.6.0.dev26/boneio/webui/routes/mqtt_tls.py +397 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/security.py +111 -45
- {boneio-1.6.0.dev25/boneio/webui/frontend-dist → boneio-1.6.0.dev26/boneio/webui}/schema/config.schema.json +71 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/mqtt.schema.json +71 -0
- boneio-1.6.0.dev26/boneio/webui/static_assets.py +58 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26/boneio.egg-info}/PKG-INFO +1 -1
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio.egg-info/SOURCES.txt +109 -45
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.17.json +0 -1
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.17.sig +0 -0
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.18.json +0 -1
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.18.sig +0 -0
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.22.sig +0 -0
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.26.json +0 -1
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.26.sig +0 -0
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.27.json +0 -1
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.27.sig +0 -0
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.29.json +0 -1
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.29.sig +0 -0
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.5.sig +0 -0
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.8.sig +0 -0
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.9.json +0 -1
- boneio-1.6.0.dev25/boneio/migrations/plans/1.6.9.sig +0 -1
- boneio-1.6.0.dev25/boneio/migrations/plans/manifest.sig +0 -2
- boneio-1.6.0.dev25/boneio/version.py +0 -2
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/AccountsView-Dbuu2XAZ.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/DiagnosticsView-CgEdQ1gm.js +0 -5
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/FormInputToggle-OdOZU9KJ.js +0 -11
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/HaDashboardWizard-DuBJexC2.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/InputsView-DCpCaGxW.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/MigrationsSection-BZMCOp20.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/MqttPasswordsSection-BLfp2BbC.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/NumericInput-Cw4ZtDAj.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/OutputsView-CtE_5zM_.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/SecurityView-BEEmRgbt.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/SensorView-cIK4xlMj.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/SystemState-ChYThsqy.js +0 -2
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/TemplatesView-DBCQEhKi.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/TimezoneSection-Cq6MXcBF.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/UISettings-D01e9sjk.js +0 -100
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/ViewToggle-WmyFZWEj.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/bodies-QSMnZPsP.js +0 -1
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/index-ppSEa9nm.css +0 -2
- boneio-1.6.0.dev25/boneio/webui/frontend-dist/sw.js +0 -1
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/LICENSE +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/MANIFEST.in +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/README.md +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.2/input.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.2/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.2/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.2/output_32_5.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.2/output_cover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.3/input.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.3/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.3/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.3/output_32_5.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.3/output_cover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.4/input.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.4/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.4/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.4/output_32_5.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.4/output_cover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.5/input.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.5/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.5/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.5/output_cover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.6/input.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.6/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.6/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.6/output_cover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.7/input.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.7/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.7/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.7/output_48_4.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.7/output_cover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.8/input.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.8/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.8/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.8/output_48_4.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.8/output_cover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.0/input.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.0/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.0/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.0/output_48_4.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.0/output_cover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.1/input.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.1/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.1/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.1/output_48_4.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.1/output_cover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/boards/1.1/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/bonecli.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/cover/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/cover/time_based.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/cover/venetian.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/group/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/input/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/input/detectors.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/input/remote/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/input/remote/base.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/input/remote/esphome.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/input/remote/mqtt.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/irrigation/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/irrigation/controller.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/irrigation/water_source.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/output/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/output/basic.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/output/buzzer.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/output/mcp.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/output/pca.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/output/pcf.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/template/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/components/virtual_switch.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/atomic_file.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/auth/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/auth/cli.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/auth/hashing.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/auth/jwt_secret.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/auth/migration.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/auth/models.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/auth/store.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/cloud/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/cloud/data/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/cloud/data/docker-compose.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/cloud/registration.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/cloud/secrets.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/input_bindings.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/migrations/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/migrations/v2_transition.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/migrations/v4_wled_cache.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/migrations/v5_ina_screen.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/migrations/v6_input_keys.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/migrations/v7_mqtt_password_secret.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/package-lock.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/package.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/provenance.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/schema_converter.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/secret_masking.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/write_lock.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/yaml_compat.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/yaml_patch.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/config/yaml_util.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/containers.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/diagnostics/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/diagnostics/collect.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/discovery.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/events/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/events/bus.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/action_conditions.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/canopen.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/display.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/modbus.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/remote.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/remote_input_registrar.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/scheduler.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/security_alert.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/sun.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/templates/alarm.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/templates/gate_cover.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/templates/thermostat.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/templates.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/update.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/manager/virtual_switches.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/messaging/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/messaging/basic.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/messaging/basic_mqtt.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/messaging/composite.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/messaging/local.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/messaging/lox.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/messaging/queue.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/net/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/net/discovery_guard.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/recovery.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/remote/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/remote/base.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/remote/can.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/remote/esphome.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/remote/mqtt.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/remote/wled.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/remote/wled_cache.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/security/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/security/framing.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/security/posture.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/sensor/base.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/sensor/sun.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/sensor/system.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/state/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/state/manager.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/system/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/system/host_data.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/system/monitor.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/utils/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/utils/async_updater.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/utils/conditions.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/utils/filter.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/utils/font_util.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/utils/logger.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/utils/naming.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/utils/sun.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/utils/timeperiod.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/core/utils/util.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/24x16/adc.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/24x16/config.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/24x16/event.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/24x16/mqtt.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/24x16/output24x16A.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/32x10/adc.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/32x10/config.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/32x10/event.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/32x10/mqtt.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/32x10/output32x10A.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/48x4/adc.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/48x4/config.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/48x4/event.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/48x4/mqtt.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/48x4/output48x4A.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/can_master.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/can_slave.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover/adc.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover/config.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover/cover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover/event.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover/mqtt.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover/outputCover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover_mix/adc.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover_mix/config.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover_mix/cover.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover_mix/event.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/adc.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/event_all.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/exceptions.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/analog/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/analog/adc.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/can/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/can/bridge.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/can/client.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/can/interface.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/can/node.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/can/node_id.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/can/test_od.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/display/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/display/early_oled.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/display/fonts/danube__.ttf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/display/oled.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/gpio/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/gpio/expanders/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/gpio/input/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/gpio/input/manager.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/i2c/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/i2c/bus.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/i2c/ina219.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/i2c/ina219_driver.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/i2c/ina226.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/i2c/ina226_driver.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/i2c/mcp9808.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/i2c/pct2075.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/onewire/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/onewire/dallas.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/sensor/temperature/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/sensor/temperature/base.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/hardware/udev_wait.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/integration/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/integration/homeassistant.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/integration/interlock.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/integration/lox_template.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/actions.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/apt/52boneio-periodic +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/apt/52boneio-unattended +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/docker/daemon.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/docker/nodered/docker-compose-cloud.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/helpers/boneio-containers +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/helpers/boneio-helpers-heal +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/helpers/boneio-migrate-v2 +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/issue.d/10-boneio.issue +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/journald/boneio-console.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/journald/journald.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/kernel/postinst-boneio-overlay +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/migrations-recovery.pem +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/migrations.pem +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/modules-load.d/onewire.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/motd/20-boneio +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/sshd/10-boneio-hardening.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/sshd/20-boneio-banner.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/sshd/boneio-banner +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/sudoers/boneio +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/sudoers/boneio-helpers +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/sudoers/boneio-timedatectl +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/boneio-dpkg-recover.service +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/boneio-helpers-heal.service +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/boneio.service +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/dropins/apt-daily-priority.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/dropins/avahi-daemon-defer.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/dropins/bb-usb-gadgets-defer.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/dropins/mosquitto-priority.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/dropins/timer-no-persistent.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/dropins/user-manager-defer.conf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/linger-marker +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/bootstrap/boneio-migrate +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/bootstrap/install-helper.sh +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.3.0.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.3.0.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.3.1.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.3.1.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.3.2.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.3.2.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.4.0.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.4.0.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.4.3.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.4.3.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.4.4.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.4.4.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.0.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.0.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.1.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.1.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.10.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.10.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.11.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.11.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.12.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.12.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.13.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.13.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.14.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.14.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.15.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.15.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.16.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.16.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.17.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.17.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.18.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.18.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.2.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.2.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.3.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.3.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.4.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.4.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.5.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.5.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.6.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.6.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.7.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.7.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.8.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.8.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.9.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.5.9.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.0.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.0.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.1.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.1.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.10.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.10.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.11.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.11.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.12.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.12.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.13.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.13.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.14.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.14.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.15.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.15.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.16.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.16.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.19.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.19.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.2.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.2.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.20.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.20.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.21.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.21.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.23.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.23.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.24.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.24.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.25.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.25.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.28.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.28.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.3.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.3.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.4.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.4.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.6.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.6.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.7.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/plans/1.6.7.sig +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_10_disable_console_setup.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_11_timer_catchup.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_12_oled_splash_off_critical_path.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_13_mosquitto_priority.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_14_journal_apparent_size.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_15_prune_orphan_journals.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_16_login_linger.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_17_defer_user_manager.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_18_fix_hostname_once.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_2_libyaml.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_4_onewire_modules.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_5_overlay_kernel_hook.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_6_boot_service_order.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_7_journald_limits.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_8_apparmor_prune.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_5_9_defer_nonessential.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_0_nodered_admin_auth.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_10_narrow_sudo_rules.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_11_drop_docker_group.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_12_console_shows_ip.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_13_custom_certificate.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_14_certificate_lifetime.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_15_web_port_reaches_caddy.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_16_release_floor_ordering.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_17_service_password.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_18_os_updates.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_19_helper_apt_purge.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_20_drop_packagekit.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_21_caddy_pinned.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_22_security_autoupdates.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_23_helper_fstab_options.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_24_boot_partition_nofail.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_25_journal_to_serial_console.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_26_kernel_check_old_images.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_27_startup_overlay_repair.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_28_ssh_login_screen.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_29_service_password_change.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_4_ssh_login_hardening.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_5_trust_transition.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_6_retire_legacy_helper.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_7_timedatectl_sudoers.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_8_system_helper.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/migrations/versions/v1_6_9_ntp_servers.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/cli.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/client.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/hvac/defro-drx.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/hvac/thessla.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/hvac/ventclear.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/hvac/wanas415.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/inverters/sofar.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/other/n4dsc08.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/other/r4dcb08.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/sensors/cwt.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/sensors/gdfs.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/sensors/gdfx.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/sensors/pt100.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/sensors/sht20.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/devices/sensors/sht30.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/derived/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/derived/numeric.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/derived/select.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/derived/switch.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/derived/text.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/sensor/binary.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/sensor/numeric.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/sensor/text.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/writeable/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/writeable/binary.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/entities/writeable/numeric.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/mock_coordinator.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/modbus/utils.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/models/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/models/actions.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/models/events.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/models/files.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/models/logs.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/models/mqtt.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/actions.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/actions_sensor.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/actions_switch.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/condition.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/filters.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/filters_adc.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/id.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/remote_devices.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/remote_inputs.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/remote_outputs.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/temp_unit.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/schema/update_interval.yaml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/action_validation.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/bind.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/dashboard_cards.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/assets/basePath-CxHj-SSK.js +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/assets/editor.worker-O-CH8JUO.js +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/assets/formatters-Cc0QIRxb.js +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/assets/rolldown-runtime-hePW80VL.js +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/assets/utils-DOQQTBMN.js +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/assets/yaml.worker-CeS-z5zL.js +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/boneio-192.png +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/boneio-512.png +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/boneio.svg +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/ina226.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/location.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/osdp.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/schedule.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/virtual_switch.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/frontend-dist/workbox-7e79c025.js +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/hvac_svg_templates.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/middleware/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/middleware/auth.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/middleware/csrf.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/middleware/proxy.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/modbus_card_templates.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/rate_limit.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/recovery/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/recovery/app.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/recovery/server.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/recovery/static/index.html +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/recovery/static/recovery.css +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/recovery/static/recovery.js +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/auth.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/can.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/config.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/config_actions.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/config_backups.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/config_discovery.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/config_files.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/covers.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/dashboard.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/dev_fake_device.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/diagnostics.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/irrigation.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/migrations.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/modbus.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/mqtt_reference.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/nodered.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/onboarding.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/os_update.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/outputs.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/remote_devices.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/schedule.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/sensors.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/sun.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/system.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/templates.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/timezone_sudoers.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/tools.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/routes/update.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/adc.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/areas.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/binary_sensor.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/boneio.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/can.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/cover.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/dallas.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/ds2482.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/event.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/ina219.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/ina226.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/irrigation.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/lm75.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/location.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/logger.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/lox_udp.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/mcp23017.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/mcp9808.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/modbus.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/modbus_devices.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/oled.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/osdp.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/output.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/output_group.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/pca9685.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/pcf8575.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/remote_devices.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/remote_inputs.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/remote_outputs.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/schedule.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/sensor.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/template.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/virtual_switch.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/schema/web.schema.json +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/security_events.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/security_headers.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/services/__init__.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/services/logs.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/sudo_rate_limiter.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/web_server.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio/webui/websocket_manager.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio.egg-info/dependency_links.txt +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio.egg-info/entry_points.txt +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio.egg-info/requires.txt +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/boneio.egg-info/top_level.txt +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/pyproject.toml +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/setup.cfg +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/setup.py +0 -0
- {boneio-1.6.0.dev25 → boneio-1.6.0.dev26}/tests/test_py313_compatibility.py +0 -0
|
@@ -532,6 +532,7 @@ class BaseCover(BaseCoverABC, BasicMqtt):
|
|
|
532
532
|
kind=self.kind,
|
|
533
533
|
timestamp=self._last_timestamp,
|
|
534
534
|
current_operation=self._current_operation,
|
|
535
|
+
area=getattr(self, "area", None),
|
|
535
536
|
**json_position,
|
|
536
537
|
)
|
|
537
538
|
self._event_bus.trigger_event(CoverEvent(entity_id=self.id, state=event))
|
|
@@ -10,6 +10,7 @@ from boneio.components.input.detectors import BinarySensorDetector
|
|
|
10
10
|
from boneio.const import PRESSED, RELEASED, BinaryStateTypes, ClickTypes
|
|
11
11
|
from boneio.core.utils.timeperiod import parse_time_to_ms
|
|
12
12
|
from boneio.hardware.gpio.input import GpioBaseClass, get_gpio_manager
|
|
13
|
+
from boneio.hardware.gpio.input.base import warn_if_bounce_too_long
|
|
13
14
|
from boneio.models import InputState
|
|
14
15
|
from boneio.models.events import InputEvent
|
|
15
16
|
|
|
@@ -125,6 +126,7 @@ class GpioInputBinarySensor(GpioBaseClass):
|
|
|
125
126
|
self._pin,
|
|
126
127
|
seconds * 1000,
|
|
127
128
|
)
|
|
129
|
+
warn_if_bounce_too_long(seconds, self._name, self._pin)
|
|
128
130
|
return True
|
|
129
131
|
|
|
130
132
|
def _send_initial_state(self) -> None:
|
|
@@ -9,6 +9,7 @@ from boneio.components.input.detectors import MultiClickDetector
|
|
|
9
9
|
from boneio.const import ClickTypes
|
|
10
10
|
from boneio.core.utils.timeperiod import parse_time_to_ms
|
|
11
11
|
from boneio.hardware.gpio.input import GpioBaseClass, get_gpio_manager
|
|
12
|
+
from boneio.hardware.gpio.input.base import warn_if_bounce_too_long
|
|
12
13
|
|
|
13
14
|
_LOGGER = logging.getLogger(__name__)
|
|
14
15
|
|
|
@@ -282,3 +283,4 @@ class GpioEventButton(GpioBaseClass):
|
|
|
282
283
|
self._pin,
|
|
283
284
|
seconds * 1000,
|
|
284
285
|
)
|
|
286
|
+
warn_if_bounce_too_long(seconds, self._name, self._pin)
|
|
@@ -740,6 +740,11 @@ class RemoteOutputBase:
|
|
|
740
740
|
"""Whether this is a remote output — always True."""
|
|
741
741
|
return True
|
|
742
742
|
|
|
743
|
+
@property
|
|
744
|
+
def interlock_groups(self) -> list[str]:
|
|
745
|
+
"""Interlock groups this output belongs to."""
|
|
746
|
+
return self._interlock_groups
|
|
747
|
+
|
|
743
748
|
# ------------------------------------------------------------------
|
|
744
749
|
# Adjustable duration stubs (remote outputs don't support this)
|
|
745
750
|
# ------------------------------------------------------------------
|
|
@@ -11,6 +11,7 @@ import asyncio
|
|
|
11
11
|
import json
|
|
12
12
|
import logging
|
|
13
13
|
import time
|
|
14
|
+
from collections.abc import Callable
|
|
14
15
|
from typing import TYPE_CHECKING
|
|
15
16
|
|
|
16
17
|
from boneio.const import ON
|
|
@@ -131,6 +132,17 @@ class VirtualEnergySensor:
|
|
|
131
132
|
"""Get timestamp when output was last turned ON."""
|
|
132
133
|
return self._last_on_timestamp
|
|
133
134
|
|
|
135
|
+
def rebind_output(self, resolve: Callable[[BasicOutput], BasicOutput]) -> None:
|
|
136
|
+
"""Swap the tracked output for the one registered now under its id.
|
|
137
|
+
|
|
138
|
+
Tracking reads the output's state; after an output reload the old
|
|
139
|
+
object's state no longer changes, so nothing was counted.
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
resolve: Maps the held output to the current one.
|
|
143
|
+
"""
|
|
144
|
+
self._output = resolve(self._output)
|
|
145
|
+
|
|
134
146
|
def start_tracking(self):
|
|
135
147
|
"""Start tracking consumption (called when output turns ON)."""
|
|
136
148
|
self._last_on_timestamp = time.time()
|
|
@@ -15,6 +15,7 @@ import hmac
|
|
|
15
15
|
import json
|
|
16
16
|
import logging
|
|
17
17
|
import time
|
|
18
|
+
from collections.abc import Callable
|
|
18
19
|
from typing import TYPE_CHECKING, Any
|
|
19
20
|
|
|
20
21
|
from boneio.const import ALARM_CONTROL_PANEL, STATE
|
|
@@ -916,6 +917,15 @@ class BoneIOAlarmPanel:
|
|
|
916
917
|
self._publish_code_lock(False)
|
|
917
918
|
_LOGGER.info("Alarm panel %s started", self._id)
|
|
918
919
|
|
|
920
|
+
def rebind_outputs(self, resolve: Callable[[Any], Any]) -> None:
|
|
921
|
+
"""Swap each alarm output for the one registered now under its id.
|
|
922
|
+
|
|
923
|
+
Args:
|
|
924
|
+
resolve: Maps a held output to the current one.
|
|
925
|
+
"""
|
|
926
|
+
for alarm_output in self._outputs:
|
|
927
|
+
alarm_output.output = resolve(alarm_output.output)
|
|
928
|
+
|
|
919
929
|
async def stop(self) -> None:
|
|
920
930
|
"""Stop alarm panel — cancel timers and unsubscribe."""
|
|
921
931
|
self._cancel_all_timers()
|
|
@@ -35,6 +35,7 @@ import asyncio
|
|
|
35
35
|
import contextlib
|
|
36
36
|
import json
|
|
37
37
|
import logging
|
|
38
|
+
from collections.abc import Callable
|
|
38
39
|
from typing import TYPE_CHECKING
|
|
39
40
|
|
|
40
41
|
from boneio.const import (
|
|
@@ -200,6 +201,19 @@ class BoneIOGateCover:
|
|
|
200
201
|
self._publish_state()
|
|
201
202
|
_LOGGER.info("GateCover %s started (state=%s), subscribed to %s", self._id, self._state, self._cmd_topic)
|
|
202
203
|
|
|
204
|
+
def rebind_outputs(self, resolve: Callable[[BasicOutput | None], BasicOutput | None]) -> None:
|
|
205
|
+
"""Swap the relays for the ones registered now under their ids.
|
|
206
|
+
|
|
207
|
+
A pulse already timed keeps the relay its off-timer captured.
|
|
208
|
+
|
|
209
|
+
Args:
|
|
210
|
+
resolve: Maps a held output to the current one; None stays None.
|
|
211
|
+
"""
|
|
212
|
+
self._pulse_output = resolve(self._pulse_output)
|
|
213
|
+
self._open_output = resolve(self._open_output)
|
|
214
|
+
self._close_output = resolve(self._close_output)
|
|
215
|
+
self._stop_output = resolve(self._stop_output)
|
|
216
|
+
|
|
203
217
|
async def stop(self) -> None:
|
|
204
218
|
"""Unsubscribe from MQTT and cancel timers."""
|
|
205
219
|
self._cancel_pulse_timer()
|
|
@@ -12,6 +12,7 @@ import asyncio
|
|
|
12
12
|
import json
|
|
13
13
|
import logging
|
|
14
14
|
import time
|
|
15
|
+
from collections.abc import Callable
|
|
15
16
|
from typing import TYPE_CHECKING, Any
|
|
16
17
|
|
|
17
18
|
from boneio.const import CLIMATE, OFF, ON, SENSOR, STATE
|
|
@@ -302,6 +303,15 @@ class BoneIOThermostat:
|
|
|
302
303
|
self._publish_state()
|
|
303
304
|
_LOGGER.info("Thermostat %s started", self._id)
|
|
304
305
|
|
|
306
|
+
def rebind_outputs(self, resolve: Callable[[Any], Any]) -> None:
|
|
307
|
+
"""Swap the controlled output for the one registered now under its id.
|
|
308
|
+
|
|
309
|
+
Args:
|
|
310
|
+
resolve: Maps the held object to the current one (an output reload
|
|
311
|
+
rebuilds outputs and groups as new objects).
|
|
312
|
+
"""
|
|
313
|
+
self._output = resolve(self._output)
|
|
314
|
+
|
|
305
315
|
async def stop(self) -> None:
|
|
306
316
|
"""Stop MQTT command subscriptions."""
|
|
307
317
|
try:
|
|
@@ -88,6 +88,9 @@ TRIPLE = "triple"
|
|
|
88
88
|
LONG = "long"
|
|
89
89
|
PRESSED = "pressed"
|
|
90
90
|
RELEASED = "released"
|
|
91
|
+
# Longest GPIO debounce the panel accepts. Past this a press feels lost; a
|
|
92
|
+
# longer value already in a config still loads, with a warning in the log.
|
|
93
|
+
BOUNCE_TIME_MAX_MS = 1000
|
|
91
94
|
|
|
92
95
|
|
|
93
96
|
# MQTT CONST
|
|
@@ -4,7 +4,6 @@ Module to provide basic config options.
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
6
|
import logging
|
|
7
|
-
from _collections_abc import dict_values
|
|
8
7
|
from typing import TYPE_CHECKING, Any
|
|
9
8
|
import time as _time
|
|
10
9
|
|
|
@@ -414,6 +413,18 @@ class ConfigHelper:
|
|
|
414
413
|
"""Add autodiscovery message."""
|
|
415
414
|
self._autodiscovery_messages[ha_type][topic] = {"topic": topic, "payload": payload}
|
|
416
415
|
|
|
416
|
+
def reserve_autodiscovery_msg(self, ha_type: str, topic: str) -> None:
|
|
417
|
+
"""Claim the topic of an entity that is configured but not announced yet.
|
|
418
|
+
|
|
419
|
+
A reserved topic counts as in use, so a retained config left on it
|
|
420
|
+
from an earlier run is not removed, but it is not resent until
|
|
421
|
+
add_autodiscovery_msg gives it a payload. Reserving a topic that
|
|
422
|
+
already has one changes nothing.
|
|
423
|
+
"""
|
|
424
|
+
self._autodiscovery_messages[ha_type].setdefault(
|
|
425
|
+
topic, {"topic": topic, "payload": None}
|
|
426
|
+
)
|
|
427
|
+
|
|
417
428
|
@property
|
|
418
429
|
def ha_types(self) -> list[str]:
|
|
419
430
|
return list(self._autodiscovery_messages.keys())
|
|
@@ -574,9 +585,11 @@ class ConfigHelper:
|
|
|
574
585
|
|
|
575
586
|
|
|
576
587
|
@property
|
|
577
|
-
def autodiscovery_msgs(self) ->
|
|
578
|
-
"""Get autodiscovery messages"""
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
588
|
+
def autodiscovery_msgs(self) -> list[dict[str, Any]]:
|
|
589
|
+
"""Get autodiscovery messages, leaving out topics only reserved."""
|
|
590
|
+
return [
|
|
591
|
+
msg
|
|
592
|
+
for messages in self._autodiscovery_messages.values()
|
|
593
|
+
for msg in messages.values()
|
|
594
|
+
if msg["payload"] is not None
|
|
595
|
+
]
|
|
@@ -68,7 +68,9 @@ class CoverManager:
|
|
|
68
68
|
# Get config from ConfigHelper (already reloaded by Manager)
|
|
69
69
|
config = self._manager._config_helper.get_config()
|
|
70
70
|
self._config_covers = config.get(COVER, [])
|
|
71
|
-
|
|
71
|
+
# The discovery cache is not cleared: COVER is shared with gate
|
|
72
|
+
# covers and remote covers, and the MQTT client deletes from HA
|
|
73
|
+
# any discovery topic it sees that the cache does not hold.
|
|
72
74
|
|
|
73
75
|
# Remove covers that are no longer in config
|
|
74
76
|
new_ids = set()
|
|
@@ -80,26 +82,16 @@ class CoverManager:
|
|
|
80
82
|
_close = str(_cfg.get("close_relay", ""))
|
|
81
83
|
new_ids.add(f"cover_{_open}_{_close}".lower().replace(" ", "_"))
|
|
82
84
|
|
|
83
|
-
|
|
85
|
+
# Remote covers are not in this section; they have their own reload.
|
|
86
|
+
removed_ids = [
|
|
87
|
+
cid
|
|
88
|
+
for cid, cover in self._covers.items()
|
|
89
|
+
if cid not in new_ids and not getattr(cover, "is_remote", False)
|
|
90
|
+
]
|
|
84
91
|
for cid in removed_ids:
|
|
85
92
|
_LOGGER.info("Cover %s removed from config, cleaning up", cid)
|
|
86
93
|
cover = self._covers.pop(cid)
|
|
87
|
-
|
|
88
|
-
try:
|
|
89
|
-
if hasattr(cover, "_stop_event"):
|
|
90
|
-
cover._stop_event.set()
|
|
91
|
-
if (
|
|
92
|
-
hasattr(cover, "_movement_thread")
|
|
93
|
-
and cover._movement_thread
|
|
94
|
-
and cover._movement_thread.is_alive()
|
|
95
|
-
):
|
|
96
|
-
cover._movement_thread.join(timeout=1.0)
|
|
97
|
-
if hasattr(cover, "_open_relay"):
|
|
98
|
-
cover._open_relay.turn_off()
|
|
99
|
-
if hasattr(cover, "_close_relay"):
|
|
100
|
-
cover._close_relay.turn_off()
|
|
101
|
-
except Exception:
|
|
102
|
-
pass
|
|
94
|
+
self._halt_cover(cover)
|
|
103
95
|
# Remove HA autodiscovery
|
|
104
96
|
self._remove_cover_ha_discovery(cid)
|
|
105
97
|
|
|
@@ -144,6 +136,9 @@ class CoverManager:
|
|
|
144
136
|
_LOGGER.info(
|
|
145
137
|
"Cover %s platform changed from %s to %s, recreating cover", _id, current_kind, new_kind
|
|
146
138
|
)
|
|
139
|
+
# The old object goes away: a movement it was running
|
|
140
|
+
# would otherwise keep its relay energised.
|
|
141
|
+
self._halt_cover(_cover)
|
|
147
142
|
# Remove old HA autodiscovery
|
|
148
143
|
self._remove_cover_ha_discovery(_id)
|
|
149
144
|
# Remove old cover from dict (will be recreated below)
|
|
@@ -168,11 +163,18 @@ class CoverManager:
|
|
|
168
163
|
_cover._open_relay = open_relay
|
|
169
164
|
_cover._close_relay = close_relay
|
|
170
165
|
_cover.update_config_times(_config)
|
|
166
|
+
was_shown = _cover.show_in_ha
|
|
167
|
+
old_area = _cover.area
|
|
171
168
|
self._store_ha_attributes(_cover, _config)
|
|
169
|
+
if was_shown and not _cover.show_in_ha:
|
|
170
|
+
self._remove_cover_ha_discovery(_id)
|
|
172
171
|
# Re-send HA autodiscovery with potentially new name/area
|
|
173
172
|
if _cover.show_in_ha:
|
|
174
|
-
#
|
|
175
|
-
|
|
173
|
+
# A new area is a new HA device: take the entity off
|
|
174
|
+
# the old one first. Otherwise update in place — a
|
|
175
|
+
# removal makes HA delete the entity and recreate it.
|
|
176
|
+
if was_shown and old_area != _cover.area:
|
|
177
|
+
self._remove_cover_ha_discovery(_id)
|
|
176
178
|
# Send new autodiscovery
|
|
177
179
|
if new_platform == "venetian":
|
|
178
180
|
availability_msg_func = ha_cover_with_tilt_availabilty_message
|
|
@@ -420,8 +422,12 @@ class CoverManager:
|
|
|
420
422
|
Args:
|
|
421
423
|
cover_id: ID of the cover to remove from HA Discovery
|
|
422
424
|
"""
|
|
423
|
-
#
|
|
424
|
-
matching_topics =
|
|
425
|
+
# Only COVER: another entity type may use the same id.
|
|
426
|
+
matching_topics = [
|
|
427
|
+
(ha_type, topic)
|
|
428
|
+
for ha_type, topic in self._manager._config_helper.get_autodiscovery_topics_for_id(cover_id)
|
|
429
|
+
if ha_type == COVER
|
|
430
|
+
]
|
|
425
431
|
|
|
426
432
|
for ha_type, topic in matching_topics:
|
|
427
433
|
_LOGGER.debug("Removing HA Discovery for cover %s: %s", cover_id, topic)
|
|
@@ -449,6 +455,42 @@ class CoverManager:
|
|
|
449
455
|
"""
|
|
450
456
|
return self._covers
|
|
451
457
|
|
|
458
|
+
@staticmethod
|
|
459
|
+
def _halt_cover(cover: Any) -> None:
|
|
460
|
+
"""Stop a cover that is being dropped and de-energise both relays.
|
|
461
|
+
|
|
462
|
+
Synchronous: a reload may run without a usable event loop for the
|
|
463
|
+
cover's own async stop.
|
|
464
|
+
"""
|
|
465
|
+
try:
|
|
466
|
+
if hasattr(cover, "_stop_event"):
|
|
467
|
+
cover._stop_event.set()
|
|
468
|
+
if (
|
|
469
|
+
hasattr(cover, "_movement_thread")
|
|
470
|
+
and cover._movement_thread
|
|
471
|
+
and cover._movement_thread.is_alive()
|
|
472
|
+
):
|
|
473
|
+
cover._movement_thread.join(timeout=1.0)
|
|
474
|
+
if hasattr(cover, "_open_relay"):
|
|
475
|
+
cover._open_relay.turn_off()
|
|
476
|
+
if hasattr(cover, "_close_relay"):
|
|
477
|
+
cover._close_relay.turn_off()
|
|
478
|
+
except Exception:
|
|
479
|
+
_LOGGER.exception("Could not stop cover %s", getattr(cover, "id", "?"))
|
|
480
|
+
|
|
481
|
+
def rebind_outputs(self) -> None:
|
|
482
|
+
"""Point each cover at the relays registered now under their ids.
|
|
483
|
+
|
|
484
|
+
Called after an output reload, which rebuilds the relays as new
|
|
485
|
+
objects. A movement already running keeps the relay it started with.
|
|
486
|
+
"""
|
|
487
|
+
outputs = self._manager.outputs
|
|
488
|
+
for cover in self._covers.values():
|
|
489
|
+
if getattr(cover, "is_remote", False):
|
|
490
|
+
continue
|
|
491
|
+
cover._open_relay = outputs.resolve_current(cover._open_relay)
|
|
492
|
+
cover._close_relay = outputs.resolve_current(cover._close_relay)
|
|
493
|
+
|
|
452
494
|
def reload_covers(self) -> None:
|
|
453
495
|
"""Reload cover configuration from file.
|
|
454
496
|
|
|
@@ -186,8 +186,13 @@ class InputManager:
|
|
|
186
186
|
if config:
|
|
187
187
|
self._event_pins = config.get(EVENT_ENTITY, [])
|
|
188
188
|
self._binary_pins = config.get(BINARY_SENSOR, [])
|
|
189
|
-
|
|
190
|
-
|
|
189
|
+
# The discovery cache is left alone: an input whose HA fields
|
|
190
|
+
# did not change is not re-published, so its entry must stay.
|
|
191
|
+
# The MQTT client deletes any discovery topic it receives that
|
|
192
|
+
# is not in the cache — including the echo of our own publish —
|
|
193
|
+
# and the cache is shared with entities that are not inputs
|
|
194
|
+
# (security events, the OLED button). Removed and hidden inputs
|
|
195
|
+
# take their own entries out.
|
|
191
196
|
|
|
192
197
|
# Configure event buttons
|
|
193
198
|
for gpio in self._event_pins:
|
|
@@ -262,10 +267,12 @@ class InputManager:
|
|
|
262
267
|
new_device_class = gpio.get(DEVICE_CLASS)
|
|
263
268
|
old_mqtt_sequences = existing_input.mqtt_sequences if hasattr(existing_input, "mqtt_sequences") else {}
|
|
264
269
|
new_mqtt_sequences = gpio.get("mqtt_sequences", {})
|
|
270
|
+
was_shown = getattr(existing_input, "show_in_ha", True)
|
|
265
271
|
ha_fields_changed = (
|
|
266
272
|
(old_name != name) or (old_area != area)
|
|
267
273
|
or (old_device_class != new_device_class)
|
|
268
274
|
or (old_mqtt_sequences != new_mqtt_sequences)
|
|
275
|
+
or not was_shown
|
|
269
276
|
)
|
|
270
277
|
|
|
271
278
|
# Update actions (always - this is internal to the controller)
|
|
@@ -302,7 +309,10 @@ class InputManager:
|
|
|
302
309
|
|
|
303
310
|
# Re-send HA discovery only if HA-relevant fields changed (name, area, mqtt_sequences)
|
|
304
311
|
# Actions are internal to the controller and don't need HA update
|
|
305
|
-
if
|
|
312
|
+
if not gpio.get(SHOW_HA, True):
|
|
313
|
+
if was_shown:
|
|
314
|
+
self._unpublish_input_ha_discovery(EVENT_ENTITY, input_id)
|
|
315
|
+
elif ha_fields_changed:
|
|
306
316
|
_LOGGER.debug(f"HA-relevant fields changed for {input_id}, re-sending discovery")
|
|
307
317
|
self._publish_input_ha_discovery(
|
|
308
318
|
ha_type=EVENT_ENTITY,
|
|
@@ -395,9 +405,11 @@ class InputManager:
|
|
|
395
405
|
old_area = getattr(existing_input, "area", None)
|
|
396
406
|
old_device_class = getattr(existing_input, "_device_class", None)
|
|
397
407
|
new_device_class = gpio.get(DEVICE_CLASS)
|
|
408
|
+
was_shown = getattr(existing_input, "show_in_ha", True)
|
|
398
409
|
ha_fields_changed = (
|
|
399
410
|
(old_name != name) or (old_area != area)
|
|
400
411
|
or (old_device_class != new_device_class)
|
|
412
|
+
or not was_shown
|
|
401
413
|
)
|
|
402
414
|
|
|
403
415
|
# Update actions (always - this is internal to the controller)
|
|
@@ -424,7 +436,10 @@ class InputManager:
|
|
|
424
436
|
|
|
425
437
|
# Re-send HA discovery only if HA-relevant fields changed (name, area)
|
|
426
438
|
# Actions are internal to the controller and don't need HA update
|
|
427
|
-
if
|
|
439
|
+
if not gpio.get(SHOW_HA, True):
|
|
440
|
+
if was_shown:
|
|
441
|
+
self._unpublish_input_ha_discovery(BINARY_SENSOR, input_id)
|
|
442
|
+
elif ha_fields_changed:
|
|
428
443
|
_LOGGER.debug(f"HA-relevant fields changed for {input_id}, re-sending discovery")
|
|
429
444
|
self._publish_input_ha_discovery(
|
|
430
445
|
ha_type=BINARY_SENSOR,
|
|
@@ -1081,3 +1096,16 @@ class InputManager:
|
|
|
1081
1096
|
ha_type=ha_type,
|
|
1082
1097
|
payload=payload,
|
|
1083
1098
|
)
|
|
1099
|
+
|
|
1100
|
+
def _unpublish_input_ha_discovery(self, ha_type: str, input_id: str) -> None:
|
|
1101
|
+
"""Take an input out of Home Assistant and out of the discovery cache.
|
|
1102
|
+
|
|
1103
|
+
Args:
|
|
1104
|
+
ha_type: HA entity type the input was published as.
|
|
1105
|
+
input_id: Unique input identifier.
|
|
1106
|
+
"""
|
|
1107
|
+
config_helper = self._manager._config_helper
|
|
1108
|
+
topic = f"{config_helper.ha_discovery_prefix}/{ha_type}/{config_helper.serial_number}/{input_id}/config"
|
|
1109
|
+
_LOGGER.info("Input %s hidden from HA, removing discovery %s", input_id, topic)
|
|
1110
|
+
self._manager.send_message(topic=topic, payload=None, retain=True)
|
|
1111
|
+
config_helper.remove_autodiscovery_msg(ha_type, topic)
|
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import contextlib
|
|
6
6
|
import logging
|
|
7
|
+
from collections.abc import Awaitable, Callable
|
|
7
8
|
from typing import TYPE_CHECKING, Any
|
|
8
9
|
|
|
9
10
|
from boneio.components.irrigation import IrrigationController, IrrigationZone, WaterSource
|
|
@@ -35,6 +36,9 @@ class IrrigationManager:
|
|
|
35
36
|
self._manager = manager
|
|
36
37
|
self._controllers: dict[str, IrrigationController] = {}
|
|
37
38
|
self._subscribed_topics: set[str] = set()
|
|
39
|
+
# Who handles each subscribed topic now. A topic is subscribed once,
|
|
40
|
+
# and its messages go to whatever handler was registered last.
|
|
41
|
+
self._topic_handlers: dict[str, Callable[[str, str], Awaitable[None]]] = {}
|
|
38
42
|
|
|
39
43
|
self._initialize(irrigation_config)
|
|
40
44
|
|
|
@@ -224,6 +228,7 @@ class IrrigationManager:
|
|
|
224
228
|
with contextlib.suppress(Exception):
|
|
225
229
|
await self._manager.message_bus.unsubscribe_and_stop_listen(topic)
|
|
226
230
|
self._subscribed_topics.clear()
|
|
231
|
+
self._topic_handlers.clear()
|
|
227
232
|
|
|
228
233
|
for ctrl in self._controllers.values():
|
|
229
234
|
await ctrl.full_stop()
|
|
@@ -250,6 +255,10 @@ class IrrigationManager:
|
|
|
250
255
|
if ctrl_id:
|
|
251
256
|
new_ids.add(ctrl_id)
|
|
252
257
|
|
|
258
|
+
# Every controller registers its handlers again below; whatever is
|
|
259
|
+
# left without one afterwards belongs to nothing that exists.
|
|
260
|
+
self._topic_handlers.clear()
|
|
261
|
+
|
|
253
262
|
# Stop & remove deleted controllers
|
|
254
263
|
removed_ids = set(self._controllers.keys()) - new_ids
|
|
255
264
|
for ctrl_id in removed_ids:
|
|
@@ -288,11 +297,8 @@ class IrrigationManager:
|
|
|
288
297
|
await ctrl.publish_all_states()
|
|
289
298
|
_LOGGER.info("Reloaded irrigation controller '%s'", ctrl_id)
|
|
290
299
|
|
|
291
|
-
# Unsubscribe topics
|
|
292
|
-
|
|
293
|
-
for ctrl in self._controllers.values():
|
|
294
|
-
valid_prefixes.add(f"{ctrl._topic_prefix}/cmd/irrigation/{ctrl.id}")
|
|
295
|
-
stale_topics = {t for t in self._subscribed_topics if not any(t.startswith(p) for p in valid_prefixes)}
|
|
300
|
+
# Unsubscribe topics of controllers, zones and schedules that are gone
|
|
301
|
+
stale_topics = self._subscribed_topics - self._topic_handlers.keys()
|
|
296
302
|
for topic in stale_topics:
|
|
297
303
|
with contextlib.suppress(Exception):
|
|
298
304
|
await self._manager.message_bus.unsubscribe_and_stop_listen(topic)
|
|
@@ -308,9 +314,6 @@ class IrrigationManager:
|
|
|
308
314
|
|
|
309
315
|
Sends empty payload to discovery topics to remove entities from HA.
|
|
310
316
|
"""
|
|
311
|
-
cfg = self._manager.config_helper
|
|
312
|
-
serial = cfg.serial_number
|
|
313
|
-
|
|
314
317
|
# Build list of discovery IDs to remove
|
|
315
318
|
discovery_ids: list[tuple[str, str]] = [
|
|
316
319
|
(f"{ctrl.id}", "switch"),
|
|
@@ -321,7 +324,11 @@ class IrrigationManager:
|
|
|
321
324
|
(f"{ctrl.id}_pause", "button"),
|
|
322
325
|
(f"{ctrl.id}_resume", "button"),
|
|
323
326
|
(f"{ctrl.id}_event", "event"),
|
|
327
|
+
(f"{ctrl.id}_zone_end_time", "sensor"),
|
|
328
|
+
(f"{ctrl.id}_next_run_time", "sensor"),
|
|
324
329
|
]
|
|
330
|
+
if len(ctrl.water_sources) > 1:
|
|
331
|
+
discovery_ids.append((f"{ctrl.id}_water_source", "select"))
|
|
325
332
|
# Multi-zone-only entities
|
|
326
333
|
if len(ctrl.zones) > 1:
|
|
327
334
|
discovery_ids.extend([
|
|
@@ -337,17 +344,41 @@ class IrrigationManager:
|
|
|
337
344
|
discovery_ids.append((f"{ctrl.id}_schedule_{idx}_skip", "switch"))
|
|
338
345
|
|
|
339
346
|
for disc_id, ha_type in discovery_ids:
|
|
340
|
-
|
|
341
|
-
|
|
347
|
+
self._unpublish_discovery(id=disc_id, ha_type=ha_type)
|
|
348
|
+
|
|
349
|
+
def _unpublish_discovery(self, id: str, ha_type: str) -> None:
|
|
350
|
+
"""Take an entity out of Home Assistant and out of the discovery cache.
|
|
351
|
+
|
|
352
|
+
Left in the cache, the entity would be announced again whenever Home
|
|
353
|
+
Assistant comes online, and an empty payload there is resent each time.
|
|
354
|
+
"""
|
|
355
|
+
cfg = self._manager.config_helper
|
|
356
|
+
topic = f"{cfg.ha_discovery_prefix}/{ha_type}/{cfg.serial_number}/{id}/config"
|
|
357
|
+
self._manager.send_message(topic=topic, payload="", retain=True)
|
|
358
|
+
cfg.remove_autodiscovery_msg(ha_type, topic)
|
|
359
|
+
|
|
360
|
+
async def _subscribe_topic(self, topic: str, handler: Callable[[str, str], Awaitable[None]]) -> None:
|
|
361
|
+
"""Route a command topic to handler, replacing any handler it had.
|
|
342
362
|
|
|
343
|
-
|
|
363
|
+
A reload rebuilds controllers with the ids they had, on the same
|
|
364
|
+
topics; the subscription stays and the new controller's handler takes
|
|
365
|
+
the messages from then on.
|
|
366
|
+
"""
|
|
367
|
+
self._topic_handlers[topic] = handler
|
|
344
368
|
if topic in self._subscribed_topics:
|
|
345
|
-
_LOGGER.debug("Irrigation: topic already subscribed: %s", topic)
|
|
346
369
|
return
|
|
347
370
|
_LOGGER.debug("Irrigation: subscribing to MQTT topic: %s → handler=%s", topic, handler.__name__)
|
|
348
|
-
await self._manager.message_bus.subscribe_and_listen(topic,
|
|
371
|
+
await self._manager.message_bus.subscribe_and_listen(topic, self._dispatch)
|
|
349
372
|
self._subscribed_topics.add(topic)
|
|
350
373
|
|
|
374
|
+
async def _dispatch(self, topic: str, payload: str) -> None:
|
|
375
|
+
handler = self._topic_handlers.get(topic)
|
|
376
|
+
if handler is None:
|
|
377
|
+
# Between a reload dropping the old handlers and registering new ones.
|
|
378
|
+
_LOGGER.debug("Irrigation: no handler for %s, dropping command", topic)
|
|
379
|
+
return
|
|
380
|
+
await handler(topic, payload)
|
|
381
|
+
|
|
351
382
|
async def _subscribe_controller(self, ctrl: IrrigationController) -> None:
|
|
352
383
|
async def handle_main(_topic: str, payload: str, _ctrl: IrrigationController = ctrl) -> None:
|
|
353
384
|
await _ctrl.handle_main_command(payload)
|
|
@@ -570,11 +601,7 @@ class IrrigationManager:
|
|
|
570
601
|
|
|
571
602
|
for zone in ctrl.zones:
|
|
572
603
|
# Remove stale switch discovery (migration from switch → valve)
|
|
573
|
-
self.
|
|
574
|
-
id=f"{ctrl.id}_zone_{zone.id}",
|
|
575
|
-
ha_type="switch",
|
|
576
|
-
payload="",
|
|
577
|
-
)
|
|
604
|
+
self._unpublish_discovery(id=f"{ctrl.id}_zone_{zone.id}", ha_type="switch")
|
|
578
605
|
_pub(
|
|
579
606
|
id=f"{ctrl.id}_zone_{zone.id}",
|
|
580
607
|
ha_type="valve",
|
|
@@ -621,10 +648,8 @@ class IrrigationManager:
|
|
|
621
648
|
|
|
622
649
|
# Remove stale per-zone next_run sensor (migrated to valve attributes)
|
|
623
650
|
if zone.run_every_n > 1:
|
|
624
|
-
self.
|
|
625
|
-
id=f"{ctrl.id}_zone_{zone.id}_next_run",
|
|
626
|
-
ha_type="sensor",
|
|
627
|
-
payload="",
|
|
651
|
+
self._unpublish_discovery(
|
|
652
|
+
id=f"{ctrl.id}_zone_{zone.id}_next_run", ha_type="sensor"
|
|
628
653
|
)
|
|
629
654
|
|
|
630
655
|
for idx, _schedule in enumerate(ctrl._schedule):
|
|
@@ -690,3 +715,17 @@ class IrrigationManager:
|
|
|
690
715
|
config_helper=cfg,
|
|
691
716
|
),
|
|
692
717
|
)
|
|
718
|
+
|
|
719
|
+
def rebind_outputs(self) -> None:
|
|
720
|
+
"""Point zones and water sources at the outputs registered now.
|
|
721
|
+
|
|
722
|
+
Called after an output reload, which rebuilds outputs as new objects.
|
|
723
|
+
Unlike reload_irrigation it stops nothing: a running cycle carries on
|
|
724
|
+
with the current valves.
|
|
725
|
+
"""
|
|
726
|
+
outputs = self._manager.outputs
|
|
727
|
+
for ctrl in self._controllers.values():
|
|
728
|
+
for zone in ctrl.zones:
|
|
729
|
+
zone.valve = outputs.resolve_current(zone.valve)
|
|
730
|
+
for water_source in ctrl.water_sources:
|
|
731
|
+
water_source.outputs[:] = [outputs.resolve_current(o) for o in water_source.outputs]
|
|
@@ -520,6 +520,7 @@ class Manager:
|
|
|
520
520
|
_LOGGER.info("Sending HA autodiscovery messages")
|
|
521
521
|
|
|
522
522
|
await self.outputs.send_ha_autodiscovery()
|
|
523
|
+
self.virtual_switches.publish_discovery()
|
|
523
524
|
await self.inputs.send_ha_autodiscovery()
|
|
524
525
|
await self.covers.send_ha_autodiscovery()
|
|
525
526
|
await self.sensors.send_ha_autodiscovery()
|
|
@@ -1427,7 +1428,7 @@ class Manager:
|
|
|
1427
1428
|
async def _reload_mqtt_credentials(self) -> None:
|
|
1428
1429
|
"""Adopt new broker credentials without a restart.
|
|
1429
1430
|
|
|
1430
|
-
Host, port, username and
|
|
1431
|
+
Host, port, username, password and TLS only. The rest of the mqtt section —
|
|
1431
1432
|
the topic prefix, Home Assistant discovery, the update channel — is
|
|
1432
1433
|
read into entity names and subscriptions all over the application while
|
|
1433
1434
|
it starts, and still takes a restart.
|
|
@@ -1456,6 +1457,7 @@ class Manager:
|
|
|
1456
1457
|
port=int(mqtt.get(PORT) or bus.port),
|
|
1457
1458
|
username=mqtt.get(USERNAME, bus.client_options.get(USERNAME)),
|
|
1458
1459
|
password=mqtt.get(PASSWORD, bus.client_options.get(PASSWORD)),
|
|
1460
|
+
tls=mqtt.get("tls"),
|
|
1459
1461
|
)
|
|
1460
1462
|
|
|
1461
1463
|
def _reload_logger(self) -> None:
|