boneio 1.6.0.dev5__tar.gz → 1.6.0.dev7__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.dev5/boneio.egg-info → boneio-1.6.0.dev7}/PKG-INFO +1 -1
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/const.py +8 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/cloud/registration.py +1 -2
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/config_helper.py +49 -3
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/security/posture.py +86 -46
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/integration/homeassistant.py +3 -5
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/manifest.json +1 -1
- boneio-1.6.0.dev7/boneio/migrations/plans/manifest.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/runner.py +1 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/schema.yaml +7 -1
- boneio-1.6.0.dev7/boneio/version.py +2 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/bind.py +50 -13
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/AccountsView-Bmey_Yr2.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/AccountsView-BUm_P1Uw.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/ActionFields-Dd53m3KH.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/ActionFields-B--1CfM2.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/BackupSection-BIhcVjYm.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/BackupSection-BSZn5Skg.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/BindingMatrix-D9Pr22Wp.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/BindingMatrix-CpzvZ7i_.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/DeviceControlSection-DKC8tOXc.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/DeviceControlSection-CnyJz996.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/DiagnosticsView-C_oo-SRw.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/DiagnosticsView-jzQIu7C-.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/EditItemDialog-Dm4kPdmF.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/EditItemDialog-D_EXUFV4.js +2 -2
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/EntityCard-CkJgrIUC.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/EntityCard-CzrB7v4W.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/FactoryResetSection-sz3F--K9.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/FactoryResetSection-DU5Xczix.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/FormInputToggle-C7Nq2Hp8.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/FormInputToggle--GD_ZMhY.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/HaDashboardWizard-DEf4Sy_8.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/HaDashboardWizard-Cjn4NcOy.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/HostnameSection-D0zvj1uy.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/HostnameSection-CcgeB7c9.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/InputsView-DkpdOPNR.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/InputsView-D7ALwZZ2.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/LocationSection-D5EoVv-i.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/LocationSection-Dbk0Rss6.js +2 -2
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/LoggerForm-DHJUPaaV.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/LoggerForm-br7_NVmx.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/MigrationsSection-BPvuefg6.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/MigrationsSection-B0Do-lCH.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/ModbusView-Cch7ykif.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/ModbusView-B5YLw-nZ.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/MqttPasswordsSection-dncPiufr.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/MqttPasswordsSection-B628jQwJ.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/NodeRedManagement-Cowu2_4i.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/NodeRedManagement-B6OKfz_P.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/OutputsView-C_PNR9px.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/OutputsView-BcttMcsW.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/ScheduleSection-ByEXYj3H.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/ScheduleSection-CxiZBMjJ.js +1 -1
- boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/SecurityView-Bvk8xFtu.js +1 -0
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/SensorView-DxwEx546.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/SensorView-C--UO0_x.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/SystemState-CvlqTKsV.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/SystemState-DC-bxOGD.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/TemplatesView-D0PTisZV.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/TemplatesView-BgXYpvO7.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/TilePicker-I46eKfzF.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/TilePicker-BJiurvDz.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/TimezoneSection-DRA9cBch.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/TimezoneSection-CQ8UzB3r.js +1 -1
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/UISettings-qOAoRlwa.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/UISettings-CKiOXI3V.js +3 -3
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/index-BDR1Gl2A.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/index-DTsVYLUw.js +6 -6
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/monaco-CQ8fwGzT.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/monaco-DdPCJ1g6.js +1 -1
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/index.html +1 -1
- {boneio-1.6.0.dev5/boneio/webui → boneio-1.6.0.dev7/boneio/webui/frontend-dist}/schema/config.schema.json +1 -1
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/web.schema.json +1 -1
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/sw.js +1 -1
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/config_core.py +6 -3
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/remote_devices.py +14 -12
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/security.py +59 -21
- {boneio-1.6.0.dev5/boneio/webui/frontend-dist → boneio-1.6.0.dev7/boneio/webui}/schema/config.schema.json +1 -1
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/web.schema.json +1 -1
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7/boneio.egg-info}/PKG-INFO +1 -1
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio.egg-info/SOURCES.txt +30 -30
- boneio-1.6.0.dev5/boneio/migrations/plans/manifest.sig +0 -1
- boneio-1.6.0.dev5/boneio/version.py +0 -2
- boneio-1.6.0.dev5/boneio/webui/frontend-dist/assets/SecurityView-BGcKCB34.js +0 -1
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/LICENSE +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/MANIFEST.in +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/README.md +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.2/input.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_32_5.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_cover.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.3/input.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_32_5.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_cover.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.4/input.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_32_5.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_cover.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.5/input.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_cover.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.6/input.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_cover.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.7/input.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_48_4.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_cover.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.8/input.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_48_4.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_cover.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/1.0/input.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_48_4.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_cover.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/bonecli.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/cover/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/cover/cover.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/cover/remote.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/cover/time_based.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/cover/venetian.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/group/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/group/output_group.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/input/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/input/binary_sensor.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/input/detectors.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/input/event.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/input/remote/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/input/remote/base.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/input/remote/esphome.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/irrigation/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/irrigation/controller.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/irrigation/water_source.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/output/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/output/basic.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/output/buzzer.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/output/mcp.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/output/pca.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/output/pcf.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/output/remote.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/sensor/virtual_energy.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/template/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/template/alarm_panel.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/template/gate_cover.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/components/template/thermostat.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/auth/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/auth/cli.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/auth/hashing.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/auth/migration.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/auth/models.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/auth/store.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/cloud/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/cloud/data/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/cloud/data/docker-compose.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/cloud/secrets.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/input_bindings.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/migrations/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v2_transition.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v4_wled_cache.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v5_ina_screen.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/package-lock.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/package.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/provenance.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/schema_converter.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/secret_masking.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/yaml_compat.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/yaml_patch.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/config/yaml_util.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/containers.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/diagnostics/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/diagnostics/collect.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/discovery.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/events/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/events/bus.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/action_conditions.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/canopen.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/covers.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/display.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/inputs.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/irrigation.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/manager.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/modbus.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/outputs.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/remote.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/remote_input_registrar.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/scheduler.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/security_alert.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/sensors.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/sun.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/templates/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/templates/alarm.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/templates/gate_cover.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/templates/thermostat.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/templates.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/manager/update.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/messaging/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/messaging/basic.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/messaging/basic_mqtt.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/messaging/composite.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/messaging/local.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/messaging/lox.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/messaging/mqtt.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/messaging/queue.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/net/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/net/discovery_guard.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/remote/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/remote/base.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/remote/can.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/remote/esphome.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/remote/mqtt.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/remote/wled.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/remote/wled_cache.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/security/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/security/certificate.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/security/framing.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/sensor/base.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/sensor/sun.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/sensor/system.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/state/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/state/manager.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/system/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/system/host_data.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/system/monitor.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/system_ops.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/utils/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/utils/async_updater.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/utils/conditions.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/utils/filter.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/utils/font_util.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/utils/logger.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/utils/overlay.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/utils/sun.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/utils/timeperiod.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/core/utils/util.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/24x16/adc.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/24x16/config.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/24x16/event.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/24x16/mqtt.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/24x16/output24x16A.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/32x10/adc.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/32x10/config.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/32x10/event.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/32x10/mqtt.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/32x10/output32x10A.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/48x4/adc.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/48x4/config.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/48x4/event.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/48x4/mqtt.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/48x4/output48x4A.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/can_master.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/can_slave.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover/adc.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover/config.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover/cover.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover/event.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover/mqtt.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover/outputCover.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/adc.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/config.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/cover.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/event.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/adc.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/event_all.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/exceptions.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/analog/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/analog/adc.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/can/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/can/bridge.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/can/client.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/can/interface.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/can/node.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/can/node_id.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/can/test_od.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/display/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/display/early_oled.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/display/fonts/danube__.ttf +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/display/oled.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/gpio/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/gpio/input/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/gpio/input/base.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/gpio/input/manager.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/i2c/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/i2c/bus.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina219.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina219_driver.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina226.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina226_driver.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/i2c/mcp9808.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/i2c/pct2075.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/onewire/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/onewire/dallas.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/base.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/integration/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/integration/interlock.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/integration/lox_template.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/actions.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/MANIFEST.sha256 +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/daemon.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/docker-compose-cloud.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-containers +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-helpers-heal +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-migrate-v2 +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-system +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/issue.d/10-boneio.issue +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/journald/journald.conf +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/kernel/postinst-boneio-overlay +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/migrations-recovery.pem +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/migrations.pem +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/modules-load.d/onewire.conf +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/sshd/10-boneio-hardening.conf +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/sudoers/boneio +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/sudoers/boneio-helpers +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/sudoers/boneio-timedatectl +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio-helpers-heal.service +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio.service +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/avahi-daemon-defer.conf +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/bb-usb-gadgets-defer.conf +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/mosquitto-priority.conf +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/timer-no-persistent.conf +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/user-manager-defer.conf +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/linger-marker +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/bootstrap/boneio-migrate +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/bootstrap/install-helper.sh +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.0.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.0.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.1.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.1.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.2.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.2.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.0.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.0.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.3.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.3.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.4.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.4.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.0.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.0.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.1.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.1.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.10.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.10.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.11.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.11.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.12.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.12.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.13.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.13.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.14.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.14.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.15.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.15.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.16.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.16.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.17.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.17.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.18.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.18.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.2.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.2.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.3.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.3.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.4.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.4.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.5.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.5.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.6.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.6.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.7.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.7.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.8.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.8.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.9.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.9.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.0.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.0.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.1.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.1.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.10.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.10.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.11.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.11.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.12.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.12.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.13.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.13.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.2.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.2.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.3.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.3.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.4.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.4.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.5.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.5.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.6.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.6.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.7.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.7.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.8.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.8.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.9.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.9.sig +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/runner.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_10_disable_console_setup.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_11_timer_catchup.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_12_oled_splash_off_critical_path.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_13_mosquitto_priority.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_14_journal_apparent_size.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_15_prune_orphan_journals.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_16_login_linger.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_17_defer_user_manager.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_18_fix_hostname_once.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_2_libyaml.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_4_onewire_modules.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_5_overlay_kernel_hook.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_6_boot_service_order.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_7_journald_limits.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_8_apparmor_prune.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_9_defer_nonessential.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_0_nodered_admin_auth.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_10_narrow_sudo_rules.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_11_drop_docker_group.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_12_console_shows_ip.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_13_custom_certificate.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_4_ssh_login_hardening.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_5_trust_transition.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_6_retire_legacy_helper.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_7_timedatectl_sudoers.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_8_system_helper.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_9_ntp_servers.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/cli.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/client.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/coordinator.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/defro-drx.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/thessla.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/ventclear.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/wanas415.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/inverters/sofar.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/other/n4dsc08.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/other/r4dcb08.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/cwt.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/gdfs.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/gdfx.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/pt100.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/sht20.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/sht30.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/base.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/numeric.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/select.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/switch.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/text.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/binary.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/numeric.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/text.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/writeable/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/writeable/binary.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/entities/writeable/numeric.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/mock_coordinator.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/modbus/utils.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/models/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/models/actions.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/models/events.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/models/files.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/models/logs.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/models/mqtt.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/models/state.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/actions.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/actions_sensor.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/actions_switch.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/condition.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/filters.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/filters_adc.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/id.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/remote_devices.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/remote_inputs.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/remote_outputs.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/temp_unit.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/schema/update_interval.yaml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/action_validation.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/app.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/dashboard_cards.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/AppInitContext-CsffdB9c.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/EntityGrid-BDdmT0qN.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/LongPressWrapper-BKkWvoC1.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/NodeRedView-Ct08K8xu.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/Sparkline-D-2-v-7o.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/ViewToggle-B8OpHNHc.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/aiConfig-_hPXvgdY.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/aiWizardPrompt-Dc7dZBzw.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/axios-uEi8e3Ln.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/basePath-CxHj-SSK.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/chunk-QTnfLwEv.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/configCache-CLN4xEny.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/coverUtils-Cf4Uxn2U.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/createLucideIcon-BEjh8B3y.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/editor.worker-Cn2oRESe.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/fa-BEzM11bH.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/formatters-zOiGPJLh.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/gi-tOlGxC0X.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/index-lVrZSgFS.css +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/longPress-Dx7OCSyP.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/monaco-DUFfd7ef.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/monaco-Dpn-hvLa.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/select-D3PIwbEj.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/tabs-box-Byn-MOyS.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/utils-B6KiDbIe.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/yaml.worker-8qQfrID5.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio-192.png +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio-512.png +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio.svg +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/ina226.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/location.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/schedule.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/workbox-7e79c025.js +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/hvac_svg_templates.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/middleware/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/middleware/auth.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/middleware/csrf.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/middleware/policy.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/modbus_card_templates.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/rate_limit.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/accounts.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/auth.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/can.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/config.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/config_actions.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/config_backups.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/config_discovery.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/config_files.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/covers.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/dashboard.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/dev_fake_device.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/diagnostics.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/irrigation.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/migrations.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/modbus.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/mqtt_reference.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/nodered.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/onboarding.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/outputs.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/schedule.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/sensors.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/sun.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/system.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/templates.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/timezone_sudoers.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/tools.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/routes/update.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/adc.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/areas.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/binary_sensor.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/boneio.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/can.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/cover.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/dallas.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/ds2482.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/event.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/ina219.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/ina226.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/irrigation.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/lm75.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/location.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/logger.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/lox_udp.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/mcp23017.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/mcp9808.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/modbus.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/modbus_devices.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/mqtt.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/oled.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/output.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/output_group.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/pca9685.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/pcf8575.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/remote_devices.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/remote_inputs.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/remote_outputs.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/schedule.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/sensor.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/template.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/security_headers.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/services/__init__.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/services/logs.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/sudo_rate_limiter.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/web_server.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio/webui/websocket_manager.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio.egg-info/dependency_links.txt +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio.egg-info/entry_points.txt +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio.egg-info/requires.txt +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/boneio.egg-info/top_level.txt +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/pyproject.toml +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/setup.cfg +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/setup.py +0 -0
- {boneio-1.6.0.dev5 → boneio-1.6.0.dev7}/tests/test_py313_compatibility.py +0 -0
|
@@ -97,6 +97,14 @@ HOST = "host"
|
|
|
97
97
|
USERNAME = "username"
|
|
98
98
|
PASSWORD = "password"
|
|
99
99
|
PORT = "port"
|
|
100
|
+
|
|
101
|
+
#: The port the device's built-in reverse proxy publishes HTTPS on.
|
|
102
|
+
#:
|
|
103
|
+
#: Set in docker-compose.yaml as HTTPS_PORT and defaulted there too; this is
|
|
104
|
+
#: the same number, for the parts of the application that need to name the
|
|
105
|
+
#: proxy without reading the compose file. It lives here rather than beside the
|
|
106
|
+
#: web server so that core can use it without importing the web layer.
|
|
107
|
+
DEFAULT_PROXY_PORT = 8443
|
|
100
108
|
ONLINE = "online"
|
|
101
109
|
OFFLINE = "offline"
|
|
102
110
|
TOPIC = "topic"
|
|
@@ -27,6 +27,7 @@ from boneio.core.cloud.secrets import MASTER_SECRET as DEFAULT_MASTER_SECRET
|
|
|
27
27
|
from boneio.core.system.monitor import get_network_info
|
|
28
28
|
|
|
29
29
|
from boneio.core import containers
|
|
30
|
+
from boneio.core.system.monitor import get_network_info
|
|
30
31
|
|
|
31
32
|
_LOGGER = logging.getLogger(__name__)
|
|
32
33
|
|
|
@@ -688,8 +689,6 @@ async def set_enabled(config_helper, enabled: bool, local_ip: str | None = None)
|
|
|
688
689
|
serial = getattr(config_helper, "serial_number", None)
|
|
689
690
|
if not local_ip:
|
|
690
691
|
try:
|
|
691
|
-
from boneio.core.system.monitor import get_network_info
|
|
692
|
-
|
|
693
692
|
local_ip = (get_network_info() or {}).get("ip", "")
|
|
694
693
|
except Exception as err: # noqa: BLE001
|
|
695
694
|
_LOGGER.warning("Could not read this device's address: %s", err)
|
|
@@ -15,6 +15,8 @@ from boneio.const import (
|
|
|
15
15
|
ALARM_CONTROL_PANEL,
|
|
16
16
|
BINARY_SENSOR,
|
|
17
17
|
BONEIO,
|
|
18
|
+
DEFAULT_PROXY_PORT,
|
|
19
|
+
IP,
|
|
18
20
|
BUTTON,
|
|
19
21
|
CLIMATE,
|
|
20
22
|
COVER,
|
|
@@ -45,6 +47,7 @@ class ConfigHelper:
|
|
|
45
47
|
is_web_active: bool = False,
|
|
46
48
|
web_port: int = 8090,
|
|
47
49
|
proxy_port: int | None = None,
|
|
50
|
+
expose: str = "all",
|
|
48
51
|
config_file_path: str | None = None,
|
|
49
52
|
send_boneio_autodiscovery: bool = True,
|
|
50
53
|
receive_boneio_autodiscovery: bool = True,
|
|
@@ -98,6 +101,7 @@ class ConfigHelper:
|
|
|
98
101
|
self._device_type = device_type
|
|
99
102
|
self._web_port = web_port
|
|
100
103
|
self._proxy_port = proxy_port
|
|
104
|
+
self._expose = expose
|
|
101
105
|
self._fetch_old_discovery = None
|
|
102
106
|
|
|
103
107
|
self._autodiscovery_messages = {
|
|
@@ -183,12 +187,54 @@ class ConfigHelper:
|
|
|
183
187
|
|
|
184
188
|
@property
|
|
185
189
|
def http_proto(self) -> str:
|
|
186
|
-
|
|
190
|
+
"""The scheme anything linking to this panel should use."""
|
|
191
|
+
return "https" if self._behind_proxy else "http"
|
|
192
|
+
|
|
193
|
+
@property
|
|
194
|
+
def _behind_proxy(self) -> bool:
|
|
195
|
+
"""Whether the panel is reached through the reverse proxy.
|
|
196
|
+
|
|
197
|
+
Either because somebody named its port, or because the panel's own
|
|
198
|
+
port has been taken off the network and the proxy is the only way in.
|
|
199
|
+
"""
|
|
200
|
+
return bool(self._proxy_port) or self._expose == "proxy"
|
|
201
|
+
|
|
202
|
+
@property
|
|
203
|
+
def configuration_url(self) -> str | None:
|
|
204
|
+
"""The address anything linking to this panel should use.
|
|
205
|
+
|
|
206
|
+
Home Assistant puts this on the device page, and the panel shows it so
|
|
207
|
+
an operator can see what was published without opening Home Assistant.
|
|
208
|
+
Both read it here rather than each deciding for itself: the wording in
|
|
209
|
+
the panel drifted away from what discovery actually sends within a day
|
|
210
|
+
of being written, because it described the rule instead of asking.
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
The URL, or None when there is no address to build one from.
|
|
214
|
+
"""
|
|
215
|
+
if self._cloud_registration and self.serial_number:
|
|
216
|
+
# Registered with the cloud: a real certificate on a public name,
|
|
217
|
+
# pointing at the local address. Nothing else can beat that.
|
|
218
|
+
return f"https://{self.serial_number}.black.boneio.app:{DEFAULT_PROXY_PORT}"
|
|
219
|
+
address = (self._network_info or {}).get(IP)
|
|
220
|
+
if not (self._is_web_active and address):
|
|
221
|
+
return None
|
|
222
|
+
return f"{self.http_proto}://{address}:{self.web_configuration_port}"
|
|
187
223
|
|
|
188
224
|
@property
|
|
189
225
|
def web_configuration_port(self) -> int:
|
|
190
|
-
"""
|
|
191
|
-
|
|
226
|
+
"""The port to put in a link to this panel.
|
|
227
|
+
|
|
228
|
+
The configured proxy port when there is one. Otherwise the panel's own
|
|
229
|
+
port — unless that port has been taken off the network, in which case
|
|
230
|
+
it answers nothing and linking to it would hand Home Assistant a dead
|
|
231
|
+
address. Then it is the port the built-in proxy serves on.
|
|
232
|
+
"""
|
|
233
|
+
if self._proxy_port:
|
|
234
|
+
return self._proxy_port
|
|
235
|
+
if self._expose == "proxy":
|
|
236
|
+
return DEFAULT_PROXY_PORT
|
|
237
|
+
return self._web_port
|
|
192
238
|
|
|
193
239
|
@property
|
|
194
240
|
def topic_prefix(self) -> str:
|
|
@@ -64,6 +64,14 @@ class Check:
|
|
|
64
64
|
state: State
|
|
65
65
|
detail: str
|
|
66
66
|
remedy: str = ""
|
|
67
|
+
#: A fact about this device that belongs with the finding and must not be
|
|
68
|
+
#: translated away: the error a service reported, a name, a path.
|
|
69
|
+
#:
|
|
70
|
+
#: The panel replaces title, detail and remedy with its own wording, keyed
|
|
71
|
+
#: by check id — so anything the backend varies at runtime is lost the
|
|
72
|
+
#: moment somebody writes a translation for it. This is shown verbatim
|
|
73
|
+
#: underneath instead.
|
|
74
|
+
context: str = ""
|
|
67
75
|
#: Where in the panel this is fixed, when it can be fixed there. A bare
|
|
68
76
|
#: name is a Settings section; ``system:<anchor>`` is the System page.
|
|
69
77
|
#: None means there is no control — the remedy is a file or a shell.
|
|
@@ -82,6 +90,7 @@ class Check:
|
|
|
82
90
|
"state": str(self.state),
|
|
83
91
|
"detail": self.detail,
|
|
84
92
|
"remedy": self.remedy,
|
|
93
|
+
"context": self.context,
|
|
85
94
|
"settings_section": self.settings_section,
|
|
86
95
|
}
|
|
87
96
|
|
|
@@ -213,6 +222,9 @@ def evaluate(
|
|
|
213
222
|
anonymous_allowed: bool,
|
|
214
223
|
auth_required: bool,
|
|
215
224
|
cloud_active: bool,
|
|
225
|
+
proxy_serving: bool | None = None,
|
|
226
|
+
custom_certificate: bool = False,
|
|
227
|
+
cloud_error: str | None = None,
|
|
216
228
|
) -> Posture:
|
|
217
229
|
"""Work out what is still unlocked.
|
|
218
230
|
|
|
@@ -222,6 +234,10 @@ def evaluate(
|
|
|
222
234
|
anonymous_allowed: Whether the anonymous opt-out is set.
|
|
223
235
|
auth_required: Whether requests currently need a token.
|
|
224
236
|
cloud_active: Whether cloud registration is serving a real certificate.
|
|
237
|
+
proxy_serving: Whether the reverse proxy is answering for this
|
|
238
|
+
panel right now. None when nobody looked.
|
|
239
|
+
custom_certificate: Whether an uploaded certificate is installed.
|
|
240
|
+
cloud_error: What cloud registration last failed with, if anything.
|
|
225
241
|
|
|
226
242
|
Returns:
|
|
227
243
|
The full set of checks.
|
|
@@ -269,45 +285,35 @@ def evaluate(
|
|
|
269
285
|
Check(
|
|
270
286
|
id="web_exposed_in_clear",
|
|
271
287
|
title="Panel served in the clear",
|
|
272
|
-
|
|
288
|
+
# Three states, not two. Telling somebody to move the panel behind
|
|
289
|
+
# a proxy that is not serving it is advice we would then refuse to
|
|
290
|
+
# carry out, and they would find that out by clicking. Where the
|
|
291
|
+
# proxy is not answering this drops to advice and points at the
|
|
292
|
+
# proxy instead of at the panel.
|
|
293
|
+
severity=Severity.WARNING if proxy_serving is not False else Severity.INFO,
|
|
273
294
|
state=State.OK if behind_proxy else State.FAILED,
|
|
274
295
|
detail=(
|
|
275
|
-
"The panel
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
296
|
+
"The panel is reachable only through the encrypted proxy."
|
|
297
|
+
if behind_proxy
|
|
298
|
+
else (
|
|
299
|
+
"The panel answers on its own port on every network "
|
|
300
|
+
"interface, without TLS. Anyone who can see the traffic "
|
|
301
|
+
"sees the login form, the token it hands back, and a "
|
|
302
|
+
"configuration that carries passwords."
|
|
303
|
+
if proxy_serving is not False
|
|
304
|
+
else "The panel answers on its own port on every network "
|
|
305
|
+
"interface, without TLS — and the proxy that would replace "
|
|
306
|
+
"it is not serving this panel, so closing that port now "
|
|
307
|
+
"would leave the device reachable on nothing."
|
|
308
|
+
)
|
|
281
309
|
),
|
|
282
310
|
remedy=(
|
|
283
|
-
"Move it behind the proxy
|
|
284
|
-
"
|
|
285
|
-
"
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
)
|
|
290
|
-
|
|
291
|
-
legacy_auth = _legacy_web_auth(config)
|
|
292
|
-
checks.append(
|
|
293
|
-
Check(
|
|
294
|
-
id="legacy_web_auth",
|
|
295
|
-
title="Old login left in config.yaml",
|
|
296
|
-
severity=Severity.WARNING,
|
|
297
|
-
state=State.FAILED if legacy_auth else State.OK,
|
|
298
|
-
detail=(
|
|
299
|
-
"The pre-1.6 web.auth block is still in config.yaml with the "
|
|
300
|
-
"password in plain text. Nothing reads it any more — the "
|
|
301
|
-
"account was copied into the hashed store when this device "
|
|
302
|
-
"was upgraded — but it is still a password, and it is in "
|
|
303
|
-
"every backup and diagnostic bundle taken since."
|
|
304
|
-
if legacy_auth
|
|
305
|
-
else "No plain-text login is left in the configuration."
|
|
306
|
-
),
|
|
307
|
-
remedy=(
|
|
308
|
-
"Remove it from the Security section, which keeps a copy of "
|
|
309
|
-
"config.yaml first. If the password is one you use anywhere "
|
|
310
|
-
"else, change it there too."
|
|
311
|
+
"Move it behind the proxy. It then answers over HTTPS and "
|
|
312
|
+
"through an SSH tunnel, and not on the local network in the "
|
|
313
|
+
"clear."
|
|
314
|
+
if proxy_serving is not False
|
|
315
|
+
else "Get the proxy serving this panel first — check that "
|
|
316
|
+
"HTTPS answers on its port — and this becomes one click."
|
|
311
317
|
),
|
|
312
318
|
settings_section="security",
|
|
313
319
|
)
|
|
@@ -337,8 +343,8 @@ def evaluate(
|
|
|
337
343
|
)
|
|
338
344
|
|
|
339
345
|
web = config.get("web") if isinstance(config.get("web"), dict) else {}
|
|
340
|
-
|
|
341
|
-
has_legacy =
|
|
346
|
+
cloud_enabled = bool((web.get("cloud") or {}).get("enabled"))
|
|
347
|
+
has_legacy = _legacy_web_auth(config)
|
|
342
348
|
checks.append(
|
|
343
349
|
Check(
|
|
344
350
|
id="legacy_web_auth",
|
|
@@ -347,12 +353,19 @@ def evaluate(
|
|
|
347
353
|
state=State.FAILED if has_legacy else State.OK,
|
|
348
354
|
detail=(
|
|
349
355
|
"config.yaml still holds the pre-1.6 web.auth block, with the "
|
|
350
|
-
"password in clear text.
|
|
356
|
+
"password in clear text. Nothing reads it any more — the "
|
|
357
|
+
"account was copied into the hashed store when this device was "
|
|
358
|
+
"upgraded — but it is still a password, and it is in every "
|
|
359
|
+
"backup and diagnostic bundle taken since."
|
|
351
360
|
if has_legacy
|
|
352
361
|
else "No credentials are stored in config.yaml."
|
|
353
362
|
),
|
|
354
|
-
remedy=
|
|
355
|
-
|
|
363
|
+
remedy=(
|
|
364
|
+
"Remove it from the Security section, which keeps a copy of "
|
|
365
|
+
"config.yaml first. If that password is one you use anywhere "
|
|
366
|
+
"else, change it there too."
|
|
367
|
+
),
|
|
368
|
+
settings_section="security",
|
|
356
369
|
)
|
|
357
370
|
)
|
|
358
371
|
|
|
@@ -361,15 +374,42 @@ def evaluate(
|
|
|
361
374
|
id="certificate",
|
|
362
375
|
title="HTTPS certificate",
|
|
363
376
|
severity=Severity.INFO,
|
|
364
|
-
|
|
377
|
+
# Four states. This used to have two, and told an operator to
|
|
378
|
+
# enable cloud registration on a device where it was already on and
|
|
379
|
+
# failing with an error the application had in hand — while a
|
|
380
|
+
# second route to a trusted certificate, uploading one, had been
|
|
381
|
+
# added and this check knew nothing about it.
|
|
382
|
+
state=State.OK if (custom_certificate or cloud_active) else State.FAILED,
|
|
365
383
|
detail=(
|
|
366
|
-
"Served with
|
|
384
|
+
"Served with the certificate you uploaded."
|
|
385
|
+
if custom_certificate
|
|
386
|
+
else "Served with a certificate browsers trust."
|
|
367
387
|
if cloud_active
|
|
368
|
-
else
|
|
369
|
-
|
|
388
|
+
else (
|
|
389
|
+
"Cloud registration is switched on but is not serving a "
|
|
390
|
+
"certificate, so the panel is still served with a "
|
|
391
|
+
"self-signed one."
|
|
392
|
+
if cloud_enabled and cloud_error
|
|
393
|
+
else "Cloud registration is switched on but has not "
|
|
394
|
+
"produced a certificate yet, so the panel is still served "
|
|
395
|
+
"with a self-signed one."
|
|
396
|
+
if cloud_enabled
|
|
397
|
+
else "Served with a self-signed certificate, so browsers "
|
|
398
|
+
"warn on every visit and people learn to click through the "
|
|
399
|
+
"warning."
|
|
400
|
+
)
|
|
370
401
|
),
|
|
371
|
-
remedy=
|
|
372
|
-
|
|
402
|
+
remedy=(
|
|
403
|
+
""
|
|
404
|
+
if custom_certificate or cloud_active
|
|
405
|
+
else "Sort out the registration error, or upload a certificate "
|
|
406
|
+
"of your own below."
|
|
407
|
+
if cloud_enabled
|
|
408
|
+
else "Enable boneIO Cloud registration, or upload a certificate "
|
|
409
|
+
"of your own below."
|
|
410
|
+
),
|
|
411
|
+
context=cloud_error or "",
|
|
412
|
+
settings_section="security",
|
|
373
413
|
)
|
|
374
414
|
)
|
|
375
415
|
|
|
@@ -82,11 +82,9 @@ def ha_availabilty_message(
|
|
|
82
82
|
topic = config_helper.topic_prefix if topic is None else topic
|
|
83
83
|
device_name = config_helper.name if device_name is None else device_name
|
|
84
84
|
model = f"boneIO Black {config_helper.device_type.title().replace('X', 'x')}"
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
elif config_helper.is_web_active and config_helper.network_info and IP in config_helper.network_info:
|
|
89
|
-
web_url = f"{config_helper.http_proto}://{config_helper.network_info[IP]}:{config_helper.web_configuration_port}"
|
|
85
|
+
# Decided in one place, which the panel reads too. Built here, the panel's
|
|
86
|
+
# description of it drifted out of date within a day.
|
|
87
|
+
web_url = config_helper.configuration_url or web_url
|
|
90
88
|
|
|
91
89
|
web_url_dict = {
|
|
92
90
|
"configuration_url": web_url
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"plans":{"1.3.0":"3199d74a6dda33162bbee4fc650a5a0d70d5372258f3305ad92501215e22a7fd","1.3.1":"580381a4f6f40fc1bd4e903e591ad0d5c1db27daaccafc6f79dabf8c3b84259a","1.3.2":"7a69ffaf0c41438be25a656dcdc87783daac0eae79218d023648ef9d708e373f","1.4.0":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.4.3":"a8cfbabff09d21944a822c4a70f23a7ee14960c4054de151c9fbc7cdb29adff5","1.4.4":"27ebf198e03c882c21572a9be02f63e8ffe6a610f6f395d7116ad9e258b4dac7","1.5.0":"52d9d118da099abda0e0153cd16892e201681f6e4d3c6e5790284d1ac469a407","1.5.1":"d283cb8c01024338fb614ae2199744d883379f59579423e4eb9234f5c59ebdd8","1.5.10":"889e2f12614e6e67d342571c1c3bab8940659bfbbf43fa30a6847e73decb85d1","1.5.11":"4906e4de2b3a9c2f0b0181817c9dc168cb910ba6941691d4e86b8387802b624a","1.5.12":"c0a0dc085bb33d9718e869ed5effc2c1581deffd7ed0d5adc119b94312181625","1.5.13":"bfe58c8756f9b5f5e55d5acbb6f7cfc469d201004d312c14e022eb7c52369b7d","1.5.14":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.15":"0687a735cb4aaf8f8f74ad6e228ca1b14e045cba8821991c7d19fc9beaeac766","1.5.16":"3544ac754f39d56ecf2b06300b7cca1b6f8723f99885cd11bd690f1a704d3728","1.5.17":"cf1e9e0ff6812cb7092a82dd588392d625decbe3680fe003dfc554f9045809d3","1.5.18":"1fd873effa66b632217d674745722f712a48b36bb79957fefae722757a74bc30","1.5.2":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.3":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.4":"e86174ba5aff6f257f8a3f4721c7942885cd203469a9d8ddc15dbe6c704e0f45","1.5.5":"f93ed2d4342e447eb9900a0150331113918f2a8b3baeeb795c07231d80f0337c","1.5.6":"e3d90e6ceb20d760f1e9fa63224c5a070a16b3ca6e7dc4cc2c594138e929cce8","1.5.7":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.8":"f075b84fb04f4043658a28402d963494dd58481f164c0b371cec94322fe6d131","1.5.9":"ac170fc924019fc2acd69a90a82ba5c2552dce7a2c01a05e5407443e7a9e5af7","1.6.0":"c8286514d1a4f1805e727e13d3c350bb390378c6f31ad6920030412d61ec9b3f","1.6.1":"aa1d3934091853fc21208993930c1bf92e17136428d1d0baaefabfa65d13e7fa","1.6.10":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.6.11":"d136203e08e3b052254403815d4ccedb555b0a297686fe97952d275eb1f322eb","1.6.12":"c328d4e36bd6277e01cef0140993e23970f4dff84425f3eba236cdd9a8954355","1.6.13":"035a0d32c891746e315fd228f8107680c856d9d128e3b4a19f6629256b3ef9b1","1.6.2":"6ef96b5e00a04a929d16f0e4a136bfcc5b8132a466d6907a99b2c8516a8952d5","1.6.3":"5c10db827bcb92b9322d4aa5751076b825da87c6d18d6953847ba72317cca862","1.6.4":"baf2bb1c2ec7c1bfccfc514ef1cef67907e056e4f7153bb5932ecb835c9cff78","1.6.5":"358dacbc8d16b1b665167de3bc1c42d101d82733502048f345184d1841ce03f2","1.6.6":"535bb041b99d5ac1bc9028ea88bc2fbf3dbadc80ea8dea236cc219123c194114","1.6.7":"d59af413e270e6f34b1b9a1c8c4acef35328f00e26fad447cfe214545af78d8f","1.6.8":"7175f827b99c602df80436db588c87277ce50f2734051a444163b048f5d0b23e","1.6.9":"732d5a9bcd2e496a260263a643c78a6346e9f3cef5b48fe59ac6b120bd03ba4e"},"release":"1.6.0.
|
|
1
|
+
{"plans":{"1.3.0":"3199d74a6dda33162bbee4fc650a5a0d70d5372258f3305ad92501215e22a7fd","1.3.1":"580381a4f6f40fc1bd4e903e591ad0d5c1db27daaccafc6f79dabf8c3b84259a","1.3.2":"7a69ffaf0c41438be25a656dcdc87783daac0eae79218d023648ef9d708e373f","1.4.0":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.4.3":"a8cfbabff09d21944a822c4a70f23a7ee14960c4054de151c9fbc7cdb29adff5","1.4.4":"27ebf198e03c882c21572a9be02f63e8ffe6a610f6f395d7116ad9e258b4dac7","1.5.0":"52d9d118da099abda0e0153cd16892e201681f6e4d3c6e5790284d1ac469a407","1.5.1":"d283cb8c01024338fb614ae2199744d883379f59579423e4eb9234f5c59ebdd8","1.5.10":"889e2f12614e6e67d342571c1c3bab8940659bfbbf43fa30a6847e73decb85d1","1.5.11":"4906e4de2b3a9c2f0b0181817c9dc168cb910ba6941691d4e86b8387802b624a","1.5.12":"c0a0dc085bb33d9718e869ed5effc2c1581deffd7ed0d5adc119b94312181625","1.5.13":"bfe58c8756f9b5f5e55d5acbb6f7cfc469d201004d312c14e022eb7c52369b7d","1.5.14":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.15":"0687a735cb4aaf8f8f74ad6e228ca1b14e045cba8821991c7d19fc9beaeac766","1.5.16":"3544ac754f39d56ecf2b06300b7cca1b6f8723f99885cd11bd690f1a704d3728","1.5.17":"cf1e9e0ff6812cb7092a82dd588392d625decbe3680fe003dfc554f9045809d3","1.5.18":"1fd873effa66b632217d674745722f712a48b36bb79957fefae722757a74bc30","1.5.2":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.3":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.4":"e86174ba5aff6f257f8a3f4721c7942885cd203469a9d8ddc15dbe6c704e0f45","1.5.5":"f93ed2d4342e447eb9900a0150331113918f2a8b3baeeb795c07231d80f0337c","1.5.6":"e3d90e6ceb20d760f1e9fa63224c5a070a16b3ca6e7dc4cc2c594138e929cce8","1.5.7":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.8":"f075b84fb04f4043658a28402d963494dd58481f164c0b371cec94322fe6d131","1.5.9":"ac170fc924019fc2acd69a90a82ba5c2552dce7a2c01a05e5407443e7a9e5af7","1.6.0":"c8286514d1a4f1805e727e13d3c350bb390378c6f31ad6920030412d61ec9b3f","1.6.1":"aa1d3934091853fc21208993930c1bf92e17136428d1d0baaefabfa65d13e7fa","1.6.10":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.6.11":"d136203e08e3b052254403815d4ccedb555b0a297686fe97952d275eb1f322eb","1.6.12":"c328d4e36bd6277e01cef0140993e23970f4dff84425f3eba236cdd9a8954355","1.6.13":"035a0d32c891746e315fd228f8107680c856d9d128e3b4a19f6629256b3ef9b1","1.6.2":"6ef96b5e00a04a929d16f0e4a136bfcc5b8132a466d6907a99b2c8516a8952d5","1.6.3":"5c10db827bcb92b9322d4aa5751076b825da87c6d18d6953847ba72317cca862","1.6.4":"baf2bb1c2ec7c1bfccfc514ef1cef67907e056e4f7153bb5932ecb835c9cff78","1.6.5":"358dacbc8d16b1b665167de3bc1c42d101d82733502048f345184d1841ce03f2","1.6.6":"535bb041b99d5ac1bc9028ea88bc2fbf3dbadc80ea8dea236cc219123c194114","1.6.7":"d59af413e270e6f34b1b9a1c8c4acef35328f00e26fad447cfe214545af78d8f","1.6.8":"7175f827b99c602df80436db588c87277ce50f2734051a444163b048f5d0b23e","1.6.9":"732d5a9bcd2e496a260263a643c78a6346e9f3cef5b48fe59ac6b120bd03ba4e"},"release":"1.6.0.dev7"}
|
|
Binary file
|
|
@@ -212,6 +212,7 @@ async def async_run(
|
|
|
212
212
|
is_web_active=web_active,
|
|
213
213
|
web_port=web_config.get("port", 8090),
|
|
214
214
|
proxy_port=web_config.get("proxy_port"),
|
|
215
|
+
expose=web_config.get("expose", "all"),
|
|
215
216
|
ha_discovery=mqtt_config.get(HA_DISCOVERY, {}).get(ENABLED, False),
|
|
216
217
|
ha_discovery_prefix=mqtt_config.get(HA_DISCOVERY, {}).get(TOPIC_PREFIX, "homeassistant"),
|
|
217
218
|
config_file_path=config_file,
|
|
@@ -203,12 +203,18 @@ web:
|
|
|
203
203
|
default: 8090
|
|
204
204
|
meta:
|
|
205
205
|
label: Port to run web server
|
|
206
|
+
# Not offered in the panel any more. It only ever chose the port in the
|
|
207
|
+
# link Home Assistant shows, the built-in proxy answers on 8443 either
|
|
208
|
+
# way, and a device reachable only through that proxy derives the port by
|
|
209
|
+
# itself. Kept here because the validator purges unknown keys: removing it
|
|
210
|
+
# would delete the setting from the config.yaml of the few people who have
|
|
211
|
+
# one, and change where their Home Assistant link points, silently.
|
|
206
212
|
proxy_port:
|
|
207
213
|
required: False
|
|
208
214
|
type: integer
|
|
209
215
|
nullable: True
|
|
210
216
|
meta:
|
|
211
|
-
label: Reverse proxy port
|
|
217
|
+
label: Reverse proxy port for the Home Assistant link. Advanced; set it only when your own proxy fronts this panel on another port.
|
|
212
218
|
expose:
|
|
213
219
|
required: False
|
|
214
220
|
type: string
|
|
@@ -18,7 +18,16 @@ belongs to Docker and an operator can change it in daemon.json.
|
|
|
18
18
|
|
|
19
19
|
from __future__ import annotations
|
|
20
20
|
|
|
21
|
+
import json
|
|
21
22
|
import logging
|
|
23
|
+
import ssl
|
|
24
|
+
import time
|
|
25
|
+
import urllib.error
|
|
26
|
+
import urllib.request
|
|
27
|
+
|
|
28
|
+
import psutil
|
|
29
|
+
|
|
30
|
+
from boneio.const import DEFAULT_PROXY_PORT
|
|
22
31
|
|
|
23
32
|
_LOGGER = logging.getLogger(__name__)
|
|
24
33
|
|
|
@@ -50,8 +59,6 @@ def docker_bridge_addresses() -> list[str]:
|
|
|
50
59
|
"""
|
|
51
60
|
addresses: list[str] = []
|
|
52
61
|
try:
|
|
53
|
-
import psutil
|
|
54
|
-
|
|
55
62
|
for name, addrs in psutil.net_if_addrs().items():
|
|
56
63
|
if not name.startswith(_BRIDGE_PREFIXES):
|
|
57
64
|
continue
|
|
@@ -87,8 +94,6 @@ def _wait_for_a_bridge(timeout: float) -> list[str]:
|
|
|
87
94
|
Returns:
|
|
88
95
|
The addresses found, possibly empty.
|
|
89
96
|
"""
|
|
90
|
-
import time
|
|
91
|
-
|
|
92
97
|
deadline = time.monotonic() + timeout
|
|
93
98
|
waited = False
|
|
94
99
|
while True:
|
|
@@ -140,10 +145,6 @@ def binds_for(exposure: str, port: int, wait: float = BRIDGE_WAIT_SECONDS) -> li
|
|
|
140
145
|
return [f"{host}:{port}" for host in hosts]
|
|
141
146
|
|
|
142
147
|
|
|
143
|
-
#: Where Caddy publishes HTTPS when nothing says otherwise.
|
|
144
|
-
DEFAULT_PROXY_PORT = 8443
|
|
145
|
-
|
|
146
|
-
|
|
147
148
|
def proxy_is_serving(port: int = DEFAULT_PROXY_PORT, timeout: float = 5.0) -> tuple[bool, str]:
|
|
148
149
|
"""Whether the reverse proxy is answering for this device right now.
|
|
149
150
|
|
|
@@ -163,11 +164,6 @@ def proxy_is_serving(port: int = DEFAULT_PROXY_PORT, timeout: float = 5.0) -> tu
|
|
|
163
164
|
Returns:
|
|
164
165
|
Whether it is serving, and a short reason when it is not.
|
|
165
166
|
"""
|
|
166
|
-
import json
|
|
167
|
-
import ssl
|
|
168
|
-
import urllib.error
|
|
169
|
-
import urllib.request
|
|
170
|
-
|
|
171
167
|
# The certificate is the device's own, usually from Caddy's internal CA,
|
|
172
168
|
# and this request never leaves the machine. What is being tested is
|
|
173
169
|
# whether the proxy reaches the application, not who signed the key.
|
|
@@ -191,3 +187,44 @@ def proxy_is_serving(port: int = DEFAULT_PROXY_PORT, timeout: float = 5.0) -> tu
|
|
|
191
187
|
if "version" not in body:
|
|
192
188
|
return False, f"port {port} is serving something else"
|
|
193
189
|
return True, ""
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
#: The last probe, as ``(port, asked_at, answer)``.
|
|
193
|
+
_last_probe: tuple[int, float, bool] | None = None
|
|
194
|
+
|
|
195
|
+
#: How long an answer stands. Long enough that the security page's probe is
|
|
196
|
+
#: still good when somebody reads it and presses the button; short enough that
|
|
197
|
+
#: a proxy just repaired shows as repaired.
|
|
198
|
+
PROBE_TTL = 30.0
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def proxy_is_serving_cached(port: int = DEFAULT_PROXY_PORT, max_age: float = PROBE_TTL) -> tuple[bool, str]:
|
|
202
|
+
""":func:`proxy_is_serving`, reusing a recent answer.
|
|
203
|
+
|
|
204
|
+
The first probe of a device's life is slow in a way the timeout alone
|
|
205
|
+
cannot fix: Caddy issues its internal certificates on demand, and a
|
|
206
|
+
connection to 127.0.0.1 carries no SNI, so the first one makes it mint a
|
|
207
|
+
certificate for that address before answering. On a BeagleBone that takes
|
|
208
|
+
seconds — long enough that the browser gave up on the save that was waiting
|
|
209
|
+
for it, while the save itself went through.
|
|
210
|
+
|
|
211
|
+
Sharing one answer between the page that displays the posture and the save
|
|
212
|
+
that acts on it means the slow probe happens while somebody is reading,
|
|
213
|
+
not while they are waiting for a button.
|
|
214
|
+
|
|
215
|
+
Args:
|
|
216
|
+
port: The port the proxy publishes HTTPS on.
|
|
217
|
+
max_age: How old an answer may be and still be used.
|
|
218
|
+
|
|
219
|
+
Returns:
|
|
220
|
+
Whether it is serving, and a short reason when it is not.
|
|
221
|
+
"""
|
|
222
|
+
global _last_probe
|
|
223
|
+
|
|
224
|
+
now = time.monotonic()
|
|
225
|
+
if _last_probe and _last_probe[0] == port and now - _last_probe[1] < max_age:
|
|
226
|
+
return (_last_probe[2], "" if _last_probe[2] else "the proxy was not serving a moment ago")
|
|
227
|
+
|
|
228
|
+
serving, reason = proxy_is_serving(port)
|
|
229
|
+
_last_probe = (port, now, serving)
|
|
230
|
+
return serving, reason
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./chunk-QTnfLwEv.js";import{Qt as t,Zt as n,an as r,in as i}from"./fa-BEzM11bH.js";import{n as a}from"./axios-uEi8e3Ln.js";import{F as o,I as s,L as c,P as l,c as u,d,h as f,u as p,x as m}from"./index-
|
|
1
|
+
import{r as e}from"./chunk-QTnfLwEv.js";import{Qt as t,Zt as n,an as r,in as i}from"./fa-BEzM11bH.js";import{n as a}from"./axios-uEi8e3Ln.js";import{F as o,I as s,L as c,P as l,c as u,d,h as f,u as p,x as m}from"./index-DTsVYLUw.js";var h=e(r(),1),g=i();function _(e,t){return e?.response?.data?.detail||t}function v(){let{t:e}=s(),{username:r,isAdmin:i}=c(),[v,y]=(0,h.useState)([]),[b,x]=(0,h.useState)(!0),[S,C]=(0,h.useState)(null),[w,T]=(0,h.useState)(null),[E,D]=(0,h.useState)(``),[O,k]=(0,h.useState)(``),[A,j]=(0,h.useState)(`viewer`),[M,N]=(0,h.useState)(!1),P=O?o(O,E):null,F=P?e(l[P],{min:8}):null,I=(0,h.useCallback)(async()=>{try{let{data:e}=await a.get(`/api/accounts`);y(e.accounts??[]),C(null)}catch(t){C(_(t,e(`accounts.load_failed`)))}finally{x(!1)}},[e]);(0,h.useEffect)(()=>{i&&I()},[i,I]);let L=async t=>{t.preventDefault(),C(null),T(null),N(!0);try{await a.post(`/api/accounts`,{username:E,password:O,role:A}),D(``),k(``),j(`viewer`),T(e(`accounts.created`)),await I()}catch(t){C(_(t,e(`accounts.create_failed`)))}finally{N(!1)}},R=async t=>{if(window.confirm(e(`accounts.confirm_delete`,{username:t.username}))){C(null),T(null);try{await a.delete(`/api/accounts/${encodeURIComponent(t.username)}`),T(e(`accounts.deleted`,{username:t.username})),await I()}catch(t){C(_(t,e(`accounts.delete_failed`)))}}},z=async(t,n)=>{C(null),T(null);try{await a.put(`/api/accounts/${encodeURIComponent(t.username)}/role`,{role:n}),await I()}catch(t){C(_(t,e(`accounts.role_failed`))),await I()}},B=async t=>{let n=window.prompt(e(`accounts.prompt_new_password`,{username:t.username}));if(!n)return;C(null),T(null);let r=o(n,t.username);if(r){C(e(l[r],{min:8}));return}try{await a.put(`/api/accounts/${encodeURIComponent(t.username)}/password`,{password:n}),T(e(`accounts.password_reset`,{username:t.username}))}catch(t){C(_(t,e(`accounts.password_failed`)))}};return i?(0,g.jsxs)(m,{width:`wide`,children:[S&&(0,g.jsx)(u,{variant:`error`,message:S}),w&&(0,g.jsx)(u,{variant:`success`,message:w}),(0,g.jsx)(f,{icon:(0,g.jsx)(t,{}),title:e(`accounts.title`),children:b?(0,g.jsx)(`div`,{className:`flex justify-center py-6`,children:(0,g.jsx)(`span`,{className:`loading loading-spinner loading-md text-primary`})}):(0,g.jsx)(`div`,{className:`stg-inset overflow-x-auto`,children:(0,g.jsxs)(`table`,{className:`table table-sm`,children:[(0,g.jsx)(`thead`,{children:(0,g.jsxs)(`tr`,{children:[(0,g.jsx)(`th`,{children:e(`accounts.username`)}),(0,g.jsx)(`th`,{children:e(`accounts.role`)}),(0,g.jsx)(`th`,{className:`text-right`,children:e(`accounts.actions`)})]})}),(0,g.jsx)(`tbody`,{children:v.map(t=>{let n=t.username.toLowerCase()===(r??``).toLowerCase();return(0,g.jsxs)(`tr`,{children:[(0,g.jsxs)(`td`,{children:[(0,g.jsx)(`span`,{className:`font-medium font-mono`,children:t.username}),n&&(0,g.jsx)(`span`,{className:`ml-2 badge badge-ghost badge-xs`,children:e(`accounts.you`)})]}),(0,g.jsx)(`td`,{children:(0,g.jsxs)(`select`,{className:`select select-xs select-bordered`,value:t.role,disabled:n,onChange:e=>z(t,e.target.value),children:[(0,g.jsx)(`option`,{value:`admin`,children:e(`accounts.role_admin`)}),(0,g.jsx)(`option`,{value:`viewer`,children:e(`accounts.role_viewer`)})]})}),(0,g.jsxs)(`td`,{className:`text-right whitespace-nowrap`,children:[(0,g.jsx)(`button`,{className:`btn btn-ghost btn-xs`,onClick:()=>B(t),children:e(`accounts.reset_password`)}),(0,g.jsx)(`button`,{className:`btn btn-ghost btn-xs text-error ml-1`,disabled:n,onClick:()=>R(t),children:e(`accounts.delete`)})]})]},t.username)})})]})})}),(0,g.jsx)(`form`,{onSubmit:L,children:(0,g.jsx)(f,{icon:(0,g.jsx)(n,{}),title:e(`accounts.add_title`),description:e(`accounts.add_intro`),footer:(0,g.jsx)(p,{children:(0,g.jsxs)(`button`,{type:`submit`,className:`btn btn-primary btn-sm gap-2`,disabled:M||!E||!O||!!F,children:[M&&(0,g.jsx)(`span`,{className:`loading loading-spinner loading-xs`}),e(`accounts.add_button`)]})}),children:(0,g.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-[1fr_1fr_auto] gap-3`,children:[(0,g.jsx)(d,{label:e(`accounts.username`),children:(0,g.jsx)(`input`,{type:`text`,className:`input input-bordered w-full font-mono`,placeholder:e(`accounts.username`),autoComplete:`off`,required:!0,value:E,onChange:e=>D(e.target.value)})}),(0,g.jsx)(d,{label:e(`accounts.password`),error:F||void 0,children:(0,g.jsx)(`input`,{type:`password`,className:`input input-bordered w-full font-mono ${F?`input-error`:``}`,placeholder:e(`accounts.password`),autoComplete:`new-password`,required:!0,minLength:8,"aria-invalid":F?!0:void 0,"aria-describedby":F?`accounts-password-error`:void 0,value:O,onChange:e=>k(e.target.value)})}),(0,g.jsx)(d,{label:e(`accounts.role`),className:`sm:w-40`,children:(0,g.jsxs)(`select`,{className:`select select-bordered w-full`,value:A,onChange:e=>j(e.target.value),children:[(0,g.jsx)(`option`,{value:`viewer`,children:e(`accounts.role_viewer`)}),(0,g.jsx)(`option`,{value:`admin`,children:e(`accounts.role_admin`)})]})})]})})})]}):(0,g.jsx)(m,{width:`wide`,children:(0,g.jsx)(u,{variant:`warning`,message:e(`accounts.admin_only`)})})}export{v as default};
|