boneio 1.6.0.dev6__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.dev6/boneio.egg-info → boneio-1.6.0.dev7}/PKG-INFO +1 -1
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/const.py +8 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/registration.py +1 -2
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/config_helper.py +49 -3
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/security/posture.py +75 -16
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/integration/homeassistant.py +3 -5
- {boneio-1.6.0.dev6 → 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.dev6 → boneio-1.6.0.dev7}/boneio/runner.py +1 -0
- {boneio-1.6.0.dev6 → 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.dev6 → boneio-1.6.0.dev7}/boneio/webui/bind.py +50 -13
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/AccountsView-CtAKf-Jh.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/AccountsView-BUm_P1Uw.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/ActionFields-00jnigwc.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/ActionFields-B--1CfM2.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/BackupSection-wLp_QeJD.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/BackupSection-BSZn5Skg.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/BindingMatrix-DqbowdSa.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/BindingMatrix-CpzvZ7i_.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/DeviceControlSection-Ww98-XKE.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/DeviceControlSection-CnyJz996.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/DiagnosticsView-B0ABEIej.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/DiagnosticsView-jzQIu7C-.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/EditItemDialog-DSaSr1V2.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/EditItemDialog-D_EXUFV4.js +2 -2
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/EntityCard-MBcnQMqn.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/EntityCard-CzrB7v4W.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/FactoryResetSection-HrIaeWkh.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/FactoryResetSection-DU5Xczix.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/FormInputToggle-VnOgafWV.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/FormInputToggle--GD_ZMhY.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/HaDashboardWizard-Dusa_1tc.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/HaDashboardWizard-Cjn4NcOy.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/HostnameSection-C2JY6tSi.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/HostnameSection-CcgeB7c9.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/InputsView-P0Et4B_z.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/InputsView-D7ALwZZ2.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/LocationSection-DJC9Nn1t.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/LocationSection-Dbk0Rss6.js +2 -2
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/LoggerForm-C7eIfgE5.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/LoggerForm-br7_NVmx.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/MigrationsSection-CyRlGDFu.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/MigrationsSection-B0Do-lCH.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/ModbusView-CpQSNUsc.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/ModbusView-B5YLw-nZ.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/MqttPasswordsSection-Dkxvg2F4.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/MqttPasswordsSection-B628jQwJ.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/NodeRedManagement-BphMNx2Y.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/NodeRedManagement-B6OKfz_P.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/OutputsView-D2lNpDf4.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/OutputsView-BcttMcsW.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/ScheduleSection-DUAIOUfk.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.dev6/boneio/webui/frontend-dist/assets/SensorView-CRFFyoc0.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/SensorView-C--UO0_x.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/SystemState-DW1QWwMH.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/SystemState-DC-bxOGD.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/TemplatesView-DQaBD8OP.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/TemplatesView-BgXYpvO7.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/TilePicker-BqXH6IvA.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/TilePicker-BJiurvDz.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/TimezoneSection-ceIcx6zy.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/TimezoneSection-CQ8UzB3r.js +1 -1
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/UISettings-D9dRIfil.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/UISettings-CKiOXI3V.js +3 -3
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/index-B6IpVqZQ.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/index-DTsVYLUw.js +6 -6
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/monaco-DSHG8wk7.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/monaco-DdPCJ1g6.js +1 -1
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/index.html +1 -1
- {boneio-1.6.0.dev6/boneio/webui → boneio-1.6.0.dev7/boneio/webui/frontend-dist}/schema/config.schema.json +1 -1
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/web.schema.json +1 -1
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/sw.js +1 -1
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config_core.py +6 -3
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/remote_devices.py +14 -12
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/security.py +59 -21
- {boneio-1.6.0.dev6/boneio/webui/frontend-dist → boneio-1.6.0.dev7/boneio/webui}/schema/config.schema.json +1 -1
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/web.schema.json +1 -1
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7/boneio.egg-info}/PKG-INFO +1 -1
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio.egg-info/SOURCES.txt +30 -30
- boneio-1.6.0.dev6/boneio/migrations/plans/manifest.sig +0 -1
- boneio-1.6.0.dev6/boneio/version.py +0 -2
- boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/SecurityView-qRhXLFuR.js +0 -1
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/LICENSE +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/MANIFEST.in +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/README.md +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/input.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_32_5.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_cover.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/input.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_32_5.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_cover.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/input.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_32_5.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_cover.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.5/input.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_cover.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.6/input.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_cover.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/input.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_48_4.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_cover.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/input.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_48_4.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_cover.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/input.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_24_16.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_32_10.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_48_4.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_cover.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/bonecli.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/cover/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/cover/cover.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/cover/remote.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/cover/time_based.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/cover/venetian.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/group/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/group/output_group.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/binary_sensor.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/detectors.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/event.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/remote/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/remote/base.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/remote/esphome.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/irrigation/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/irrigation/controller.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/irrigation/water_source.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/basic.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/buzzer.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/mcp.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/pca.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/pcf.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/remote.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/sensor/virtual_energy.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/template/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/template/alarm_panel.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/template/gate_cover.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/template/thermostat.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/cli.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/hashing.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/migration.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/models.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/store.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/data/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/data/docker-compose.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/secrets.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/input_bindings.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/migrations/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v2_transition.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v4_wled_cache.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v5_ina_screen.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/package-lock.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/package.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/provenance.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/schema_converter.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/secret_masking.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/yaml_compat.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/yaml_patch.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/yaml_util.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/containers.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/diagnostics/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/diagnostics/collect.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/discovery.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/events/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/events/bus.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/action_conditions.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/canopen.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/covers.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/display.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/inputs.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/irrigation.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/manager.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/modbus.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/outputs.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/remote.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/remote_input_registrar.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/scheduler.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/security_alert.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/sensors.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/sun.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/templates/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/templates/alarm.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/templates/gate_cover.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/templates/thermostat.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/templates.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/update.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/basic.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/basic_mqtt.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/composite.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/local.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/lox.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/mqtt.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/queue.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/net/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/net/discovery_guard.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/base.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/can.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/esphome.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/mqtt.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/wled.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/wled_cache.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/security/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/security/certificate.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/security/framing.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/sensor/base.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/sensor/sun.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/sensor/system.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/state/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/state/manager.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/system/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/system/host_data.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/system/monitor.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/system_ops.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/async_updater.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/conditions.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/filter.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/font_util.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/logger.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/overlay.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/sun.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/timeperiod.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/util.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/adc.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/config.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/event.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/mqtt.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/output24x16A.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/adc.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/config.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/event.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/mqtt.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/output32x10A.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/adc.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/config.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/event.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/mqtt.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/output48x4A.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/can_master.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/can_slave.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/adc.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/config.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/cover.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/event.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/mqtt.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/outputCover.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/adc.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/config.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/cover.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/event.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/adc.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/event_all.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/exceptions.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/analog/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/analog/adc.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/bridge.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/client.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/interface.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/node.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/node_id.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/test_od.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/display/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/display/early_oled.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/display/fonts/danube__.ttf +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/display/oled.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/input/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/input/base.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/input/manager.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/bus.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina219.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina219_driver.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina226.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina226_driver.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/mcp9808.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/pct2075.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/onewire/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/onewire/dallas.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/base.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/integration/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/integration/interlock.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/integration/lox_template.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/actions.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/MANIFEST.sha256 +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/daemon.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/docker-compose-cloud.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-containers +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-helpers-heal +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-migrate-v2 +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-system +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/issue.d/10-boneio.issue +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/journald/journald.conf +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/kernel/postinst-boneio-overlay +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/migrations-recovery.pem +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/migrations.pem +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/modules-load.d/onewire.conf +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/sshd/10-boneio-hardening.conf +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/sudoers/boneio +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/sudoers/boneio-helpers +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/sudoers/boneio-timedatectl +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio-helpers-heal.service +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio.service +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/avahi-daemon-defer.conf +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/bb-usb-gadgets-defer.conf +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/mosquitto-priority.conf +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/timer-no-persistent.conf +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/user-manager-defer.conf +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/linger-marker +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/bootstrap/boneio-migrate +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/bootstrap/install-helper.sh +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.0.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.0.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.1.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.1.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.2.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.2.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.0.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.0.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.3.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.3.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.4.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.4.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.0.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.0.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.1.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.1.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.10.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.10.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.11.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.11.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.12.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.12.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.13.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.13.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.14.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.14.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.15.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.15.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.16.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.16.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.17.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.17.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.18.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.18.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.2.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.2.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.3.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.3.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.4.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.4.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.5.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.5.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.6.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.6.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.7.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.7.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.8.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.8.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.9.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.9.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.0.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.0.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.1.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.1.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.10.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.10.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.11.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.11.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.12.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.12.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.13.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.13.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.2.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.2.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.3.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.3.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.4.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.4.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.5.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.5.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.6.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.6.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.7.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.7.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.8.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.8.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.9.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.9.sig +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/runner.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_10_disable_console_setup.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_11_timer_catchup.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_12_oled_splash_off_critical_path.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_13_mosquitto_priority.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_14_journal_apparent_size.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_15_prune_orphan_journals.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_16_login_linger.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_17_defer_user_manager.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_18_fix_hostname_once.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_2_libyaml.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_4_onewire_modules.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_5_overlay_kernel_hook.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_6_boot_service_order.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_7_journald_limits.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_8_apparmor_prune.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_9_defer_nonessential.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_0_nodered_admin_auth.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_10_narrow_sudo_rules.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_11_drop_docker_group.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_12_console_shows_ip.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_13_custom_certificate.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_4_ssh_login_hardening.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_5_trust_transition.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_6_retire_legacy_helper.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_7_timedatectl_sudoers.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_8_system_helper.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_9_ntp_servers.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/cli.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/client.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/coordinator.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/defro-drx.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/thessla.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/ventclear.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/wanas415.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/inverters/sofar.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/other/n4dsc08.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/other/r4dcb08.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/cwt.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/gdfs.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/gdfx.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/pt100.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/sht20.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/sht30.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/base.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/numeric.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/select.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/switch.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/text.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/binary.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/numeric.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/text.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/writeable/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/writeable/binary.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/writeable/numeric.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/mock_coordinator.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/utils.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/actions.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/events.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/files.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/logs.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/mqtt.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/state.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/actions.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/actions_sensor.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/actions_switch.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/condition.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/filters.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/filters_adc.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/id.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/remote_devices.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/remote_inputs.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/remote_outputs.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/temp_unit.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/update_interval.yaml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/action_validation.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/app.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/dashboard_cards.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/AppInitContext-CsffdB9c.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/EntityGrid-BDdmT0qN.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/LongPressWrapper-BKkWvoC1.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/NodeRedView-Ct08K8xu.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/Sparkline-D-2-v-7o.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/ViewToggle-B8OpHNHc.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/aiConfig-_hPXvgdY.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/aiWizardPrompt-Dc7dZBzw.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/axios-uEi8e3Ln.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/basePath-CxHj-SSK.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/chunk-QTnfLwEv.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/configCache-CLN4xEny.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/coverUtils-Cf4Uxn2U.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/createLucideIcon-BEjh8B3y.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/editor.worker-Cn2oRESe.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/fa-BEzM11bH.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/formatters-zOiGPJLh.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/gi-tOlGxC0X.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/index-lVrZSgFS.css +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/longPress-Dx7OCSyP.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/monaco-DUFfd7ef.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/monaco-Dpn-hvLa.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/select-D3PIwbEj.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/tabs-box-Byn-MOyS.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/utils-B6KiDbIe.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/yaml.worker-8qQfrID5.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio-192.png +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio-512.png +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio.svg +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/ina226.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/location.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/schedule.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/workbox-7e79c025.js +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/hvac_svg_templates.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/middleware/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/middleware/auth.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/middleware/csrf.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/middleware/policy.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/modbus_card_templates.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/rate_limit.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/accounts.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/auth.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/can.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config_actions.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config_backups.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config_discovery.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config_files.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/covers.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/dashboard.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/dev_fake_device.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/diagnostics.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/irrigation.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/migrations.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/modbus.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/mqtt_reference.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/nodered.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/onboarding.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/outputs.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/schedule.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/sensors.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/sun.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/system.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/templates.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/timezone_sudoers.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/tools.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/update.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/adc.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/areas.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/binary_sensor.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/boneio.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/can.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/cover.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/dallas.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/ds2482.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/event.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/ina219.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/ina226.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/irrigation.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/lm75.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/location.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/logger.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/lox_udp.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/mcp23017.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/mcp9808.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/modbus.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/modbus_devices.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/mqtt.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/oled.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/output.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/output_group.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/pca9685.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/pcf8575.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/remote_devices.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/remote_inputs.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/remote_outputs.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/schedule.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/sensor.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/template.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/security_headers.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/services/__init__.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/services/logs.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/sudo_rate_limiter.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/web_server.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/websocket_manager.py +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio.egg-info/dependency_links.txt +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio.egg-info/entry_points.txt +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio.egg-info/requires.txt +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio.egg-info/top_level.txt +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/pyproject.toml +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/setup.cfg +0 -0
- {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/setup.py +0 -0
- {boneio-1.6.0.dev6 → 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,20 +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
|
-
"
|
|
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."
|
|
286
317
|
),
|
|
287
318
|
settings_section="security",
|
|
288
319
|
)
|
|
@@ -312,6 +343,7 @@ def evaluate(
|
|
|
312
343
|
)
|
|
313
344
|
|
|
314
345
|
web = config.get("web") if isinstance(config.get("web"), dict) else {}
|
|
346
|
+
cloud_enabled = bool((web.get("cloud") or {}).get("enabled"))
|
|
315
347
|
has_legacy = _legacy_web_auth(config)
|
|
316
348
|
checks.append(
|
|
317
349
|
Check(
|
|
@@ -342,15 +374,42 @@ def evaluate(
|
|
|
342
374
|
id="certificate",
|
|
343
375
|
title="HTTPS certificate",
|
|
344
376
|
severity=Severity.INFO,
|
|
345
|
-
|
|
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,
|
|
346
383
|
detail=(
|
|
347
|
-
"Served with
|
|
384
|
+
"Served with the certificate you uploaded."
|
|
385
|
+
if custom_certificate
|
|
386
|
+
else "Served with a certificate browsers trust."
|
|
348
387
|
if cloud_active
|
|
349
|
-
else
|
|
350
|
-
|
|
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
|
+
)
|
|
351
401
|
),
|
|
352
|
-
remedy=
|
|
353
|
-
|
|
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",
|
|
354
413
|
)
|
|
355
414
|
)
|
|
356
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};
|