boneio 1.6.0.dev23__tar.gz → 1.6.0.dev25__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 (809) hide show
  1. {boneio-1.6.0.dev23/boneio.egg-info → boneio-1.6.0.dev25}/PKG-INFO +1 -1
  2. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/input/binary_sensor.py +9 -0
  3. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/input/remote/base.py +11 -3
  4. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/input/remote/mqtt.py +14 -2
  5. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/cloud/registration.py +4 -4
  6. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/secret_masking.py +3 -3
  7. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/containers.py +12 -13
  8. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/covers.py +27 -8
  9. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/inputs.py +25 -0
  10. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/manager.py +6 -0
  11. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/outputs.py +4 -0
  12. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/remote_input_registrar.py +1 -1
  13. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/sensors.py +24 -8
  14. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/messaging/basic.py +16 -2
  15. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/messaging/composite.py +8 -2
  16. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/messaging/local.py +12 -2
  17. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/messaging/lox.py +8 -2
  18. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/messaging/mqtt.py +23 -3
  19. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/net/discovery_guard.py +8 -9
  20. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/security/posture.py +11 -6
  21. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/system_ops.py +19 -0
  22. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/gpio/input/manager.py +3 -2
  23. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/MANIFEST.sha256 +4 -1
  24. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/helpers/boneio-system +204 -12
  25. boneio-1.6.0.dev25/boneio/migrations/assets/motd/20-boneio +158 -0
  26. boneio-1.6.0.dev25/boneio/migrations/assets/sshd/20-boneio-banner.conf +6 -0
  27. boneio-1.6.0.dev25/boneio/migrations/assets/sshd/boneio-banner +2 -0
  28. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.17.json +1 -0
  29. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.17.sig +0 -0
  30. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.18.json +1 -0
  31. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.18.sig +0 -0
  32. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.22.json +1 -1
  33. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.22.sig +0 -0
  34. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.26.json +1 -0
  35. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.26.sig +0 -0
  36. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.27.json +1 -0
  37. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.27.sig +0 -0
  38. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.28.json +1 -0
  39. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.28.sig +1 -0
  40. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.29.json +1 -0
  41. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.29.sig +0 -0
  42. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.5.json +1 -1
  43. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.5.sig +0 -0
  44. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.8.json +1 -1
  45. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.8.sig +0 -0
  46. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.9.json +1 -0
  47. boneio-1.6.0.dev25/boneio/migrations/plans/1.6.9.sig +1 -0
  48. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/manifest.json +1 -1
  49. boneio-1.6.0.dev25/boneio/migrations/plans/manifest.sig +2 -0
  50. boneio-1.6.0.dev25/boneio/migrations/versions/v1_6_28_ssh_login_screen.py +102 -0
  51. boneio-1.6.0.dev25/boneio/migrations/versions/v1_6_29_service_password_change.py +61 -0
  52. boneio-1.6.0.dev25/boneio/version.py +2 -0
  53. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/app.py +1 -1
  54. boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/AccountsView-Dbuu2XAZ.js +1 -0
  55. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/AppInitContext-CcKaS8cK.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/AppInitContext-DOBA1DBK.js +1 -1
  56. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/BackupSection-CXs6ghs_.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/BackupSection-D4HCBK7n.js +1 -1
  57. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/BindingMatrix-D43lx3X2.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/BindingMatrix-BYKOMR_H.js +1 -1
  58. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/DeviceControlSection-9wDj7En0.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/DeviceControlSection-EGRQa-cw.js +1 -1
  59. boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/DiagnosticsView-CgEdQ1gm.js +5 -0
  60. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/EntityGrid-DOcXsIHL.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/EntityGrid-CXCnm_HS.js +1 -1
  61. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/FactoryResetSection-D5PxL6PU.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/FactoryResetSection-B0txYzJ_.js +1 -1
  62. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/FormInputToggle-DRYq74jV.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/FormInputToggle-OdOZU9KJ.js +2 -2
  63. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/HaDashboardWizard-BXNeb9iY.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/HaDashboardWizard-DuBJexC2.js +1 -1
  64. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/HostnameSection-CVwt528v.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/HostnameSection-aditrQPz.js +1 -1
  65. boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/InputsView-DCpCaGxW.js +1 -0
  66. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/LocationSection-CvVPCVQJ.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/LocationSection-Bpw9zCWc.js +2 -2
  67. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/LoggerForm-CaP96e_i.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/LoggerForm-CXQrEooe.js +1 -1
  68. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/LongPressWrapper-DvdMubY1.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/LongPressWrapper-CYnkc_VU.js +1 -1
  69. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/MigrationsSection-DhSLu8O7.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/MigrationsSection-BZMCOp20.js +1 -1
  70. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/ModbusView-Yfk24752.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/ModbusView-CAsX3S9V.js +1 -1
  71. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/MqttPasswordsSection-ChX8xfi2.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/MqttPasswordsSection-BLfp2BbC.js +1 -1
  72. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/NodeRedManagement-0OTcCHug.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/NodeRedManagement-DOhCny2V.js +1 -1
  73. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/NodeRedView-CtAdqW4R.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/NodeRedView-DD4OSonB.js +1 -1
  74. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/NumericInput-DNZTgusN.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/NumericInput-Cw4ZtDAj.js +1 -1
  75. boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/OutputsView-CtE_5zM_.js +1 -0
  76. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/SecurityView-CYS7pzN3.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/SecurityView-BEEmRgbt.js +1 -1
  77. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/SensorView-KFUB7I3d.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/SensorView-cIK4xlMj.js +1 -1
  78. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/Sparkline-DbzEbKjI.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/Sparkline-BFRz293c.js +2 -2
  79. boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/SystemState-ChYThsqy.js +2 -0
  80. boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/TemplatesView-DBCQEhKi.js +1 -0
  81. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/TilePicker-BkThBQEp.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/TilePicker-CyMD71jq.js +1 -1
  82. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/TimezoneSection-DjN3itva.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/TimezoneSection-Cq6MXcBF.js +1 -1
  83. boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/UISettings-D01e9sjk.js +100 -0
  84. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-6xbzteiU.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-Bil5a-dp.js +1 -1
  85. boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/ViewToggle-WmyFZWEj.js +1 -0
  86. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/aiConfig-D4fX5HiN.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/aiConfig-B-TXfzlS.js +1 -1
  87. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/aiWizardPrompt-Do2AU6Co.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/aiWizardPrompt-yegKyL0d.js +1 -1
  88. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/bodies-DfJJi5si.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/bodies-QSMnZPsP.js +1 -1
  89. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/dialog-Dyh6AFFV.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/dialog-CkWtsgYG.js +1 -1
  90. boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/fa-i12cJwlu.js +1 -0
  91. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/gi-BPK6jryY.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/gi-BK6tS-OO.js +1 -1
  92. boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/index-CzuwPT1R.js +42 -0
  93. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/index-COqAjAHR.css → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/index-ppSEa9nm.css +1 -1
  94. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/monaco-6sKMMwfA.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/monaco-Bk59qWmZ.js +1 -1
  95. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/monaco-Cq5yJ32W.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/monaco-Cf4GYOeN.js +3 -3
  96. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/select-yXAsrSOf.js → boneio-1.6.0.dev25/boneio/webui/frontend-dist/assets/select-DsR6_rF9.js +1 -1
  97. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/index.html +5 -5
  98. boneio-1.6.0.dev25/boneio/webui/frontend-dist/sw.js +1 -0
  99. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/middleware/auth.py +5 -7
  100. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/middleware/csrf.py +5 -6
  101. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/middleware/policy.py +4 -0
  102. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/rate_limit.py +2 -3
  103. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/accounts.py +175 -4
  104. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/auth.py +43 -18
  105. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/config_core.py +3 -3
  106. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/mqtt_reference.py +8 -3
  107. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/nodered.py +1 -1
  108. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/onboarding.py +1 -1
  109. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/remote_devices.py +6 -6
  110. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/security.py +6 -0
  111. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/system.py +5 -7
  112. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/update.py +13 -6
  113. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/security_events.py +1 -1
  114. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/security_headers.py +2 -3
  115. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25/boneio.egg-info}/PKG-INFO +1 -1
  116. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio.egg-info/SOURCES.txt +52 -43
  117. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.17.json +0 -1
  118. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.17.sig +0 -2
  119. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.18.json +0 -1
  120. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.18.sig +0 -2
  121. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.22.sig +0 -0
  122. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.26.json +0 -1
  123. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.26.sig +0 -2
  124. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.27.json +0 -1
  125. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.27.sig +0 -2
  126. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.5.sig +0 -0
  127. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.8.sig +0 -1
  128. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.9.json +0 -1
  129. boneio-1.6.0.dev23/boneio/migrations/plans/1.6.9.sig +0 -0
  130. boneio-1.6.0.dev23/boneio/migrations/plans/manifest.sig +0 -0
  131. boneio-1.6.0.dev23/boneio/version.py +0 -2
  132. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/AccountsView-Cja7P4mF.js +0 -1
  133. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/DiagnosticsView-CiELKgPW.js +0 -5
  134. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/InputsView-BzNWV5-A.js +0 -1
  135. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/OutputsView-BDRW725-.js +0 -1
  136. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/SystemState-CwEqCEJ1.js +0 -2
  137. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/TemplatesView-B7TRhXE_.js +0 -1
  138. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/UISettings-BzSc-26d.js +0 -100
  139. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/ViewToggle-B-Y9KKFZ.js +0 -1
  140. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/fa-BhM0fApf.js +0 -1
  141. boneio-1.6.0.dev23/boneio/webui/frontend-dist/assets/index-CxfYcGSv.js +0 -42
  142. boneio-1.6.0.dev23/boneio/webui/frontend-dist/sw.js +0 -1
  143. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/LICENSE +0 -0
  144. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/MANIFEST.in +0 -0
  145. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/README.md +0 -0
  146. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/__init__.py +0 -0
  147. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.2/input.yaml +0 -0
  148. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.2/output_24_16.yaml +0 -0
  149. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.2/output_32_10.yaml +0 -0
  150. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.2/output_32_5.yaml +0 -0
  151. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.2/output_cover.yaml +0 -0
  152. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  153. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.3/input.yaml +0 -0
  154. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.3/output_24_16.yaml +0 -0
  155. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.3/output_32_10.yaml +0 -0
  156. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.3/output_32_5.yaml +0 -0
  157. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.3/output_cover.yaml +0 -0
  158. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  159. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.4/input.yaml +0 -0
  160. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.4/output_24_16.yaml +0 -0
  161. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.4/output_32_10.yaml +0 -0
  162. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.4/output_32_5.yaml +0 -0
  163. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.4/output_cover.yaml +0 -0
  164. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  165. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.5/input.yaml +0 -0
  166. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.5/output_24_16.yaml +0 -0
  167. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.5/output_32_10.yaml +0 -0
  168. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.5/output_cover.yaml +0 -0
  169. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  170. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.6/input.yaml +0 -0
  171. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.6/output_24_16.yaml +0 -0
  172. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.6/output_32_10.yaml +0 -0
  173. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.6/output_cover.yaml +0 -0
  174. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  175. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.7/input.yaml +0 -0
  176. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.7/output_24_16.yaml +0 -0
  177. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.7/output_32_10.yaml +0 -0
  178. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.7/output_48_4.yaml +0 -0
  179. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.7/output_cover.yaml +0 -0
  180. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  181. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.8/input.yaml +0 -0
  182. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.8/output_24_16.yaml +0 -0
  183. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.8/output_32_10.yaml +0 -0
  184. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.8/output_48_4.yaml +0 -0
  185. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.8/output_cover.yaml +0 -0
  186. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  187. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.0/input.yaml +0 -0
  188. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.0/output_24_16.yaml +0 -0
  189. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.0/output_32_10.yaml +0 -0
  190. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.0/output_48_4.yaml +0 -0
  191. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.0/output_cover.yaml +0 -0
  192. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
  193. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.1/input.yaml +0 -0
  194. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.1/output_24_16.yaml +0 -0
  195. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.1/output_32_10.yaml +0 -0
  196. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.1/output_48_4.yaml +0 -0
  197. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.1/output_cover.yaml +0 -0
  198. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/boards/1.1/output_cover_mix.yaml +0 -0
  199. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/bonecli.py +0 -0
  200. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/__init__.py +0 -0
  201. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/cover/__init__.py +0 -0
  202. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/cover/cover.py +0 -0
  203. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/cover/remote.py +0 -0
  204. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/cover/time_based.py +0 -0
  205. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/cover/venetian.py +0 -0
  206. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/group/__init__.py +0 -0
  207. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/group/output_group.py +0 -0
  208. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/input/__init__.py +0 -0
  209. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/input/detectors.py +0 -0
  210. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/input/event.py +0 -0
  211. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/input/remote/__init__.py +0 -0
  212. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/input/remote/esphome.py +0 -0
  213. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/irrigation/__init__.py +0 -0
  214. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/irrigation/controller.py +0 -0
  215. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/irrigation/water_source.py +0 -0
  216. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/output/__init__.py +0 -0
  217. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/output/basic.py +0 -0
  218. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/output/buzzer.py +0 -0
  219. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/output/mcp.py +0 -0
  220. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/output/pca.py +0 -0
  221. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/output/pcf.py +0 -0
  222. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/output/remote.py +0 -0
  223. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/sensor/__init__.py +0 -0
  224. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/sensor/virtual_energy.py +0 -0
  225. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/template/__init__.py +0 -0
  226. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/template/alarm_panel.py +0 -0
  227. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/template/gate_cover.py +0 -0
  228. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/template/thermostat.py +0 -0
  229. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/components/virtual_switch.py +0 -0
  230. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/const.py +0 -0
  231. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/__init__.py +0 -0
  232. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/atomic_file.py +0 -0
  233. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/auth/__init__.py +0 -0
  234. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/auth/cli.py +0 -0
  235. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/auth/hashing.py +0 -0
  236. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/auth/jwt_secret.py +0 -0
  237. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/auth/migration.py +0 -0
  238. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/auth/models.py +0 -0
  239. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/auth/store.py +0 -0
  240. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/cloud/__init__.py +0 -0
  241. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/cloud/data/__init__.py +0 -0
  242. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  243. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  244. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/cloud/secrets.py +0 -0
  245. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/__init__.py +0 -0
  246. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/config_helper.py +0 -0
  247. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/input_bindings.py +0 -0
  248. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/migrations/__init__.py +0 -0
  249. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  250. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/migrations/v2_transition.py +0 -0
  251. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/migrations/v4_wled_cache.py +0 -0
  252. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/migrations/v5_ina_screen.py +0 -0
  253. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/migrations/v6_input_keys.py +0 -0
  254. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/migrations/v7_mqtt_password_secret.py +0 -0
  255. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/package-lock.json +0 -0
  256. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/package.json +0 -0
  257. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/provenance.py +0 -0
  258. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/schema_converter.py +0 -0
  259. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/write_lock.py +0 -0
  260. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/yaml_compat.py +0 -0
  261. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/yaml_patch.py +0 -0
  262. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/config/yaml_util.py +0 -0
  263. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/diagnostics/__init__.py +0 -0
  264. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/diagnostics/collect.py +0 -0
  265. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/discovery.py +0 -0
  266. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/events/__init__.py +0 -0
  267. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/events/bus.py +0 -0
  268. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/__init__.py +0 -0
  269. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/action_conditions.py +0 -0
  270. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/canopen.py +0 -0
  271. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/display.py +0 -0
  272. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/irrigation.py +0 -0
  273. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/modbus.py +0 -0
  274. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/remote.py +0 -0
  275. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/scheduler.py +0 -0
  276. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/security_alert.py +0 -0
  277. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/sun.py +0 -0
  278. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/templates/__init__.py +0 -0
  279. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/templates/alarm.py +0 -0
  280. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/templates/gate_cover.py +0 -0
  281. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/templates/thermostat.py +0 -0
  282. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/templates.py +0 -0
  283. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/update.py +0 -0
  284. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/manager/virtual_switches.py +0 -0
  285. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/messaging/__init__.py +0 -0
  286. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/messaging/basic_mqtt.py +0 -0
  287. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/messaging/queue.py +0 -0
  288. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/net/__init__.py +0 -0
  289. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/recovery.py +0 -0
  290. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/remote/__init__.py +0 -0
  291. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/remote/base.py +0 -0
  292. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/remote/can.py +0 -0
  293. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/remote/esphome.py +0 -0
  294. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/remote/mqtt.py +0 -0
  295. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/remote/wled.py +0 -0
  296. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/remote/wled_cache.py +0 -0
  297. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/security/__init__.py +0 -0
  298. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/security/certificate.py +0 -0
  299. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/security/framing.py +0 -0
  300. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/sensor/__init__.py +0 -0
  301. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/sensor/base.py +0 -0
  302. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/sensor/sun.py +0 -0
  303. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/sensor/system.py +0 -0
  304. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/state/__init__.py +0 -0
  305. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/state/manager.py +0 -0
  306. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/system/__init__.py +0 -0
  307. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/system/host_data.py +0 -0
  308. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/system/monitor.py +0 -0
  309. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/utils/__init__.py +0 -0
  310. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/utils/async_updater.py +0 -0
  311. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/utils/conditions.py +0 -0
  312. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/utils/filter.py +0 -0
  313. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/utils/font_util.py +0 -0
  314. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/utils/logger.py +0 -0
  315. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/utils/naming.py +0 -0
  316. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/utils/overlay.py +0 -0
  317. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/utils/sun.py +0 -0
  318. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/utils/timeperiod.py +0 -0
  319. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/core/utils/util.py +0 -0
  320. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/24x16/adc.yaml +0 -0
  321. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  322. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/24x16/config.yaml +0 -0
  323. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/24x16/event.yaml +0 -0
  324. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/24x16/mqtt.yaml +0 -0
  325. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  326. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/32x10/adc.yaml +0 -0
  327. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  328. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/32x10/config.yaml +0 -0
  329. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/32x10/event.yaml +0 -0
  330. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/32x10/mqtt.yaml +0 -0
  331. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  332. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/48x4/adc.yaml +0 -0
  333. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  334. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/48x4/config.yaml +0 -0
  335. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/48x4/event.yaml +0 -0
  336. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/48x4/mqtt.yaml +0 -0
  337. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  338. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/__init__.py +0 -0
  339. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/can_master.yaml +0 -0
  340. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/can_slave.yaml +0 -0
  341. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover/adc.yaml +0 -0
  342. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  343. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover/config.yaml +0 -0
  344. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover/cover.yaml +0 -0
  345. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover/event.yaml +0 -0
  346. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover/mqtt.yaml +0 -0
  347. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover/outputCover.yaml +0 -0
  348. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover_mix/adc.yaml +0 -0
  349. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  350. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover_mix/config.yaml +0 -0
  351. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover_mix/cover.yaml +0 -0
  352. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover_mix/event.yaml +0 -0
  353. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  354. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  355. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/adc.yaml +0 -0
  356. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  357. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  358. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  359. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  360. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/event_all.yaml +0 -0
  361. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  362. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  363. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  364. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  365. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  366. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  367. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/exceptions.py +0 -0
  368. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/__init__.py +0 -0
  369. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/analog/__init__.py +0 -0
  370. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/analog/adc.py +0 -0
  371. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/can/__init__.py +0 -0
  372. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/can/bridge.py +0 -0
  373. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/can/client.py +0 -0
  374. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/can/interface.py +0 -0
  375. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/can/node.py +0 -0
  376. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/can/node_id.py +0 -0
  377. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/can/test_od.py +0 -0
  378. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/display/__init__.py +0 -0
  379. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/display/early_oled.py +0 -0
  380. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  381. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/display/oled.py +0 -0
  382. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/gpio/__init__.py +0 -0
  383. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  384. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  385. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  386. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  387. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/gpio/input/__init__.py +0 -0
  388. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/gpio/input/base.py +0 -0
  389. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/i2c/__init__.py +0 -0
  390. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/i2c/bus.py +0 -0
  391. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/i2c/ina219.py +0 -0
  392. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/i2c/ina219_driver.py +0 -0
  393. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/i2c/ina226.py +0 -0
  394. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/i2c/ina226_driver.py +0 -0
  395. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/i2c/mcp9808.py +0 -0
  396. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/i2c/pct2075.py +0 -0
  397. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/onewire/__init__.py +0 -0
  398. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/onewire/dallas.py +0 -0
  399. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/sensor/__init__.py +0 -0
  400. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  401. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/sensor/temperature/base.py +0 -0
  402. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  403. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  404. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/hardware/udev_wait.py +0 -0
  405. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/integration/__init__.py +0 -0
  406. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/integration/homeassistant.py +0 -0
  407. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/integration/interlock.py +0 -0
  408. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/integration/lox_template.py +0 -0
  409. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/__init__.py +0 -0
  410. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/actions.py +0 -0
  411. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/apt/52boneio-periodic +0 -0
  412. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/apt/52boneio-unattended +0 -0
  413. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/docker/daemon.json +0 -0
  414. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
  415. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
  416. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/docker/nodered/docker-compose-cloud.yaml +0 -0
  417. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  418. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
  419. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/helpers/boneio-containers +0 -0
  420. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/helpers/boneio-helpers-heal +0 -0
  421. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/helpers/boneio-migrate-v2 +0 -0
  422. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/issue.d/10-boneio.issue +0 -0
  423. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/journald/boneio-console.conf +0 -0
  424. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/journald/journald.conf +0 -0
  425. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/kernel/postinst-boneio-overlay +0 -0
  426. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/migrations-recovery.pem +0 -0
  427. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/migrations.pem +0 -0
  428. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/modules-load.d/onewire.conf +0 -0
  429. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  430. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/sshd/10-boneio-hardening.conf +0 -0
  431. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/sudoers/boneio +0 -0
  432. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/sudoers/boneio-helpers +0 -0
  433. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/sudoers/boneio-timedatectl +0 -0
  434. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/boneio-dpkg-recover.service +0 -0
  435. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/boneio-helpers-heal.service +0 -0
  436. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
  437. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
  438. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/boneio.service +0 -0
  439. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/dropins/apt-daily-priority.conf +0 -0
  440. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/dropins/avahi-daemon-defer.conf +0 -0
  441. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/dropins/bb-usb-gadgets-defer.conf +0 -0
  442. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/dropins/mosquitto-priority.conf +0 -0
  443. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/dropins/timer-no-persistent.conf +0 -0
  444. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/dropins/user-manager-defer.conf +0 -0
  445. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/linger-marker +0 -0
  446. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  447. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
  448. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  449. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  450. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  451. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  452. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
  453. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/bootstrap/boneio-migrate +0 -0
  454. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  455. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  456. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.3.0.json +0 -0
  457. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.3.0.sig +0 -0
  458. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.3.1.json +0 -0
  459. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.3.1.sig +0 -0
  460. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.3.2.json +0 -0
  461. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.3.2.sig +0 -0
  462. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.4.0.json +0 -0
  463. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.4.0.sig +0 -0
  464. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.4.3.json +0 -0
  465. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.4.3.sig +0 -0
  466. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.4.4.json +0 -0
  467. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.4.4.sig +0 -0
  468. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.0.json +0 -0
  469. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.0.sig +0 -0
  470. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.1.json +0 -0
  471. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.1.sig +0 -0
  472. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.10.json +0 -0
  473. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.10.sig +0 -0
  474. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.11.json +0 -0
  475. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.11.sig +0 -0
  476. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.12.json +0 -0
  477. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.12.sig +0 -0
  478. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.13.json +0 -0
  479. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.13.sig +0 -0
  480. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.14.json +0 -0
  481. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.14.sig +0 -0
  482. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.15.json +0 -0
  483. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.15.sig +0 -0
  484. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.16.json +0 -0
  485. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.16.sig +0 -0
  486. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.17.json +0 -0
  487. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.17.sig +0 -0
  488. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.18.json +0 -0
  489. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.18.sig +0 -0
  490. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.2.json +0 -0
  491. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.2.sig +0 -0
  492. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.3.json +0 -0
  493. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.3.sig +0 -0
  494. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.4.json +0 -0
  495. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.4.sig +0 -0
  496. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.5.json +0 -0
  497. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.5.sig +0 -0
  498. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.6.json +0 -0
  499. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.6.sig +0 -0
  500. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.7.json +0 -0
  501. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.7.sig +0 -0
  502. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.8.json +0 -0
  503. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.8.sig +0 -0
  504. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.9.json +0 -0
  505. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.5.9.sig +0 -0
  506. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.0.json +0 -0
  507. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.0.sig +0 -0
  508. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.1.json +0 -0
  509. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.1.sig +0 -0
  510. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.10.json +0 -0
  511. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.10.sig +0 -0
  512. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.11.json +0 -0
  513. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.11.sig +0 -0
  514. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.12.json +0 -0
  515. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.12.sig +0 -0
  516. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.13.json +0 -0
  517. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.13.sig +0 -0
  518. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.14.json +0 -0
  519. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.14.sig +0 -0
  520. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.15.json +0 -0
  521. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.15.sig +0 -0
  522. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.16.json +0 -0
  523. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.16.sig +0 -0
  524. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.19.json +0 -0
  525. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.19.sig +0 -0
  526. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.2.json +0 -0
  527. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.2.sig +0 -0
  528. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.20.json +0 -0
  529. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.20.sig +0 -0
  530. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.21.json +0 -0
  531. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.21.sig +0 -0
  532. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.23.json +0 -0
  533. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.23.sig +0 -0
  534. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.24.json +0 -0
  535. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.24.sig +0 -0
  536. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.25.json +0 -0
  537. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.25.sig +0 -0
  538. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.3.json +0 -0
  539. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.3.sig +0 -0
  540. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.4.json +0 -0
  541. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.4.sig +0 -0
  542. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.6.json +0 -0
  543. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.6.sig +0 -0
  544. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.7.json +0 -0
  545. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/plans/1.6.7.sig +0 -0
  546. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/runner.py +0 -0
  547. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/__init__.py +0 -0
  548. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
  549. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  550. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  551. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
  552. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
  553. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
  554. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
  555. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_10_disable_console_setup.py +0 -0
  556. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_11_timer_catchup.py +0 -0
  557. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_12_oled_splash_off_critical_path.py +0 -0
  558. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_13_mosquitto_priority.py +0 -0
  559. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_14_journal_apparent_size.py +0 -0
  560. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_15_prune_orphan_journals.py +0 -0
  561. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_16_login_linger.py +0 -0
  562. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_17_defer_user_manager.py +0 -0
  563. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_18_fix_hostname_once.py +0 -0
  564. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
  565. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_2_libyaml.py +0 -0
  566. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -0
  567. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_4_onewire_modules.py +0 -0
  568. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_5_overlay_kernel_hook.py +0 -0
  569. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_6_boot_service_order.py +0 -0
  570. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_7_journald_limits.py +0 -0
  571. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_8_apparmor_prune.py +0 -0
  572. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_5_9_defer_nonessential.py +0 -0
  573. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_0_nodered_admin_auth.py +0 -0
  574. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_10_narrow_sudo_rules.py +0 -0
  575. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_11_drop_docker_group.py +0 -0
  576. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_12_console_shows_ip.py +0 -0
  577. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_13_custom_certificate.py +0 -0
  578. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_14_certificate_lifetime.py +0 -0
  579. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_15_web_port_reaches_caddy.py +0 -0
  580. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_16_release_floor_ordering.py +0 -0
  581. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_17_service_password.py +0 -0
  582. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_18_os_updates.py +0 -0
  583. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_19_helper_apt_purge.py +0 -0
  584. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py +0 -0
  585. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_20_drop_packagekit.py +0 -0
  586. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_21_caddy_pinned.py +0 -0
  587. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_22_security_autoupdates.py +0 -0
  588. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_23_helper_fstab_options.py +0 -0
  589. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_24_boot_partition_nofail.py +0 -0
  590. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_25_journal_to_serial_console.py +0 -0
  591. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_26_kernel_check_old_images.py +0 -0
  592. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_27_startup_overlay_repair.py +0 -0
  593. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py +0 -0
  594. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py +0 -0
  595. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_4_ssh_login_hardening.py +0 -0
  596. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_5_trust_transition.py +0 -0
  597. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_6_retire_legacy_helper.py +0 -0
  598. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_7_timedatectl_sudoers.py +0 -0
  599. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_8_system_helper.py +0 -0
  600. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/migrations/versions/v1_6_9_ntp_servers.py +0 -0
  601. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/__init__.py +0 -0
  602. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/cli.py +0 -0
  603. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/client.py +0 -0
  604. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/coordinator.py +0 -0
  605. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/__init__.py +0 -0
  606. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
  607. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  608. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  609. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  610. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  611. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  612. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  613. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  614. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/hvac/defro-drx.json +0 -0
  615. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
  616. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  617. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/hvac/thessla.json +0 -0
  618. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  619. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/hvac/wanas415.json +0 -0
  620. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/inverters/sofar.json +0 -0
  621. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  622. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  623. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  624. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  625. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/sensors/cwt.json +0 -0
  626. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  627. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  628. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  629. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  630. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/sensors/pt100.json +0 -0
  631. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
  632. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/sensors/sht20.json +0 -0
  633. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/devices/sensors/sht30.json +0 -0
  634. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/__init__.py +0 -0
  635. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/base.py +0 -0
  636. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/derived/__init__.py +0 -0
  637. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/derived/numeric.py +0 -0
  638. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/derived/select.py +0 -0
  639. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/derived/switch.py +0 -0
  640. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/derived/text.py +0 -0
  641. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/sensor/__init__.py +0 -0
  642. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/sensor/binary.py +0 -0
  643. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/sensor/numeric.py +0 -0
  644. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/sensor/text.py +0 -0
  645. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/writeable/__init__.py +0 -0
  646. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/writeable/binary.py +0 -0
  647. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/entities/writeable/numeric.py +0 -0
  648. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/mock_coordinator.py +0 -0
  649. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/modbus/utils.py +0 -0
  650. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/models/__init__.py +0 -0
  651. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/models/actions.py +0 -0
  652. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/models/events.py +0 -0
  653. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/models/files.py +0 -0
  654. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/models/logs.py +0 -0
  655. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/models/mqtt.py +0 -0
  656. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/models/state.py +0 -0
  657. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/runner.py +0 -0
  658. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/actions.yaml +0 -0
  659. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/actions_sensor.yaml +0 -0
  660. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/actions_switch.yaml +0 -0
  661. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/condition.yaml +0 -0
  662. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/filters.yaml +0 -0
  663. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/filters_adc.yaml +0 -0
  664. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/id.yaml +0 -0
  665. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/remote_devices.yaml +0 -0
  666. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/remote_inputs.yaml +0 -0
  667. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/remote_outputs.yaml +0 -0
  668. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/schema.yaml +0 -0
  669. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/temp_unit.yaml +0 -0
  670. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/schema/update_interval.yaml +0 -0
  671. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/action_validation.py +0 -0
  672. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/bind.py +0 -0
  673. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/dashboard_cards.py +0 -0
  674. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/axios-DulIOGd1.js +0 -0
  675. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/basePath-CxHj-SSK.js +0 -0
  676. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
  677. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  678. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/configCache-CPKXFBoa.js +0 -0
  679. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/editor.worker-O-CH8JUO.js +0 -0
  680. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/formatters-Cc0QIRxb.js +0 -0
  681. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
  682. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/rolldown-runtime-hePW80VL.js +0 -0
  683. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/utils-DOQQTBMN.js +0 -0
  684. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
  685. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/assets/yaml.worker-CeS-z5zL.js +0 -0
  686. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  687. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  688. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/boneio.svg +0 -0
  689. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  690. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  691. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  692. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  693. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  694. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  695. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/config.schema.json +0 -0
  696. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  697. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  698. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  699. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  700. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  701. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/ina226.schema.json +0 -0
  702. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  703. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  704. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/location.schema.json +0 -0
  705. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  706. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  707. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  708. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  709. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  710. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
  711. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  712. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  713. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/osdp.schema.json +0 -0
  714. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  715. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  716. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  717. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  718. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  719. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
  720. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
  721. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/schedule.schema.json +0 -0
  722. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  723. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  724. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  725. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/virtual_switch.schema.json +0 -0
  726. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
  727. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/frontend-dist/workbox-7e79c025.js +0 -0
  728. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/hvac_svg_templates.py +0 -0
  729. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/middleware/__init__.py +0 -0
  730. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/middleware/proxy.py +0 -0
  731. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/modbus_card_templates.py +0 -0
  732. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/recovery/__init__.py +0 -0
  733. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/recovery/app.py +0 -0
  734. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/recovery/server.py +0 -0
  735. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/recovery/static/index.html +0 -0
  736. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/recovery/static/recovery.css +0 -0
  737. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/recovery/static/recovery.js +0 -0
  738. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/__init__.py +0 -0
  739. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/can.py +0 -0
  740. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/config.py +0 -0
  741. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/config_actions.py +0 -0
  742. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/config_backups.py +0 -0
  743. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/config_discovery.py +0 -0
  744. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/config_files.py +0 -0
  745. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/covers.py +0 -0
  746. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/dashboard.py +0 -0
  747. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/dev_fake_device.py +0 -0
  748. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/diagnostics.py +0 -0
  749. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/irrigation.py +0 -0
  750. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/migrations.py +0 -0
  751. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/modbus.py +0 -0
  752. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/os_update.py +0 -0
  753. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/outputs.py +0 -0
  754. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/schedule.py +0 -0
  755. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/sensors.py +0 -0
  756. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/sun.py +0 -0
  757. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/templates.py +0 -0
  758. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/timezone_sudoers.py +0 -0
  759. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/routes/tools.py +0 -0
  760. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/adc.schema.json +0 -0
  761. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/areas.schema.json +0 -0
  762. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  763. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/boneio.schema.json +0 -0
  764. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/can.schema.json +0 -0
  765. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/config.schema.json +0 -0
  766. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/cover.schema.json +0 -0
  767. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/dallas.schema.json +0 -0
  768. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/ds2482.schema.json +0 -0
  769. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/event.schema.json +0 -0
  770. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/ina219.schema.json +0 -0
  771. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/ina226.schema.json +0 -0
  772. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/irrigation.schema.json +0 -0
  773. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/lm75.schema.json +0 -0
  774. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/location.schema.json +0 -0
  775. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/logger.schema.json +0 -0
  776. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/lox_udp.schema.json +0 -0
  777. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/mcp23017.schema.json +0 -0
  778. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/mcp9808.schema.json +0 -0
  779. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/modbus.schema.json +0 -0
  780. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/modbus_devices.schema.json +0 -0
  781. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/mqtt.schema.json +0 -0
  782. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/oled.schema.json +0 -0
  783. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/osdp.schema.json +0 -0
  784. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/output.schema.json +0 -0
  785. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/output_group.schema.json +0 -0
  786. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/pca9685.schema.json +0 -0
  787. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/pcf8575.schema.json +0 -0
  788. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/remote_devices.schema.json +0 -0
  789. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/remote_inputs.schema.json +0 -0
  790. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/remote_outputs.schema.json +0 -0
  791. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/schedule.schema.json +0 -0
  792. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/sensor.schema.json +0 -0
  793. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/template.schema.json +0 -0
  794. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  795. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/virtual_switch.schema.json +0 -0
  796. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/schema/web.schema.json +0 -0
  797. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/services/__init__.py +0 -0
  798. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/services/logs.py +0 -0
  799. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/sudo_rate_limiter.py +0 -0
  800. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/web_server.py +0 -0
  801. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio/webui/websocket_manager.py +0 -0
  802. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio.egg-info/dependency_links.txt +0 -0
  803. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio.egg-info/entry_points.txt +0 -0
  804. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio.egg-info/requires.txt +0 -0
  805. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/boneio.egg-info/top_level.txt +0 -0
  806. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/pyproject.toml +0 -0
  807. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/setup.cfg +0 -0
  808. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/setup.py +0 -0
  809. {boneio-1.6.0.dev23 → boneio-1.6.0.dev25}/tests/test_py313_compatibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boneio
3
- Version: 1.6.0.dev23
3
+ Version: 1.6.0.dev25
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
@@ -131,6 +131,15 @@ class GpioInputBinarySensor(GpioBaseClass):
131
131
  """Send initial state after setup."""
132
132
  self.send_current_state()
133
133
 
134
+ def send_current_state_when_ready(self) -> None:
135
+ """Send the current state now, or as soon as the GPIO manager starts.
136
+
137
+ Before start the pin cannot be read, and ``read_value`` answers False —
138
+ which a non-inverted input reports as ``pressed``. Publishing that would
139
+ put a wrong state on a retained topic.
140
+ """
141
+ get_gpio_manager(loop=self._loop).register_on_start_callback(self.send_current_state)
142
+
134
143
  def send_current_state(self) -> None:
135
144
  """Send current state to MQTT without triggering actions.
136
145
 
@@ -137,7 +137,7 @@ class RemoteInputBase:
137
137
  # Helpers for subclasses
138
138
  # ------------------------------------------------------------------
139
139
 
140
- def _handle_binary_state_change(self, new_state: bool) -> None:
140
+ def _handle_binary_state_change(self, new_state: bool, publish_only: bool = False) -> None:
141
141
  """Process a state change in binary_sensor mode.
142
142
 
143
143
  Emits ``pressed`` or ``released`` directly to EventBus.
@@ -146,10 +146,14 @@ class RemoteInputBase:
146
146
 
147
147
  Args:
148
148
  new_state: ``True`` if the sensor is now active/on.
149
+ publish_only: Take the state without running actions — for a state
150
+ learnt rather than seen changing, e.g. a retained replay.
149
151
  """
150
152
  self._state = new_state
151
153
  click_type = PRESSED if new_state else RELEASED
152
- self.press_callback(click_type=click_type, duration=None, start_time=time.time())
154
+ self.press_callback(
155
+ click_type=click_type, duration=None, start_time=time.time(), publish_only=publish_only
156
+ )
153
157
 
154
158
  def _feed_detector(self, is_pressed: bool) -> None:
155
159
  """Feed a state change into the MultiClickDetector (event mode).
@@ -189,6 +193,7 @@ class RemoteInputBase:
189
193
  click_type: ClickTypes,
190
194
  duration: float | None = None,
191
195
  start_time: float | None = None,
196
+ publish_only: bool = False,
192
197
  ) -> None:
193
198
  """Schedule async event processing.
194
199
 
@@ -196,14 +201,16 @@ class RemoteInputBase:
196
201
  click_type: Type of click.
197
202
  duration: Duration of the press in seconds.
198
203
  start_time: Start time of the press.
204
+ publish_only: Publish the state, run no actions.
199
205
  """
200
- asyncio.create_task(self._handle_press_with_lock(click_type, duration, start_time))
206
+ asyncio.create_task(self._handle_press_with_lock(click_type, duration, start_time, publish_only))
201
207
 
202
208
  async def _handle_press_with_lock(
203
209
  self,
204
210
  click_type: ClickTypes,
205
211
  duration: float | None = None,
206
212
  start_time: float | None = None,
213
+ publish_only: bool = False,
207
214
  ) -> None:
208
215
  """Emit InputEvent on EventBus (serialised with lock)."""
209
216
  async with self._event_lock:
@@ -232,6 +239,7 @@ class RemoteInputBase:
232
239
  click_type=click_type,
233
240
  duration=duration,
234
241
  state=event_state,
242
+ publish_only=publish_only,
235
243
  )
236
244
  )
237
245
 
@@ -98,7 +98,7 @@ class MqttBinarySensorInput(RemoteInputBase):
98
98
  return False
99
99
  return None
100
100
 
101
- async def on_mqtt_message(self, _topic: str, payload: str) -> None:
101
+ async def on_mqtt_message(self, _topic: str, payload: str, retained: bool = False) -> None:
102
102
  """Handle a message on the subscribed topic.
103
103
 
104
104
  Two payload shapes are understood. A plain on/off state is the usual
@@ -107,12 +107,24 @@ class MqttBinarySensorInput(RemoteInputBase):
107
107
  mode it is passed through as-is rather than re-derived from a state
108
108
  this side never saw.
109
109
 
110
+ A retained message is the broker replaying what it stored, on every
111
+ subscribe — so on every reconnect. It says what the state *is*, not
112
+ that it just changed: binary_sensor mode takes it without running
113
+ actions, and event mode ignores it, because a lone ``pressed`` with no
114
+ release would turn into a long press.
115
+
110
116
  Args:
111
117
  _topic: The topic it arrived on; unused, one subscription per input.
112
118
  payload: The message.
119
+ retained: The broker is replaying its stored copy, not forwarding
120
+ a live message.
113
121
  """
114
122
  text = (payload or "").strip()
115
123
 
124
+ if retained and self._mode == "event":
125
+ _LOGGER.debug("Input %s: ignoring retained message in event mode", self.id)
126
+ return
127
+
116
128
  if text.startswith("{"):
117
129
  try:
118
130
  event_type = json.loads(text).get("event_type")
@@ -145,4 +157,4 @@ class MqttBinarySensorInput(RemoteInputBase):
145
157
  if self._mode == "event":
146
158
  self._feed_detector(is_pressed=state)
147
159
  else:
148
- self._handle_binary_state_change(state)
160
+ self._handle_binary_state_change(state, publish_only=retained)
@@ -524,10 +524,10 @@ class CloudRegistration:
524
524
  def _check_compose_ownership(self) -> bool:
525
525
  """Check the compose file is managed by the privileged helper.
526
526
 
527
- This used to check the opposite — that the file was *writable* — and its
528
- error message told the operator to ``sudo chown $USER`` it. That advice
529
- reopens F-04: ``docker compose up`` executes this file, so whoever can
530
- write it can start a container as root with the host filesystem mounted.
527
+ The file must *not* be writable by the application, and no error here
528
+ should tell the operator to ``chown`` it: ``docker compose up`` executes
529
+ this file, so whoever can write it can start a container as root with
530
+ the host filesystem mounted.
531
531
 
532
532
  Returns:
533
533
  True when the cloud switch can proceed.
@@ -1,7 +1,7 @@
1
- """Keep configured secrets out of API responses (F-03).
1
+ """Keep configured secrets out of API responses.
2
2
 
3
- ``GET /api/config`` returned the MQTT password, and any other password in the
4
- configuration, in clear text. Masking it is only half the job: the settings
3
+ Unmasked, ``GET /api/config`` would return the MQTT password, and any other
4
+ password in the configuration, in clear text. Masking it is only half the job: the settings
5
5
  forms are populated from that same response and post the whole section back, so
6
6
  a mask that is written straight through would overwrite the real password with
7
7
  its own placeholder the first time anyone saved an unrelated field.
@@ -1,17 +1,16 @@
1
1
  """Container operations, through the privileged helper when it is there.
2
2
 
3
- The application talks to Docker today because the ``boneio`` account is in the
4
- ``docker`` group — which is root-equivalent, since a container can bind-mount
5
- the host root and write to it. Taking the account out of that group is the fix
6
- (F-04), and this module is what makes it possible: every container operation
7
- goes through ``boneio-containers``, which accepts a fixed verb and passes
8
- nothing from the caller to Docker.
3
+ The ``boneio`` account is kept out of the ``docker`` group, because that group
4
+ is root-equivalent: a container can bind-mount the host root and write to it.
5
+ Every container operation goes through ``boneio-containers`` instead, which
6
+ accepts a fixed verb and passes nothing from the caller to Docker. Nothing else
7
+ in the application should call ``docker``; it comes through here.
9
8
 
10
9
  Direct ``docker`` invocation stays as a fallback while the helper is not
11
- installed. That is not a loophole, it is the transition: a device that has not
12
- applied the trust-transition migration yet is in exactly the state it is in
13
- today, and refusing to manage its containers would break Node-RED and the TLS
14
- panel for no gain. Once the helper is present it is always preferred, and once
10
+ installed. That is not a loophole: a device that has not applied the
11
+ trust-transition migration yet still has the account in the ``docker`` group,
12
+ and refusing to manage its containers would break Node-RED and the TLS panel
13
+ for no gain. Once the helper is present it is always preferred, and once
15
14
  the account leaves the ``docker`` group the fallback stops working on its own.
16
15
 
17
16
  Nothing here is a security boundary. The boundary is the helper, which refuses
@@ -466,9 +465,9 @@ def set_project_env(name: str, value: str) -> bool:
466
465
  the compose file, which is how the panel's own port reaches Caddy. The
467
466
  application may write this file: the directory belongs to it. It may not
468
467
  write the compose file beside it, which is root-owned because
469
- ``docker compose up`` executes it — that distinction is F-04, and it holds
470
- here because interpolation substitutes into scalar values after the YAML is
471
- parsed, so nothing passed this way can introduce a volume or an entrypoint.
468
+ ``docker compose up`` executes it. Writing ``.env`` does not undo that:
469
+ interpolation substitutes into scalar values after the YAML is parsed, so
470
+ nothing passed this way can introduce a volume or an entrypoint.
472
471
 
473
472
  Read-modify-write rather than truncate: an operator may have put their own
474
473
  variables here, and a port change is no reason to lose them. Comments and
@@ -168,8 +168,9 @@ class CoverManager:
168
168
  _cover._open_relay = open_relay
169
169
  _cover._close_relay = close_relay
170
170
  _cover.update_config_times(_config)
171
+ self._store_ha_attributes(_cover, _config)
171
172
  # Re-send HA autodiscovery with potentially new name/area
172
- if _config.get(SHOW_HA, True):
173
+ if _cover.show_in_ha:
173
174
  # Remove old autodiscovery first (in case area changed)
174
175
  self._remove_cover_ha_discovery(_id)
175
176
  # Send new autodiscovery
@@ -181,8 +182,8 @@ class CoverManager:
181
182
  id=_cover.id,
182
183
  name=_cover.name,
183
184
  config_helper=self._manager._config_helper,
184
- device_class=_config.get(DEVICE_CLASS),
185
- area=_config.get("area"),
185
+ device_class=_cover.device_class,
186
+ area=_cover.area,
186
187
  )
187
188
  self._manager.publish_ha_discovery(
188
189
  id=_cover.id,
@@ -375,14 +376,16 @@ class CoverManager:
375
376
  )
376
377
  availability_msg_func = ha_cover_availabilty_message
377
378
 
379
+ self._store_ha_attributes(cover, config)
380
+
378
381
  # Send HA autodiscovery
379
- if config.get(SHOW_HA, True):
382
+ if cover.show_in_ha:
380
383
  payload = availability_msg_func(
381
384
  id=cover.id,
382
385
  name=cover.name,
383
386
  config_helper=self._manager._config_helper,
384
- device_class=config.get(DEVICE_CLASS),
385
- area=config.get("area"),
387
+ device_class=cover.device_class,
388
+ area=cover.area,
386
389
  )
387
390
  self._manager.publish_ha_discovery(
388
391
  id=cover.id,
@@ -393,6 +396,20 @@ class CoverManager:
393
396
  _LOGGER.debug("Configured cover %s", cover_id)
394
397
  return cover
395
398
 
399
+ @staticmethod
400
+ def _store_ha_attributes(cover: TimeBasedCover | VenetianCover, config: dict) -> None:
401
+ """Keep the HA discovery inputs on the cover itself.
402
+
403
+ The cover classes don't take ``area``/``device_class`` (``area`` is
404
+ swallowed by ``BasicMqtt``'s kwargs), yet ``send_ha_autodiscovery``
405
+ rebuilds the payload from the cover object. Without these the rebuild
406
+ would drop the area sub-device and the device class, and HA would move
407
+ the cover back to the main device with the default class.
408
+ """
409
+ cover.area = config.get("area")
410
+ cover.device_class = config.get(DEVICE_CLASS)
411
+ cover.show_in_ha = config.get(SHOW_HA, True)
412
+
396
413
  def _remove_cover_ha_discovery(self, cover_id: str) -> None:
397
414
  """Remove HA Discovery entries for a cover.
398
415
 
@@ -508,6 +525,8 @@ class CoverManager:
508
525
  async def send_ha_autodiscovery(self) -> None:
509
526
  """Send Home Assistant autodiscovery for all covers."""
510
527
  for cover_id, cover in self._covers.items():
528
+ if not cover.show_in_ha:
529
+ continue
511
530
  # Use tilt variant if cover supports tilt
512
531
  if hasattr(cover, "tilt_position"):
513
532
  msg_func = ha_cover_with_tilt_availabilty_message
@@ -517,8 +536,8 @@ class CoverManager:
517
536
  id=cover_id,
518
537
  name=cover.name if hasattr(cover, "name") else cover_id,
519
538
  config_helper=self._manager._config_helper,
520
- device_class=getattr(cover, "device_class", None),
521
- area=getattr(cover, "area", None),
539
+ device_class=cover.device_class,
540
+ area=cover.area,
522
541
  )
523
542
  self._manager.publish_ha_discovery(
524
543
  id=cover_id,
@@ -277,6 +277,7 @@ class InputManager:
277
277
 
278
278
  # Store area on input
279
279
  existing_input.area = area
280
+ existing_input.show_in_ha = gpio.get(SHOW_HA, True)
280
281
 
281
282
  # Update device_class from new config
282
283
  existing_input._device_class = gpio.get(DEVICE_CLASS)
@@ -327,6 +328,7 @@ class InputManager:
327
328
 
328
329
  # Store area on input
329
330
  input_device.area = area
331
+ input_device.show_in_ha = gpio.get(SHOW_HA, True)
330
332
 
331
333
  # Register with Home Assistant
332
334
  if gpio.get(SHOW_HA, True):
@@ -407,6 +409,7 @@ class InputManager:
407
409
 
408
410
  # Store area on input
409
411
  existing_input.area = area
412
+ existing_input.show_in_ha = gpio.get(SHOW_HA, True)
410
413
 
411
414
  # Update device_class from new config
412
415
  existing_input._device_class = gpio.get(DEVICE_CLASS)
@@ -453,6 +456,7 @@ class InputManager:
453
456
 
454
457
  # Store area on input
455
458
  input_device.area = area
459
+ input_device.show_in_ha = gpio.get(SHOW_HA, True)
456
460
 
457
461
  # Register with Home Assistant
458
462
  if gpio.get(SHOW_HA, True):
@@ -624,6 +628,20 @@ class InputManager:
624
628
  # Global listeners will receive these events for all inputs (including new ones)
625
629
  self._broadcast_all_input_states()
626
630
 
631
+ def resend_binary_sensor_states(self) -> None:
632
+ """Publish the pin state of every GPIO binary sensor, MQTT only.
633
+
634
+ Called on each MQTT connect. The topics are retained, and nothing else
635
+ corrects the broker's copy when an input changed while boneIO was off.
636
+ Actions do not run: these are ``publish_only`` events.
637
+ """
638
+ for input_ in self._inputs.values():
639
+ if isinstance(input_, GpioInputBinarySensor):
640
+ try:
641
+ input_.send_current_state_when_ready()
642
+ except Exception as e:
643
+ _LOGGER.debug("Error resending binary sensor state %s: %s", input_.id, e)
644
+
627
645
  def _broadcast_all_input_states(self) -> None:
628
646
  """Broadcast current state of all inputs via WebSocket.
629
647
 
@@ -766,9 +784,14 @@ class InputManager:
766
784
  elif input_type == INPUT_SENSOR:
767
785
  payload = str(click_type) # "pressed" or "released"
768
786
 
787
+ # Retained: a float switch can hold one position for weeks, and
788
+ # without the broker's copy HA shows `unknown` after every restart
789
+ # until the input moves. Events above stay unretained — a click
790
+ # replayed on subscribe would be a click that never happened.
769
791
  self._manager.send_message(
770
792
  topic=topic,
771
793
  payload=payload,
794
+ retain=True,
772
795
  )
773
796
  _LOGGER.debug("Published binary sensor state to MQTT: topic=%s, payload=%s", topic, payload)
774
797
 
@@ -930,6 +953,8 @@ class InputManager:
930
953
  but can be called manually if needed.
931
954
  """
932
955
  for pin, input_device in self._inputs.items():
956
+ if not getattr(input_device, "show_in_ha", True):
957
+ continue
933
958
  try:
934
959
  input_id = input_device.id if hasattr(input_device, "id") else pin
935
960
  input_name = input_device.name if hasattr(input_device, "name") else input_id
@@ -618,6 +618,7 @@ class Manager:
618
618
  self.send_message(
619
619
  topic=f"{topic_prefix}/input/{input_id}",
620
620
  payload=state,
621
+ retain=True,
621
622
  )
622
623
  except Exception as e:
623
624
  _LOGGER.debug(
@@ -2005,6 +2006,11 @@ class Manager:
2005
2006
  # trusts, and a reinstalled broker comes back with no retained set.
2006
2007
  await self.virtual_switches.republish_states()
2007
2008
 
2009
+ # Binary sensors are retained, so the broker would otherwise keep
2010
+ # serving whatever they were before this boot, however long ago that
2011
+ # was. Read the pins and publish what is true now.
2012
+ self.inputs.resend_binary_sensor_states()
2013
+
2008
2014
  _LOGGER.info(
2009
2015
  "Resent states: %d outputs, %d covers.",
2010
2016
  len([o for o in self.outputs.get_all_outputs().values() if o.output_type not in ("cover", "none")]),
@@ -962,6 +962,9 @@ class OutputManager:
962
962
  """Send Home Assistant autodiscovery for all outputs and groups."""
963
963
  # Send autodiscovery for outputs
964
964
  for output_id, output in self._outputs.items():
965
+ # Remote outputs are published only when show_in_ha is set
966
+ if not getattr(output, "show_in_ha", True):
967
+ continue
965
968
  if output.output_type not in (NONE, COVER):
966
969
  ha_func = _OUTPUT_HA_FUNC.get(output.output_type, ha_switch_availabilty_message)
967
970
  payload = ha_func(
@@ -1002,6 +1005,7 @@ class OutputManager:
1002
1005
  name=group.name if hasattr(group, 'name') else group_id,
1003
1006
  config_helper=self._manager._config_helper,
1004
1007
  output_type=group.output_type,
1008
+ area=getattr(group, 'area', None),
1005
1009
  member_unique_ids=member_unique_ids,
1006
1010
  )
1007
1011
  self._manager.publish_ha_discovery(
@@ -117,7 +117,7 @@ class RemoteInputRegistrar:
117
117
  for remote_input in self._mqtt_inputs:
118
118
  try:
119
119
  await self._manager.message_bus.subscribe_and_listen(
120
- remote_input.topic, remote_input.on_mqtt_message
120
+ remote_input.topic, remote_input.on_mqtt_message, retain_aware=True
121
121
  )
122
122
  _LOGGER.debug(
123
123
  "Remote input '%s' listening on %s",
@@ -491,13 +491,15 @@ class SensorManager:
491
491
  update_interval=sensor_config.get(UPDATE_INTERVAL, TimePeriod(seconds=60)),
492
492
  filters=sensor_config.get(FILTERS, []),
493
493
  )
494
- if sensor_config.get(SHOW_HA, True):
494
+ sensor.area = sensor_config.get("area")
495
+ sensor.show_in_ha = sensor_config.get(SHOW_HA, True)
496
+ if sensor.show_in_ha:
495
497
  payload = ha_sensor_temp_availabilty_message(
496
498
  id=sensor.id,
497
499
  name=sensor.name,
498
500
  config_helper=self._manager._config_helper,
499
501
  unit_of_measurement=sensor_config.get("unit_of_measurement", "°C"),
500
- area=sensor_config.get("area"),
502
+ area=sensor.area,
501
503
  )
502
504
  self._manager.publish_ha_discovery(id=sensor.id, ha_type=SENSOR, payload=payload)
503
505
  return sensor
@@ -569,12 +571,14 @@ class SensorManager:
569
571
  update_interval=gpio.get(UPDATE_INTERVAL, TimePeriod(seconds=60)),
570
572
  filters=gpio.get(FILTERS, []),
571
573
  )
572
- if gpio.get(SHOW_HA, True):
574
+ sensor.area = gpio.get("area")
575
+ sensor.show_in_ha = gpio.get(SHOW_HA, True)
576
+ if sensor.show_in_ha:
573
577
  payload = ha_adc_sensor_availabilty_message(
574
578
  id=id,
575
579
  name=name,
576
580
  config_helper=self._manager._config_helper,
577
- area=gpio.get("area"),
581
+ area=sensor.area,
578
582
  )
579
583
  self._manager.publish_ha_discovery(id=id, ha_type=SENSOR, payload=payload)
580
584
  return sensor
@@ -699,14 +703,17 @@ class SensorManager:
699
703
  if new_interval:
700
704
  sensor._update_interval = new_interval
701
705
 
706
+ sensor.area = sensor_config.get("area")
707
+ sensor.show_in_ha = sensor_config.get(SHOW_HA, True)
708
+
702
709
  # Resend HA autodiscovery with updated info
703
- if sensor_config.get(SHOW_HA, True):
710
+ if sensor.show_in_ha:
704
711
  payload = ha_sensor_temp_availabilty_message(
705
712
  id=sensor.id,
706
713
  name=sensor.name,
707
714
  config_helper=self._manager._config_helper,
708
715
  unit_of_measurement=sensor_config.get("unit_of_measurement", "°C"),
709
- area=sensor_config.get("area"),
716
+ area=sensor.area,
710
717
  )
711
718
  self._manager.publish_ha_discovery(id=sensor.id, ha_type=SENSOR, payload=payload)
712
719
  break
@@ -842,13 +849,16 @@ class SensorManager:
842
849
  if new_interval:
843
850
  sensor._update_interval = new_interval
844
851
 
852
+ sensor.area = sensor_config.get("area")
853
+ sensor.show_in_ha = sensor_config.get(SHOW_HA, True)
854
+
845
855
  # Resend HA autodiscovery with updated info
846
- if sensor_config.get(SHOW_HA, True):
856
+ if sensor.show_in_ha:
847
857
  payload = ha_adc_sensor_availabilty_message(
848
858
  id=sensor.id,
849
859
  name=new_name,
850
860
  config_helper=self._manager._config_helper,
851
- area=sensor_config.get("area"),
861
+ area=sensor.area,
852
862
  )
853
863
  self._manager.publish_ha_discovery(id=sensor.id, ha_type=SENSOR, payload=payload)
854
864
  break
@@ -1549,20 +1559,26 @@ class SensorManager:
1549
1559
 
1550
1560
  # Dallas 1-Wire sensors
1551
1561
  for sensor in self._dallas_sensors:
1562
+ if not sensor.show_in_ha:
1563
+ continue
1552
1564
  payload = ha_sensor_temp_availabilty_message(
1553
1565
  id=sensor.id,
1554
1566
  name=sensor.name,
1555
1567
  config_helper=self._manager._config_helper,
1556
1568
  unit_of_measurement=getattr(sensor, "unit_of_measurement", "°C"),
1569
+ area=sensor.area,
1557
1570
  )
1558
1571
  self._manager.publish_ha_discovery(id=sensor.id, ha_type=SENSOR, payload=payload)
1559
1572
 
1560
1573
  # ADC sensors
1561
1574
  for sensor in self._adc_sensors:
1575
+ if not sensor.show_in_ha:
1576
+ continue
1562
1577
  payload = ha_adc_sensor_availabilty_message(
1563
1578
  id=sensor.id,
1564
1579
  name=sensor.name,
1565
1580
  config_helper=self._manager._config_helper,
1581
+ area=sensor.area,
1566
1582
  )
1567
1583
  self._manager.publish_ha_discovery(id=sensor.id, ha_type=SENSOR, payload=payload)
1568
1584
 
@@ -55,8 +55,22 @@ class MessageBus(ABC):
55
55
  pass
56
56
 
57
57
  @abstractmethod
58
- async def subscribe_and_listen(self, topic: str, callback: Callable[[str, str], Awaitable[None]]) -> None:
59
- """Subscribe to a topic and listen for messages."""
58
+ async def subscribe_and_listen(
59
+ self,
60
+ topic: str,
61
+ callback: Callable[..., Awaitable[None]],
62
+ *,
63
+ retain_aware: bool = False,
64
+ ) -> None:
65
+ """Subscribe to a topic and listen for messages.
66
+
67
+ Args:
68
+ topic: Topic to subscribe to.
69
+ callback: Called as ``callback(topic, payload)``.
70
+ retain_aware: Also pass ``retained=`` — True when the broker is
71
+ replaying a stored message on subscribe rather than forwarding
72
+ a live one. Buses without retained messages always pass False.
73
+ """
60
74
  pass
61
75
 
62
76
  @abstractmethod
@@ -82,10 +82,16 @@ class CompositeMessageBus(MessageBus):
82
82
  if tasks:
83
83
  await asyncio.gather(*tasks, return_exceptions=True)
84
84
 
85
- async def subscribe_and_listen(self, topic: str, callback: Callable[[str, str], Awaitable[None]]) -> None:
85
+ async def subscribe_and_listen(
86
+ self,
87
+ topic: str,
88
+ callback: Callable[..., Awaitable[None]],
89
+ *,
90
+ retain_aware: bool = False,
91
+ ) -> None:
86
92
  """Subscribe to a topic and listen for messages on all buses."""
87
93
  for bus in self._buses:
88
- await bus.subscribe_and_listen(topic, callback)
94
+ await bus.subscribe_and_listen(topic, callback, retain_aware=retain_aware)
89
95
 
90
96
  async def unsubscribe_and_stop_listen(self, topic: str) -> None:
91
97
  """Unsubscribe from a topic and stop listening on all buses."""
@@ -80,8 +80,18 @@ class LocalMessageBus(MessageBus):
80
80
  """Announce that the device is offline."""
81
81
  pass
82
82
 
83
- async def subscribe_and_listen(self, topic: str, callback: Callable[[str, str], None]) -> None:
84
- """Subscribe to a topic and listen for messages."""
83
+ async def subscribe_and_listen(
84
+ self,
85
+ topic: str,
86
+ callback: Callable[..., Any],
87
+ *,
88
+ retain_aware: bool = False,
89
+ ) -> None:
90
+ """Subscribe to a topic and listen for messages.
91
+
92
+ ``retain_aware`` is accepted for the interface and ignored: the callback
93
+ is called with two arguments, so ``retained`` keeps its default.
94
+ """
85
95
  await self.subscribe(topic, callback)
86
96
 
87
97
  async def unsubscribe_and_stop_listen(self, topic: str) -> None:
@@ -388,8 +388,14 @@ class LoxUDPClient(MessageBus):
388
388
  if self._transport:
389
389
  self._transport.sendto(b"boneio=offline", (self.host, self.send_port))
390
390
 
391
- async def subscribe_and_listen(self, topic: str, callback: Callable[[str, str], Coroutine[Any, Any, None]]) -> None:
392
- """Register a listener for a topic pattern."""
391
+ async def subscribe_and_listen(
392
+ self,
393
+ topic: str,
394
+ callback: Callable[..., Coroutine[Any, Any, None]],
395
+ *,
396
+ retain_aware: bool = False,
397
+ ) -> None:
398
+ """Register a listener for a topic pattern. Lox has no retained messages."""
393
399
  self._listeners[topic] = callback
394
400
 
395
401
  async def unsubscribe_and_stop_listen(self, topic: str) -> None:
@@ -56,7 +56,9 @@ class MQTTClient(MessageBus):
56
56
  self.reconnect_interval = 1
57
57
  self._connection_established = False
58
58
  self.publish_queue: UniqueQueue = UniqueQueue()
59
- self._mqtt_energy_listeners: dict[str, Callable[[str, str], Awaitable[None]]] = {}
59
+ self._mqtt_energy_listeners: dict[str, Callable[..., Awaitable[None]]] = {}
60
+ # Listeners that are told whether a message is a retained replay.
61
+ self._retain_aware_listeners: set[str] = set()
60
62
  self._discovery_topics = (
61
63
  [
62
64
  f"{self._config_helper.ha_discovery_prefix}/{ha_type}/{self._config_helper.serial_number}/#"
@@ -144,8 +146,18 @@ class MQTTClient(MessageBus):
144
146
  )
145
147
 
146
148
  @override
147
- async def subscribe_and_listen(self, topic: str, callback: Callable[[str, str], Awaitable[None]]) -> None:
149
+ async def subscribe_and_listen(
150
+ self,
151
+ topic: str,
152
+ callback: Callable[..., Awaitable[None]],
153
+ *,
154
+ retain_aware: bool = False,
155
+ ) -> None:
148
156
  self._mqtt_energy_listeners[topic] = callback
157
+ if retain_aware:
158
+ self._retain_aware_listeners.add(topic)
159
+ else:
160
+ self._retain_aware_listeners.discard(topic)
149
161
  # Subscribe immediately if already connected
150
162
  if self._connection_established:
151
163
  await self.subscribe(topics=[topic])
@@ -154,6 +166,7 @@ class MQTTClient(MessageBus):
154
166
  async def unsubscribe_and_stop_listen(self, topic: str) -> None:
155
167
  await self.unsubscribe([topic])
156
168
  del self._mqtt_energy_listeners[topic]
169
+ self._retain_aware_listeners.discard(topic)
157
170
 
158
171
  async def unsubscribe(
159
172
  self,
@@ -439,7 +452,14 @@ class MQTTClient(MessageBus):
439
452
  if message.topic.matches(topic):
440
453
  callback_start = False
441
454
  try:
442
- await listener_callback(str(message.topic), payload)
455
+ if topic in self._retain_aware_listeners:
456
+ # v3.1.1: the broker sets retain only when replaying
457
+ # its stored copy on subscribe, never on live ones.
458
+ await listener_callback(
459
+ str(message.topic), payload, retained=bool(message.retain)
460
+ )
461
+ else:
462
+ await listener_callback(str(message.topic), payload)
443
463
  except Exception as exc:
444
464
  _LOGGER.error(
445
465
  "Error in MQTT listener callback for topic %s: %s",