boneio 1.6.0.dev2__tar.gz → 1.6.0.dev3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (730) hide show
  1. {boneio-1.6.0.dev2/boneio.egg-info → boneio-1.6.0.dev3}/PKG-INFO +1 -1
  2. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/yaml_util.py +173 -0
  3. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/action_conditions.py +206 -9
  4. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/manager.py +53 -3
  5. boneio-1.6.0.dev3/boneio/core/manager/scheduler.py +410 -0
  6. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/sensors.py +96 -0
  7. boneio-1.6.0.dev3/boneio/core/manager/sun.py +388 -0
  8. boneio-1.6.0.dev3/boneio/core/sensor/sun.py +301 -0
  9. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/system_ops.py +50 -2
  10. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/utils/conditions.py +55 -4
  11. boneio-1.6.0.dev3/boneio/core/utils/sun.py +440 -0
  12. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/can/interface.py +50 -1
  13. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/integration/homeassistant.py +93 -0
  14. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/actions.py +27 -0
  15. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/MANIFEST.sha256 +3 -6
  16. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/helpers/boneio-migrate-v2 +80 -0
  17. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/helpers/boneio-system +320 -10
  18. boneio-1.6.0.dev3/boneio/migrations/assets/sudoers/boneio +16 -0
  19. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.3.0.json +1 -1
  20. boneio-1.6.0.dev3/boneio/migrations/plans/1.3.0.sig +0 -0
  21. boneio-1.6.0.dev3/boneio/migrations/plans/1.4.0.json +1 -0
  22. boneio-1.6.0.dev3/boneio/migrations/plans/1.4.0.sig +1 -0
  23. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.10.json +1 -0
  24. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.10.sig +2 -0
  25. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.11.json +1 -0
  26. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.11.sig +2 -0
  27. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.5.json +1 -1
  28. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.5.sig +2 -0
  29. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.8.json +1 -1
  30. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.8.sig +1 -0
  31. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.9.json +1 -0
  32. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.9.sig +0 -0
  33. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/manifest.json +1 -1
  34. boneio-1.6.0.dev3/boneio/migrations/plans/manifest.sig +1 -0
  35. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/runner.py +26 -4
  36. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_10_narrow_sudo_rules.py +55 -0
  37. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_11_drop_docker_group.py +41 -0
  38. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py +1 -1
  39. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_6_4_ssh_login_hardening.py +1 -1
  40. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_6_5_trust_transition.py +2 -2
  41. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_6_6_retire_legacy_helper.py +8 -6
  42. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_9_ntp_servers.py +64 -0
  43. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/runner.py +2 -0
  44. boneio-1.6.0.dev3/boneio/schema/condition.yaml +164 -0
  45. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/schema.yaml +228 -0
  46. boneio-1.6.0.dev3/boneio/version.py +2 -0
  47. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/action_validation.py +74 -2
  48. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/app.py +21 -1
  49. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/AccountsView-iveRbldx.js +1 -0
  50. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/ActionFields-DdCxR8lP.js +1 -0
  51. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/AppInitContext-D9IKihqu.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/AppInitContext-CsffdB9c.js +1 -1
  52. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/BackupSection-C1qj4qOG.js +1 -0
  53. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/BindingMatrix-Bj6KE0yY.js +1 -0
  54. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/DeviceControlSection-CPmqccka.js +1 -0
  55. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/DiagnosticsView-Bi1hrIcs.js +5 -0
  56. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/EditItemDialog-BH1onHq0.js +66 -0
  57. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/EntityCard-yD9_Hl71.js +1 -0
  58. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/EntityGrid-BDdmT0qN.js +1 -0
  59. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/FactoryResetSection-E3xtkFLr.js +1 -0
  60. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/FormInputToggle-B_NTf6g-.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/FormInputToggle-Spiz-w7l.js +1 -1
  61. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/HaDashboardWizard-f8fMg8FC.js +1 -0
  62. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/HostnameSection-DrpKbp6I.js +1 -0
  63. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/InputsView-W99g8hSl.js +1 -0
  64. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/LocationSection-ZILUsfeR.js +2 -0
  65. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/LoggerForm-Chw9zm0N.js +1 -0
  66. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/LongPressWrapper-K2sCXsb5.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/LongPressWrapper-BKkWvoC1.js +1 -1
  67. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/MigrationsSection-DSbw5UVz.js +1 -0
  68. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/ModbusView-CdP0fXYx.js +1 -0
  69. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/MqttPasswordsSection-BYwPAyFi.js +1 -0
  70. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/NodeRedManagement-DRMiFlH2.js +1 -0
  71. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/NodeRedView-D8E1Itvk.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/NodeRedView-Ct08K8xu.js +1 -1
  72. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/OutputsView-C9sDLF1P.js +1 -0
  73. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/ScheduleSection-C2qLKNWR.js +1 -0
  74. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/SecurityView-DBkwBU2t.js +1 -0
  75. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/SensorView-DNtKJE4b.js +1 -0
  76. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/Sparkline-Cq-w3bbO.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/Sparkline-D-2-v-7o.js +1 -1
  77. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/SystemState-DbY5T6BB.js +2 -0
  78. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/TemplatesView-6kNzVE3p.js +1 -0
  79. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/TilePicker-jd3hKaoZ.js +1 -0
  80. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/TimezoneSection-BEuXBmWp.js +1 -0
  81. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/UISettings-DIcCTtXU.js +33 -0
  82. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/ViewToggle-B8OpHNHc.js +1 -0
  83. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/aiConfig-_hPXvgdY.js +2 -0
  84. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/aiWizardPrompt-BRgdilYB.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/aiWizardPrompt-Dc7dZBzw.js +1 -1
  85. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/coverUtils-Cf4Uxn2U.js +1 -0
  86. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/createLucideIcon-BEjh8B3y.js +1 -0
  87. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/fa-1N_Z7Z57.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/fa-BEzM11bH.js +1 -1
  88. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/gi-iTtpUjJp.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/gi-tOlGxC0X.js +1 -1
  89. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/index-1pLHiRke.js +20 -0
  90. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/index-DfcdKR51.css → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/index-lVrZSgFS.css +1 -1
  91. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/monaco-drkeoggn.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/monaco-C9XC2D1j.js +3 -3
  92. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/select-D3PIwbEj.js +1 -0
  93. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/tabs-box-DQ3qtHub.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/tabs-box-Byn-MOyS.js +1 -1
  94. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/utils-B6KiDbIe.js +1 -0
  95. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/index.html +6 -4
  96. {boneio-1.6.0.dev2/boneio/webui → boneio-1.6.0.dev3/boneio/webui/frontend-dist}/schema/binary_sensor.schema.json +212 -4
  97. {boneio-1.6.0.dev2/boneio/webui → boneio-1.6.0.dev3/boneio/webui/frontend-dist}/schema/config.schema.json +2026 -29
  98. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/event.schema.json +742 -14
  99. boneio-1.6.0.dev3/boneio/webui/frontend-dist/schema/location.schema.json +48 -0
  100. boneio-1.6.0.dev3/boneio/webui/frontend-dist/schema/schedule.schema.json +1003 -0
  101. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/web.schema.json +22 -0
  102. boneio-1.6.0.dev3/boneio/webui/frontend-dist/sw.js +1 -0
  103. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/__init__.py +4 -0
  104. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/config_core.py +5 -1
  105. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/onboarding.py +18 -0
  106. boneio-1.6.0.dev3/boneio/webui/routes/schedule.py +75 -0
  107. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/sensors.py +16 -1
  108. boneio-1.6.0.dev3/boneio/webui/routes/sun.py +151 -0
  109. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/system.py +157 -19
  110. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/update.py +26 -38
  111. {boneio-1.6.0.dev2/boneio/webui/frontend-dist → boneio-1.6.0.dev3/boneio/webui}/schema/binary_sensor.schema.json +212 -4
  112. {boneio-1.6.0.dev2/boneio/webui/frontend-dist → boneio-1.6.0.dev3/boneio/webui}/schema/config.schema.json +2026 -29
  113. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/event.schema.json +742 -14
  114. boneio-1.6.0.dev3/boneio/webui/schema/location.schema.json +48 -0
  115. boneio-1.6.0.dev3/boneio/webui/schema/schedule.schema.json +1003 -0
  116. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/web.schema.json +22 -0
  117. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/security_headers.py +31 -3
  118. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3/boneio.egg-info}/PKG-INFO +1 -1
  119. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio.egg-info/SOURCES.txt +65 -38
  120. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/pyproject.toml +3 -0
  121. boneio-1.6.0.dev2/boneio/migrations/assets/sudoers/boneio +0 -15
  122. boneio-1.6.0.dev2/boneio/migrations/plans/1.3.0.sig +0 -1
  123. boneio-1.6.0.dev2/boneio/migrations/plans/1.4.0.json +0 -1
  124. boneio-1.6.0.dev2/boneio/migrations/plans/1.4.0.sig +0 -0
  125. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.5.sig +0 -0
  126. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.8.sig +0 -1
  127. boneio-1.6.0.dev2/boneio/migrations/plans/manifest.sig +0 -1
  128. boneio-1.6.0.dev2/boneio/schema/condition.yaml +0 -76
  129. boneio-1.6.0.dev2/boneio/version.py +0 -2
  130. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/AccountsView-p4dfo1BI.js +0 -1
  131. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/BackupSection-CwWiIyYm.js +0 -1
  132. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/BindingMatrix-C5N7pHyw.js +0 -1
  133. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/DeviceControlSection-CiAn0q3F.js +0 -1
  134. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/DiagnosticsView-CPTuMjVr.js +0 -5
  135. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/EditItemDialog-D_97HEFm.js +0 -66
  136. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/EntityCard-Bb1AOk78.js +0 -1
  137. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/EntityGrid-CljXU2ZD.js +0 -1
  138. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/FactoryResetSection-BAzLfqax.js +0 -1
  139. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/HaDashboardWizard-ie0HCjfc.js +0 -1
  140. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/HostnameSection-DFipLyZg.js +0 -1
  141. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/InputsView-Dv2ynbYD.js +0 -1
  142. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/LoggerForm-UKzOi5ri.js +0 -5
  143. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/MigrationsSection-DMp9cBmP.js +0 -1
  144. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/ModbusView-Cw5Mgatj.js +0 -1
  145. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/MqttPasswordsSection-DhFBnZZZ.js +0 -1
  146. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/NodeRedManagement-C9si33mc.js +0 -1
  147. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/OutputsView-BID1iUa3.js +0 -1
  148. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/SecurityView-CMCqfNQs.js +0 -1
  149. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/SensorView-DMMhavyC.js +0 -1
  150. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/SystemState-BcmUoX6A.js +0 -2
  151. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/TemplatesView-0sksWoxA.js +0 -1
  152. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/TimezoneSection-DkaFIcW_.js +0 -1
  153. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/UISettings-Don7-C6Q.js +0 -33
  154. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/aiConfig-BAR1rHKB.js +0 -2
  155. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/index-C8RrYuNy.js +0 -16
  156. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/select-Xn9nmZSE.js +0 -1
  157. boneio-1.6.0.dev2/boneio/webui/frontend-dist/sw.js +0 -1
  158. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/LICENSE +0 -0
  159. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/MANIFEST.in +0 -0
  160. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/README.md +0 -0
  161. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/__init__.py +0 -0
  162. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.2/input.yaml +0 -0
  163. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.2/output_24_16.yaml +0 -0
  164. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.2/output_32_10.yaml +0 -0
  165. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.2/output_32_5.yaml +0 -0
  166. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.2/output_cover.yaml +0 -0
  167. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  168. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.3/input.yaml +0 -0
  169. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.3/output_24_16.yaml +0 -0
  170. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.3/output_32_10.yaml +0 -0
  171. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.3/output_32_5.yaml +0 -0
  172. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.3/output_cover.yaml +0 -0
  173. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  174. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.4/input.yaml +0 -0
  175. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.4/output_24_16.yaml +0 -0
  176. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.4/output_32_10.yaml +0 -0
  177. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.4/output_32_5.yaml +0 -0
  178. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.4/output_cover.yaml +0 -0
  179. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  180. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.5/input.yaml +0 -0
  181. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.5/output_24_16.yaml +0 -0
  182. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.5/output_32_10.yaml +0 -0
  183. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.5/output_cover.yaml +0 -0
  184. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  185. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.6/input.yaml +0 -0
  186. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.6/output_24_16.yaml +0 -0
  187. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.6/output_32_10.yaml +0 -0
  188. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.6/output_cover.yaml +0 -0
  189. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  190. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.7/input.yaml +0 -0
  191. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.7/output_24_16.yaml +0 -0
  192. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.7/output_32_10.yaml +0 -0
  193. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.7/output_48_4.yaml +0 -0
  194. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.7/output_cover.yaml +0 -0
  195. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  196. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.8/input.yaml +0 -0
  197. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.8/output_24_16.yaml +0 -0
  198. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.8/output_32_10.yaml +0 -0
  199. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.8/output_48_4.yaml +0 -0
  200. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.8/output_cover.yaml +0 -0
  201. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  202. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/1.0/input.yaml +0 -0
  203. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/1.0/output_24_16.yaml +0 -0
  204. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/1.0/output_32_10.yaml +0 -0
  205. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/1.0/output_48_4.yaml +0 -0
  206. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/1.0/output_cover.yaml +0 -0
  207. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
  208. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/bonecli.py +0 -0
  209. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/__init__.py +0 -0
  210. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/cover/__init__.py +0 -0
  211. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/cover/cover.py +0 -0
  212. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/cover/remote.py +0 -0
  213. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/cover/time_based.py +0 -0
  214. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/cover/venetian.py +0 -0
  215. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/group/__init__.py +0 -0
  216. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/group/output_group.py +0 -0
  217. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/input/__init__.py +0 -0
  218. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/input/binary_sensor.py +0 -0
  219. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/input/detectors.py +0 -0
  220. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/input/event.py +0 -0
  221. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/input/remote/__init__.py +0 -0
  222. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/input/remote/base.py +0 -0
  223. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/input/remote/esphome.py +0 -0
  224. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/irrigation/__init__.py +0 -0
  225. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/irrigation/controller.py +0 -0
  226. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/irrigation/water_source.py +0 -0
  227. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/output/__init__.py +0 -0
  228. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/output/basic.py +0 -0
  229. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/output/buzzer.py +0 -0
  230. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/output/mcp.py +0 -0
  231. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/output/pca.py +0 -0
  232. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/output/pcf.py +0 -0
  233. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/output/remote.py +0 -0
  234. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/sensor/__init__.py +0 -0
  235. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/sensor/virtual_energy.py +0 -0
  236. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/template/__init__.py +0 -0
  237. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/template/alarm_panel.py +0 -0
  238. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/template/gate_cover.py +0 -0
  239. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/components/template/thermostat.py +0 -0
  240. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/const.py +0 -0
  241. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/__init__.py +0 -0
  242. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/auth/__init__.py +0 -0
  243. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/auth/cli.py +0 -0
  244. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/auth/hashing.py +0 -0
  245. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/auth/migration.py +0 -0
  246. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/auth/models.py +0 -0
  247. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/auth/store.py +0 -0
  248. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/cloud/__init__.py +0 -0
  249. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/cloud/data/__init__.py +0 -0
  250. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
  251. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  252. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  253. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/cloud/registration.py +0 -0
  254. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/cloud/secrets.py +0 -0
  255. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/__init__.py +0 -0
  256. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/config_helper.py +0 -0
  257. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/input_bindings.py +0 -0
  258. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/migrations/__init__.py +0 -0
  259. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  260. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/migrations/v2_transition.py +0 -0
  261. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/migrations/v4_wled_cache.py +0 -0
  262. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/migrations/v5_ina_screen.py +0 -0
  263. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/package-lock.json +0 -0
  264. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/package.json +0 -0
  265. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/schema_converter.py +0 -0
  266. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/secret_masking.py +0 -0
  267. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/yaml_compat.py +0 -0
  268. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/config/yaml_patch.py +0 -0
  269. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/containers.py +0 -0
  270. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/diagnostics/__init__.py +0 -0
  271. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/diagnostics/collect.py +0 -0
  272. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/discovery.py +0 -0
  273. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/events/__init__.py +0 -0
  274. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/events/bus.py +0 -0
  275. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/__init__.py +0 -0
  276. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/canopen.py +0 -0
  277. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/covers.py +0 -0
  278. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/display.py +0 -0
  279. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/inputs.py +0 -0
  280. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/irrigation.py +0 -0
  281. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/modbus.py +0 -0
  282. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/outputs.py +0 -0
  283. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/remote.py +0 -0
  284. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/remote_input_registrar.py +0 -0
  285. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/security_alert.py +0 -0
  286. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/templates/__init__.py +0 -0
  287. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/templates/alarm.py +0 -0
  288. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/templates/gate_cover.py +0 -0
  289. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/templates/thermostat.py +0 -0
  290. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/templates.py +0 -0
  291. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/manager/update.py +0 -0
  292. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/messaging/__init__.py +0 -0
  293. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/messaging/basic.py +0 -0
  294. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/messaging/basic_mqtt.py +0 -0
  295. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/messaging/composite.py +0 -0
  296. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/messaging/local.py +0 -0
  297. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/messaging/lox.py +0 -0
  298. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/messaging/mqtt.py +0 -0
  299. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/messaging/queue.py +0 -0
  300. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/net/__init__.py +0 -0
  301. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/net/discovery_guard.py +0 -0
  302. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/remote/__init__.py +0 -0
  303. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/remote/base.py +0 -0
  304. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/remote/can.py +0 -0
  305. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/remote/esphome.py +0 -0
  306. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/remote/mqtt.py +0 -0
  307. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/remote/wled.py +0 -0
  308. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/remote/wled_cache.py +0 -0
  309. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/security/__init__.py +0 -0
  310. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/security/framing.py +0 -0
  311. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/security/posture.py +0 -0
  312. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/sensor/__init__.py +0 -0
  313. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/sensor/base.py +0 -0
  314. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/sensor/system.py +0 -0
  315. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/state/__init__.py +0 -0
  316. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/state/manager.py +0 -0
  317. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/system/__init__.py +0 -0
  318. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/system/host_data.py +0 -0
  319. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/system/monitor.py +0 -0
  320. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/utils/__init__.py +0 -0
  321. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/utils/async_updater.py +0 -0
  322. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/utils/filter.py +0 -0
  323. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/utils/font_util.py +0 -0
  324. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/utils/logger.py +0 -0
  325. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/utils/overlay.py +0 -0
  326. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/utils/timeperiod.py +0 -0
  327. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/core/utils/util.py +0 -0
  328. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/24x16/adc.yaml +0 -0
  329. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  330. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/24x16/config.yaml +0 -0
  331. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/24x16/event.yaml +0 -0
  332. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/24x16/mqtt.yaml +0 -0
  333. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  334. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/32x10/adc.yaml +0 -0
  335. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  336. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/32x10/config.yaml +0 -0
  337. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/32x10/event.yaml +0 -0
  338. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/32x10/mqtt.yaml +0 -0
  339. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  340. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/48x4/adc.yaml +0 -0
  341. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  342. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/48x4/config.yaml +0 -0
  343. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/48x4/event.yaml +0 -0
  344. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/48x4/mqtt.yaml +0 -0
  345. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  346. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/__init__.py +0 -0
  347. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/can_master.yaml +0 -0
  348. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/can_slave.yaml +0 -0
  349. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover/adc.yaml +0 -0
  350. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  351. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover/config.yaml +0 -0
  352. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover/cover.yaml +0 -0
  353. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover/event.yaml +0 -0
  354. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover/mqtt.yaml +0 -0
  355. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover/outputCover.yaml +0 -0
  356. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/adc.yaml +0 -0
  357. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  358. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/config.yaml +0 -0
  359. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/cover.yaml +0 -0
  360. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/event.yaml +0 -0
  361. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  362. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  363. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/adc.yaml +0 -0
  364. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  365. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  366. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  367. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  368. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/event_all.yaml +0 -0
  369. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  370. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  371. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  372. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  373. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  374. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  375. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/exceptions.py +0 -0
  376. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/__init__.py +0 -0
  377. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/analog/__init__.py +0 -0
  378. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/analog/adc.py +0 -0
  379. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/can/__init__.py +0 -0
  380. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/can/bridge.py +0 -0
  381. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/can/client.py +0 -0
  382. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/can/node.py +0 -0
  383. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/can/node_id.py +0 -0
  384. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/can/test_od.py +0 -0
  385. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/display/__init__.py +0 -0
  386. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/display/early_oled.py +0 -0
  387. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  388. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/display/oled.py +0 -0
  389. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/gpio/__init__.py +0 -0
  390. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  391. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  392. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  393. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  394. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/gpio/input/__init__.py +0 -0
  395. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/gpio/input/base.py +0 -0
  396. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/gpio/input/manager.py +0 -0
  397. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/i2c/__init__.py +0 -0
  398. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/i2c/bus.py +0 -0
  399. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/i2c/ina219.py +0 -0
  400. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/i2c/ina219_driver.py +0 -0
  401. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/i2c/ina226.py +0 -0
  402. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/i2c/ina226_driver.py +0 -0
  403. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/i2c/mcp9808.py +0 -0
  404. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/i2c/pct2075.py +0 -0
  405. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/onewire/__init__.py +0 -0
  406. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/onewire/dallas.py +0 -0
  407. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/sensor/__init__.py +0 -0
  408. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  409. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/sensor/temperature/base.py +0 -0
  410. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  411. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  412. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/integration/__init__.py +0 -0
  413. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/integration/interlock.py +0 -0
  414. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/integration/lox_template.py +0 -0
  415. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/__init__.py +0 -0
  416. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/docker/daemon.json +0 -0
  417. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
  418. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
  419. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/docker/nodered/docker-compose-cloud.yaml +0 -0
  420. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  421. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
  422. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/helpers/boneio-containers +0 -0
  423. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/helpers/boneio-helpers-heal +0 -0
  424. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/journald/journald.conf +0 -0
  425. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/kernel/postinst-boneio-overlay +0 -0
  426. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/migrations-recovery.pem +0 -0
  427. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/migrations.pem +0 -0
  428. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/modules-load.d/onewire.conf +0 -0
  429. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  430. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/sshd/10-boneio-hardening.conf +0 -0
  431. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/sudoers/boneio-helpers +0 -0
  432. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/sudoers/boneio-timedatectl +0 -0
  433. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/boneio-helpers-heal.service +0 -0
  434. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
  435. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
  436. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/boneio.service +0 -0
  437. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/dropins/avahi-daemon-defer.conf +0 -0
  438. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/dropins/bb-usb-gadgets-defer.conf +0 -0
  439. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/dropins/mosquitto-priority.conf +0 -0
  440. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/dropins/timer-no-persistent.conf +0 -0
  441. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/dropins/user-manager-defer.conf +0 -0
  442. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/linger-marker +0 -0
  443. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  444. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
  445. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  446. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  447. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  448. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  449. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
  450. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/bootstrap/boneio-migrate +0 -0
  451. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  452. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  453. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.3.1.json +0 -0
  454. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.3.1.sig +0 -0
  455. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.3.2.json +0 -0
  456. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.3.2.sig +0 -0
  457. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.4.3.json +0 -0
  458. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.4.3.sig +0 -0
  459. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.4.4.json +0 -0
  460. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.4.4.sig +0 -0
  461. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.0.json +0 -0
  462. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.0.sig +0 -0
  463. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.1.json +0 -0
  464. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.1.sig +0 -0
  465. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.10.json +0 -0
  466. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.10.sig +0 -0
  467. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.11.json +0 -0
  468. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.11.sig +0 -0
  469. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.12.json +0 -0
  470. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.12.sig +0 -0
  471. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.13.json +0 -0
  472. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.13.sig +0 -0
  473. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.14.json +0 -0
  474. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.14.sig +0 -0
  475. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.15.json +0 -0
  476. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.15.sig +0 -0
  477. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.16.json +0 -0
  478. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.16.sig +0 -0
  479. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.17.json +0 -0
  480. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.17.sig +0 -0
  481. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.18.json +0 -0
  482. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.18.sig +0 -0
  483. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.2.json +0 -0
  484. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.2.sig +0 -0
  485. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.3.json +0 -0
  486. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.3.sig +0 -0
  487. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.4.json +0 -0
  488. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.4.sig +0 -0
  489. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.5.json +0 -0
  490. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.5.sig +0 -0
  491. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.6.json +0 -0
  492. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.6.sig +0 -0
  493. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.7.json +0 -0
  494. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.7.sig +0 -0
  495. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.8.json +0 -0
  496. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.8.sig +0 -0
  497. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.9.json +0 -0
  498. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.5.9.sig +0 -0
  499. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.0.json +0 -0
  500. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.0.sig +0 -0
  501. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.1.json +0 -0
  502. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.1.sig +0 -0
  503. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.2.json +0 -0
  504. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.2.sig +0 -0
  505. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.3.json +0 -0
  506. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.3.sig +0 -0
  507. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.4.json +0 -0
  508. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.4.sig +0 -0
  509. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.6.json +0 -0
  510. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.6.sig +0 -0
  511. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.7.json +0 -0
  512. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/plans/1.6.7.sig +0 -0
  513. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/__init__.py +0 -0
  514. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
  515. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  516. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  517. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
  518. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
  519. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
  520. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
  521. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_10_disable_console_setup.py +0 -0
  522. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_11_timer_catchup.py +0 -0
  523. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_12_oled_splash_off_critical_path.py +0 -0
  524. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_13_mosquitto_priority.py +0 -0
  525. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_14_journal_apparent_size.py +0 -0
  526. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_15_prune_orphan_journals.py +0 -0
  527. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_16_login_linger.py +0 -0
  528. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_17_defer_user_manager.py +0 -0
  529. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_18_fix_hostname_once.py +0 -0
  530. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
  531. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_2_libyaml.py +0 -0
  532. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -0
  533. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_4_onewire_modules.py +0 -0
  534. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_5_overlay_kernel_hook.py +0 -0
  535. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_6_boot_service_order.py +0 -0
  536. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_7_journald_limits.py +0 -0
  537. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_8_apparmor_prune.py +0 -0
  538. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_9_defer_nonessential.py +0 -0
  539. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_6_0_nodered_admin_auth.py +0 -0
  540. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py +0 -0
  541. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py +0 -0
  542. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_6_7_timedatectl_sudoers.py +0 -0
  543. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_6_8_system_helper.py +0 -0
  544. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/__init__.py +0 -0
  545. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/cli.py +0 -0
  546. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/client.py +0 -0
  547. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/coordinator.py +0 -0
  548. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/__init__.py +0 -0
  549. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
  550. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  551. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  552. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  553. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  554. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  555. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  556. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  557. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/hvac/defro-drx.json +0 -0
  558. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
  559. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  560. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/hvac/thessla.json +0 -0
  561. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  562. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/hvac/wanas415.json +0 -0
  563. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/inverters/sofar.json +0 -0
  564. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  565. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  566. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  567. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  568. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/cwt.json +0 -0
  569. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  570. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  571. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  572. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  573. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/pt100.json +0 -0
  574. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
  575. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/sht20.json +0 -0
  576. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/sht30.json +0 -0
  577. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/__init__.py +0 -0
  578. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/base.py +0 -0
  579. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/derived/__init__.py +0 -0
  580. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/derived/numeric.py +0 -0
  581. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/derived/select.py +0 -0
  582. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/derived/switch.py +0 -0
  583. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/derived/text.py +0 -0
  584. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/sensor/__init__.py +0 -0
  585. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/sensor/binary.py +0 -0
  586. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/sensor/numeric.py +0 -0
  587. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/sensor/text.py +0 -0
  588. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/writeable/__init__.py +0 -0
  589. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/writeable/binary.py +0 -0
  590. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/entities/writeable/numeric.py +0 -0
  591. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/mock_coordinator.py +0 -0
  592. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/modbus/utils.py +0 -0
  593. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/models/__init__.py +0 -0
  594. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/models/actions.py +0 -0
  595. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/models/events.py +0 -0
  596. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/models/files.py +0 -0
  597. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/models/logs.py +0 -0
  598. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/models/mqtt.py +0 -0
  599. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/models/state.py +0 -0
  600. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/actions.yaml +0 -0
  601. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/actions_sensor.yaml +0 -0
  602. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/actions_switch.yaml +0 -0
  603. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/filters.yaml +0 -0
  604. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/filters_adc.yaml +0 -0
  605. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/id.yaml +0 -0
  606. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/remote_devices.yaml +0 -0
  607. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/remote_inputs.yaml +0 -0
  608. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/remote_outputs.yaml +0 -0
  609. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/temp_unit.yaml +0 -0
  610. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/schema/update_interval.yaml +0 -0
  611. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/dashboard_cards.py +0 -0
  612. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/axios-uEi8e3Ln.js +0 -0
  613. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/basePath-CxHj-SSK.js +0 -0
  614. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/chunk-QTnfLwEv.js +0 -0
  615. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
  616. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  617. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/configCache-CLN4xEny.js +0 -0
  618. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/editor.worker-Cn2oRESe.js +0 -0
  619. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/formatters-zOiGPJLh.js +0 -0
  620. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/longPress-Dx7OCSyP.js +0 -0
  621. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
  622. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/monaco-DUFfd7ef.js +0 -0
  623. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/monaco-Dpn-hvLa.js +0 -0
  624. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
  625. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/yaml.worker-8qQfrID5.js +0 -0
  626. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  627. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  628. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/boneio.svg +0 -0
  629. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  630. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  631. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  632. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  633. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  634. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  635. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  636. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  637. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  638. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/ina226.schema.json +0 -0
  639. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  640. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  641. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  642. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  643. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  644. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  645. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  646. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
  647. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  648. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  649. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  650. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  651. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  652. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  653. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  654. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
  655. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
  656. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  657. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  658. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  659. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/workbox-7e79c025.js +0 -0
  660. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/hvac_svg_templates.py +0 -0
  661. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/middleware/__init__.py +0 -0
  662. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/middleware/auth.py +0 -0
  663. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/middleware/csrf.py +0 -0
  664. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/middleware/policy.py +0 -0
  665. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/modbus_card_templates.py +0 -0
  666. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/rate_limit.py +0 -0
  667. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/accounts.py +0 -0
  668. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/auth.py +0 -0
  669. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/can.py +0 -0
  670. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/config.py +0 -0
  671. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/config_actions.py +0 -0
  672. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/config_backups.py +0 -0
  673. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/config_discovery.py +0 -0
  674. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/config_files.py +0 -0
  675. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/covers.py +0 -0
  676. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/dashboard.py +0 -0
  677. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/dev_fake_device.py +0 -0
  678. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/diagnostics.py +0 -0
  679. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/irrigation.py +0 -0
  680. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/migrations.py +0 -0
  681. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/modbus.py +0 -0
  682. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/mqtt_reference.py +0 -0
  683. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/nodered.py +0 -0
  684. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/outputs.py +0 -0
  685. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/remote_devices.py +0 -0
  686. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/security.py +0 -0
  687. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/templates.py +0 -0
  688. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/timezone_sudoers.py +0 -0
  689. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/routes/tools.py +0 -0
  690. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/adc.schema.json +0 -0
  691. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/areas.schema.json +0 -0
  692. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/boneio.schema.json +0 -0
  693. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/can.schema.json +0 -0
  694. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/cover.schema.json +0 -0
  695. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/dallas.schema.json +0 -0
  696. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/ds2482.schema.json +0 -0
  697. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/ina219.schema.json +0 -0
  698. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/ina226.schema.json +0 -0
  699. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/irrigation.schema.json +0 -0
  700. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/lm75.schema.json +0 -0
  701. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/logger.schema.json +0 -0
  702. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/lox_udp.schema.json +0 -0
  703. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/mcp23017.schema.json +0 -0
  704. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/mcp9808.schema.json +0 -0
  705. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/modbus.schema.json +0 -0
  706. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/modbus_devices.schema.json +0 -0
  707. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/mqtt.schema.json +0 -0
  708. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/oled.schema.json +0 -0
  709. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/output.schema.json +0 -0
  710. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/output_group.schema.json +0 -0
  711. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/pca9685.schema.json +0 -0
  712. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/pcf8575.schema.json +0 -0
  713. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/remote_devices.schema.json +0 -0
  714. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/remote_inputs.schema.json +0 -0
  715. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/remote_outputs.schema.json +0 -0
  716. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/sensor.schema.json +0 -0
  717. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/template.schema.json +0 -0
  718. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  719. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/services/__init__.py +0 -0
  720. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/services/logs.py +0 -0
  721. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/sudo_rate_limiter.py +0 -0
  722. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/web_server.py +0 -0
  723. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio/webui/websocket_manager.py +0 -0
  724. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio.egg-info/dependency_links.txt +0 -0
  725. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio.egg-info/entry_points.txt +0 -0
  726. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio.egg-info/requires.txt +0 -0
  727. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/boneio.egg-info/top_level.txt +0 -0
  728. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/setup.cfg +0 -0
  729. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/setup.py +0 -0
  730. {boneio-1.6.0.dev2 → boneio-1.6.0.dev3}/tests/test_py313_compatibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boneio
3
- Version: 1.6.0.dev2
3
+ Version: 1.6.0.dev3
4
4
  Summary: Python App for BoneIO
5
5
  Author-email: Paweł Szafer <pszafer@gmail.com>
6
6
  License: GNU General Public License v3.0
@@ -773,6 +773,179 @@ class CustomValidator(Validator):
773
773
  kwarg = unit_to_kwarg[one_of(*unit_to_kwarg)(unit_str)]
774
774
  return TimePeriod(**{kwarg: float(match.group(1))})
775
775
 
776
+ def _normalize_coerce_sun_offset(self, value) -> float:
777
+ """Parse a signed offset from a sun anchor into seconds.
778
+
779
+ Unlike ``positive_time_period`` this must accept negative values —
780
+ "half an hour before sunset" is the whole point — and it returns plain
781
+ seconds rather than a TimePeriod, because the only thing that ever
782
+ happens to it is being added to a datetime.
783
+
784
+ A bare number means **seconds**, not milliseconds. That differs from
785
+ ``positive_time_period`` deliberately: a sun offset measured in
786
+ milliseconds would be meaningless, and the frontend always sends a unit.
787
+
788
+ Args:
789
+ value: ``"-30min"``, ``"1h"``, ``"45s"``, or a number of seconds.
790
+
791
+ Returns:
792
+ The offset in seconds, negative for "before".
793
+
794
+ Raises:
795
+ ConfigurationException: If the value cannot be read as an offset.
796
+ """
797
+ if value is None or value == "":
798
+ return 0.0
799
+ if isinstance(value, bool):
800
+ raise ConfigurationException(f"Expected a sun offset, got {value!r}")
801
+ if isinstance(value, (int, float)):
802
+ return float(value)
803
+
804
+ text = str(value).strip().lower()
805
+ if not text:
806
+ return 0.0
807
+
808
+ match = re.match(r"^([-+]?[0-9]*\.?[0-9]+)\s*(\w*)$", text)
809
+ if match is None:
810
+ raise ConfigurationException(
811
+ f"Expected an offset like '-30min', '15m' or '1h', got {value!r}"
812
+ )
813
+
814
+ unit_to_seconds = {
815
+ "": 1.0,
816
+ "s": 1.0,
817
+ "sec": 1.0,
818
+ "secs": 1.0,
819
+ "second": 1.0,
820
+ "seconds": 1.0,
821
+ "m": 60.0,
822
+ "min": 60.0,
823
+ "mins": 60.0,
824
+ "minute": 60.0,
825
+ "minutes": 60.0,
826
+ "h": 3600.0,
827
+ "hour": 3600.0,
828
+ "hours": 3600.0,
829
+ }
830
+ unit = match.group(2)
831
+ if unit not in unit_to_seconds:
832
+ raise ConfigurationException(
833
+ f"Unknown unit {unit!r} in sun offset {value!r}. Use s, min or h."
834
+ )
835
+ return float(match.group(1)) * unit_to_seconds[unit]
836
+
837
+ def _check_with_schedule_shape(self, field, value):
838
+ """Reject a schedule whose trigger does not match its own type.
839
+
840
+ Cerberus can require a dict and check each field on its own, but not
841
+ "a sun trigger needs an event and a time trigger needs a time". Left to
842
+ runtime the symptom is a schedule that quietly never fires, which is
843
+ the hardest kind of misconfiguration to notice.
844
+ """
845
+ if not isinstance(value, dict):
846
+ return
847
+
848
+ trigger = value.get("trigger") or {}
849
+ kind = trigger.get("type", "sun")
850
+
851
+ if kind == "sun":
852
+ from boneio.core.utils.sun import ANCHOR_NAMES
853
+
854
+ event = trigger.get("event")
855
+ if not event:
856
+ self._error( # type: ignore[attr-defined]
857
+ field, "A sun trigger needs an 'event', e.g. sunset or civil_dusk."
858
+ )
859
+ elif event not in ANCHOR_NAMES:
860
+ self._error( # type: ignore[attr-defined]
861
+ field,
862
+ f"Unknown sun event {event!r}. "
863
+ f"Expected one of: {', '.join(sorted(ANCHOR_NAMES))}.",
864
+ )
865
+ if trigger.get("at"):
866
+ self._error( # type: ignore[attr-defined]
867
+ field, "'at' belongs to a time trigger, not a sun trigger."
868
+ )
869
+ elif kind == "time":
870
+ if not trigger.get("at"):
871
+ self._error( # type: ignore[attr-defined]
872
+ field, "A time trigger needs 'at' in HH:MM."
873
+ )
874
+ if trigger.get("event"):
875
+ self._error( # type: ignore[attr-defined]
876
+ field, "'event' belongs to a sun trigger, not a time trigger."
877
+ )
878
+
879
+ if not value.get("actions"):
880
+ self._error( # type: ignore[attr-defined]
881
+ field, "A schedule with no actions would fire and do nothing."
882
+ )
883
+
884
+ def _check_with_condition_shape(self, field, value):
885
+ """Reject a condition whose fields do not match its own type.
886
+
887
+ Cerberus can say "this is a dict of allowed keys" but not "a sun
888
+ condition is one of three shapes and never a mixture". Without this a
889
+ typo like ``type: sun`` with ``after: "05:00"`` reaches runtime, where
890
+ the only symptom is an action that silently never fires.
891
+ """
892
+ if not isinstance(value, dict):
893
+ return
894
+ if value.get("type") != "sun":
895
+ return
896
+
897
+ from boneio.core.utils.sun import ANCHOR_NAMES, PHASE_NAMES
898
+
899
+ window = [key for key in ("after", "before") if value.get(key)]
900
+ phase = value.get("phase")
901
+ elevation = [key for key in ("above", "below") if value.get(key) is not None]
902
+
903
+ modes = [bool(window), bool(phase), bool(elevation)]
904
+ if sum(modes) == 0:
905
+ self._error( # type: ignore[attr-defined]
906
+ field,
907
+ "A sun condition needs one of: after/before (anchors), "
908
+ "phase, or above/below (elevation in degrees).",
909
+ )
910
+ return
911
+ if sum(modes) > 1:
912
+ self._error( # type: ignore[attr-defined]
913
+ field,
914
+ "A sun condition must use only one of after/before, phase, or "
915
+ "above/below — not a mixture.",
916
+ )
917
+ return
918
+
919
+ for key in ("after", "before"):
920
+ anchor = value.get(key)
921
+ if anchor and anchor not in ANCHOR_NAMES:
922
+ self._error( # type: ignore[attr-defined]
923
+ field,
924
+ f"Unknown sun anchor {anchor!r} in '{key}'. "
925
+ f"Expected one of: {', '.join(sorted(ANCHOR_NAMES))}.",
926
+ )
927
+
928
+ for key, other in (("after_offset", "after"), ("before_offset", "before")):
929
+ if value.get(key) and not value.get(other):
930
+ self._error( # type: ignore[attr-defined]
931
+ field, f"'{key}' has no effect without '{other}'."
932
+ )
933
+
934
+ if phase and phase not in PHASE_NAMES:
935
+ self._error( # type: ignore[attr-defined]
936
+ field,
937
+ f"Unknown sun phase {phase!r}. "
938
+ f"Expected one of: {', '.join(sorted(PHASE_NAMES))}.",
939
+ )
940
+
941
+ above, below = value.get("above"), value.get("below")
942
+ if above is not None and below is not None and above >= below:
943
+ self._error( # type: ignore[attr-defined]
944
+ field,
945
+ f"'above' ({above}) must be lower than 'below' ({below}); "
946
+ "the pair describes a band of elevations.",
947
+ )
948
+
776
949
  def _lookup_field(self, path: str) -> tuple:
777
950
  """
778
951
  Implement relative paths with dot (.) notation, following Python
@@ -8,6 +8,8 @@ Optimisations over the generic conditions.py:
8
8
  - datetime.now() is called ONCE per execute_actions() batch
9
9
  - time/date strings are parsed once (at config load) rather than each press
10
10
  - state_resolver results can be cached within an evaluation cycle
11
+ - sun conditions hold the provider, which caches a day of anchors, so a
12
+ button press reads two datetimes instead of computing ephemerides
11
13
  - dedicated logger `boneio.action_conditions` for easy filtering
12
14
 
13
15
  Usage:
@@ -21,9 +23,14 @@ from __future__ import annotations
21
23
 
22
24
  import logging
23
25
  from collections.abc import Callable
24
- from datetime import datetime
26
+ from datetime import datetime, timedelta
25
27
  from datetime import time as dt_time
26
- from typing import Any
28
+ from typing import TYPE_CHECKING, Any
29
+
30
+ from boneio.core.utils import sun as sun_utils
31
+
32
+ if TYPE_CHECKING:
33
+ from boneio.core.manager.sun import SunProvider
27
34
 
28
35
  _LOGGER = logging.getLogger("boneio.action_conditions")
29
36
 
@@ -90,6 +97,170 @@ class _DateCondition:
90
97
  return True
91
98
 
92
99
 
100
+ class _SunCondition:
101
+ """Pre-parsed sun condition: a window between anchors, a phase, or an angle.
102
+
103
+ Nothing is computed here at compile time. Anchor *times* change every day,
104
+ so the only thing worth pre-resolving is which anchors were asked for; the
105
+ provider hands back a cached day at evaluation time.
106
+ """
107
+
108
+ __slots__ = (
109
+ "mode",
110
+ "after",
111
+ "after_offset",
112
+ "before",
113
+ "before_offset",
114
+ "phase",
115
+ "above",
116
+ "below",
117
+ "_provider",
118
+ "_warned",
119
+ )
120
+
121
+ def __init__(
122
+ self,
123
+ provider: SunProvider | None,
124
+ *,
125
+ after: str | None = None,
126
+ after_offset: float = 0.0,
127
+ before: str | None = None,
128
+ before_offset: float = 0.0,
129
+ phase: str | None = None,
130
+ above: float | None = None,
131
+ below: float | None = None,
132
+ ) -> None:
133
+ self._provider = provider
134
+ self._warned = False
135
+ self.after = after
136
+ self.after_offset = after_offset
137
+ self.before = before
138
+ self.before_offset = before_offset
139
+ self.phase = phase
140
+ self.above = above
141
+ self.below = below
142
+ if phase:
143
+ self.mode = "phase"
144
+ elif above is not None or below is not None:
145
+ self.mode = "elevation"
146
+ else:
147
+ self.mode = "window"
148
+
149
+ # -- anchor resolution ------------------------------------------------
150
+
151
+ def _resolve(
152
+ self,
153
+ name: str,
154
+ offset: float,
155
+ now: datetime,
156
+ anchors: dict[str, datetime | None],
157
+ day_start: datetime,
158
+ day_end: datetime,
159
+ ) -> datetime:
160
+ """Turn an anchor name into an instant, polar days included.
161
+
162
+ A missing anchor is not "unknown" — it means the Sun stayed on one side
163
+ of that angle all day, and which side decides whether the bound should
164
+ collapse to the start or the end of the day. Getting this backwards is
165
+ how a window meant to mean "while it is dark" ends up covering a polar
166
+ summer.
167
+ """
168
+ moment = anchors.get(name)
169
+ if moment is not None:
170
+ return moment + timedelta(seconds=offset)
171
+
172
+ threshold, rising = sun_utils.ANCHORS.get(name, (None, True))
173
+ if threshold is None or self._provider is None:
174
+ return day_end
175
+
176
+ # `now`, not the wall clock: the day being asked about is the one the
177
+ # anchors came from, which is not necessarily today.
178
+ state = self._provider.threshold_state(threshold, now)
179
+ if state == "always_above":
180
+ # The Sun is permanently past this angle: a crossing upward is
181
+ # behind us, a crossing downward is still ahead.
182
+ return day_start if rising else day_end
183
+ if state == "always_below":
184
+ return day_end if rising else day_start
185
+ return day_end
186
+
187
+ # -- evaluation -------------------------------------------------------
188
+
189
+ def evaluate(self, now: datetime) -> bool:
190
+ """Check *now* against this condition.
191
+
192
+ Returns:
193
+ True when the condition holds. Also True when the Sun's position
194
+ cannot be known — no ``location:``, or a clock that has not been
195
+ set — which matches how every other condition treats a
196
+ configuration error: it does not block the action. The web UI
197
+ refuses to save a sun condition without a location, so this path
198
+ means something changed underneath a running device.
199
+ """
200
+ provider = self._provider
201
+ if provider is None or not provider.ready(now):
202
+ if not self._warned:
203
+ self._warned = True
204
+ _LOGGER.error(
205
+ "Sun condition cannot be evaluated (no location, or the "
206
+ "clock is not set yet) — allowing the action."
207
+ )
208
+ return True
209
+
210
+ if self.mode == "phase":
211
+ return bool(provider.in_phase(self.phase, now))
212
+
213
+ if self.mode == "elevation":
214
+ elevation = provider.elevation(now)
215
+ if elevation is None:
216
+ return True
217
+ if self.above is not None and elevation <= self.above:
218
+ return False
219
+ return not (self.below is not None and elevation >= self.below)
220
+
221
+ anchors = provider.anchors(now)
222
+ if not anchors:
223
+ return True
224
+
225
+ local = now.astimezone(provider.timezone)
226
+ day_start = local.replace(hour=0, minute=0, second=0, microsecond=0)
227
+ day_end = day_start + timedelta(days=1)
228
+
229
+ start = (
230
+ self._resolve(
231
+ self.after, self.after_offset, now, anchors, day_start, day_end
232
+ )
233
+ if self.after
234
+ else None
235
+ )
236
+ end = (
237
+ self._resolve(
238
+ self.before, self.before_offset, now, anchors, day_start, day_end
239
+ )
240
+ if self.before
241
+ else None
242
+ )
243
+
244
+ if start is not None and end is not None:
245
+ if start <= end:
246
+ return start <= now < end
247
+ # Crosses midnight, e.g. sunset → sunrise. Same rule as a time
248
+ # window, and the same rule that makes a polar-night window empty.
249
+ return now >= start or now < end
250
+ if start is not None:
251
+ return now >= start
252
+ if end is not None:
253
+ return now < end
254
+ return True
255
+
256
+ def __repr__(self) -> str: # pragma: no cover - diagnostics only
257
+ if self.mode == "phase":
258
+ return f"<sun phase={self.phase}>"
259
+ if self.mode == "elevation":
260
+ return f"<sun above={self.above} below={self.below}>"
261
+ return f"<sun {self.after}+{self.after_offset:g}s .. {self.before}+{self.before_offset:g}s>"
262
+
263
+
93
264
  class _StateCondition:
94
265
  """Pre-parsed state condition with compile-time resolved evaluator.
95
266
 
@@ -190,7 +361,7 @@ class _ConditionGroup:
190
361
 
191
362
  def __init__(
192
363
  self,
193
- items: list[_TimeCondition | _DateCondition | _StateCondition],
364
+ items: list[_TimeCondition | _DateCondition | _StateCondition | _SunCondition],
194
365
  use_all: bool,
195
366
  ) -> None:
196
367
  self.items = items
@@ -212,7 +383,7 @@ class _ConditionGroup:
212
383
 
213
384
 
214
385
  def _eval_single(
215
- cond: _TimeCondition | _DateCondition | _StateCondition,
386
+ cond: _TimeCondition | _DateCondition | _StateCondition | _SunCondition,
216
387
  now: datetime,
217
388
  state_resolver: Callable[[str, str], Any] | None,
218
389
  ) -> bool:
@@ -221,6 +392,8 @@ def _eval_single(
221
392
  return cond.evaluate(now)
222
393
  if isinstance(cond, _DateCondition):
223
394
  return cond.evaluate(now)
395
+ if isinstance(cond, _SunCondition):
396
+ return cond.evaluate(now)
224
397
  if isinstance(cond, _StateCondition):
225
398
  return cond.evaluate(state_resolver)
226
399
  return True
@@ -248,13 +421,32 @@ def _parse_date(s: str) -> tuple[int, int]:
248
421
  raise ValueError(f"Invalid date format: '{s}'")
249
422
 
250
423
 
251
- def _compile_single(raw: dict) -> _TimeCondition | _DateCondition | _StateCondition | None:
424
+ def _compile_single(
425
+ raw: dict,
426
+ sun_provider: SunProvider | None = None,
427
+ ) -> _TimeCondition | _DateCondition | _StateCondition | _SunCondition | None:
252
428
  """Compile a single condition dict into a fast evaluator.
253
429
 
254
- Returns None if the condition is invalid (logs a warning).
430
+ Args:
431
+ raw: One condition from the config.
432
+ sun_provider: The manager's provider, needed only by sun conditions.
433
+
434
+ Returns:
435
+ A compiled condition, or None if it is invalid (logs an error).
255
436
  """
256
437
  ctype = raw.get("type")
257
438
  try:
439
+ if ctype == "sun":
440
+ return _SunCondition(
441
+ sun_provider,
442
+ after=raw.get("after"),
443
+ after_offset=float(raw.get("after_offset") or 0.0),
444
+ before=raw.get("before"),
445
+ before_offset=float(raw.get("before_offset") or 0.0),
446
+ phase=raw.get("phase"),
447
+ above=None if raw.get("above") is None else float(raw["above"]),
448
+ below=None if raw.get("below") is None else float(raw["below"]),
449
+ )
258
450
  if ctype == "time":
259
451
  after = _parse_time(raw["after"]) if raw.get("after") else None
260
452
  before = _parse_time(raw["before"]) if raw.get("before") else None
@@ -283,7 +475,8 @@ def _compile_single(raw: dict) -> _TimeCondition | _DateCondition | _StateCondit
283
475
 
284
476
  def precompile_conditions(
285
477
  action_definition: dict,
286
- ) -> _ConditionGroup | _TimeCondition | _DateCondition | _StateCondition | None:
478
+ sun_provider: SunProvider | None = None,
479
+ ) -> _ConditionGroup | _TimeCondition | _DateCondition | _StateCondition | _SunCondition | None:
287
480
  """Pre-compile conditions from a parsed action definition.
288
481
 
289
482
  Call this once (at config load / parse_actions time) and store the
@@ -292,6 +485,9 @@ def precompile_conditions(
292
485
  Args:
293
486
  action_definition: A single action dict that may contain
294
487
  ``condition`` (single) or ``conditions`` (group).
488
+ sun_provider: The manager's :class:`SunProvider`. Held by reference, so
489
+ reconfiguring the location reaches conditions that were compiled
490
+ before the change without recompiling them.
295
491
 
296
492
  Returns:
297
493
  A compiled condition object, or None if there are no conditions.
@@ -300,7 +496,7 @@ def precompile_conditions(
300
496
  multi = action_definition.get("conditions")
301
497
 
302
498
  if single:
303
- return _compile_single(single)
499
+ return _compile_single(single, sun_provider)
304
500
 
305
501
  if multi:
306
502
  mode = multi.get("mode", "and")
@@ -309,7 +505,7 @@ def precompile_conditions(
309
505
  return None
310
506
  compiled = []
311
507
  for raw in cond_list:
312
- item = _compile_single(raw)
508
+ item = _compile_single(raw, sun_provider)
313
509
  if item is not None:
314
510
  compiled.append(item)
315
511
  if not compiled:
@@ -324,6 +520,7 @@ def should_execute_action(
324
520
  | _TimeCondition
325
521
  | _DateCondition
326
522
  | _StateCondition
523
+ | _SunCondition
327
524
  | None,
328
525
  now: datetime,
329
526
  state_resolver: Callable[[str, str], Any] | None = None,
@@ -49,8 +49,10 @@ from boneio.core.manager.irrigation import IrrigationManager
49
49
  from boneio.core.manager.modbus import ModbusManager
50
50
  from boneio.core.manager.outputs import OutputManager
51
51
  from boneio.core.manager.remote import RemoteDeviceManager
52
+ from boneio.core.manager.scheduler import Scheduler
52
53
  from boneio.core.manager.security_alert import SecurityAlertPublisher
53
54
  from boneio.core.manager.sensors import SensorManager
55
+ from boneio.core.manager.sun import SunProvider
54
56
  from boneio.core.manager.templates import TemplateManager
55
57
  from boneio.core.manager.update import UpdateManager
56
58
  from boneio.core.messaging import MessageBus
@@ -130,6 +132,8 @@ class Manager:
130
132
  irrigation: list[dict] | None = None,
131
133
  remote_devices: list[dict] | None = None,
132
134
  can: dict[str, Any] | None = None,
135
+ location: dict[str, Any] | None = None,
136
+ schedule: list[dict] | None = None,
133
137
  web_active: bool = False,
134
138
  web_port: int = 8090,
135
139
  early_oled_device: Any | None = None,
@@ -165,6 +169,11 @@ class Manager:
165
169
  self._config_file_path = config_file_path
166
170
  self._topic_prefix = config_helper.topic_prefix
167
171
 
172
+ # Where the Sun is. Built even when `location:` is absent: an
173
+ # unconfigured provider answers "not ready" and says so once, which is
174
+ # what every caller has to handle anyway.
175
+ self.sun = SunProvider(location)
176
+
168
177
  # Reports outstanding security recommendations to Home Assistant.
169
178
  self.security_alert = SecurityAlertPublisher(self)
170
179
 
@@ -300,6 +309,13 @@ class Manager:
300
309
  irrigation_config=merged_irrigation,
301
310
  )
302
311
 
312
+ # 13. Scheduler — actions that fire on their own. Built here because
313
+ # parsing its actions needs the outputs and covers to exist, and armed
314
+ # from a task because the first thing it does is look at the clock.
315
+ self.scheduler = Scheduler(manager=self, schedules=schedule or [])
316
+ if schedule:
317
+ self.append_task(coro=self.scheduler.start, name="scheduler")
318
+
303
319
  # Configure virtual energy sensors (must be after outputs are initialized)
304
320
  self.sensors.configure_virtual_energy_sensors()
305
321
 
@@ -613,6 +629,14 @@ class Manager:
613
629
  except Exception as e:
614
630
  _LOGGER.debug("Error re-publishing sensor state %s: %s", sensor.id, e)
615
631
 
632
+ # Sun sensors. A broker that has just come back has no retained value
633
+ # for them, and the next scheduled update could be a minute away.
634
+ for sensor in self.sensors.get_sun_sensors():
635
+ try:
636
+ await sensor.async_update(timestamp)
637
+ except Exception as e:
638
+ _LOGGER.debug("Error re-publishing sensor state %s: %s", sensor.id, e)
639
+
616
640
  def publish_ha_discovery(
617
641
  self,
618
642
  id: str,
@@ -684,7 +708,7 @@ class Manager:
684
708
  if action_definition.get(key) is not None:
685
709
  parsed_action[key] = action_definition[key]
686
710
  # Pre-compile conditions for fast evaluation at action time
687
- compiled = precompile_conditions(parsed_action)
711
+ compiled = precompile_conditions(parsed_action, self.sun)
688
712
  if compiled is not None:
689
713
  parsed_action["_compiled_conditions"] = compiled
690
714
 
@@ -902,8 +926,12 @@ class Manager:
902
926
 
903
927
  duration_ms = (duration or 0) * 1000 # Convert to ms
904
928
 
905
- # Compute datetime once for all condition evaluations in this batch
906
- now_dt = datetime.now()
929
+ # Compute datetime once for all condition evaluations in this batch.
930
+ # Aware, not naive: sun anchors are born as aware UTC, and comparing
931
+ # them against a naive local time would be ambiguous in the hour the
932
+ # clock goes back. `.time()` and `.month` behave identically on an
933
+ # aware local datetime, so the time and date conditions are unaffected.
934
+ now_dt = datetime.now().astimezone()
907
935
 
908
936
  for idx, action_definition in enumerate(actions):
909
937
  is_repeat = action_definition.get("repeat", False)
@@ -1293,6 +1321,26 @@ class Manager:
1293
1321
  finally:
1294
1322
  self._pending_tilt_restores.pop(task_key, None)
1295
1323
 
1324
+ async def _reload_schedule(self) -> None:
1325
+ """Adopt a new schedule section, disarming whatever was armed before."""
1326
+ config = self._config_helper.get_config() or {}
1327
+ await self.scheduler.reload(config.get("schedule") or [])
1328
+ # A device that started with no schedules never started the supervisor.
1329
+ await self.scheduler.start()
1330
+
1331
+ def _reload_location(self) -> None:
1332
+ """Adopt new coordinates and drop every cached sun answer.
1333
+
1334
+ Cheap enough to be synchronous: the provider recomputes lazily, so this
1335
+ is a configure call and three cache clears.
1336
+ """
1337
+ config = self._config_helper.get_config() or {}
1338
+ self.sun.configure(config.get("location"))
1339
+ # Coordinates may have just appeared, in which case the sun sensors
1340
+ # were never built. Existing ones need nothing: they read the provider
1341
+ # on every update, so new coordinates reach them by themselves.
1342
+ self.sensors.configure_sun_sensors()
1343
+
1296
1344
  def _reload_logger(self) -> None:
1297
1345
  """Reload logger configuration from config file.
1298
1346
 
@@ -1704,6 +1752,8 @@ class Manager:
1704
1752
  "irrigation": self.irrigation.reload_irrigation, # Irrigation controllers
1705
1753
  "adc": self.sensors.reload_adc_sensors, # ADC analog sensors
1706
1754
  "areas": lambda: None, # Areas are already reloaded in reload_config above
1755
+ "location": self._reload_location, # Coordinates for sun-based features
1756
+ "schedule": self._reload_schedule, # Time and sun driven schedules
1707
1757
  "oled": self.display.reload_oled, # OLED display screens, screensaver
1708
1758
  }
1709
1759