boneio 1.6.0.dev1__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 (747) hide show
  1. boneio-1.6.0.dev3/MANIFEST.in +11 -0
  2. {boneio-1.6.0.dev1/boneio.egg-info → boneio-1.6.0.dev3}/PKG-INFO +2 -2
  3. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/bonecli.py +9 -3
  4. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/cover/time_based.py +14 -0
  5. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/cover/venetian.py +14 -0
  6. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/irrigation/controller.py +29 -1
  7. boneio-1.6.0.dev3/boneio/core/auth/__init__.py +24 -0
  8. boneio-1.6.0.dev3/boneio/core/auth/cli.py +242 -0
  9. boneio-1.6.0.dev3/boneio/core/auth/hashing.py +182 -0
  10. boneio-1.6.0.dev3/boneio/core/auth/migration.py +116 -0
  11. boneio-1.6.0.dev3/boneio/core/auth/models.py +101 -0
  12. boneio-1.6.0.dev3/boneio/core/auth/store.py +500 -0
  13. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/cloud/registration.py +71 -138
  14. boneio-1.6.0.dev3/boneio/core/config/input_bindings.py +231 -0
  15. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/migrations/v4_wled_cache.py +38 -3
  16. boneio-1.6.0.dev3/boneio/core/config/secret_masking.py +199 -0
  17. boneio-1.6.0.dev3/boneio/core/config/yaml_patch.py +262 -0
  18. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/yaml_util.py +222 -6
  19. boneio-1.6.0.dev3/boneio/core/containers.py +414 -0
  20. boneio-1.6.0.dev3/boneio/core/diagnostics/__init__.py +1 -0
  21. boneio-1.6.0.dev3/boneio/core/diagnostics/collect.py +484 -0
  22. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/action_conditions.py +206 -9
  23. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/covers.py +18 -0
  24. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/manager.py +61 -6
  25. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/outputs.py +45 -0
  26. boneio-1.6.0.dev3/boneio/core/manager/scheduler.py +410 -0
  27. boneio-1.6.0.dev3/boneio/core/manager/security_alert.py +199 -0
  28. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/sensors.py +96 -0
  29. boneio-1.6.0.dev3/boneio/core/manager/sun.py +388 -0
  30. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/update.py +21 -4
  31. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/messaging/mqtt.py +38 -38
  32. boneio-1.6.0.dev3/boneio/core/net/__init__.py +1 -0
  33. boneio-1.6.0.dev3/boneio/core/net/discovery_guard.py +158 -0
  34. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/remote/esphome.py +98 -40
  35. boneio-1.6.0.dev3/boneio/core/security/__init__.py +1 -0
  36. boneio-1.6.0.dev3/boneio/core/security/framing.py +113 -0
  37. boneio-1.6.0.dev3/boneio/core/security/posture.py +373 -0
  38. boneio-1.6.0.dev3/boneio/core/sensor/sun.py +301 -0
  39. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/system/monitor.py +18 -2
  40. boneio-1.6.0.dev3/boneio/core/system_ops.py +205 -0
  41. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/utils/async_updater.py +30 -2
  42. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/utils/conditions.py +55 -4
  43. boneio-1.6.0.dev3/boneio/core/utils/overlay.py +159 -0
  44. boneio-1.6.0.dev3/boneio/core/utils/sun.py +440 -0
  45. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/can/interface.py +50 -1
  46. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/display/oled.py +6 -1
  47. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/gpio/expanders/mcp23017.py +163 -21
  48. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/integration/homeassistant.py +134 -0
  49. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/actions.py +170 -5
  50. boneio-1.6.0.dev3/boneio/migrations/assets/MANIFEST.sha256 +41 -0
  51. boneio-1.6.0.dev3/boneio/migrations/assets/docker/nodered/docker-compose-cloud.yaml +38 -0
  52. boneio-1.6.0.dev3/boneio/migrations/assets/docker/nodered/node-red/settings.js +132 -0
  53. boneio-1.6.0.dev3/boneio/migrations/assets/helpers/boneio-containers +619 -0
  54. boneio-1.6.0.dev3/boneio/migrations/assets/helpers/boneio-helpers-heal +209 -0
  55. boneio-1.6.0.dev3/boneio/migrations/assets/helpers/boneio-migrate-v2 +1552 -0
  56. boneio-1.6.0.dev3/boneio/migrations/assets/helpers/boneio-system +743 -0
  57. boneio-1.6.0.dev3/boneio/migrations/assets/journald/journald.conf +43 -0
  58. boneio-1.6.0.dev3/boneio/migrations/assets/kernel/postinst-boneio-overlay +79 -0
  59. boneio-1.6.0.dev3/boneio/migrations/assets/migrations-recovery.pem +3 -0
  60. boneio-1.6.0.dev3/boneio/migrations/assets/migrations.pem +3 -0
  61. boneio-1.6.0.dev3/boneio/migrations/assets/sshd/10-boneio-hardening.conf +14 -0
  62. boneio-1.6.0.dev3/boneio/migrations/assets/sudoers/boneio +16 -0
  63. boneio-1.6.0.dev3/boneio/migrations/assets/sudoers/boneio-helpers +14 -0
  64. boneio-1.6.0.dev3/boneio/migrations/assets/sudoers/boneio-timedatectl +19 -0
  65. boneio-1.6.0.dev3/boneio/migrations/assets/systemd/boneio-helpers-heal.service +37 -0
  66. boneio-1.6.0.dev3/boneio/migrations/assets/systemd/boneio-oled-boot.service +30 -0
  67. boneio-1.6.0.dev3/boneio/migrations/assets/systemd/boneio.service +49 -0
  68. boneio-1.6.0.dev3/boneio/migrations/assets/systemd/dropins/avahi-daemon-defer.conf +11 -0
  69. boneio-1.6.0.dev3/boneio/migrations/assets/systemd/dropins/bb-usb-gadgets-defer.conf +22 -0
  70. boneio-1.6.0.dev3/boneio/migrations/assets/systemd/dropins/mosquitto-priority.conf +16 -0
  71. boneio-1.6.0.dev3/boneio/migrations/assets/systemd/dropins/timer-no-persistent.conf +21 -0
  72. boneio-1.6.0.dev3/boneio/migrations/assets/systemd/dropins/user-manager-defer.conf +27 -0
  73. boneio-1.6.0.dev3/boneio/migrations/assets/systemd/linger-marker +0 -0
  74. boneio-1.6.0.dev3/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +15 -0
  75. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/bootstrap/boneio-migrate +164 -1
  76. boneio-1.6.0.dev3/boneio/migrations/plans/1.3.0.json +1 -0
  77. boneio-1.6.0.dev3/boneio/migrations/plans/1.3.0.sig +0 -0
  78. boneio-1.6.0.dev3/boneio/migrations/plans/1.3.1.json +1 -0
  79. boneio-1.6.0.dev3/boneio/migrations/plans/1.3.1.sig +1 -0
  80. boneio-1.6.0.dev3/boneio/migrations/plans/1.3.2.json +1 -0
  81. boneio-1.6.0.dev3/boneio/migrations/plans/1.3.2.sig +1 -0
  82. boneio-1.6.0.dev3/boneio/migrations/plans/1.4.0.json +1 -0
  83. boneio-1.6.0.dev3/boneio/migrations/plans/1.4.0.sig +1 -0
  84. boneio-1.6.0.dev3/boneio/migrations/plans/1.4.3.json +1 -0
  85. boneio-1.6.0.dev3/boneio/migrations/plans/1.4.3.sig +1 -0
  86. boneio-1.6.0.dev3/boneio/migrations/plans/1.4.4.json +1 -0
  87. boneio-1.6.0.dev3/boneio/migrations/plans/1.4.4.sig +1 -0
  88. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.0.json +1 -0
  89. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.0.sig +1 -0
  90. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.1.json +1 -0
  91. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.1.sig +1 -0
  92. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.10.json +1 -0
  93. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.10.sig +1 -0
  94. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.11.json +1 -0
  95. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.11.sig +0 -0
  96. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.12.json +1 -0
  97. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.12.sig +1 -0
  98. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.13.json +1 -0
  99. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.13.sig +0 -0
  100. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.14.json +1 -0
  101. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.14.sig +1 -0
  102. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.15.json +1 -0
  103. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.15.sig +1 -0
  104. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.16.json +1 -0
  105. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.16.sig +2 -0
  106. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.17.json +1 -0
  107. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.17.sig +2 -0
  108. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.18.json +1 -0
  109. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.18.sig +2 -0
  110. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.2.json +1 -0
  111. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.2.sig +0 -0
  112. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.3.json +1 -0
  113. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.3.sig +0 -0
  114. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.4.json +1 -0
  115. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.4.sig +1 -0
  116. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.5.json +1 -0
  117. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.5.sig +1 -0
  118. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.6.json +1 -0
  119. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.6.sig +0 -0
  120. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.7.json +1 -0
  121. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.7.sig +1 -0
  122. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.8.json +1 -0
  123. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.8.sig +1 -0
  124. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.9.json +1 -0
  125. boneio-1.6.0.dev3/boneio/migrations/plans/1.5.9.sig +1 -0
  126. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.0.json +1 -0
  127. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.0.sig +2 -0
  128. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.1.json +1 -0
  129. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.1.sig +1 -0
  130. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.10.json +1 -0
  131. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.10.sig +2 -0
  132. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.11.json +1 -0
  133. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.11.sig +2 -0
  134. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.2.json +1 -0
  135. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.2.sig +0 -0
  136. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.3.json +1 -0
  137. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.3.sig +1 -0
  138. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.4.json +1 -0
  139. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.4.sig +1 -0
  140. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.5.json +1 -0
  141. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.5.sig +2 -0
  142. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.6.json +1 -0
  143. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.6.sig +1 -0
  144. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.7.json +1 -0
  145. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.7.sig +1 -0
  146. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.8.json +1 -0
  147. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.8.sig +1 -0
  148. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.9.json +1 -0
  149. boneio-1.6.0.dev3/boneio/migrations/plans/1.6.9.sig +0 -0
  150. boneio-1.6.0.dev3/boneio/migrations/plans/manifest.json +1 -0
  151. boneio-1.6.0.dev3/boneio/migrations/plans/manifest.sig +1 -0
  152. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/runner.py +409 -3
  153. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_3_0_baseline.py +6 -8
  154. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_10_disable_console_setup.py +33 -0
  155. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_11_timer_catchup.py +64 -0
  156. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_12_oled_splash_off_critical_path.py +69 -0
  157. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_13_mosquitto_priority.py +43 -0
  158. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_14_journal_apparent_size.py +50 -0
  159. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_15_prune_orphan_journals.py +37 -0
  160. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_16_login_linger.py +53 -0
  161. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_17_defer_user_manager.py +60 -0
  162. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_18_fix_hostname_once.py +57 -0
  163. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_2_libyaml.py +81 -0
  164. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_3_libyaml_retry.py +74 -0
  165. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_5_overlay_kernel_hook.py +32 -0
  166. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_6_boot_service_order.py +59 -0
  167. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_7_journald_limits.py +47 -0
  168. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_8_apparmor_prune.py +72 -0
  169. boneio-1.6.0.dev3/boneio/migrations/versions/v1_5_9_defer_nonessential.py +50 -0
  170. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_0_nodered_admin_auth.py +55 -0
  171. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_10_narrow_sudo_rules.py +55 -0
  172. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_11_drop_docker_group.py +41 -0
  173. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py +44 -0
  174. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py +41 -0
  175. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py +37 -0
  176. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_4_ssh_login_hardening.py +57 -0
  177. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_5_trust_transition.py +195 -0
  178. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_6_retire_legacy_helper.py +55 -0
  179. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_7_timedatectl_sudoers.py +45 -0
  180. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_8_system_helper.py +74 -0
  181. boneio-1.6.0.dev3/boneio/migrations/versions/v1_6_9_ntp_servers.py +64 -0
  182. boneio-1.6.0.dev3/boneio/modbus/devices/hvac/defro-drx.json +519 -0
  183. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/hvac/wanas415.json +1 -1
  184. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/runner.py +79 -1
  185. boneio-1.6.0.dev3/boneio/schema/condition.yaml +164 -0
  186. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/schema.yaml +299 -0
  187. boneio-1.6.0.dev3/boneio/version.py +2 -0
  188. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/action_validation.py +81 -6
  189. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/app.py +187 -17
  190. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/AccountsView-iveRbldx.js +1 -0
  191. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/ActionFields-DdCxR8lP.js +1 -0
  192. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/AppInitContext-CsffdB9c.js +1 -0
  193. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/BackupSection-C1qj4qOG.js +1 -0
  194. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/BindingMatrix-Bj6KE0yY.js +1 -0
  195. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/DeviceControlSection-CPmqccka.js +1 -0
  196. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/DiagnosticsView-Bi1hrIcs.js +5 -0
  197. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/EditItemDialog-BH1onHq0.js +66 -0
  198. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/EntityCard-yD9_Hl71.js +1 -0
  199. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/EntityGrid-BDdmT0qN.js +1 -0
  200. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/FactoryResetSection-E3xtkFLr.js +1 -0
  201. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/FormInputToggle-Spiz-w7l.js +11 -0
  202. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/HaDashboardWizard-f8fMg8FC.js +1 -0
  203. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/HostnameSection-DrpKbp6I.js +1 -0
  204. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/InputsView-W99g8hSl.js +1 -0
  205. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/LocationSection-ZILUsfeR.js +2 -0
  206. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/LoggerForm-Chw9zm0N.js +1 -0
  207. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/LongPressWrapper-BKkWvoC1.js +1 -0
  208. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/MigrationsSection-DSbw5UVz.js +1 -0
  209. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/ModbusView-CdP0fXYx.js +1 -0
  210. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/MqttPasswordsSection-BYwPAyFi.js +1 -0
  211. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/NodeRedManagement-DRMiFlH2.js +1 -0
  212. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/NodeRedView-Ct08K8xu.js +1 -0
  213. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/OutputsView-C9sDLF1P.js +1 -0
  214. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/ScheduleSection-C2qLKNWR.js +1 -0
  215. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/SecurityView-DBkwBU2t.js +1 -0
  216. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/SensorView-DNtKJE4b.js +1 -0
  217. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/Sparkline-BGWlVLtt.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/Sparkline-D-2-v-7o.js +1 -1
  218. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/SystemState-DbY5T6BB.js +2 -0
  219. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/TemplatesView-6kNzVE3p.js +1 -0
  220. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/TilePicker-jd3hKaoZ.js +1 -0
  221. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/TimezoneSection-BEuXBmWp.js +1 -0
  222. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/UISettings-DIcCTtXU.js +33 -0
  223. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/ViewToggle-B8OpHNHc.js +1 -0
  224. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/aiConfig-_hPXvgdY.js +2 -0
  225. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/aiWizardPrompt-D9OJ-cE7.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/aiWizardPrompt-Dc7dZBzw.js +1 -1
  226. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/axios-uEi8e3Ln.js +10 -0
  227. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/configCache-CLN4xEny.js +1 -0
  228. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/coverUtils-Cf4Uxn2U.js +1 -0
  229. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/createLucideIcon-BEjh8B3y.js +1 -0
  230. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/fa-BEzM11bH.js +1 -0
  231. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/gi-tOlGxC0X.js +1 -0
  232. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/index-1pLHiRke.js +20 -0
  233. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/index-lVrZSgFS.css +2 -0
  234. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/monaco-C9XC2D1j.js +13 -0
  235. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/monaco-DUFfd7ef.js +1 -0
  236. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/monaco-Dpn-hvLa.js +872 -0
  237. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/select-D3PIwbEj.js +1 -0
  238. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/tabs-box-Byn-MOyS.js +1 -0
  239. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/utils-B6KiDbIe.js +1 -0
  240. boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/yaml.worker-8qQfrID5.js +221 -0
  241. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/index.html +9 -9
  242. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +212 -4
  243. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/config.schema.json +2061 -18
  244. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/event.schema.json +742 -14
  245. boneio-1.6.0.dev3/boneio/webui/frontend-dist/schema/location.schema.json +48 -0
  246. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +3 -0
  247. boneio-1.6.0.dev3/boneio/webui/frontend-dist/schema/schedule.schema.json +1003 -0
  248. {boneio-1.6.0.dev1/boneio/webui → boneio-1.6.0.dev3/boneio/webui/frontend-dist}/schema/web.schema.json +65 -0
  249. boneio-1.6.0.dev3/boneio/webui/frontend-dist/sw.js +1 -0
  250. boneio-1.6.0.dev1/boneio/webui/frontend-dist/workbox-4918f2f6.js → boneio-1.6.0.dev3/boneio/webui/frontend-dist/workbox-7e79c025.js +1 -1
  251. boneio-1.6.0.dev3/boneio/webui/middleware/auth.py +415 -0
  252. boneio-1.6.0.dev3/boneio/webui/middleware/csrf.py +106 -0
  253. boneio-1.6.0.dev3/boneio/webui/middleware/policy.py +171 -0
  254. boneio-1.6.0.dev3/boneio/webui/rate_limit.py +237 -0
  255. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/__init__.py +12 -2
  256. boneio-1.6.0.dev3/boneio/webui/routes/accounts.py +272 -0
  257. boneio-1.6.0.dev3/boneio/webui/routes/auth.py +134 -0
  258. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/can.py +22 -130
  259. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/config.py +2 -0
  260. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/config_actions.py +138 -0
  261. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/config_core.py +75 -3
  262. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/config_files.py +1 -0
  263. boneio-1.6.0.dev3/boneio/webui/routes/diagnostics.py +259 -0
  264. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/nodered.py +86 -86
  265. boneio-1.6.0.dev3/boneio/webui/routes/onboarding.py +172 -0
  266. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/remote_devices.py +47 -6
  267. boneio-1.6.0.dev3/boneio/webui/routes/schedule.py +75 -0
  268. boneio-1.6.0.dev3/boneio/webui/routes/security.py +321 -0
  269. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/sensors.py +16 -1
  270. boneio-1.6.0.dev3/boneio/webui/routes/sun.py +151 -0
  271. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/system.py +400 -310
  272. boneio-1.6.0.dev3/boneio/webui/routes/timezone_sudoers.py +137 -0
  273. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/update.py +109 -73
  274. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/binary_sensor.schema.json +212 -4
  275. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/config.schema.json +2061 -18
  276. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/event.schema.json +742 -14
  277. boneio-1.6.0.dev3/boneio/webui/schema/location.schema.json +48 -0
  278. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/modbus_devices.schema.json +3 -0
  279. boneio-1.6.0.dev3/boneio/webui/schema/schedule.schema.json +1003 -0
  280. {boneio-1.6.0.dev1/boneio/webui/frontend-dist → boneio-1.6.0.dev3/boneio/webui}/schema/web.schema.json +65 -0
  281. boneio-1.6.0.dev3/boneio/webui/security_headers.py +155 -0
  282. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/web_server.py +5 -0
  283. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3/boneio.egg-info}/PKG-INFO +2 -2
  284. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio.egg-info/SOURCES.txt +212 -42
  285. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio.egg-info/requires.txt +1 -1
  286. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/pyproject.toml +18 -5
  287. boneio-1.6.0.dev1/MANIFEST.in +0 -7
  288. boneio-1.6.0.dev1/boneio/migrations/assets/MANIFEST.sha256 +0 -24
  289. boneio-1.6.0.dev1/boneio/migrations/assets/docker/nodered/nginx/default.conf +0 -50
  290. boneio-1.6.0.dev1/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -5
  291. boneio-1.6.0.dev1/boneio/migrations/assets/journald/journald.conf +0 -6
  292. boneio-1.6.0.dev1/boneio/migrations/assets/sudoers/boneio +0 -15
  293. boneio-1.6.0.dev1/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -17
  294. boneio-1.6.0.dev1/boneio/migrations/assets/systemd/boneio.service +0 -15
  295. boneio-1.6.0.dev1/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -10
  296. boneio-1.6.0.dev1/boneio/migrations/versions/v1_5_2_libyaml.py +0 -109
  297. boneio-1.6.0.dev1/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -102
  298. boneio-1.6.0.dev1/boneio/schema/condition.yaml +0 -76
  299. boneio-1.6.0.dev1/boneio/version.py +0 -2
  300. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/BindingMatrix-BNqK7tIZ.js +0 -1
  301. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/ConfigEditor-BbAOE4qq.js +0 -1
  302. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/EditItemDialog-C0WDUAld.js +0 -66
  303. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/EntityCard-xdVpUoDY.js +0 -1
  304. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/EntityGrid-gh0rv5_A.js +0 -1
  305. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/FormInputToggle-B-viFZz5.js +0 -11
  306. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/HelpLabel-BSTjOtDA.js +0 -1
  307. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/InputsView-7BXiGozL.js +0 -1
  308. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/LogViewer-DoFcRAEu.js +0 -2
  309. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/LongPressWrapper-BHOQV7Wq.js +0 -1
  310. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/ModbusView-DX2BOSsr.js +0 -1
  311. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/NodeRedView-BdZeZ91F.js +0 -1
  312. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/OutputsView-BaZRxY6O.js +0 -1
  313. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/SensorView-BS6L9UKi.js +0 -1
  314. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/SudoPasswordDialog-BBw56CUu.js +0 -1
  315. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/SystemState-3DdCx89h.js +0 -1
  316. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/TemplatesView-C2wBfPOg.js +0 -1
  317. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/Tools-DX1geom0.js +0 -14
  318. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/UISettings-BAXtlmBZ.js +0 -38
  319. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/aiConfig-IRYCBmLm.js +0 -2
  320. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/axios-DHUeYRnu.js +0 -10
  321. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/configCache-BAkc0Ye7.js +0 -1
  322. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/css.worker-CvXBzhp8.js +0 -89
  323. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/gi-D-jcrHWa.js +0 -1
  324. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/html.worker-BO6WuOEO.js +0 -502
  325. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/index-B-isv7qh.js +0 -6
  326. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/index-pwUtHTme.css +0 -2
  327. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/json.worker-BkJRGcCJ.js +0 -58
  328. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/modbusDeviceCatalog-L6as-BKo.js +0 -1
  329. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/monaco-61yH0vfd.js +0 -1212
  330. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/select-B2YDgQ4X.js +0 -1
  331. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/tabs-box-Dj36r4_e.js +0 -1
  332. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/ts.worker-B0J26iPs.js +0 -67734
  333. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/utils-C8nShLO6.js +0 -1
  334. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/vendor-IzweXARb.js +0 -11
  335. boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/yaml.worker-BKRoXlmz.js +0 -450
  336. boneio-1.6.0.dev1/boneio/webui/frontend-dist/sw.js +0 -1
  337. boneio-1.6.0.dev1/boneio/webui/middleware/auth.py +0 -193
  338. boneio-1.6.0.dev1/boneio/webui/routes/auth.py +0 -71
  339. boneio-1.6.0.dev1/boneio/webui/routes/caddy.py +0 -741
  340. boneio-1.6.0.dev1/boneio/webui/routes/timezone_sudoers.py +0 -201
  341. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/LICENSE +0 -0
  342. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/README.md +0 -0
  343. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/__init__.py +0 -0
  344. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.2/input.yaml +0 -0
  345. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.2/output_24_16.yaml +0 -0
  346. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.2/output_32_10.yaml +0 -0
  347. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.2/output_32_5.yaml +0 -0
  348. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.2/output_cover.yaml +0 -0
  349. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  350. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.3/input.yaml +0 -0
  351. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.3/output_24_16.yaml +0 -0
  352. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.3/output_32_10.yaml +0 -0
  353. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.3/output_32_5.yaml +0 -0
  354. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.3/output_cover.yaml +0 -0
  355. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  356. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.4/input.yaml +0 -0
  357. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.4/output_24_16.yaml +0 -0
  358. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.4/output_32_10.yaml +0 -0
  359. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.4/output_32_5.yaml +0 -0
  360. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.4/output_cover.yaml +0 -0
  361. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  362. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.5/input.yaml +0 -0
  363. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.5/output_24_16.yaml +0 -0
  364. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.5/output_32_10.yaml +0 -0
  365. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.5/output_cover.yaml +0 -0
  366. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  367. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.6/input.yaml +0 -0
  368. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.6/output_24_16.yaml +0 -0
  369. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.6/output_32_10.yaml +0 -0
  370. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.6/output_cover.yaml +0 -0
  371. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  372. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.7/input.yaml +0 -0
  373. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.7/output_24_16.yaml +0 -0
  374. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.7/output_32_10.yaml +0 -0
  375. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.7/output_48_4.yaml +0 -0
  376. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.7/output_cover.yaml +0 -0
  377. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  378. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.8/input.yaml +0 -0
  379. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.8/output_24_16.yaml +0 -0
  380. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.8/output_32_10.yaml +0 -0
  381. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.8/output_48_4.yaml +0 -0
  382. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.8/output_cover.yaml +0 -0
  383. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  384. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/1.0/input.yaml +0 -0
  385. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/1.0/output_24_16.yaml +0 -0
  386. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/1.0/output_32_10.yaml +0 -0
  387. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/1.0/output_48_4.yaml +0 -0
  388. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/1.0/output_cover.yaml +0 -0
  389. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
  390. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/__init__.py +0 -0
  391. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/cover/__init__.py +0 -0
  392. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/cover/cover.py +0 -0
  393. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/cover/remote.py +0 -0
  394. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/group/__init__.py +0 -0
  395. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/group/output_group.py +0 -0
  396. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/input/__init__.py +0 -0
  397. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/input/binary_sensor.py +0 -0
  398. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/input/detectors.py +0 -0
  399. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/input/event.py +0 -0
  400. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/input/remote/__init__.py +0 -0
  401. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/input/remote/base.py +0 -0
  402. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/input/remote/esphome.py +0 -0
  403. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/irrigation/__init__.py +0 -0
  404. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/irrigation/water_source.py +0 -0
  405. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/output/__init__.py +0 -0
  406. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/output/basic.py +0 -0
  407. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/output/buzzer.py +0 -0
  408. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/output/mcp.py +0 -0
  409. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/output/pca.py +0 -0
  410. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/output/pcf.py +0 -0
  411. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/output/remote.py +0 -0
  412. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/sensor/__init__.py +0 -0
  413. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/sensor/virtual_energy.py +0 -0
  414. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/template/__init__.py +0 -0
  415. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/template/alarm_panel.py +0 -0
  416. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/template/gate_cover.py +0 -0
  417. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/components/template/thermostat.py +0 -0
  418. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/const.py +0 -0
  419. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/__init__.py +0 -0
  420. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/cloud/__init__.py +0 -0
  421. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/cloud/data/__init__.py +0 -0
  422. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
  423. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  424. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  425. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/cloud/secrets.py +0 -0
  426. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/__init__.py +0 -0
  427. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/config_helper.py +0 -0
  428. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/migrations/__init__.py +0 -0
  429. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  430. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/migrations/v2_transition.py +0 -0
  431. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/migrations/v5_ina_screen.py +0 -0
  432. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/package-lock.json +0 -0
  433. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/package.json +0 -0
  434. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/schema_converter.py +0 -0
  435. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/config/yaml_compat.py +0 -0
  436. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/discovery.py +0 -0
  437. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/events/__init__.py +0 -0
  438. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/events/bus.py +0 -0
  439. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/__init__.py +0 -0
  440. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/canopen.py +0 -0
  441. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/display.py +0 -0
  442. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/inputs.py +0 -0
  443. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/irrigation.py +0 -0
  444. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/modbus.py +0 -0
  445. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/remote.py +0 -0
  446. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/remote_input_registrar.py +0 -0
  447. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/templates/__init__.py +0 -0
  448. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/templates/alarm.py +0 -0
  449. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/templates/gate_cover.py +0 -0
  450. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/templates/thermostat.py +0 -0
  451. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/manager/templates.py +0 -0
  452. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/messaging/__init__.py +0 -0
  453. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/messaging/basic.py +0 -0
  454. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/messaging/basic_mqtt.py +0 -0
  455. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/messaging/composite.py +0 -0
  456. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/messaging/local.py +0 -0
  457. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/messaging/lox.py +0 -0
  458. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/messaging/queue.py +0 -0
  459. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/remote/__init__.py +0 -0
  460. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/remote/base.py +0 -0
  461. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/remote/can.py +0 -0
  462. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/remote/mqtt.py +0 -0
  463. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/remote/wled.py +0 -0
  464. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/remote/wled_cache.py +0 -0
  465. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/sensor/__init__.py +0 -0
  466. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/sensor/base.py +0 -0
  467. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/sensor/system.py +0 -0
  468. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/state/__init__.py +0 -0
  469. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/state/manager.py +0 -0
  470. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/system/__init__.py +0 -0
  471. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/system/host_data.py +0 -0
  472. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/utils/__init__.py +0 -0
  473. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/utils/filter.py +0 -0
  474. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/utils/font_util.py +0 -0
  475. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/utils/logger.py +0 -0
  476. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/utils/timeperiod.py +0 -0
  477. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/core/utils/util.py +0 -0
  478. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/24x16/adc.yaml +0 -0
  479. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  480. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/24x16/config.yaml +0 -0
  481. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/24x16/event.yaml +0 -0
  482. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/24x16/mqtt.yaml +0 -0
  483. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  484. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/32x10/adc.yaml +0 -0
  485. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  486. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/32x10/config.yaml +0 -0
  487. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/32x10/event.yaml +0 -0
  488. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/32x10/mqtt.yaml +0 -0
  489. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  490. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/48x4/adc.yaml +0 -0
  491. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  492. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/48x4/config.yaml +0 -0
  493. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/48x4/event.yaml +0 -0
  494. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/48x4/mqtt.yaml +0 -0
  495. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  496. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/__init__.py +0 -0
  497. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/can_master.yaml +0 -0
  498. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/can_slave.yaml +0 -0
  499. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover/adc.yaml +0 -0
  500. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  501. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover/config.yaml +0 -0
  502. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover/cover.yaml +0 -0
  503. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover/event.yaml +0 -0
  504. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover/mqtt.yaml +0 -0
  505. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover/outputCover.yaml +0 -0
  506. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/adc.yaml +0 -0
  507. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  508. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/config.yaml +0 -0
  509. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/cover.yaml +0 -0
  510. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/event.yaml +0 -0
  511. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  512. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  513. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/adc.yaml +0 -0
  514. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  515. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  516. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  517. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  518. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/event_all.yaml +0 -0
  519. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  520. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  521. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  522. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  523. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  524. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  525. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/exceptions.py +0 -0
  526. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/__init__.py +0 -0
  527. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/analog/__init__.py +0 -0
  528. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/analog/adc.py +0 -0
  529. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/can/__init__.py +0 -0
  530. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/can/bridge.py +0 -0
  531. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/can/client.py +0 -0
  532. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/can/node.py +0 -0
  533. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/can/node_id.py +0 -0
  534. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/can/test_od.py +0 -0
  535. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/display/__init__.py +0 -0
  536. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/display/early_oled.py +0 -0
  537. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  538. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/gpio/__init__.py +0 -0
  539. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  540. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  541. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  542. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/gpio/input/__init__.py +0 -0
  543. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/gpio/input/base.py +0 -0
  544. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/gpio/input/manager.py +0 -0
  545. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/i2c/__init__.py +0 -0
  546. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/i2c/bus.py +0 -0
  547. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/i2c/ina219.py +0 -0
  548. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/i2c/ina219_driver.py +0 -0
  549. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/i2c/ina226.py +0 -0
  550. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/i2c/ina226_driver.py +0 -0
  551. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/i2c/mcp9808.py +0 -0
  552. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/i2c/pct2075.py +0 -0
  553. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/onewire/__init__.py +0 -0
  554. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/onewire/dallas.py +0 -0
  555. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/sensor/__init__.py +0 -0
  556. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  557. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/sensor/temperature/base.py +0 -0
  558. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  559. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  560. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/integration/__init__.py +0 -0
  561. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/integration/interlock.py +0 -0
  562. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/integration/lox_template.py +0 -0
  563. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/__init__.py +0 -0
  564. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/docker/daemon.json +0 -0
  565. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
  566. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
  567. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  568. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/modules-load.d/onewire.conf +0 -0
  569. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  570. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
  571. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  572. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  573. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  574. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  575. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  576. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
  577. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  578. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  579. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/versions/__init__.py +0 -0
  580. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  581. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  582. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
  583. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
  584. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
  585. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
  586. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
  587. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/migrations/versions/v1_5_4_onewire_modules.py +0 -0
  588. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/__init__.py +0 -0
  589. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/cli.py +0 -0
  590. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/client.py +0 -0
  591. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/coordinator.py +0 -0
  592. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/__init__.py +0 -0
  593. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
  594. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  595. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  596. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  597. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  598. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  599. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  600. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  601. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
  602. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  603. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/hvac/thessla.json +0 -0
  604. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  605. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/inverters/sofar.json +0 -0
  606. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  607. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  608. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  609. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  610. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/cwt.json +0 -0
  611. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  612. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  613. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  614. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  615. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/pt100.json +0 -0
  616. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
  617. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/sht20.json +0 -0
  618. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/devices/sensors/sht30.json +0 -0
  619. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/__init__.py +0 -0
  620. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/base.py +0 -0
  621. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/derived/__init__.py +0 -0
  622. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/derived/numeric.py +0 -0
  623. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/derived/select.py +0 -0
  624. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/derived/switch.py +0 -0
  625. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/derived/text.py +0 -0
  626. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/sensor/__init__.py +0 -0
  627. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/sensor/binary.py +0 -0
  628. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/sensor/numeric.py +0 -0
  629. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/sensor/text.py +0 -0
  630. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/writeable/__init__.py +0 -0
  631. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/writeable/binary.py +0 -0
  632. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/entities/writeable/numeric.py +0 -0
  633. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/mock_coordinator.py +0 -0
  634. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/modbus/utils.py +0 -0
  635. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/models/__init__.py +0 -0
  636. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/models/actions.py +0 -0
  637. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/models/events.py +0 -0
  638. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/models/files.py +0 -0
  639. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/models/logs.py +0 -0
  640. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/models/mqtt.py +0 -0
  641. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/models/state.py +0 -0
  642. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/actions.yaml +0 -0
  643. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/actions_sensor.yaml +0 -0
  644. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/actions_switch.yaml +0 -0
  645. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/filters.yaml +0 -0
  646. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/filters_adc.yaml +0 -0
  647. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/id.yaml +0 -0
  648. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/remote_devices.yaml +0 -0
  649. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/remote_inputs.yaml +0 -0
  650. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/remote_outputs.yaml +0 -0
  651. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/temp_unit.yaml +0 -0
  652. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/schema/update_interval.yaml +0 -0
  653. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/dashboard_cards.py +0 -0
  654. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/basePath-CxHj-SSK.js +0 -0
  655. /boneio-1.6.0.dev1/boneio/webui/frontend-dist/assets/rolldown-runtime-QTnfLwEv.js → /boneio-1.6.0.dev3/boneio/webui/frontend-dist/assets/chunk-QTnfLwEv.js +0 -0
  656. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
  657. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  658. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/editor.worker-Cn2oRESe.js +0 -0
  659. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/formatters-zOiGPJLh.js +0 -0
  660. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/longPress-Dx7OCSyP.js +0 -0
  661. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
  662. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
  663. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  664. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  665. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/boneio.svg +0 -0
  666. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  667. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  668. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  669. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  670. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  671. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  672. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  673. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  674. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  675. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/ina226.schema.json +0 -0
  676. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  677. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  678. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  679. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  680. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  681. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  682. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  683. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  684. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  685. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  686. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  687. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  688. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  689. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  690. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
  691. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
  692. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  693. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  694. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  695. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/hvac_svg_templates.py +0 -0
  696. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/middleware/__init__.py +0 -0
  697. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/modbus_card_templates.py +0 -0
  698. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/config_backups.py +0 -0
  699. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/config_discovery.py +0 -0
  700. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/covers.py +0 -0
  701. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/dashboard.py +0 -0
  702. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/dev_fake_device.py +0 -0
  703. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/irrigation.py +0 -0
  704. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/migrations.py +0 -0
  705. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/modbus.py +0 -0
  706. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/mqtt_reference.py +0 -0
  707. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/outputs.py +0 -0
  708. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/templates.py +0 -0
  709. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/routes/tools.py +0 -0
  710. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/adc.schema.json +0 -0
  711. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/areas.schema.json +0 -0
  712. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/boneio.schema.json +0 -0
  713. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/can.schema.json +0 -0
  714. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/cover.schema.json +0 -0
  715. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/dallas.schema.json +0 -0
  716. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/ds2482.schema.json +0 -0
  717. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/ina219.schema.json +0 -0
  718. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/ina226.schema.json +0 -0
  719. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/irrigation.schema.json +0 -0
  720. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/lm75.schema.json +0 -0
  721. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/logger.schema.json +0 -0
  722. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/lox_udp.schema.json +0 -0
  723. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/mcp23017.schema.json +0 -0
  724. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/mcp9808.schema.json +0 -0
  725. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/modbus.schema.json +0 -0
  726. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/mqtt.schema.json +0 -0
  727. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/oled.schema.json +0 -0
  728. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/output.schema.json +0 -0
  729. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/output_group.schema.json +0 -0
  730. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/pca9685.schema.json +0 -0
  731. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/pcf8575.schema.json +0 -0
  732. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/remote_devices.schema.json +0 -0
  733. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/remote_inputs.schema.json +0 -0
  734. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/remote_outputs.schema.json +0 -0
  735. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/sensor.schema.json +0 -0
  736. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/template.schema.json +0 -0
  737. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  738. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/services/__init__.py +0 -0
  739. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/services/logs.py +0 -0
  740. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/sudo_rate_limiter.py +0 -0
  741. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio/webui/websocket_manager.py +0 -0
  742. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio.egg-info/dependency_links.txt +0 -0
  743. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio.egg-info/entry_points.txt +0 -0
  744. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/boneio.egg-info/top_level.txt +0 -0
  745. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/setup.cfg +0 -0
  746. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/setup.py +0 -0
  747. {boneio-1.6.0.dev1 → boneio-1.6.0.dev3}/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.6.0.dev1
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
@@ -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",
@@ -258,9 +263,6 @@ def run(
258
263
  from boneio.const import ACTION
259
264
  _LOGGER.debug("[RUNNER IMPORT] boneio.const: %.2fs", _time.monotonic() - _t_a)
260
265
  _t_a = _time.monotonic()
261
- from boneio.core.cloud import CloudRegistration
262
- _LOGGER.debug("[RUNNER IMPORT] boneio.core.cloud: %.2fs", _time.monotonic() - _t_a)
263
- _t_a = _time.monotonic()
264
266
  from boneio.core.manager import Manager
265
267
  _LOGGER.debug("[RUNNER IMPORT] boneio.core.manager: %.2fs", _time.monotonic() - _t_a)
266
268
  _t_a = _time.monotonic()
@@ -388,6 +390,10 @@ def main() -> int:
388
390
  mqttpassword=args.mqttpassword,
389
391
  debug=debug,
390
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)
391
397
  elif args.action == "modbus":
392
398
  _LOGGER.info("BoneIO Modbus helper %s .", __version__)
393
399
  exit_code = run_modbus_command(
@@ -61,6 +61,20 @@ class TimeBasedCover(BaseCover):
61
61
  else:
62
62
  return
63
63
 
64
+ if duration == 0:
65
+ # A zero open_time/close_time makes movement impossible: the guard
66
+ # below returns before relay.turn_on(), so the relay is never
67
+ # energised and the motor never gets voltage — while the cover still
68
+ # reports IDLE and publishes state, so the UI looks like it worked.
69
+ # This is always a misconfiguration, never a normal outcome.
70
+ _LOGGER.error(
71
+ "Cover %s cannot move %s: %s_time is 0. The relay will NOT be "
72
+ "switched. Set a non-zero time in the cover configuration.",
73
+ self._id,
74
+ direction,
75
+ "open" if direction == OPEN else "close",
76
+ )
77
+
64
78
  if total_steps == 0 or duration == 0:
65
79
  self._current_operation = IDLE
66
80
  with suppress(RuntimeError):
@@ -93,6 +93,20 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
93
93
  else:
94
94
  total_steps = 1
95
95
 
96
+ if duration == 0:
97
+ # A zero open_time/close_time makes movement impossible: the guard
98
+ # below returns before relay.turn_on(), so the relay is never
99
+ # energised and the motor never gets voltage — while the cover still
100
+ # reports IDLE and publishes state, so the UI looks like it worked.
101
+ # This is always a misconfiguration, never a normal outcome.
102
+ _LOGGER.error(
103
+ "Cover %s cannot move %s: %s_time is 0. The relay will NOT be "
104
+ "switched. Set a non-zero time in the cover configuration.",
105
+ self._id,
106
+ direction,
107
+ "open" if direction == OPEN else "close",
108
+ )
109
+
96
110
  if total_steps == 0 or duration == 0:
97
111
  self._current_operation = IDLE
98
112
  self._loop.call_soon_threadsafe(self.send_state, self.state, self.json_position)
@@ -1010,6 +1010,13 @@ class IrrigationController:
1010
1010
  await self.next_valve()
1011
1011
 
1012
1012
  async def handle_zone_command(self, zone_id: str, payload: str) -> None:
1013
+ """Handle ON/OFF command for a specific zone.
1014
+
1015
+ ON starts the zone in single-zone mode (shutting down any running cycle first).
1016
+ OFF only shuts down the controller if ``zone_id`` matches the currently
1017
+ active zone — this prevents HA state-sync messages (OFF for inactive
1018
+ zones) from killing a running cycle.
1019
+ """
1013
1020
  upper = payload.strip().upper()
1014
1021
  _LOGGER.debug(
1015
1022
  "Irrigation %s handle_zone_command: zone='%s' payload='%s' → upper='%s'", self.id, zone_id, payload, upper
@@ -1017,7 +1024,28 @@ class IrrigationController:
1017
1024
  if upper == ON:
1018
1025
  await self.start_single_zone(zone_id)
1019
1026
  elif upper == OFF:
1020
- await self.shutdown()
1027
+ # Only shutdown if this zone is the one currently running.
1028
+ # HA sends OFF to all zone switches when one is activated,
1029
+ # so we must NOT shutdown the controller for inactive zones.
1030
+ if self._state == ControllerState.IDLE:
1031
+ return
1032
+ active_zone = (
1033
+ self._zones[self._active_zone_idx]
1034
+ if self._active_zone_idx is not None and self._active_zone_idx < len(self._zones)
1035
+ else None
1036
+ )
1037
+ if active_zone is not None and active_zone.id == zone_id:
1038
+ _LOGGER.info(
1039
+ "Irrigation %s: OFF received for active zone '%s' — shutting down",
1040
+ self.id, zone_id,
1041
+ )
1042
+ await self.shutdown()
1043
+ else:
1044
+ _LOGGER.debug(
1045
+ "Irrigation %s: ignoring OFF for zone '%s' (active zone is '%s')",
1046
+ self.id, zone_id,
1047
+ active_zone.id if active_zone else "none",
1048
+ )
1021
1049
 
1022
1050
  async def handle_zone_duration_command(self, zone_id: str, payload: str) -> None:
1023
1051
  """Handle duration change from HA (value in minutes)."""
@@ -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")
@@ -0,0 +1,182 @@
1
+ """Password hashing for boneIO web accounts.
2
+
3
+ Uses scrypt from the standard library, so no new dependency is pulled onto the
4
+ BeagleBone. Parameters live inside the encoded string, which means the cost can
5
+ be raised in a later release without invalidating existing accounts: verify
6
+ still reads the old parameters, and :func:`needs_rehash` tells the caller the
7
+ stored hash is below the current policy so it can be upgraded on next login.
8
+
9
+ The encoding is PHC-inspired and self-describing::
10
+
11
+ $scrypt$n=16384,r=8,p=1$<salt-b64>$<hash-b64>
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ import base64
17
+ import hashlib
18
+ import hmac
19
+ import secrets
20
+
21
+ # Cost parameters. n=2**14 with r=8 needs 128 * n * r = 16 MiB of memory per
22
+ # hash. Measured at ~0.9 s per hash on a BeagleBone Black (armv7l) — slow enough
23
+ # to hurt an offline cracker, and only paid at login: a successful login issues
24
+ # a JWT good for weeks (see TOKEN_TTL_DAYS), so the cost is not on the hot path.
25
+ _SCRYPT_N = 2**14
26
+ _SCRYPT_R = 8
27
+ _SCRYPT_P = 1
28
+ _SALT_BYTES = 16
29
+ _KEY_BYTES = 32
30
+
31
+ _PREFIX = "$scrypt$"
32
+
33
+
34
+ def _b64(raw: bytes) -> str:
35
+ """Encode without padding, so the '=' never collides with the k=v syntax."""
36
+ return base64.b64encode(raw).decode("ascii").rstrip("=")
37
+
38
+
39
+ def _unb64(text: str) -> bytes:
40
+ """Decode a padding-stripped base64 string."""
41
+ return base64.b64decode(text + "=" * (-len(text) % 4))
42
+
43
+
44
+ def hash_password(password: str) -> str:
45
+ """Hash a password with a fresh random salt.
46
+
47
+ Args:
48
+ password: Plain-text password.
49
+
50
+ Returns:
51
+ Self-describing encoded hash, safe to store as-is.
52
+
53
+ Raises:
54
+ ValueError: If the password is empty.
55
+ """
56
+ if not password:
57
+ raise ValueError("Password must not be empty")
58
+
59
+ salt = secrets.token_bytes(_SALT_BYTES)
60
+ derived = hashlib.scrypt(
61
+ password.encode("utf-8"),
62
+ salt=salt,
63
+ n=_SCRYPT_N,
64
+ r=_SCRYPT_R,
65
+ p=_SCRYPT_P,
66
+ dklen=_KEY_BYTES,
67
+ maxmem=_maxmem(_SCRYPT_N, _SCRYPT_R, _SCRYPT_P),
68
+ )
69
+ params = f"n={_SCRYPT_N},r={_SCRYPT_R},p={_SCRYPT_P}"
70
+ return f"{_PREFIX}{params}${_b64(salt)}${_b64(derived)}"
71
+
72
+
73
+ def _maxmem(n: int, r: int, p: int) -> int:
74
+ """Memory ceiling for :func:`hashlib.scrypt`.
75
+
76
+ OpenSSL defaults to a 32 MiB ceiling and refuses anything above it, so the
77
+ limit is computed from the parameters instead of hardcoded — otherwise
78
+ raising the cost in a later release would fail at runtime rather than in a
79
+ test. The formula is scrypt's own footprint plus headroom for the internal
80
+ buffers.
81
+
82
+ Args:
83
+ n: CPU/memory cost.
84
+ r: Block size.
85
+ p: Parallelisation.
86
+
87
+ Returns:
88
+ Byte ceiling to hand to :func:`hashlib.scrypt`.
89
+ """
90
+ return 128 * n * r + 128 * r * p + (1 << 20)
91
+
92
+
93
+ def _parse(encoded: str) -> tuple[dict[str, int], bytes, bytes]:
94
+ """Split an encoded hash into its parameters, salt and digest.
95
+
96
+ Args:
97
+ encoded: String produced by :func:`hash_password`.
98
+
99
+ Returns:
100
+ Tuple of (parameters, salt, digest).
101
+
102
+ Raises:
103
+ ValueError: If the string is not a well-formed scrypt hash.
104
+ """
105
+ if not encoded.startswith(_PREFIX):
106
+ raise ValueError("Unsupported password hash format")
107
+
108
+ try:
109
+ _, algo, params_text, salt_text, hash_text = encoded.split("$")
110
+ except ValueError as err:
111
+ raise ValueError("Malformed password hash") from err
112
+
113
+ if algo != "scrypt":
114
+ raise ValueError(f"Unsupported password hash algorithm: {algo}")
115
+
116
+ params: dict[str, int] = {}
117
+ for item in params_text.split(","):
118
+ key, _, value = item.partition("=")
119
+ try:
120
+ params[key] = int(value)
121
+ except ValueError as err:
122
+ raise ValueError(f"Malformed hash parameter: {item}") from err
123
+
124
+ if not {"n", "r", "p"} <= params.keys():
125
+ raise ValueError("Password hash is missing scrypt parameters")
126
+
127
+ return params, _unb64(salt_text), _unb64(hash_text)
128
+
129
+
130
+ def verify_password(password: str, encoded: str) -> bool:
131
+ """Check a password against a stored hash in constant time.
132
+
133
+ A malformed or unreadable stored hash is treated as a failed verification
134
+ rather than an error: a corrupted ``users.json`` entry must lock that
135
+ account out, not crash the login route for everyone.
136
+
137
+ Args:
138
+ password: Plain-text password supplied by the client.
139
+ encoded: Stored hash to check against.
140
+
141
+ Returns:
142
+ True if the password matches.
143
+ """
144
+ if not password or not encoded:
145
+ return False
146
+
147
+ try:
148
+ params, salt, expected = _parse(encoded)
149
+ derived = hashlib.scrypt(
150
+ password.encode("utf-8"),
151
+ salt=salt,
152
+ n=params["n"],
153
+ r=params["r"],
154
+ p=params["p"],
155
+ dklen=len(expected),
156
+ maxmem=_maxmem(params["n"], params["r"], params["p"]),
157
+ )
158
+ except (ValueError, KeyError, TypeError):
159
+ return False
160
+
161
+ return hmac.compare_digest(derived, expected)
162
+
163
+
164
+ def needs_rehash(encoded: str) -> bool:
165
+ """Report whether a stored hash is weaker than the current policy.
166
+
167
+ Args:
168
+ encoded: Stored hash.
169
+
170
+ Returns:
171
+ True if the hash should be replaced next time the password is known.
172
+ """
173
+ try:
174
+ params, _, _ = _parse(encoded)
175
+ except ValueError:
176
+ return True
177
+
178
+ return (
179
+ params["n"] < _SCRYPT_N
180
+ or params["r"] < _SCRYPT_R
181
+ or params["p"] < _SCRYPT_P
182
+ )