boneio 1.5.2.dev1__tar.gz → 1.6.0.dev2__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 (713) hide show
  1. boneio-1.6.0.dev2/MANIFEST.in +11 -0
  2. {boneio-1.5.2.dev1/boneio.egg-info → boneio-1.6.0.dev2}/PKG-INFO +2 -2
  3. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/bonecli.py +9 -0
  4. boneio-1.6.0.dev2/boneio/components/cover/__init__.py +6 -0
  5. boneio-1.6.0.dev2/boneio/components/cover/remote.py +277 -0
  6. boneio-1.6.0.dev2/boneio/core/auth/__init__.py +24 -0
  7. boneio-1.6.0.dev2/boneio/core/auth/cli.py +242 -0
  8. boneio-1.6.0.dev2/boneio/core/auth/hashing.py +182 -0
  9. boneio-1.6.0.dev2/boneio/core/auth/migration.py +116 -0
  10. boneio-1.6.0.dev2/boneio/core/auth/models.py +101 -0
  11. boneio-1.6.0.dev2/boneio/core/auth/store.py +500 -0
  12. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/cloud/registration.py +71 -138
  13. boneio-1.6.0.dev2/boneio/core/config/input_bindings.py +231 -0
  14. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/migrations/v4_wled_cache.py +38 -3
  15. boneio-1.6.0.dev2/boneio/core/config/secret_masking.py +199 -0
  16. boneio-1.6.0.dev2/boneio/core/config/yaml_patch.py +262 -0
  17. boneio-1.6.0.dev2/boneio/core/containers.py +414 -0
  18. boneio-1.6.0.dev2/boneio/core/diagnostics/__init__.py +1 -0
  19. boneio-1.6.0.dev2/boneio/core/diagnostics/collect.py +484 -0
  20. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/manager.py +145 -73
  21. boneio-1.6.0.dev2/boneio/core/manager/security_alert.py +199 -0
  22. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/messaging/mqtt.py +38 -38
  23. boneio-1.6.0.dev2/boneio/core/net/__init__.py +1 -0
  24. boneio-1.6.0.dev2/boneio/core/net/discovery_guard.py +158 -0
  25. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/remote/esphome.py +136 -40
  26. boneio-1.6.0.dev2/boneio/core/security/__init__.py +1 -0
  27. boneio-1.6.0.dev2/boneio/core/security/framing.py +113 -0
  28. boneio-1.6.0.dev2/boneio/core/security/posture.py +373 -0
  29. boneio-1.6.0.dev2/boneio/core/system_ops.py +157 -0
  30. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/integration/homeassistant.py +41 -0
  31. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/actions.py +75 -5
  32. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/MANIFEST.sha256 +15 -2
  33. boneio-1.6.0.dev2/boneio/migrations/assets/docker/nodered/docker-compose-cloud.yaml +38 -0
  34. boneio-1.6.0.dev2/boneio/migrations/assets/docker/nodered/node-red/settings.js +132 -0
  35. boneio-1.6.0.dev2/boneio/migrations/assets/helpers/boneio-containers +619 -0
  36. boneio-1.6.0.dev2/boneio/migrations/assets/helpers/boneio-helpers-heal +209 -0
  37. boneio-1.6.0.dev2/boneio/migrations/assets/helpers/boneio-migrate-v2 +1472 -0
  38. boneio-1.6.0.dev2/boneio/migrations/assets/helpers/boneio-system +433 -0
  39. boneio-1.6.0.dev2/boneio/migrations/assets/migrations-recovery.pem +3 -0
  40. boneio-1.6.0.dev2/boneio/migrations/assets/migrations.pem +3 -0
  41. boneio-1.6.0.dev2/boneio/migrations/assets/sshd/10-boneio-hardening.conf +14 -0
  42. boneio-1.6.0.dev2/boneio/migrations/assets/sudoers/boneio-helpers +14 -0
  43. boneio-1.6.0.dev2/boneio/migrations/assets/sudoers/boneio-timedatectl +19 -0
  44. boneio-1.6.0.dev2/boneio/migrations/assets/systemd/boneio-helpers-heal.service +37 -0
  45. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/bootstrap/boneio-migrate +34 -0
  46. boneio-1.6.0.dev2/boneio/migrations/plans/1.3.0.json +1 -0
  47. boneio-1.6.0.dev2/boneio/migrations/plans/1.3.0.sig +1 -0
  48. boneio-1.6.0.dev2/boneio/migrations/plans/1.3.1.json +1 -0
  49. boneio-1.6.0.dev2/boneio/migrations/plans/1.3.1.sig +1 -0
  50. boneio-1.6.0.dev2/boneio/migrations/plans/1.3.2.json +1 -0
  51. boneio-1.6.0.dev2/boneio/migrations/plans/1.3.2.sig +1 -0
  52. boneio-1.6.0.dev2/boneio/migrations/plans/1.4.0.json +1 -0
  53. boneio-1.6.0.dev2/boneio/migrations/plans/1.4.0.sig +0 -0
  54. boneio-1.6.0.dev2/boneio/migrations/plans/1.4.3.json +1 -0
  55. boneio-1.6.0.dev2/boneio/migrations/plans/1.4.3.sig +1 -0
  56. boneio-1.6.0.dev2/boneio/migrations/plans/1.4.4.json +1 -0
  57. boneio-1.6.0.dev2/boneio/migrations/plans/1.4.4.sig +1 -0
  58. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.0.json +1 -0
  59. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.0.sig +1 -0
  60. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.1.json +1 -0
  61. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.1.sig +1 -0
  62. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.10.json +1 -0
  63. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.10.sig +1 -0
  64. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.11.json +1 -0
  65. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.11.sig +0 -0
  66. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.12.json +1 -0
  67. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.12.sig +1 -0
  68. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.13.json +1 -0
  69. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.13.sig +0 -0
  70. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.14.json +1 -0
  71. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.14.sig +1 -0
  72. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.15.json +1 -0
  73. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.15.sig +1 -0
  74. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.16.json +1 -0
  75. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.16.sig +2 -0
  76. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.17.json +1 -0
  77. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.17.sig +2 -0
  78. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.18.json +1 -0
  79. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.18.sig +2 -0
  80. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.2.json +1 -0
  81. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.2.sig +0 -0
  82. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.3.json +1 -0
  83. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.3.sig +0 -0
  84. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.4.json +1 -0
  85. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.4.sig +1 -0
  86. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.5.json +1 -0
  87. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.5.sig +1 -0
  88. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.6.json +1 -0
  89. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.6.sig +0 -0
  90. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.7.json +1 -0
  91. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.7.sig +1 -0
  92. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.8.json +1 -0
  93. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.8.sig +1 -0
  94. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.9.json +1 -0
  95. boneio-1.6.0.dev2/boneio/migrations/plans/1.5.9.sig +1 -0
  96. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.0.json +1 -0
  97. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.0.sig +2 -0
  98. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.1.json +1 -0
  99. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.1.sig +1 -0
  100. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.2.json +1 -0
  101. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.2.sig +0 -0
  102. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.3.json +1 -0
  103. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.3.sig +1 -0
  104. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.4.json +1 -0
  105. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.4.sig +1 -0
  106. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.5.json +1 -0
  107. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.5.sig +0 -0
  108. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.6.json +1 -0
  109. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.6.sig +1 -0
  110. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.7.json +1 -0
  111. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.7.sig +1 -0
  112. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.8.json +1 -0
  113. boneio-1.6.0.dev2/boneio/migrations/plans/1.6.8.sig +1 -0
  114. boneio-1.6.0.dev2/boneio/migrations/plans/manifest.json +1 -0
  115. boneio-1.6.0.dev2/boneio/migrations/plans/manifest.sig +1 -0
  116. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/runner.py +232 -3
  117. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_3_0_baseline.py +6 -8
  118. boneio-1.6.0.dev2/boneio/migrations/versions/v1_5_2_libyaml.py +81 -0
  119. boneio-1.6.0.dev2/boneio/migrations/versions/v1_5_3_libyaml_retry.py +74 -0
  120. boneio-1.6.0.dev2/boneio/migrations/versions/v1_6_0_nodered_admin_auth.py +55 -0
  121. boneio-1.6.0.dev2/boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py +44 -0
  122. boneio-1.6.0.dev2/boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py +41 -0
  123. boneio-1.6.0.dev2/boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py +37 -0
  124. boneio-1.6.0.dev2/boneio/migrations/versions/v1_6_4_ssh_login_hardening.py +57 -0
  125. boneio-1.6.0.dev2/boneio/migrations/versions/v1_6_5_trust_transition.py +195 -0
  126. boneio-1.6.0.dev2/boneio/migrations/versions/v1_6_6_retire_legacy_helper.py +53 -0
  127. boneio-1.6.0.dev2/boneio/migrations/versions/v1_6_7_timedatectl_sudoers.py +45 -0
  128. boneio-1.6.0.dev2/boneio/migrations/versions/v1_6_8_system_helper.py +74 -0
  129. boneio-1.6.0.dev2/boneio/modbus/devices/hvac/defro-drx.json +519 -0
  130. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/runner.py +73 -0
  131. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/remote_outputs.yaml +2 -1
  132. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/schema.yaml +71 -0
  133. boneio-1.6.0.dev2/boneio/version.py +2 -0
  134. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/app.py +167 -17
  135. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/AccountsView-p4dfo1BI.js +1 -0
  136. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/AppInitContext-D9IKihqu.js +1 -0
  137. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/BackupSection-CwWiIyYm.js +1 -0
  138. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/BindingMatrix-C5N7pHyw.js +1 -0
  139. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/DeviceControlSection-CiAn0q3F.js +1 -0
  140. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/DiagnosticsView-CPTuMjVr.js +5 -0
  141. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/EditItemDialog-D_97HEFm.js +66 -0
  142. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/EntityCard-Bb1AOk78.js +1 -0
  143. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/EntityGrid-CljXU2ZD.js +1 -0
  144. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/FactoryResetSection-BAzLfqax.js +1 -0
  145. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/FormInputToggle-B_NTf6g-.js +11 -0
  146. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/HaDashboardWizard-ie0HCjfc.js +1 -0
  147. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/HostnameSection-DFipLyZg.js +1 -0
  148. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/InputsView-Dv2ynbYD.js +1 -0
  149. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/LoggerForm-UKzOi5ri.js +5 -0
  150. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/LongPressWrapper-K2sCXsb5.js +1 -0
  151. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/MigrationsSection-DMp9cBmP.js +1 -0
  152. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/ModbusView-Cw5Mgatj.js +1 -0
  153. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/MqttPasswordsSection-DhFBnZZZ.js +1 -0
  154. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/NodeRedManagement-C9si33mc.js +1 -0
  155. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/NodeRedView-D8E1Itvk.js +1 -0
  156. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/OutputsView-BID1iUa3.js +1 -0
  157. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/SecurityView-CMCqfNQs.js +1 -0
  158. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/SensorView-DMMhavyC.js +1 -0
  159. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/Sparkline-BGWlVLtt.js → boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/Sparkline-Cq-w3bbO.js +1 -1
  160. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/SystemState-BcmUoX6A.js +2 -0
  161. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/TemplatesView-0sksWoxA.js +1 -0
  162. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/TimezoneSection-DkaFIcW_.js +1 -0
  163. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/UISettings-Don7-C6Q.js +33 -0
  164. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/aiConfig-IRYCBmLm.js → boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/aiConfig-BAR1rHKB.js +1 -1
  165. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/aiWizardPrompt-D9OJ-cE7.js → boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/aiWizardPrompt-BRgdilYB.js +1 -1
  166. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/axios-uEi8e3Ln.js +10 -0
  167. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/configCache-CLN4xEny.js +1 -0
  168. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/fa-1N_Z7Z57.js +1 -0
  169. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/gi-iTtpUjJp.js +1 -0
  170. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/index-C8RrYuNy.js +16 -0
  171. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/index-DfcdKR51.css +2 -0
  172. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/monaco-DUFfd7ef.js +1 -0
  173. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/monaco-Dpn-hvLa.js +872 -0
  174. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/monaco-drkeoggn.js +13 -0
  175. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/select-Xn9nmZSE.js +1 -0
  176. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/tabs-box-DQ3qtHub.js +1 -0
  177. boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/yaml.worker-8qQfrID5.js +221 -0
  178. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/index.html +7 -9
  179. {boneio-1.5.2.dev1/boneio/webui → boneio-1.6.0.dev2/boneio/webui/frontend-dist}/schema/config.schema.json +48 -1
  180. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +3 -0
  181. {boneio-1.5.2.dev1/boneio/webui → boneio-1.6.0.dev2/boneio/webui/frontend-dist}/schema/remote_outputs.schema.json +2 -1
  182. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/web.schema.json +43 -0
  183. boneio-1.6.0.dev2/boneio/webui/frontend-dist/sw.js +1 -0
  184. boneio-1.5.2.dev1/boneio/webui/frontend-dist/workbox-4918f2f6.js → boneio-1.6.0.dev2/boneio/webui/frontend-dist/workbox-7e79c025.js +1 -1
  185. boneio-1.6.0.dev2/boneio/webui/middleware/auth.py +415 -0
  186. boneio-1.6.0.dev2/boneio/webui/middleware/csrf.py +106 -0
  187. boneio-1.6.0.dev2/boneio/webui/middleware/policy.py +171 -0
  188. boneio-1.6.0.dev2/boneio/webui/rate_limit.py +237 -0
  189. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/__init__.py +8 -2
  190. boneio-1.6.0.dev2/boneio/webui/routes/accounts.py +272 -0
  191. boneio-1.6.0.dev2/boneio/webui/routes/auth.py +134 -0
  192. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/can.py +22 -130
  193. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/config.py +2 -0
  194. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/config_actions.py +138 -0
  195. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/config_core.py +50 -2
  196. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/config_files.py +1 -0
  197. boneio-1.6.0.dev2/boneio/webui/routes/diagnostics.py +259 -0
  198. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/nodered.py +58 -84
  199. boneio-1.6.0.dev2/boneio/webui/routes/onboarding.py +154 -0
  200. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/remote_devices.py +135 -6
  201. boneio-1.6.0.dev2/boneio/webui/routes/security.py +321 -0
  202. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/system.py +211 -284
  203. boneio-1.6.0.dev2/boneio/webui/routes/timezone_sudoers.py +137 -0
  204. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/update.py +49 -33
  205. {boneio-1.5.2.dev1/boneio/webui/frontend-dist → boneio-1.6.0.dev2/boneio/webui}/schema/config.schema.json +48 -1
  206. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/modbus_devices.schema.json +3 -0
  207. {boneio-1.5.2.dev1/boneio/webui/frontend-dist → boneio-1.6.0.dev2/boneio/webui}/schema/remote_outputs.schema.json +2 -1
  208. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/web.schema.json +43 -0
  209. boneio-1.6.0.dev2/boneio/webui/security_headers.py +127 -0
  210. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/web_server.py +5 -0
  211. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2/boneio.egg-info}/PKG-INFO +2 -2
  212. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio.egg-info/SOURCES.txt +164 -42
  213. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio.egg-info/requires.txt +1 -1
  214. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/pyproject.toml +15 -5
  215. boneio-1.5.2.dev1/MANIFEST.in +0 -7
  216. boneio-1.5.2.dev1/boneio/components/cover/__init__.py +0 -5
  217. boneio-1.5.2.dev1/boneio/migrations/assets/docker/nodered/nginx/default.conf +0 -50
  218. boneio-1.5.2.dev1/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -5
  219. boneio-1.5.2.dev1/boneio/migrations/versions/v1_5_2_libyaml.py +0 -109
  220. boneio-1.5.2.dev1/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -102
  221. boneio-1.5.2.dev1/boneio/version.py +0 -2
  222. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/BindingMatrix-D1OvlTso.js +0 -1
  223. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/ConfigEditor-Bdpm9_Qo.js +0 -1
  224. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/EditItemDialog-BIjzsrqq.js +0 -66
  225. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/EntityCard-CJ0ccsW1.js +0 -1
  226. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/EntityGrid-xCqfJxkw.js +0 -1
  227. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/FormInputToggle-Cn_hJrna.js +0 -11
  228. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/HelpLabel-BSTjOtDA.js +0 -1
  229. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/InputsView-CySRVJ90.js +0 -1
  230. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/LogViewer-Bs7Xx9vL.js +0 -2
  231. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/LongPressWrapper-BHOQV7Wq.js +0 -1
  232. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/ModbusView-8rNY0iJT.js +0 -1
  233. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/NodeRedView-DD2w3NAX.js +0 -1
  234. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/OutputsView-B6cZ8NHI.js +0 -1
  235. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/SensorView-DsdnJqni.js +0 -1
  236. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/SudoPasswordDialog-W42OQ76m.js +0 -1
  237. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/SystemState-De_QpQ-z.js +0 -1
  238. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/TemplatesView-CuLPA7iV.js +0 -1
  239. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/Tools-DOmBe8W2.js +0 -14
  240. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/UISettings-CtJheTh8.js +0 -38
  241. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/axios-DHUeYRnu.js +0 -10
  242. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/configCache-BAkc0Ye7.js +0 -1
  243. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/css.worker-CvXBzhp8.js +0 -89
  244. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/gi-czqU2m4e.js +0 -1
  245. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/html.worker-BO6WuOEO.js +0 -502
  246. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/index-CJSdgTd5.css +0 -2
  247. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/index-DCzOrheh.js +0 -6
  248. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/json.worker-BkJRGcCJ.js +0 -58
  249. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/modbusDeviceCatalog-L6as-BKo.js +0 -1
  250. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/monaco-61yH0vfd.js +0 -1212
  251. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/select-B2YDgQ4X.js +0 -1
  252. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/tabs-box-Dj36r4_e.js +0 -1
  253. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/ts.worker-B0J26iPs.js +0 -67734
  254. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/utils-C8nShLO6.js +0 -1
  255. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/vendor-IzweXARb.js +0 -11
  256. boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/yaml.worker-BKRoXlmz.js +0 -450
  257. boneio-1.5.2.dev1/boneio/webui/frontend-dist/sw.js +0 -1
  258. boneio-1.5.2.dev1/boneio/webui/middleware/auth.py +0 -193
  259. boneio-1.5.2.dev1/boneio/webui/routes/auth.py +0 -71
  260. boneio-1.5.2.dev1/boneio/webui/routes/caddy.py +0 -741
  261. boneio-1.5.2.dev1/boneio/webui/routes/timezone_sudoers.py +0 -201
  262. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/LICENSE +0 -0
  263. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/README.md +0 -0
  264. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/__init__.py +0 -0
  265. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.2/input.yaml +0 -0
  266. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.2/output_24_16.yaml +0 -0
  267. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.2/output_32_10.yaml +0 -0
  268. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.2/output_32_5.yaml +0 -0
  269. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.2/output_cover.yaml +0 -0
  270. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  271. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.3/input.yaml +0 -0
  272. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.3/output_24_16.yaml +0 -0
  273. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.3/output_32_10.yaml +0 -0
  274. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.3/output_32_5.yaml +0 -0
  275. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.3/output_cover.yaml +0 -0
  276. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  277. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.4/input.yaml +0 -0
  278. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.4/output_24_16.yaml +0 -0
  279. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.4/output_32_10.yaml +0 -0
  280. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.4/output_32_5.yaml +0 -0
  281. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.4/output_cover.yaml +0 -0
  282. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  283. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.5/input.yaml +0 -0
  284. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.5/output_24_16.yaml +0 -0
  285. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.5/output_32_10.yaml +0 -0
  286. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.5/output_cover.yaml +0 -0
  287. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  288. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.6/input.yaml +0 -0
  289. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.6/output_24_16.yaml +0 -0
  290. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.6/output_32_10.yaml +0 -0
  291. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.6/output_cover.yaml +0 -0
  292. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  293. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.7/input.yaml +0 -0
  294. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.7/output_24_16.yaml +0 -0
  295. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.7/output_32_10.yaml +0 -0
  296. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.7/output_48_4.yaml +0 -0
  297. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.7/output_cover.yaml +0 -0
  298. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  299. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.8/input.yaml +0 -0
  300. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.8/output_24_16.yaml +0 -0
  301. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.8/output_32_10.yaml +0 -0
  302. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.8/output_48_4.yaml +0 -0
  303. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.8/output_cover.yaml +0 -0
  304. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  305. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/1.0/input.yaml +0 -0
  306. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/1.0/output_24_16.yaml +0 -0
  307. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/1.0/output_32_10.yaml +0 -0
  308. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/1.0/output_48_4.yaml +0 -0
  309. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/1.0/output_cover.yaml +0 -0
  310. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
  311. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/__init__.py +0 -0
  312. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/cover/cover.py +0 -0
  313. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/cover/time_based.py +0 -0
  314. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/cover/venetian.py +0 -0
  315. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/group/__init__.py +0 -0
  316. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/group/output_group.py +0 -0
  317. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/input/__init__.py +0 -0
  318. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/input/binary_sensor.py +0 -0
  319. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/input/detectors.py +0 -0
  320. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/input/event.py +0 -0
  321. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/input/remote/__init__.py +0 -0
  322. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/input/remote/base.py +0 -0
  323. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/input/remote/esphome.py +0 -0
  324. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/irrigation/__init__.py +0 -0
  325. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/irrigation/controller.py +0 -0
  326. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/irrigation/water_source.py +0 -0
  327. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/output/__init__.py +0 -0
  328. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/output/basic.py +0 -0
  329. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/output/buzzer.py +0 -0
  330. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/output/mcp.py +0 -0
  331. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/output/pca.py +0 -0
  332. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/output/pcf.py +0 -0
  333. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/output/remote.py +0 -0
  334. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/sensor/__init__.py +0 -0
  335. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/sensor/virtual_energy.py +0 -0
  336. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/template/__init__.py +0 -0
  337. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/template/alarm_panel.py +0 -0
  338. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/template/gate_cover.py +0 -0
  339. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/components/template/thermostat.py +0 -0
  340. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/const.py +0 -0
  341. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/__init__.py +0 -0
  342. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/cloud/__init__.py +0 -0
  343. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/cloud/data/__init__.py +0 -0
  344. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
  345. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  346. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  347. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/cloud/secrets.py +0 -0
  348. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/__init__.py +0 -0
  349. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/config_helper.py +0 -0
  350. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/migrations/__init__.py +0 -0
  351. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  352. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/migrations/v2_transition.py +0 -0
  353. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/migrations/v5_ina_screen.py +0 -0
  354. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/package-lock.json +0 -0
  355. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/package.json +0 -0
  356. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/schema_converter.py +0 -0
  357. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/yaml_compat.py +0 -0
  358. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/config/yaml_util.py +0 -0
  359. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/discovery.py +0 -0
  360. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/events/__init__.py +0 -0
  361. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/events/bus.py +0 -0
  362. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/__init__.py +0 -0
  363. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/action_conditions.py +0 -0
  364. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/canopen.py +0 -0
  365. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/covers.py +0 -0
  366. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/display.py +0 -0
  367. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/inputs.py +0 -0
  368. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/irrigation.py +0 -0
  369. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/modbus.py +0 -0
  370. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/outputs.py +0 -0
  371. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/remote.py +0 -0
  372. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/remote_input_registrar.py +0 -0
  373. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/sensors.py +0 -0
  374. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/templates/__init__.py +0 -0
  375. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/templates/alarm.py +0 -0
  376. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/templates/gate_cover.py +0 -0
  377. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/templates/thermostat.py +0 -0
  378. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/templates.py +0 -0
  379. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/manager/update.py +0 -0
  380. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/messaging/__init__.py +0 -0
  381. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/messaging/basic.py +0 -0
  382. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/messaging/basic_mqtt.py +0 -0
  383. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/messaging/composite.py +0 -0
  384. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/messaging/local.py +0 -0
  385. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/messaging/lox.py +0 -0
  386. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/messaging/queue.py +0 -0
  387. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/remote/__init__.py +0 -0
  388. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/remote/base.py +0 -0
  389. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/remote/can.py +0 -0
  390. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/remote/mqtt.py +0 -0
  391. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/remote/wled.py +0 -0
  392. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/remote/wled_cache.py +0 -0
  393. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/sensor/__init__.py +0 -0
  394. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/sensor/base.py +0 -0
  395. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/sensor/system.py +0 -0
  396. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/state/__init__.py +0 -0
  397. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/state/manager.py +0 -0
  398. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/system/__init__.py +0 -0
  399. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/system/host_data.py +0 -0
  400. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/system/monitor.py +0 -0
  401. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/utils/__init__.py +0 -0
  402. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/utils/async_updater.py +0 -0
  403. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/utils/conditions.py +0 -0
  404. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/utils/filter.py +0 -0
  405. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/utils/font_util.py +0 -0
  406. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/utils/logger.py +0 -0
  407. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/utils/overlay.py +0 -0
  408. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/utils/timeperiod.py +0 -0
  409. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/core/utils/util.py +0 -0
  410. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/24x16/adc.yaml +0 -0
  411. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  412. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/24x16/config.yaml +0 -0
  413. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/24x16/event.yaml +0 -0
  414. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/24x16/mqtt.yaml +0 -0
  415. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  416. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/32x10/adc.yaml +0 -0
  417. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  418. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/32x10/config.yaml +0 -0
  419. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/32x10/event.yaml +0 -0
  420. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/32x10/mqtt.yaml +0 -0
  421. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  422. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/48x4/adc.yaml +0 -0
  423. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  424. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/48x4/config.yaml +0 -0
  425. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/48x4/event.yaml +0 -0
  426. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/48x4/mqtt.yaml +0 -0
  427. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  428. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/__init__.py +0 -0
  429. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/can_master.yaml +0 -0
  430. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/can_slave.yaml +0 -0
  431. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover/adc.yaml +0 -0
  432. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  433. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover/config.yaml +0 -0
  434. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover/cover.yaml +0 -0
  435. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover/event.yaml +0 -0
  436. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover/mqtt.yaml +0 -0
  437. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover/outputCover.yaml +0 -0
  438. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover_mix/adc.yaml +0 -0
  439. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  440. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover_mix/config.yaml +0 -0
  441. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover_mix/cover.yaml +0 -0
  442. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover_mix/event.yaml +0 -0
  443. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  444. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  445. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/adc.yaml +0 -0
  446. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  447. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  448. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  449. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  450. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/event_all.yaml +0 -0
  451. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  452. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  453. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  454. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  455. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  456. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  457. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/exceptions.py +0 -0
  458. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/__init__.py +0 -0
  459. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/analog/__init__.py +0 -0
  460. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/analog/adc.py +0 -0
  461. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/can/__init__.py +0 -0
  462. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/can/bridge.py +0 -0
  463. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/can/client.py +0 -0
  464. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/can/interface.py +0 -0
  465. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/can/node.py +0 -0
  466. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/can/node_id.py +0 -0
  467. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/can/test_od.py +0 -0
  468. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/display/__init__.py +0 -0
  469. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/display/early_oled.py +0 -0
  470. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  471. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/display/oled.py +0 -0
  472. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/gpio/__init__.py +0 -0
  473. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  474. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  475. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  476. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  477. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/gpio/input/__init__.py +0 -0
  478. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/gpio/input/base.py +0 -0
  479. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/gpio/input/manager.py +0 -0
  480. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/i2c/__init__.py +0 -0
  481. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/i2c/bus.py +0 -0
  482. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/i2c/ina219.py +0 -0
  483. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/i2c/ina219_driver.py +0 -0
  484. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/i2c/ina226.py +0 -0
  485. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/i2c/ina226_driver.py +0 -0
  486. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/i2c/mcp9808.py +0 -0
  487. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/i2c/pct2075.py +0 -0
  488. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/onewire/__init__.py +0 -0
  489. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/onewire/dallas.py +0 -0
  490. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/sensor/__init__.py +0 -0
  491. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  492. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/sensor/temperature/base.py +0 -0
  493. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  494. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  495. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/integration/__init__.py +0 -0
  496. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/integration/interlock.py +0 -0
  497. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/integration/lox_template.py +0 -0
  498. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/__init__.py +0 -0
  499. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/docker/daemon.json +0 -0
  500. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
  501. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
  502. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  503. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/journald/journald.conf +0 -0
  504. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/kernel/postinst-boneio-overlay +0 -0
  505. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/modules-load.d/onewire.conf +0 -0
  506. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  507. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/sudoers/boneio +0 -0
  508. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
  509. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
  510. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/systemd/boneio.service +0 -0
  511. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/systemd/dropins/avahi-daemon-defer.conf +0 -0
  512. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/systemd/dropins/bb-usb-gadgets-defer.conf +0 -0
  513. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/systemd/dropins/mosquitto-priority.conf +0 -0
  514. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/systemd/dropins/timer-no-persistent.conf +0 -0
  515. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/systemd/dropins/user-manager-defer.conf +0 -0
  516. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/systemd/linger-marker +0 -0
  517. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  518. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
  519. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  520. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  521. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  522. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  523. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
  524. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  525. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  526. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/__init__.py +0 -0
  527. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  528. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  529. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
  530. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
  531. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
  532. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
  533. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_10_disable_console_setup.py +0 -0
  534. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_11_timer_catchup.py +0 -0
  535. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_12_oled_splash_off_critical_path.py +0 -0
  536. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_13_mosquitto_priority.py +0 -0
  537. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_14_journal_apparent_size.py +0 -0
  538. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_15_prune_orphan_journals.py +0 -0
  539. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_16_login_linger.py +0 -0
  540. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_17_defer_user_manager.py +0 -0
  541. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_18_fix_hostname_once.py +0 -0
  542. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
  543. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_4_onewire_modules.py +0 -0
  544. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_5_overlay_kernel_hook.py +0 -0
  545. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_6_boot_service_order.py +0 -0
  546. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_7_journald_limits.py +0 -0
  547. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_8_apparmor_prune.py +0 -0
  548. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/migrations/versions/v1_5_9_defer_nonessential.py +0 -0
  549. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/__init__.py +0 -0
  550. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/cli.py +0 -0
  551. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/client.py +0 -0
  552. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/coordinator.py +0 -0
  553. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/__init__.py +0 -0
  554. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
  555. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  556. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  557. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  558. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  559. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  560. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  561. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  562. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
  563. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  564. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/hvac/thessla.json +0 -0
  565. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  566. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/hvac/wanas415.json +0 -0
  567. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/inverters/sofar.json +0 -0
  568. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  569. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  570. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  571. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  572. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/sensors/cwt.json +0 -0
  573. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  574. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  575. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  576. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  577. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/sensors/pt100.json +0 -0
  578. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
  579. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/sensors/sht20.json +0 -0
  580. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/devices/sensors/sht30.json +0 -0
  581. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/__init__.py +0 -0
  582. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/base.py +0 -0
  583. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/derived/__init__.py +0 -0
  584. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/derived/numeric.py +0 -0
  585. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/derived/select.py +0 -0
  586. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/derived/switch.py +0 -0
  587. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/derived/text.py +0 -0
  588. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/sensor/__init__.py +0 -0
  589. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/sensor/binary.py +0 -0
  590. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/sensor/numeric.py +0 -0
  591. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/sensor/text.py +0 -0
  592. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/writeable/__init__.py +0 -0
  593. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/writeable/binary.py +0 -0
  594. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/entities/writeable/numeric.py +0 -0
  595. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/mock_coordinator.py +0 -0
  596. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/modbus/utils.py +0 -0
  597. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/models/__init__.py +0 -0
  598. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/models/actions.py +0 -0
  599. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/models/events.py +0 -0
  600. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/models/files.py +0 -0
  601. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/models/logs.py +0 -0
  602. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/models/mqtt.py +0 -0
  603. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/models/state.py +0 -0
  604. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/actions.yaml +0 -0
  605. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/actions_sensor.yaml +0 -0
  606. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/actions_switch.yaml +0 -0
  607. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/condition.yaml +0 -0
  608. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/filters.yaml +0 -0
  609. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/filters_adc.yaml +0 -0
  610. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/id.yaml +0 -0
  611. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/remote_devices.yaml +0 -0
  612. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/remote_inputs.yaml +0 -0
  613. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/temp_unit.yaml +0 -0
  614. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/schema/update_interval.yaml +0 -0
  615. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/action_validation.py +0 -0
  616. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/dashboard_cards.py +0 -0
  617. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/assets/basePath-CxHj-SSK.js +0 -0
  618. /boneio-1.5.2.dev1/boneio/webui/frontend-dist/assets/rolldown-runtime-QTnfLwEv.js → /boneio-1.6.0.dev2/boneio/webui/frontend-dist/assets/chunk-QTnfLwEv.js +0 -0
  619. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
  620. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  621. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/assets/editor.worker-Cn2oRESe.js +0 -0
  622. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/assets/formatters-zOiGPJLh.js +0 -0
  623. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/assets/longPress-Dx7OCSyP.js +0 -0
  624. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
  625. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
  626. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  627. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  628. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/boneio.svg +0 -0
  629. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  630. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  631. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  632. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  633. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  634. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  635. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  636. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  637. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  638. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  639. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  640. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/ina226.schema.json +0 -0
  641. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  642. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  643. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  644. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  645. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  646. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  647. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  648. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  649. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  650. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  651. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  652. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  653. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  654. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  655. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
  656. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  657. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  658. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  659. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/hvac_svg_templates.py +0 -0
  660. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/middleware/__init__.py +0 -0
  661. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/modbus_card_templates.py +0 -0
  662. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/config_backups.py +0 -0
  663. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/config_discovery.py +0 -0
  664. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/covers.py +0 -0
  665. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/dashboard.py +0 -0
  666. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/dev_fake_device.py +0 -0
  667. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/irrigation.py +0 -0
  668. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/migrations.py +0 -0
  669. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/modbus.py +0 -0
  670. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/mqtt_reference.py +0 -0
  671. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/outputs.py +0 -0
  672. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/sensors.py +0 -0
  673. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/templates.py +0 -0
  674. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/routes/tools.py +0 -0
  675. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/adc.schema.json +0 -0
  676. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/areas.schema.json +0 -0
  677. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  678. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/boneio.schema.json +0 -0
  679. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/can.schema.json +0 -0
  680. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/cover.schema.json +0 -0
  681. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/dallas.schema.json +0 -0
  682. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/ds2482.schema.json +0 -0
  683. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/event.schema.json +0 -0
  684. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/ina219.schema.json +0 -0
  685. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/ina226.schema.json +0 -0
  686. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/irrigation.schema.json +0 -0
  687. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/lm75.schema.json +0 -0
  688. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/logger.schema.json +0 -0
  689. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/lox_udp.schema.json +0 -0
  690. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/mcp23017.schema.json +0 -0
  691. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/mcp9808.schema.json +0 -0
  692. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/modbus.schema.json +0 -0
  693. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/mqtt.schema.json +0 -0
  694. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/oled.schema.json +0 -0
  695. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/output.schema.json +0 -0
  696. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/output_group.schema.json +0 -0
  697. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/pca9685.schema.json +0 -0
  698. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/pcf8575.schema.json +0 -0
  699. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/remote_devices.schema.json +0 -0
  700. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/remote_inputs.schema.json +0 -0
  701. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/sensor.schema.json +0 -0
  702. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/template.schema.json +0 -0
  703. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  704. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/services/__init__.py +0 -0
  705. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/services/logs.py +0 -0
  706. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/sudo_rate_limiter.py +0 -0
  707. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio/webui/websocket_manager.py +0 -0
  708. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio.egg-info/dependency_links.txt +0 -0
  709. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio.egg-info/entry_points.txt +0 -0
  710. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/boneio.egg-info/top_level.txt +0 -0
  711. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/setup.cfg +0 -0
  712. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/setup.py +0 -0
  713. {boneio-1.5.2.dev1 → boneio-1.6.0.dev2}/tests/test_py313_compatibility.py +0 -0
@@ -0,0 +1,11 @@
1
+ include README.md
2
+ include requirements.txt
3
+ include LICENSE
4
+ recursive-include boneio *.yaml
5
+ recursive-include boneio *.json
6
+ recursive-include boneio *.ttf
7
+ recursive-include boneio/webui/frontend-dist *
8
+ # Signing key and migration plan signatures — the helper refuses to run
9
+ # without them, so a wheel built without these is useless on a device.
10
+ recursive-include boneio *.pem
11
+ recursive-include boneio *.sig
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boneio
3
- Version: 1.5.2.dev1
3
+ Version: 1.6.0.dev2
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
@@ -33,7 +33,7 @@ Requires-Dist: qrcode==8.2
33
33
  Requires-Dist: gpiod==2.3.0
34
34
  Requires-Dist: requests==2.32.5
35
35
  Requires-Dist: packaging==25.0
36
- Requires-Dist: aioesphomeapi>=29.0.0
36
+ Requires-Dist: aioesphomeapi>=45.0.0
37
37
  Requires-Dist: zeroconf>=0.148.0
38
38
  Requires-Dist: canopen-asyncio>=2.4.1
39
39
  Dynamic: license-file
@@ -37,6 +37,11 @@ def get_arguments() -> argparse.Namespace:
37
37
  description="boneIO app for BeagleBone Black.",
38
38
  )
39
39
  subparsers = parser.add_subparsers(dest=ACTION, required=True)
40
+
41
+ from boneio.core.auth.cli import add_accounts_parser
42
+
43
+ add_accounts_parser(subparsers)
44
+
40
45
  run_parser = subparsers.add_parser("run")
41
46
  run_parser.add_argument(
42
47
  "--debug",
@@ -385,6 +390,10 @@ def main() -> int:
385
390
  mqttpassword=args.mqttpassword,
386
391
  debug=debug,
387
392
  )
393
+ elif args.action == "accounts":
394
+ from boneio.core.auth.cli import run_accounts_command
395
+
396
+ exit_code = run_accounts_command(args=args)
388
397
  elif args.action == "modbus":
389
398
  _LOGGER.info("BoneIO Modbus helper %s .", __version__)
390
399
  exit_code = run_modbus_command(
@@ -0,0 +1,6 @@
1
+ """Cover classes."""
2
+ from .remote import RemoteCoverOutput
3
+ from .time_based import TimeBasedCover
4
+ from .venetian import VenetianCover
5
+
6
+ __all__ = ["RemoteCoverOutput", "TimeBasedCover", "VenetianCover"]
@@ -0,0 +1,277 @@
1
+ """Remote cover output for covers on remote devices (ESPHome API).
2
+
3
+ ``RemoteCoverOutput`` provides a duck-type compatible interface with
4
+ :class:`TimeBasedCover` / :class:`VenetianCover` so that the conditions
5
+ system (``is_open`` / ``is_closed``), ``CoverManager.get_cover()``,
6
+ and WebSocket event emission work transparently with remote covers.
7
+
8
+ The actual hardware control is delegated to the parent
9
+ ``ESPHomeDeviceManager`` via ``control_cover()``.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ import logging
15
+ import time
16
+ from typing import TYPE_CHECKING, Any
17
+
18
+ from boneio.const import CLOSED, CLOSING, COVER, IDLE, OPEN, OPENING
19
+ from boneio.core.events import EventBus
20
+ from boneio.models import CoverState
21
+ from boneio.models.events import CoverEvent
22
+
23
+ if TYPE_CHECKING:
24
+ from boneio.core.messaging import MessageBus
25
+
26
+ _LOGGER = logging.getLogger(__name__)
27
+
28
+
29
+ class RemoteCoverOutput:
30
+ """Remote cover from ESPHome — duck-type compatible with local Cover.
31
+
32
+ Provides the same public interface that the condition evaluators and
33
+ the ``CoverManager`` expect:
34
+
35
+ - ``is_open`` / ``is_closed`` property for action conditions
36
+ - ``state`` / ``position`` / ``tilt`` for state reporting
37
+ - ``on_remote_state_change()`` callback from ESPHome subscription
38
+ - ``CoverEvent`` emission on EventBus for WebSocket clients
39
+
40
+ Args:
41
+ id: Entity identifier (usually ``{device_id}_{cover_id}``).
42
+ name: Human-readable display name.
43
+ device_id: ID of the remote device hosting this cover.
44
+ cover_id: Entity object_id on the remote device.
45
+ remote_source: Transport protocol (``esphome_api``).
46
+ event_bus: Central event bus for emitting ``CoverEvent`` objects.
47
+ kind: Cover device class (``blind``, ``shutter``, ``gate``, etc.).
48
+ show_in_ha: Whether to publish HA autodiscovery.
49
+ area: Optional HA area assignment.
50
+ """
51
+
52
+ # Duck-type compatibility with local covers
53
+ is_remote: bool = True
54
+
55
+ def __init__(
56
+ self,
57
+ *,
58
+ id: str,
59
+ name: str,
60
+ device_id: str,
61
+ cover_id: str,
62
+ remote_source: str,
63
+ event_bus: EventBus,
64
+ message_bus: MessageBus | None = None,
65
+ topic_prefix: str = "",
66
+ kind: str = "cover",
67
+ show_in_ha: bool = False,
68
+ area: str | None = None,
69
+ ) -> None:
70
+ self._id = id
71
+ self._name = name
72
+ self._device_id = device_id
73
+ self._cover_id = cover_id
74
+ self._remote_source = remote_source
75
+ self._event_bus = event_bus
76
+ self._message_bus: MessageBus | None = message_bus
77
+ self._send_topic = f"{topic_prefix}/{COVER}/{id}" if topic_prefix else ""
78
+ self._kind = kind
79
+ self.show_in_ha = show_in_ha
80
+ self.area: str | None = area
81
+
82
+ # State tracking
83
+ self._position: int = 0 # 0=closed, 100=open
84
+ self._tilt: int = 0
85
+ self._current_operation: str = IDLE
86
+ self._last_timestamp: float = 0.0
87
+ self._available: bool = False
88
+
89
+ # Reference to remote device manager — set by registration.
90
+ self._device_manager: Any = None
91
+ self._remote_devices_ref: Any = None
92
+
93
+ # ------------------------------------------------------------------
94
+ # Public properties (duck-type compatible with TimeBasedCover)
95
+ # ------------------------------------------------------------------
96
+
97
+ @property
98
+ def id(self) -> str:
99
+ """Entity identifier."""
100
+ return self._id
101
+
102
+ @property
103
+ def name(self) -> str:
104
+ """Human-readable name."""
105
+ return self._name
106
+
107
+ @property
108
+ def kind(self) -> str:
109
+ """Cover device class (blind, shutter, gate, etc.)."""
110
+ return self._kind
111
+
112
+ @property
113
+ def state(self) -> str:
114
+ """Current state as string (open/closed/opening/closing)."""
115
+ if self._current_operation == OPENING:
116
+ return OPENING
117
+ elif self._current_operation == CLOSING:
118
+ return CLOSING
119
+ else:
120
+ return CLOSED if self._position == 0 else OPEN
121
+
122
+ @property
123
+ def is_open(self) -> bool:
124
+ """True when cover position > 0 (not fully closed)."""
125
+ return self._position > 0
126
+
127
+ @property
128
+ def is_closed(self) -> bool:
129
+ """True when cover is fully closed (position == 0)."""
130
+ return self._position == 0
131
+
132
+ @property
133
+ def position(self) -> int:
134
+ """Current cover position (0-100)."""
135
+ return self._position
136
+
137
+ @property
138
+ def tilt(self) -> int:
139
+ """Current tilt position (0-100)."""
140
+ return self._tilt
141
+
142
+ @property
143
+ def current_operation(self) -> str:
144
+ """Current operation (idle/opening/closing)."""
145
+ return self._current_operation
146
+
147
+ @property
148
+ def last_timestamp(self) -> float:
149
+ """Timestamp of last state update."""
150
+ return self._last_timestamp
151
+
152
+ # ------------------------------------------------------------------
153
+ # Remote state callback
154
+ # ------------------------------------------------------------------
155
+
156
+ def on_remote_state_change(self, state_dict: dict[str, Any]) -> None:
157
+ """Called by ESPHome device manager when cover state changes.
158
+
159
+ Args:
160
+ state_dict: Cover state from ESPHome containing:
161
+ - position: float (0.0-1.0)
162
+ - tilt: float | None
163
+ - current_operation: int (0=IDLE, 1=OPENING, 2=CLOSING)
164
+ """
165
+ position_raw = state_dict.get("position")
166
+ if position_raw is not None:
167
+ self._position = round(float(position_raw) * 100)
168
+
169
+ tilt_raw = state_dict.get("tilt")
170
+ if tilt_raw is not None:
171
+ self._tilt = round(float(tilt_raw) * 100)
172
+
173
+ current_op_int = state_dict.get("current_operation", 0)
174
+ if current_op_int == 1:
175
+ self._current_operation = OPENING
176
+ elif current_op_int == 2:
177
+ self._current_operation = CLOSING
178
+ else:
179
+ self._current_operation = IDLE
180
+
181
+ self._last_timestamp = time.time()
182
+ self._available = True
183
+
184
+ _LOGGER.debug(
185
+ "Remote cover '%s' state: position=%d%%, tilt=%d%%, operation=%s",
186
+ self._id,
187
+ self._position,
188
+ self._tilt,
189
+ self._current_operation,
190
+ )
191
+
192
+ # Emit CoverEvent for WebSocket clients
193
+ self._emit_cover_event()
194
+
195
+ def _emit_cover_event(self) -> None:
196
+ """Emit a CoverEvent on the event bus."""
197
+ event = CoverState(
198
+ id=self._id,
199
+ name=self._name,
200
+ state=self.state,
201
+ kind=self._kind,
202
+ timestamp=self._last_timestamp,
203
+ current_operation=self._current_operation,
204
+ position=self._position,
205
+ tilt=self._tilt,
206
+ )
207
+ self._event_bus.trigger_event(CoverEvent(entity_id=self._id, state=event))
208
+
209
+ # ------------------------------------------------------------------
210
+ # Device manager resolution (lazy — same pattern as RemoteOutputBase)
211
+ # ------------------------------------------------------------------
212
+
213
+ def _resolve_device_manager(self) -> bool:
214
+ """Try to resolve device manager lazily from remote_devices reference.
215
+
216
+ Returns:
217
+ ``True`` if device manager is now available.
218
+ """
219
+ if self._device_manager is not None:
220
+ return True
221
+ if self._remote_devices_ref is None:
222
+ return False
223
+ device = self._remote_devices_ref.get_device(self._device_id)
224
+ if device is not None:
225
+ self._device_manager = device
226
+ self._remote_devices_ref = None
227
+ self._register_state_callback()
228
+ _LOGGER.info(
229
+ "Lazily resolved device manager for remote cover '%s' (device '%s')",
230
+ self._id,
231
+ self._device_id,
232
+ )
233
+ return True
234
+ return False
235
+
236
+ def _register_state_callback(self) -> None:
237
+ """Register a cover state change callback on the device manager.
238
+
239
+ Called after device manager is resolved (lazy or immediate).
240
+ ESPHome devices will call back on cover state changes.
241
+ Also syncs current state from the device if available.
242
+ """
243
+ if self._device_manager is None:
244
+ return
245
+ register_fn = getattr(self._device_manager, "register_cover_callback", None)
246
+ if register_fn is not None:
247
+ register_fn(self._cover_id, self.on_remote_state_change)
248
+ _LOGGER.debug(
249
+ "Registered cover callback for remote cover '%s' on device '%s'",
250
+ self._id,
251
+ self._device_id,
252
+ )
253
+
254
+ # Sync initial state from device's current known states
255
+ self._sync_initial_state()
256
+
257
+ def _sync_initial_state(self) -> None:
258
+ """Sync initial state from ESPHome device's cached cover states."""
259
+ if self._device_manager is None:
260
+ return
261
+
262
+ cover_states: dict[str, dict[str, Any]] = getattr(
263
+ self._device_manager, "_cover_states", {}
264
+ )
265
+ if self._cover_id in cover_states:
266
+ self.on_remote_state_change(cover_states[self._cover_id])
267
+ _LOGGER.debug(
268
+ "Synced initial cover state for '%s': position=%d%%",
269
+ self._id,
270
+ self._position,
271
+ )
272
+
273
+ def __repr__(self) -> str:
274
+ return (
275
+ f"RemoteCoverOutput(id={self._id!r}, device={self._device_id!r}, "
276
+ f"cover={self._cover_id!r}, position={self._position})"
277
+ )
@@ -0,0 +1,24 @@
1
+ """Account model, password hashing and persistence for boneIO web accounts."""
2
+
3
+ from boneio.core.auth.hashing import hash_password, needs_rehash, verify_password
4
+ from boneio.core.auth.models import Role, User
5
+ from boneio.core.auth.store import (
6
+ USERS_FILENAME,
7
+ UserStore,
8
+ UserStoreError,
9
+ normalize_username,
10
+ validate_password,
11
+ )
12
+
13
+ __all__ = [
14
+ "USERS_FILENAME",
15
+ "Role",
16
+ "User",
17
+ "UserStore",
18
+ "UserStoreError",
19
+ "hash_password",
20
+ "needs_rehash",
21
+ "normalize_username",
22
+ "validate_password",
23
+ "verify_password",
24
+ ]
@@ -0,0 +1,242 @@
1
+ """``boneio accounts`` — manage web UI accounts from the shell.
2
+
3
+ This is the recovery path. A device whose administrator password is lost has no
4
+ other way back in: there is no email to send a link to, and wiping
5
+ ``users.json`` by hand would take every other account with it.
6
+
7
+ It is also how a controller gets an account without a browser, which makes
8
+ provisioning scriptable and means a freshly flashed device does not have to be
9
+ clicked through the wizard.
10
+
11
+ Passwords are never taken from the command line. An argument is visible in
12
+ ``ps`` to every user on the box and lands in shell history, so they are always
13
+ prompted for, with echo off.
14
+
15
+ Changes take effect immediately: the running web server notices that
16
+ ``users.json`` changed and re-reads it, so recovering a password does not mean
17
+ restarting a controller in the middle of whatever it is automating.
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ import argparse
23
+ import getpass
24
+ import logging
25
+ import os
26
+ import sys
27
+ from pathlib import Path
28
+
29
+ from boneio.core.auth.models import Role
30
+ from boneio.core.auth.store import UserStore, UserStoreError, validate_password
31
+
32
+ _LOGGER = logging.getLogger(__name__)
33
+
34
+
35
+ def _prompt_password(prompt: str, username: str | None = None) -> str | None:
36
+ """Ask for a password twice, with echo off.
37
+
38
+ Args:
39
+ prompt: Text for the first prompt.
40
+ username: Account the password is for, so the same policy the store
41
+ applies is reported here rather than after the second prompt.
42
+
43
+ Returns:
44
+ The password, or None if the two entries differed, it was empty, or the
45
+ policy rejected it.
46
+ """
47
+ first = getpass.getpass(f"{prompt}: ")
48
+ if not first:
49
+ print("Aborted: empty password.", file=sys.stderr)
50
+ return None
51
+
52
+ try:
53
+ validate_password(first, username)
54
+ except UserStoreError as err:
55
+ print(f"Rejected: {err}", file=sys.stderr)
56
+ return None
57
+
58
+ second = getpass.getpass("Repeat password: ")
59
+ if first != second:
60
+ print("Aborted: the passwords do not match.", file=sys.stderr)
61
+ return None
62
+
63
+ return first
64
+
65
+
66
+ def _warn_on_ownership(store: UserStore, config_path: Path) -> None:
67
+ """Warn when the file was written as the wrong user.
68
+
69
+ Running this under ``sudo`` leaves ``users.json`` owned by root, and the
70
+ service — which runs as the ``boneio`` user — then cannot rewrite it. The
71
+ failure would only show up later, when someone changes a password from the
72
+ web UI and it silently fails, so it is called out here instead.
73
+
74
+ Args:
75
+ store: The account store just written.
76
+ config_path: Path to config.yaml, used as the reference owner.
77
+ """
78
+ try:
79
+ written_uid = store.path.stat().st_uid
80
+ expected_uid = config_path.stat().st_uid
81
+ except OSError:
82
+ return
83
+
84
+ if written_uid != expected_uid:
85
+ print(
86
+ f"WARNING: {store.path} is now owned by uid {written_uid}, but "
87
+ f"{config_path} belongs to uid {expected_uid}. The boneIO service "
88
+ f"probably cannot write it. Fix with:\n"
89
+ f" sudo chown {expected_uid} {store.path}",
90
+ file=sys.stderr,
91
+ )
92
+
93
+
94
+ def run_accounts_command(args: argparse.Namespace) -> int:
95
+ """Execute an ``accounts`` subcommand.
96
+
97
+ Args:
98
+ args: Parsed arguments, carrying ``accounts_action``, ``config`` and,
99
+ depending on the subcommand, ``username`` and ``role``.
100
+
101
+ Returns:
102
+ Process exit code.
103
+ """
104
+ config_path = Path(args.config).expanduser()
105
+ if not config_path.exists():
106
+ print(f"No config file at {config_path}", file=sys.stderr)
107
+ return 1
108
+
109
+ store = UserStore.for_config_file(config_path)
110
+ try:
111
+ store.load()
112
+ except UserStoreError as err:
113
+ print(f"Cannot read the account store: {err}", file=sys.stderr)
114
+ return 1
115
+
116
+ action = args.accounts_action
117
+
118
+ if action == "list":
119
+ users = store.list_users()
120
+ if not users:
121
+ print(f"No accounts yet ({store.path} does not exist).")
122
+ print("Create one with: boneio accounts add <username> --role admin")
123
+ return 0
124
+ width = max(len(user.username) for user in users)
125
+ for user in users:
126
+ print(f"{user.username:<{width}} {user.role} created {user.created_at}")
127
+ return 0
128
+
129
+ if action == "add":
130
+ password = _prompt_password(
131
+ f"New password for '{args.username}'", args.username
132
+ )
133
+ if password is None:
134
+ return 1
135
+ try:
136
+ user = store.add_user(args.username, password, Role(args.role))
137
+ except UserStoreError as err:
138
+ print(f"Could not create the account: {err}", file=sys.stderr)
139
+ return 1
140
+ _warn_on_ownership(store, config_path)
141
+ print(f"Created {user.role} account '{user.username}'.")
142
+ return 0
143
+
144
+ if action == "reset":
145
+ if store.get_user(args.username) is None:
146
+ print(f"No such account: {args.username}", file=sys.stderr)
147
+ return 1
148
+ password = _prompt_password(
149
+ f"New password for '{args.username}'", args.username
150
+ )
151
+ if password is None:
152
+ return 1
153
+ try:
154
+ store.set_password(args.username, password)
155
+ except UserStoreError as err:
156
+ print(f"Could not change the password: {err}", file=sys.stderr)
157
+ return 1
158
+ _warn_on_ownership(store, config_path)
159
+ print(f"Password changed for '{args.username}'. It takes effect immediately.")
160
+ return 0
161
+
162
+ if action == "delete":
163
+ try:
164
+ store.delete_user(args.username)
165
+ except UserStoreError as err:
166
+ print(f"Could not delete the account: {err}", file=sys.stderr)
167
+ return 1
168
+ print(f"Deleted account '{args.username}'.")
169
+ return 0
170
+
171
+ print(f"Unknown accounts action: {action}", file=sys.stderr)
172
+ return 1
173
+
174
+
175
+ def add_accounts_parser(subparsers: argparse._SubParsersAction) -> None:
176
+ """Register the ``accounts`` subcommand.
177
+
178
+ Args:
179
+ subparsers: The top-level subparser collection from bonecli.
180
+ """
181
+ accounts_parser = subparsers.add_parser(
182
+ "accounts",
183
+ help="Manage web UI accounts (create, reset a password, list, delete)",
184
+ description=(
185
+ "Manage the accounts in users.json. This is the recovery path when "
186
+ "an administrator password is lost, and the way to provision a "
187
+ "device without a browser. Passwords are always prompted for, "
188
+ "never passed as arguments."
189
+ ),
190
+ )
191
+ # bonecli's main() reads args.debug before dispatching, so every subcommand
192
+ # has to carry one.
193
+ accounts_parser.set_defaults(debug=0)
194
+ accounts_parser.add_argument(
195
+ "-c",
196
+ "--config",
197
+ metavar="path_to_config",
198
+ default=os.environ.get("BONEIO_CONFIG", "./config.yaml"),
199
+ help="boneIO config file; users.json lives next to it",
200
+ )
201
+
202
+ actions = accounts_parser.add_subparsers(dest="accounts_action", required=True)
203
+
204
+ def _with_config(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
205
+ """Accept -c after the subcommand as well as before it.
206
+
207
+ argparse only looks for an option on the parser that is parsing at the
208
+ time, so `accounts add pawel -c cfg.yaml` — the order everyone reaches
209
+ for — is rejected unless each action accepts it too. SUPPRESS keeps the
210
+ action's default from overwriting a value already given to `accounts`.
211
+
212
+ Args:
213
+ parser: Action subparser to extend.
214
+
215
+ Returns:
216
+ The same parser, for chaining.
217
+ """
218
+ parser.add_argument(
219
+ "-c",
220
+ "--config",
221
+ metavar="path_to_config",
222
+ default=argparse.SUPPRESS,
223
+ help="boneIO config file; users.json lives next to it",
224
+ )
225
+ return parser
226
+
227
+ _with_config(actions.add_parser("list", help="List accounts and their roles"))
228
+
229
+ add_action = _with_config(actions.add_parser("add", help="Create an account"))
230
+ add_action.add_argument("username", help="Username to create")
231
+ add_action.add_argument(
232
+ "--role",
233
+ choices=[str(Role.ADMIN), str(Role.VIEWER)],
234
+ default=str(Role.VIEWER),
235
+ help="Role to grant (default: viewer)",
236
+ )
237
+
238
+ reset_action = _with_config(actions.add_parser("reset", help="Set a new password"))
239
+ reset_action.add_argument("username", help="Account to change")
240
+
241
+ delete_action = _with_config(actions.add_parser("delete", help="Remove an account"))
242
+ delete_action.add_argument("username", help="Account to remove")