boneio 1.6.0.dev25__tar.gz → 1.6.0.dev26__tar.gz

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