boneio 1.6.0.dev18__tar.gz → 1.6.0.dev20__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 (785) hide show
  1. {boneio-1.6.0.dev18/boneio.egg-info → boneio-1.6.0.dev20}/PKG-INFO +1 -1
  2. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/cover/cover.py +137 -2
  3. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/cover/time_based.py +9 -54
  4. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/cover/venetian.py +36 -89
  5. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/auth/migration.py +10 -1
  6. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/covers.py +1 -1
  7. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/display.py +39 -0
  8. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/manager.py +5 -1
  9. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/system_ops.py +9 -0
  10. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/utils/overlay.py +0 -34
  11. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/MANIFEST.sha256 +1 -1
  12. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/helpers/boneio-system +145 -46
  13. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.17.json +1 -0
  14. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.17.sig +2 -0
  15. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.18.json +1 -0
  16. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.18.sig +2 -0
  17. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.22.json +1 -1
  18. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.22.sig +0 -0
  19. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.26.json +1 -0
  20. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.26.sig +2 -0
  21. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.27.json +1 -0
  22. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.27.sig +2 -0
  23. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.5.json +1 -1
  24. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.5.sig +0 -0
  25. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.8.json +1 -1
  26. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.8.sig +1 -0
  27. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.9.json +1 -0
  28. boneio-1.6.0.dev20/boneio/migrations/plans/1.6.9.sig +0 -0
  29. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/manifest.json +1 -1
  30. boneio-1.6.0.dev20/boneio/migrations/plans/manifest.sig +2 -0
  31. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/runner.py +45 -57
  32. boneio-1.6.0.dev20/boneio/migrations/versions/v1_6_26_kernel_check_old_images.py +46 -0
  33. boneio-1.6.0.dev20/boneio/migrations/versions/v1_6_27_startup_overlay_repair.py +45 -0
  34. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/schema.yaml +29 -1
  35. boneio-1.6.0.dev20/boneio/version.py +2 -0
  36. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/app.py +4 -1
  37. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/AccountsView-TbSkH9UL.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/AccountsView-DNhmxX-0.js +1 -1
  38. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/BackupSection-EvCtwFQL.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/BackupSection-BIQzo3KS.js +1 -1
  39. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/BindingMatrix-sRRfB8jC.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/BindingMatrix-BwK8H0r5.js +1 -1
  40. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/DeviceControlSection-CvFyHv7S.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/DeviceControlSection-CVKZp7lK.js +1 -1
  41. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/DiagnosticsView-rVS5qDH1.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/DiagnosticsView-CeZeqbb7.js +1 -1
  42. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/EntityGrid-Don0ym4o.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/EntityGrid-BXoJlbCK.js +1 -1
  43. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/FactoryResetSection-CWLBpFcy.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/FactoryResetSection-Bh91tyVh.js +1 -1
  44. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/FormInputToggle-wkyu5nWZ.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/FormInputToggle-Dl1Y1-cM.js +1 -1
  45. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/HaDashboardWizard-Cxcr8qUY.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/HaDashboardWizard-huDlUSwe.js +1 -1
  46. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/HostnameSection-1i8lcR91.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/HostnameSection-C7SUuP5L.js +1 -1
  47. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/InputsView-djkHXGOO.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/InputsView-79Mh6IzP.js +1 -1
  48. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/LocationSection-D2CiUIwU.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/LocationSection-BbwggLOd.js +2 -2
  49. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/LoggerForm-Jivd_RXP.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/LoggerForm-CYWWbeQd.js +1 -1
  50. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/LongPressWrapper-CFu1CzuN.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/LongPressWrapper-BDpSZodA.js +1 -1
  51. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/MigrationsSection-DEzC0mN6.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/MigrationsSection-Br3-7B8K.js +1 -1
  52. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/ModbusView-CHatoXuR.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/ModbusView-DJm-L5hs.js +1 -1
  53. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/MqttPasswordsSection-DaxpKeP6.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/MqttPasswordsSection-CYwOsOPk.js +1 -1
  54. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/NodeRedManagement-KfLTXyHL.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/NodeRedManagement-Db3b-01H.js +1 -1
  55. boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/OutputsView-CuPGJXWf.js +1 -0
  56. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/SecurityView-C12Ye4pF.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/SecurityView-DfZougmv.js +1 -1
  57. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/SensorView-Cz60X005.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/SensorView-BiYq6EaP.js +1 -1
  58. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/SystemState-2u8fEUcf.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/SystemState-DYIA3NbG.js +1 -1
  59. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/TemplatesView-8ES2KODg.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/TemplatesView-BgvnykkU.js +1 -1
  60. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/TilePicker-ByrlXspI.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/TilePicker-uGlhs-Jc.js +1 -1
  61. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/TimezoneSection-DitamIoS.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/TimezoneSection-D1AG8fw2.js +1 -1
  62. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/UISettings-D8hwUItg.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/UISettings-4ST3YqxY.js +5 -5
  63. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-Ch0iC5e1.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-BerEkok3.js +1 -1
  64. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/aiConfig-B7uJx9nA.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/aiConfig-7MNvEIMn.js +1 -1
  65. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/aiWizardPrompt-abAmCO-3.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/aiWizardPrompt-DYSsVU3M.js +1 -1
  66. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/bodies-CN3Xf7Dt.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/bodies-DLGtQW7w.js +1 -1
  67. boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/index-BzV26NSk.js +42 -0
  68. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/monaco-CVsEQEbX.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/monaco-BlNu5lWU.js +1 -1
  69. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/monaco-Dw6H67rn.js → boneio-1.6.0.dev20/boneio/webui/frontend-dist/assets/monaco-CA315p9P.js +2 -2
  70. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/index.html +1 -1
  71. {boneio-1.6.0.dev18/boneio/webui → boneio-1.6.0.dev20/boneio/webui/frontend-dist}/schema/config.schema.json +20 -1
  72. {boneio-1.6.0.dev18/boneio/webui → boneio-1.6.0.dev20/boneio/webui/frontend-dist}/schema/cover.schema.json +20 -1
  73. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/sw.js +1 -1
  74. {boneio-1.6.0.dev18/boneio/webui/frontend-dist → boneio-1.6.0.dev20/boneio/webui}/schema/config.schema.json +20 -1
  75. {boneio-1.6.0.dev18/boneio/webui/frontend-dist → boneio-1.6.0.dev20/boneio/webui}/schema/cover.schema.json +20 -1
  76. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20/boneio.egg-info}/PKG-INFO +1 -1
  77. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio.egg-info/SOURCES.txt +39 -33
  78. boneio-1.6.0.dev18/boneio/migrations/plans/1.6.17.json +0 -1
  79. boneio-1.6.0.dev18/boneio/migrations/plans/1.6.17.sig +0 -0
  80. boneio-1.6.0.dev18/boneio/migrations/plans/1.6.18.json +0 -1
  81. boneio-1.6.0.dev18/boneio/migrations/plans/1.6.18.sig +0 -0
  82. boneio-1.6.0.dev18/boneio/migrations/plans/1.6.22.sig +0 -1
  83. boneio-1.6.0.dev18/boneio/migrations/plans/1.6.5.sig +0 -1
  84. boneio-1.6.0.dev18/boneio/migrations/plans/1.6.8.sig +0 -1
  85. boneio-1.6.0.dev18/boneio/migrations/plans/1.6.9.json +0 -1
  86. boneio-1.6.0.dev18/boneio/migrations/plans/1.6.9.sig +0 -1
  87. boneio-1.6.0.dev18/boneio/migrations/plans/manifest.sig +0 -1
  88. boneio-1.6.0.dev18/boneio/version.py +0 -2
  89. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/OutputsView-CBLnm1Rx.js +0 -1
  90. boneio-1.6.0.dev18/boneio/webui/frontend-dist/assets/index-CLjnGlT9.js +0 -42
  91. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/LICENSE +0 -0
  92. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/MANIFEST.in +0 -0
  93. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/README.md +0 -0
  94. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/__init__.py +0 -0
  95. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.2/input.yaml +0 -0
  96. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.2/output_24_16.yaml +0 -0
  97. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.2/output_32_10.yaml +0 -0
  98. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.2/output_32_5.yaml +0 -0
  99. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.2/output_cover.yaml +0 -0
  100. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  101. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.3/input.yaml +0 -0
  102. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.3/output_24_16.yaml +0 -0
  103. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.3/output_32_10.yaml +0 -0
  104. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.3/output_32_5.yaml +0 -0
  105. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.3/output_cover.yaml +0 -0
  106. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  107. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.4/input.yaml +0 -0
  108. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.4/output_24_16.yaml +0 -0
  109. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.4/output_32_10.yaml +0 -0
  110. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.4/output_32_5.yaml +0 -0
  111. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.4/output_cover.yaml +0 -0
  112. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  113. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.5/input.yaml +0 -0
  114. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.5/output_24_16.yaml +0 -0
  115. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.5/output_32_10.yaml +0 -0
  116. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.5/output_cover.yaml +0 -0
  117. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  118. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.6/input.yaml +0 -0
  119. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.6/output_24_16.yaml +0 -0
  120. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.6/output_32_10.yaml +0 -0
  121. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.6/output_cover.yaml +0 -0
  122. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  123. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.7/input.yaml +0 -0
  124. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.7/output_24_16.yaml +0 -0
  125. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.7/output_32_10.yaml +0 -0
  126. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.7/output_48_4.yaml +0 -0
  127. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.7/output_cover.yaml +0 -0
  128. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  129. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.8/input.yaml +0 -0
  130. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.8/output_24_16.yaml +0 -0
  131. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.8/output_32_10.yaml +0 -0
  132. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.8/output_48_4.yaml +0 -0
  133. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.8/output_cover.yaml +0 -0
  134. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  135. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.0/input.yaml +0 -0
  136. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.0/output_24_16.yaml +0 -0
  137. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.0/output_32_10.yaml +0 -0
  138. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.0/output_48_4.yaml +0 -0
  139. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.0/output_cover.yaml +0 -0
  140. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
  141. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.1/input.yaml +0 -0
  142. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.1/output_24_16.yaml +0 -0
  143. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.1/output_32_10.yaml +0 -0
  144. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.1/output_48_4.yaml +0 -0
  145. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.1/output_cover.yaml +0 -0
  146. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/boards/1.1/output_cover_mix.yaml +0 -0
  147. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/bonecli.py +0 -0
  148. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/__init__.py +0 -0
  149. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/cover/__init__.py +0 -0
  150. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/cover/remote.py +0 -0
  151. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/group/__init__.py +0 -0
  152. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/group/output_group.py +0 -0
  153. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/input/__init__.py +0 -0
  154. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/input/binary_sensor.py +0 -0
  155. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/input/detectors.py +0 -0
  156. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/input/event.py +0 -0
  157. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/input/remote/__init__.py +0 -0
  158. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/input/remote/base.py +0 -0
  159. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/input/remote/esphome.py +0 -0
  160. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/input/remote/mqtt.py +0 -0
  161. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/irrigation/__init__.py +0 -0
  162. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/irrigation/controller.py +0 -0
  163. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/irrigation/water_source.py +0 -0
  164. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/output/__init__.py +0 -0
  165. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/output/basic.py +0 -0
  166. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/output/buzzer.py +0 -0
  167. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/output/mcp.py +0 -0
  168. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/output/pca.py +0 -0
  169. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/output/pcf.py +0 -0
  170. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/output/remote.py +0 -0
  171. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/sensor/__init__.py +0 -0
  172. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/sensor/virtual_energy.py +0 -0
  173. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/template/__init__.py +0 -0
  174. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/template/alarm_panel.py +0 -0
  175. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/template/gate_cover.py +0 -0
  176. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/template/thermostat.py +0 -0
  177. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/components/virtual_switch.py +0 -0
  178. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/const.py +0 -0
  179. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/__init__.py +0 -0
  180. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/atomic_file.py +0 -0
  181. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/auth/__init__.py +0 -0
  182. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/auth/cli.py +0 -0
  183. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/auth/hashing.py +0 -0
  184. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/auth/jwt_secret.py +0 -0
  185. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/auth/models.py +0 -0
  186. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/auth/store.py +0 -0
  187. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/cloud/__init__.py +0 -0
  188. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/cloud/data/__init__.py +0 -0
  189. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  190. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  191. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/cloud/registration.py +0 -0
  192. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/cloud/secrets.py +0 -0
  193. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/__init__.py +0 -0
  194. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/config_helper.py +0 -0
  195. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/input_bindings.py +0 -0
  196. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/migrations/__init__.py +0 -0
  197. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  198. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/migrations/v2_transition.py +0 -0
  199. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/migrations/v4_wled_cache.py +0 -0
  200. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/migrations/v5_ina_screen.py +0 -0
  201. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/migrations/v6_input_keys.py +0 -0
  202. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/migrations/v7_mqtt_password_secret.py +0 -0
  203. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/package-lock.json +0 -0
  204. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/package.json +0 -0
  205. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/provenance.py +0 -0
  206. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/schema_converter.py +0 -0
  207. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/secret_masking.py +0 -0
  208. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/write_lock.py +0 -0
  209. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/yaml_compat.py +0 -0
  210. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/yaml_patch.py +0 -0
  211. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/config/yaml_util.py +0 -0
  212. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/containers.py +0 -0
  213. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/diagnostics/__init__.py +0 -0
  214. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/diagnostics/collect.py +0 -0
  215. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/discovery.py +0 -0
  216. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/events/__init__.py +0 -0
  217. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/events/bus.py +0 -0
  218. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/__init__.py +0 -0
  219. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/action_conditions.py +0 -0
  220. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/canopen.py +0 -0
  221. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/inputs.py +0 -0
  222. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/irrigation.py +0 -0
  223. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/modbus.py +0 -0
  224. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/outputs.py +0 -0
  225. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/remote.py +0 -0
  226. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/remote_input_registrar.py +0 -0
  227. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/scheduler.py +0 -0
  228. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/security_alert.py +0 -0
  229. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/sensors.py +0 -0
  230. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/sun.py +0 -0
  231. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/templates/__init__.py +0 -0
  232. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/templates/alarm.py +0 -0
  233. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/templates/gate_cover.py +0 -0
  234. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/templates/thermostat.py +0 -0
  235. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/templates.py +0 -0
  236. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/update.py +0 -0
  237. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/manager/virtual_switches.py +0 -0
  238. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/messaging/__init__.py +0 -0
  239. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/messaging/basic.py +0 -0
  240. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/messaging/basic_mqtt.py +0 -0
  241. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/messaging/composite.py +0 -0
  242. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/messaging/local.py +0 -0
  243. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/messaging/lox.py +0 -0
  244. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/messaging/mqtt.py +0 -0
  245. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/messaging/queue.py +0 -0
  246. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/net/__init__.py +0 -0
  247. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/net/discovery_guard.py +0 -0
  248. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/recovery.py +0 -0
  249. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/remote/__init__.py +0 -0
  250. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/remote/base.py +0 -0
  251. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/remote/can.py +0 -0
  252. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/remote/esphome.py +0 -0
  253. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/remote/mqtt.py +0 -0
  254. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/remote/wled.py +0 -0
  255. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/remote/wled_cache.py +0 -0
  256. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/security/__init__.py +0 -0
  257. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/security/certificate.py +0 -0
  258. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/security/framing.py +0 -0
  259. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/security/posture.py +0 -0
  260. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/sensor/__init__.py +0 -0
  261. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/sensor/base.py +0 -0
  262. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/sensor/sun.py +0 -0
  263. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/sensor/system.py +0 -0
  264. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/state/__init__.py +0 -0
  265. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/state/manager.py +0 -0
  266. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/system/__init__.py +0 -0
  267. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/system/host_data.py +0 -0
  268. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/system/monitor.py +0 -0
  269. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/utils/__init__.py +0 -0
  270. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/utils/async_updater.py +0 -0
  271. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/utils/conditions.py +0 -0
  272. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/utils/filter.py +0 -0
  273. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/utils/font_util.py +0 -0
  274. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/utils/logger.py +0 -0
  275. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/utils/naming.py +0 -0
  276. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/utils/sun.py +0 -0
  277. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/utils/timeperiod.py +0 -0
  278. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/core/utils/util.py +0 -0
  279. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/24x16/adc.yaml +0 -0
  280. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  281. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/24x16/config.yaml +0 -0
  282. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/24x16/event.yaml +0 -0
  283. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/24x16/mqtt.yaml +0 -0
  284. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  285. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/32x10/adc.yaml +0 -0
  286. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  287. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/32x10/config.yaml +0 -0
  288. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/32x10/event.yaml +0 -0
  289. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/32x10/mqtt.yaml +0 -0
  290. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  291. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/48x4/adc.yaml +0 -0
  292. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  293. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/48x4/config.yaml +0 -0
  294. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/48x4/event.yaml +0 -0
  295. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/48x4/mqtt.yaml +0 -0
  296. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  297. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/__init__.py +0 -0
  298. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/can_master.yaml +0 -0
  299. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/can_slave.yaml +0 -0
  300. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover/adc.yaml +0 -0
  301. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  302. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover/config.yaml +0 -0
  303. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover/cover.yaml +0 -0
  304. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover/event.yaml +0 -0
  305. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover/mqtt.yaml +0 -0
  306. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover/outputCover.yaml +0 -0
  307. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover_mix/adc.yaml +0 -0
  308. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  309. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover_mix/config.yaml +0 -0
  310. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover_mix/cover.yaml +0 -0
  311. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover_mix/event.yaml +0 -0
  312. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  313. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  314. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/adc.yaml +0 -0
  315. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  316. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  317. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  318. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  319. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/event_all.yaml +0 -0
  320. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  321. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  322. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  323. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  324. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  325. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  326. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/exceptions.py +0 -0
  327. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/__init__.py +0 -0
  328. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/analog/__init__.py +0 -0
  329. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/analog/adc.py +0 -0
  330. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/can/__init__.py +0 -0
  331. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/can/bridge.py +0 -0
  332. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/can/client.py +0 -0
  333. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/can/interface.py +0 -0
  334. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/can/node.py +0 -0
  335. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/can/node_id.py +0 -0
  336. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/can/test_od.py +0 -0
  337. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/display/__init__.py +0 -0
  338. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/display/early_oled.py +0 -0
  339. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  340. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/display/oled.py +0 -0
  341. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/gpio/__init__.py +0 -0
  342. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  343. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  344. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  345. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  346. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/gpio/input/__init__.py +0 -0
  347. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/gpio/input/base.py +0 -0
  348. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/gpio/input/manager.py +0 -0
  349. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/i2c/__init__.py +0 -0
  350. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/i2c/bus.py +0 -0
  351. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/i2c/ina219.py +0 -0
  352. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/i2c/ina219_driver.py +0 -0
  353. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/i2c/ina226.py +0 -0
  354. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/i2c/ina226_driver.py +0 -0
  355. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/i2c/mcp9808.py +0 -0
  356. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/i2c/pct2075.py +0 -0
  357. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/onewire/__init__.py +0 -0
  358. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/onewire/dallas.py +0 -0
  359. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/sensor/__init__.py +0 -0
  360. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  361. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/sensor/temperature/base.py +0 -0
  362. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  363. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  364. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/hardware/udev_wait.py +0 -0
  365. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/integration/__init__.py +0 -0
  366. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/integration/homeassistant.py +0 -0
  367. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/integration/interlock.py +0 -0
  368. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/integration/lox_template.py +0 -0
  369. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/__init__.py +0 -0
  370. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/actions.py +0 -0
  371. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/apt/52boneio-periodic +0 -0
  372. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/apt/52boneio-unattended +0 -0
  373. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/docker/daemon.json +0 -0
  374. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
  375. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
  376. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/docker/nodered/docker-compose-cloud.yaml +0 -0
  377. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  378. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
  379. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/helpers/boneio-containers +0 -0
  380. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/helpers/boneio-helpers-heal +0 -0
  381. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/helpers/boneio-migrate-v2 +0 -0
  382. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/issue.d/10-boneio.issue +0 -0
  383. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/journald/boneio-console.conf +0 -0
  384. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/journald/journald.conf +0 -0
  385. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/kernel/postinst-boneio-overlay +0 -0
  386. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/migrations-recovery.pem +0 -0
  387. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/migrations.pem +0 -0
  388. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/modules-load.d/onewire.conf +0 -0
  389. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  390. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/sshd/10-boneio-hardening.conf +0 -0
  391. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/sudoers/boneio +0 -0
  392. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/sudoers/boneio-helpers +0 -0
  393. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/sudoers/boneio-timedatectl +0 -0
  394. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/boneio-dpkg-recover.service +0 -0
  395. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/boneio-helpers-heal.service +0 -0
  396. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
  397. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
  398. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/boneio.service +0 -0
  399. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/dropins/apt-daily-priority.conf +0 -0
  400. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/dropins/avahi-daemon-defer.conf +0 -0
  401. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/dropins/bb-usb-gadgets-defer.conf +0 -0
  402. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/dropins/mosquitto-priority.conf +0 -0
  403. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/dropins/timer-no-persistent.conf +0 -0
  404. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/dropins/user-manager-defer.conf +0 -0
  405. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/linger-marker +0 -0
  406. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  407. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
  408. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  409. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  410. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  411. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  412. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
  413. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/bootstrap/boneio-migrate +0 -0
  414. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  415. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  416. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.3.0.json +0 -0
  417. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.3.0.sig +0 -0
  418. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.3.1.json +0 -0
  419. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.3.1.sig +0 -0
  420. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.3.2.json +0 -0
  421. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.3.2.sig +0 -0
  422. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.4.0.json +0 -0
  423. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.4.0.sig +0 -0
  424. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.4.3.json +0 -0
  425. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.4.3.sig +0 -0
  426. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.4.4.json +0 -0
  427. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.4.4.sig +0 -0
  428. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.0.json +0 -0
  429. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.0.sig +0 -0
  430. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.1.json +0 -0
  431. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.1.sig +0 -0
  432. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.10.json +0 -0
  433. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.10.sig +0 -0
  434. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.11.json +0 -0
  435. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.11.sig +0 -0
  436. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.12.json +0 -0
  437. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.12.sig +0 -0
  438. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.13.json +0 -0
  439. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.13.sig +0 -0
  440. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.14.json +0 -0
  441. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.14.sig +0 -0
  442. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.15.json +0 -0
  443. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.15.sig +0 -0
  444. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.16.json +0 -0
  445. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.16.sig +0 -0
  446. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.17.json +0 -0
  447. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.17.sig +0 -0
  448. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.18.json +0 -0
  449. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.18.sig +0 -0
  450. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.2.json +0 -0
  451. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.2.sig +0 -0
  452. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.3.json +0 -0
  453. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.3.sig +0 -0
  454. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.4.json +0 -0
  455. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.4.sig +0 -0
  456. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.5.json +0 -0
  457. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.5.sig +0 -0
  458. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.6.json +0 -0
  459. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.6.sig +0 -0
  460. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.7.json +0 -0
  461. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.7.sig +0 -0
  462. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.8.json +0 -0
  463. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.8.sig +0 -0
  464. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.9.json +0 -0
  465. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.5.9.sig +0 -0
  466. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.0.json +0 -0
  467. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.0.sig +0 -0
  468. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.1.json +0 -0
  469. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.1.sig +0 -0
  470. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.10.json +0 -0
  471. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.10.sig +0 -0
  472. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.11.json +0 -0
  473. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.11.sig +0 -0
  474. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.12.json +0 -0
  475. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.12.sig +0 -0
  476. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.13.json +0 -0
  477. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.13.sig +0 -0
  478. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.14.json +0 -0
  479. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.14.sig +0 -0
  480. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.15.json +0 -0
  481. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.15.sig +0 -0
  482. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.16.json +0 -0
  483. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.16.sig +0 -0
  484. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.19.json +0 -0
  485. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.19.sig +0 -0
  486. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.2.json +0 -0
  487. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.2.sig +0 -0
  488. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.20.json +0 -0
  489. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.20.sig +0 -0
  490. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.21.json +0 -0
  491. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.21.sig +0 -0
  492. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.23.json +0 -0
  493. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.23.sig +0 -0
  494. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.24.json +0 -0
  495. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.24.sig +0 -0
  496. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.25.json +0 -0
  497. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.25.sig +0 -0
  498. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.3.json +0 -0
  499. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.3.sig +0 -0
  500. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.4.json +0 -0
  501. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.4.sig +0 -0
  502. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.6.json +0 -0
  503. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.6.sig +0 -0
  504. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.7.json +0 -0
  505. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/plans/1.6.7.sig +0 -0
  506. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/__init__.py +0 -0
  507. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
  508. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  509. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  510. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
  511. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
  512. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
  513. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
  514. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_10_disable_console_setup.py +0 -0
  515. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_11_timer_catchup.py +0 -0
  516. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_12_oled_splash_off_critical_path.py +0 -0
  517. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_13_mosquitto_priority.py +0 -0
  518. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_14_journal_apparent_size.py +0 -0
  519. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_15_prune_orphan_journals.py +0 -0
  520. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_16_login_linger.py +0 -0
  521. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_17_defer_user_manager.py +0 -0
  522. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_18_fix_hostname_once.py +0 -0
  523. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
  524. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_2_libyaml.py +0 -0
  525. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -0
  526. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_4_onewire_modules.py +0 -0
  527. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_5_overlay_kernel_hook.py +0 -0
  528. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_6_boot_service_order.py +0 -0
  529. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_7_journald_limits.py +0 -0
  530. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_8_apparmor_prune.py +0 -0
  531. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_5_9_defer_nonessential.py +0 -0
  532. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_0_nodered_admin_auth.py +0 -0
  533. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_10_narrow_sudo_rules.py +0 -0
  534. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_11_drop_docker_group.py +0 -0
  535. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_12_console_shows_ip.py +0 -0
  536. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_13_custom_certificate.py +0 -0
  537. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_14_certificate_lifetime.py +0 -0
  538. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_15_web_port_reaches_caddy.py +0 -0
  539. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_16_release_floor_ordering.py +0 -0
  540. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_17_service_password.py +0 -0
  541. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_18_os_updates.py +0 -0
  542. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_19_helper_apt_purge.py +0 -0
  543. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py +0 -0
  544. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_20_drop_packagekit.py +0 -0
  545. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_21_caddy_pinned.py +0 -0
  546. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_22_security_autoupdates.py +0 -0
  547. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_23_helper_fstab_options.py +0 -0
  548. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_24_boot_partition_nofail.py +0 -0
  549. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_25_journal_to_serial_console.py +0 -0
  550. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py +0 -0
  551. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py +0 -0
  552. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_4_ssh_login_hardening.py +0 -0
  553. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_5_trust_transition.py +0 -0
  554. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_6_retire_legacy_helper.py +0 -0
  555. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_7_timedatectl_sudoers.py +0 -0
  556. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_8_system_helper.py +0 -0
  557. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/migrations/versions/v1_6_9_ntp_servers.py +0 -0
  558. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/__init__.py +0 -0
  559. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/cli.py +0 -0
  560. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/client.py +0 -0
  561. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/coordinator.py +0 -0
  562. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/__init__.py +0 -0
  563. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
  564. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  565. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  566. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  567. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  568. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  569. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  570. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  571. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/hvac/defro-drx.json +0 -0
  572. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
  573. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  574. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/hvac/thessla.json +0 -0
  575. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  576. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/hvac/wanas415.json +0 -0
  577. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/inverters/sofar.json +0 -0
  578. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  579. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  580. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  581. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  582. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/sensors/cwt.json +0 -0
  583. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  584. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  585. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  586. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  587. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/sensors/pt100.json +0 -0
  588. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
  589. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/sensors/sht20.json +0 -0
  590. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/devices/sensors/sht30.json +0 -0
  591. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/__init__.py +0 -0
  592. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/base.py +0 -0
  593. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/derived/__init__.py +0 -0
  594. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/derived/numeric.py +0 -0
  595. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/derived/select.py +0 -0
  596. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/derived/switch.py +0 -0
  597. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/derived/text.py +0 -0
  598. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/sensor/__init__.py +0 -0
  599. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/sensor/binary.py +0 -0
  600. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/sensor/numeric.py +0 -0
  601. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/sensor/text.py +0 -0
  602. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/writeable/__init__.py +0 -0
  603. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/writeable/binary.py +0 -0
  604. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/entities/writeable/numeric.py +0 -0
  605. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/mock_coordinator.py +0 -0
  606. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/modbus/utils.py +0 -0
  607. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/models/__init__.py +0 -0
  608. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/models/actions.py +0 -0
  609. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/models/events.py +0 -0
  610. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/models/files.py +0 -0
  611. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/models/logs.py +0 -0
  612. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/models/mqtt.py +0 -0
  613. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/models/state.py +0 -0
  614. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/runner.py +0 -0
  615. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/actions.yaml +0 -0
  616. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/actions_sensor.yaml +0 -0
  617. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/actions_switch.yaml +0 -0
  618. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/condition.yaml +0 -0
  619. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/filters.yaml +0 -0
  620. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/filters_adc.yaml +0 -0
  621. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/id.yaml +0 -0
  622. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/remote_devices.yaml +0 -0
  623. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/remote_inputs.yaml +0 -0
  624. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/remote_outputs.yaml +0 -0
  625. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/temp_unit.yaml +0 -0
  626. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/schema/update_interval.yaml +0 -0
  627. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/action_validation.py +0 -0
  628. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/bind.py +0 -0
  629. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/dashboard_cards.py +0 -0
  630. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/AppInitContext-BeNfj23N.js +0 -0
  631. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/NodeRedView-C_0IlqZ6.js +0 -0
  632. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/NumericInput-DGzxoNxg.js +0 -0
  633. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/Sparkline-IwpgUXqb.js +0 -0
  634. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/ViewToggle-CTm9ZUC_.js +0 -0
  635. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/axios-DJBeJS4R.js +0 -0
  636. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/basePath-CxHj-SSK.js +0 -0
  637. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
  638. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  639. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/configCache-BS98BpF9.js +0 -0
  640. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/dialog-DUHsilMe.js +0 -0
  641. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/editor.worker-O-CH8JUO.js +0 -0
  642. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/fa-Bo0hGcDa.js +0 -0
  643. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/formatters-Cc0QIRxb.js +0 -0
  644. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/gi-BEb-YkSt.js +0 -0
  645. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/index-bS3WyOSw.css +0 -0
  646. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
  647. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/rolldown-runtime-hePW80VL.js +0 -0
  648. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/select-DCMFLjZt.js +0 -0
  649. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/utils-DOQQTBMN.js +0 -0
  650. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
  651. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/assets/yaml.worker-CeS-z5zL.js +0 -0
  652. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  653. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  654. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/boneio.svg +0 -0
  655. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  656. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  657. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  658. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  659. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  660. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  661. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  662. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  663. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  664. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  665. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/ina226.schema.json +0 -0
  666. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  667. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  668. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/location.schema.json +0 -0
  669. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  670. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  671. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  672. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  673. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  674. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
  675. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  676. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  677. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/osdp.schema.json +0 -0
  678. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  679. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  680. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  681. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  682. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  683. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
  684. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
  685. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/schedule.schema.json +0 -0
  686. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  687. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  688. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  689. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/virtual_switch.schema.json +0 -0
  690. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
  691. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/frontend-dist/workbox-7e79c025.js +0 -0
  692. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/hvac_svg_templates.py +0 -0
  693. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/middleware/__init__.py +0 -0
  694. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/middleware/auth.py +0 -0
  695. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/middleware/csrf.py +0 -0
  696. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/middleware/policy.py +0 -0
  697. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/modbus_card_templates.py +0 -0
  698. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/rate_limit.py +0 -0
  699. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/recovery/__init__.py +0 -0
  700. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/recovery/app.py +0 -0
  701. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/recovery/server.py +0 -0
  702. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/recovery/static/index.html +0 -0
  703. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/recovery/static/recovery.css +0 -0
  704. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/recovery/static/recovery.js +0 -0
  705. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/__init__.py +0 -0
  706. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/accounts.py +0 -0
  707. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/auth.py +0 -0
  708. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/can.py +0 -0
  709. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/config.py +0 -0
  710. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/config_actions.py +0 -0
  711. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/config_backups.py +0 -0
  712. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/config_core.py +0 -0
  713. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/config_discovery.py +0 -0
  714. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/config_files.py +0 -0
  715. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/covers.py +0 -0
  716. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/dashboard.py +0 -0
  717. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/dev_fake_device.py +0 -0
  718. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/diagnostics.py +0 -0
  719. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/irrigation.py +0 -0
  720. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/migrations.py +0 -0
  721. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/modbus.py +0 -0
  722. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/mqtt_reference.py +0 -0
  723. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/nodered.py +0 -0
  724. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/onboarding.py +0 -0
  725. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/os_update.py +0 -0
  726. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/outputs.py +0 -0
  727. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/remote_devices.py +0 -0
  728. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/schedule.py +0 -0
  729. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/security.py +0 -0
  730. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/sensors.py +0 -0
  731. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/sun.py +0 -0
  732. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/system.py +0 -0
  733. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/templates.py +0 -0
  734. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/timezone_sudoers.py +0 -0
  735. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/tools.py +0 -0
  736. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/routes/update.py +0 -0
  737. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/adc.schema.json +0 -0
  738. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/areas.schema.json +0 -0
  739. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  740. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/boneio.schema.json +0 -0
  741. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/can.schema.json +0 -0
  742. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/dallas.schema.json +0 -0
  743. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/ds2482.schema.json +0 -0
  744. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/event.schema.json +0 -0
  745. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/ina219.schema.json +0 -0
  746. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/ina226.schema.json +0 -0
  747. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/irrigation.schema.json +0 -0
  748. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/lm75.schema.json +0 -0
  749. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/location.schema.json +0 -0
  750. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/logger.schema.json +0 -0
  751. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/lox_udp.schema.json +0 -0
  752. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/mcp23017.schema.json +0 -0
  753. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/mcp9808.schema.json +0 -0
  754. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/modbus.schema.json +0 -0
  755. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/modbus_devices.schema.json +0 -0
  756. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/mqtt.schema.json +0 -0
  757. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/oled.schema.json +0 -0
  758. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/osdp.schema.json +0 -0
  759. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/output.schema.json +0 -0
  760. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/output_group.schema.json +0 -0
  761. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/pca9685.schema.json +0 -0
  762. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/pcf8575.schema.json +0 -0
  763. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/remote_devices.schema.json +0 -0
  764. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/remote_inputs.schema.json +0 -0
  765. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/remote_outputs.schema.json +0 -0
  766. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/schedule.schema.json +0 -0
  767. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/sensor.schema.json +0 -0
  768. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/template.schema.json +0 -0
  769. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  770. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/virtual_switch.schema.json +0 -0
  771. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/schema/web.schema.json +0 -0
  772. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/security_headers.py +0 -0
  773. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/services/__init__.py +0 -0
  774. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/services/logs.py +0 -0
  775. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/sudo_rate_limiter.py +0 -0
  776. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/web_server.py +0 -0
  777. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio/webui/websocket_manager.py +0 -0
  778. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio.egg-info/dependency_links.txt +0 -0
  779. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio.egg-info/entry_points.txt +0 -0
  780. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio.egg-info/requires.txt +0 -0
  781. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/boneio.egg-info/top_level.txt +0 -0
  782. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/pyproject.toml +0 -0
  783. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/setup.cfg +0 -0
  784. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/setup.py +0 -0
  785. {boneio-1.6.0.dev18 → boneio-1.6.0.dev20}/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.dev18
3
+ Version: 1.6.0.dev20
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
@@ -21,10 +21,21 @@ from boneio.const import (
21
21
  from boneio.core.events import EventBus
22
22
  from boneio.core.messaging import BasicMqtt
23
23
  from boneio.core.utils import TimePeriod
24
+ from boneio.core.utils.timeperiod import ensure_time_period
24
25
  from boneio.models import CoverState, PositionDict, SavedPositionDict
25
26
  from boneio.models.events import CoverEvent
26
27
 
27
28
  _LOGGER = logging.getLogger(__name__)
29
+ # How often a moving cover recomputes its position. The relay is not switched
30
+ # off on this grid — the last wait is cut short to end exactly at the target.
31
+ MOVE_POLL_INTERVAL = 0.05 # s
32
+ # Extra relay time on a movement ending fully open or closed, as a percent of
33
+ # open_time/close_time. Time-based position drifts; running into the motor's
34
+ # own endstop brings it back to a known 0% / 100%.
35
+ DEFAULT_ENDSTOP_OVERRUN = 10 # %
36
+ # Pause before energising the opposite relay, so a capacitor motor comes to
37
+ # rest before it is driven the other way.
38
+ DEFAULT_DIRECTION_CHANGE_WAIT_MS = 500
28
39
 
29
40
 
30
41
  class BaseCoverABC(ABC):
@@ -159,6 +170,9 @@ class BaseCover(BaseCoverABC, BasicMqtt):
159
170
  event_bus: EventBus,
160
171
  position: float = 100.0,
161
172
  name: str | None = None,
173
+ actuator_activation_duration: TimePeriod | None = None,
174
+ endstop_overrun: int = DEFAULT_ENDSTOP_OVERRUN,
175
+ direction_change_wait_time: TimePeriod | None = None,
162
176
  **kwargs,
163
177
  ) -> None:
164
178
  # Use provided name or fall back to id
@@ -172,6 +186,21 @@ class BaseCover(BaseCoverABC, BasicMqtt):
172
186
  self._event_bus = event_bus
173
187
  self._open_time = open_time.total_milliseconds
174
188
  self._close_time = close_time.total_milliseconds
189
+ # Time from energising the relay until the motor actually moves. Some
190
+ # drives (Somfy J4 WT) ignore orders shorter than ~200ms, so a short
191
+ # tilt step would never happen without it.
192
+ self._actuator_activation_ms = (
193
+ actuator_activation_duration.total_milliseconds if actuator_activation_duration is not None else 0.0
194
+ )
195
+ self._endstop_overrun = float(endstop_overrun)
196
+ self._direction_change_wait_ms = (
197
+ direction_change_wait_time.total_milliseconds
198
+ if direction_change_wait_time is not None
199
+ else DEFAULT_DIRECTION_CHANGE_WAIT_MS
200
+ )
201
+ # (relay, monotonic time) of the last relay this cover switched off —
202
+ # a reversal waits out direction_change_wait_time from that moment.
203
+ self._last_relay_off: tuple[BasicOutput, float] | None = None
175
204
  self._position = position
176
205
  self._initial_position: float = position
177
206
  self._current_operation = IDLE
@@ -203,6 +232,112 @@ class BaseCover(BaseCoverABC, BasicMqtt):
203
232
  with suppress(RuntimeError):
204
233
  self._loop.call_soon_threadsafe(self._loop.call_later, 0.5, self.send_state, self.state, self.json_position)
205
234
 
235
+ def _drive_relay(self, relay: BasicOutput, travel_ms: float, apply_movement: Callable[[float], None]) -> None:
236
+ """Hold ``relay`` on until the cover has travelled ``travel_ms``, or until stopped.
237
+
238
+ Runs in the movement thread. The motor is assumed to stand still for
239
+ the first ``actuator_activation_duration`` after the relay closes, so
240
+ the relay stays on for that long *plus* ``travel_ms``.
241
+
242
+ When the other relay was switched off less than
243
+ ``direction_change_wait_time`` ago, it first waits out the rest of that
244
+ time. A stop during the wait leaves the relay untouched.
245
+
246
+ ``apply_movement`` gets how long the motor has really been moving (ms)
247
+ and updates the position from it. It is called on every poll and once
248
+ more after the relay has dropped, timed at the turn-off — so a stop
249
+ between polls, or the I2C write itself, is not lost from the position.
250
+
251
+ Args:
252
+ relay: The open or close relay to drive.
253
+ travel_ms: Motor movement time needed to reach the target.
254
+ apply_movement: Callback converting moving time to position.
255
+ """
256
+ activation_ms = self._actuator_activation_ms
257
+ deadline_ms = activation_ms + travel_ms
258
+
259
+ if self._last_relay_off is not None and self._last_relay_off[0] is not relay:
260
+ since_off_ms = (time.monotonic() - self._last_relay_off[1]) * 1000
261
+ wait_ms = self._direction_change_wait_ms - since_off_ms
262
+ if wait_ms > 0:
263
+ _LOGGER.debug("Cover %s reverses direction, waiting %dms first", self._id, wait_ms)
264
+ if self._stop_event.wait(wait_ms / 1000):
265
+ return
266
+
267
+ relay.turn_on()
268
+ # Send relay state to WebSocket (not MQTT - that's handled by output_type check)
269
+ with suppress(RuntimeError):
270
+ self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
271
+ # Both timestamps are taken after the relay write returns, so the I2C
272
+ # latency of turn_on and turn_off cancels out.
273
+ start_time = time.monotonic()
274
+
275
+ while True:
276
+ current_time = time.monotonic()
277
+ elapsed_ms = (current_time - start_time) * 1000
278
+ if elapsed_ms >= deadline_ms:
279
+ break
280
+ apply_movement(max(0.0, elapsed_ms - activation_ms))
281
+ self._last_timestamp = time.time() # Wall clock for display
282
+ if current_time - self._last_update_time >= 1:
283
+ with suppress(RuntimeError):
284
+ self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
285
+ self._last_update_time = current_time
286
+ # Waiting on the event instead of sleeping lets stop() cut in at once.
287
+ if self._stop_event.wait(min(deadline_ms - elapsed_ms, MOVE_POLL_INTERVAL * 1000) / 1000):
288
+ break
289
+
290
+ relay.turn_off()
291
+ off_time = time.monotonic()
292
+ self._last_relay_off = (relay, off_time)
293
+ elapsed_ms = (off_time - start_time) * 1000
294
+ apply_movement(max(0.0, elapsed_ms - activation_ms))
295
+ self._last_timestamp = time.time()
296
+ with suppress(RuntimeError):
297
+ self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
298
+
299
+ def _endstop_overrun_ms(self, duration: float, start: float, end: float) -> float:
300
+ """Relay time to add so a movement ending at 0% or 100% hits the endstop.
301
+
302
+ Only a movement that really travels to an end gets it: an already
303
+ closed cover is not driven into its endstop again.
304
+
305
+ Args:
306
+ duration: Full 0-100% time of this direction, in ms.
307
+ start: Position the movement starts from.
308
+ end: Position the movement ends at.
309
+ """
310
+ if end not in (0, 100) or abs(end - start) <= 0:
311
+ return 0.0
312
+ return duration * self._endstop_overrun / 100.0
313
+
314
+ def _is_fully_open(self) -> bool:
315
+ """Whether open() has nothing left to do."""
316
+ return self._position >= 100
317
+
318
+ def _is_fully_closed(self) -> bool:
319
+ """Whether close() has nothing left to do."""
320
+ return self._position <= 0
321
+
322
+ def update_config_times(self, config: dict) -> None:
323
+ """Update timing shared by all cover platforms.
324
+
325
+ Args:
326
+ config: Cover configuration; time values as TimePeriod or strings.
327
+ """
328
+ if "open_time" in config:
329
+ self._open_time = ensure_time_period(config["open_time"]).total_milliseconds
330
+ if "close_time" in config:
331
+ self._close_time = ensure_time_period(config["close_time"]).total_milliseconds
332
+ # Optional field: a removed value means "no activation delay" again.
333
+ activation = config.get("actuator_activation_duration")
334
+ self._actuator_activation_ms = ensure_time_period(activation).total_milliseconds if activation else 0.0
335
+ self._endstop_overrun = float(config.get("endstop_overrun", DEFAULT_ENDSTOP_OVERRUN))
336
+ wait = config.get("direction_change_wait_time")
337
+ self._direction_change_wait_ms = (
338
+ ensure_time_period(wait).total_milliseconds if wait is not None else DEFAULT_DIRECTION_CHANGE_WAIT_MS
339
+ )
340
+
206
341
  async def on_exit(self) -> None:
207
342
  """Stop on exit."""
208
343
  await self.stop(on_exit=True)
@@ -238,7 +373,7 @@ class BaseCover(BaseCoverABC, BasicMqtt):
238
373
  self.send_state(self.state, self.json_position)
239
374
 
240
375
  async def open(self) -> None:
241
- if self._position >= 100:
376
+ if self._is_fully_open():
242
377
  return
243
378
  estimated_time_s = (100 - self._position) / 100 * self._open_time / 1000
244
379
  _LOGGER.info(
@@ -253,7 +388,7 @@ class BaseCover(BaseCoverABC, BasicMqtt):
253
388
  self._message_bus.send_message(topic=f"{self._send_topic}/state", payload=OPENING)
254
389
 
255
390
  async def close(self) -> None:
256
- if self._position <= 0:
391
+ if self._is_fully_closed():
257
392
  return
258
393
  estimated_time_s = self._position / 100 * self._close_time / 1000
259
394
  _LOGGER.info(
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import asyncio
4
3
  import logging
5
4
  import threading
6
5
  import time
@@ -12,7 +11,6 @@ from boneio.components.output import BasicOutput
12
11
  from boneio.const import CLOSE, CLOSING, IDLE, OPEN, OPENING, STOP
13
12
  from boneio.core.events import EventBus
14
13
  from boneio.core.utils import TimePeriod
15
- from boneio.core.utils.timeperiod import ensure_time_period
16
14
 
17
15
  _LOGGER = logging.getLogger(__name__)
18
16
  DEFAULT_RESTORED_STATE = {"position": 100}
@@ -81,48 +79,17 @@ class TimeBasedCover(BaseCover):
81
79
  self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
82
80
  return
83
81
 
84
- # Calculate actual duration based on remaining distance
85
82
  # duration is full time for 100% movement, scale it by actual distance to travel
86
- actual_duration = duration * (total_steps / 100.0)
83
+ end_position = target_position if target_position is not None else (100 if direction == OPEN else 0)
84
+ travel_ms = duration * abs(end_position - self._initial_position) / 100.0
85
+ travel_ms += self._endstop_overrun_ms(duration, self._initial_position, end_position)
86
+ sign = 1 if direction == OPEN else -1
87
87
 
88
- relay.turn_on()
89
- # Send relay state to WebSocket (not MQTT - that's handled by output_type check)
90
- with suppress(RuntimeError):
91
- self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
92
- start_time = time.monotonic()
93
-
94
- while not self._stop_event.is_set():
95
- current_time = time.monotonic() # Pobierz aktualny czas tylko raz na iterację
96
- elapsed_time = (current_time - start_time) * 1000 # Konwersja na milisekundy
97
- progress = elapsed_time / actual_duration if actual_duration > 0 else 1.0
98
-
99
- if direction == OPEN:
100
- self._position = min(100.0, self._initial_position + progress * total_steps)
101
- elif direction == CLOSE:
102
- self._position = max(0.0, self._initial_position - progress * total_steps)
103
-
104
- self._last_timestamp = time.time() # Wall clock for display
105
- if current_time - self._last_update_time >= 1:
106
- try:
107
- self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
108
- except RuntimeError:
109
- break
110
- self._last_update_time = current_time
111
-
112
- if target_position is not None and (
113
- (direction == OPEN and self._position >= target_position)
114
- or (direction == CLOSE and self._position <= target_position)
115
- ):
116
- break
117
-
118
- if progress >= 1.0:
119
- break
120
-
121
- time.sleep(0.05) # Małe opóźnienie, aby nie blokować CPU
122
- relay.turn_off()
123
- # Send relay state to WebSocket (not MQTT - that's handled by output_type check)
124
- with suppress(RuntimeError):
125
- self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
88
+ def apply_movement(moving_ms: float) -> None:
89
+ moved = moving_ms / duration * 100.0
90
+ self._position = min(100.0, max(0.0, self._initial_position + sign * moved))
91
+
92
+ self._drive_relay(relay, travel_ms, apply_movement)
126
93
  self._current_operation = IDLE
127
94
  with suppress(RuntimeError):
128
95
  self._loop.call_soon_threadsafe(lambda: self.send_state_and_save(self.json_position))
@@ -157,15 +124,3 @@ class TimeBasedCover(BaseCover):
157
124
  @property
158
125
  def kind(self) -> str:
159
126
  return "time"
160
-
161
- def update_config_times(self, config: dict) -> None:
162
- """Update cover timing configuration.
163
-
164
- Args:
165
- config: Dictionary with timing values as TimePeriod objects.
166
- Keys: open_time, close_time
167
- """
168
- if "open_time" in config:
169
- self._open_time = ensure_time_period(config["open_time"]).total_milliseconds
170
- if "close_time" in config:
171
- self._close_time = ensure_time_period(config["close_time"]).total_milliseconds
@@ -33,7 +33,8 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
33
33
 
34
34
  Args:
35
35
  tilt_duration: Duration for full tilt movement.
36
- actuator_activation_duration: Actuator activation time (unused).
36
+ actuator_activation_duration: Time from energising the relay until
37
+ the motor moves; added to every movement.
37
38
  restored_state: Persisted position/tilt from disk.
38
39
  tilt_restore_after_close: If True, restore previous tilt
39
40
  position after closing the cover (UI/HA calls).
@@ -52,15 +53,17 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
52
53
 
53
54
  super().__init__(
54
55
  position=position,
56
+ actuator_activation_duration=actuator_activation_duration,
55
57
  **kwargs,
56
58
  )
57
59
  _LOGGER.debug(
58
60
  "VenetianCover %s initialized: open_time=%dms, close_time=%dms, tilt_duration=%dms, "
59
- "position=%d%%, tilt=%d%%, tilt_restore=%s",
61
+ "actuator_activation=%dms, position=%d%%, tilt=%d%%, tilt_restore=%s",
60
62
  self._id,
61
63
  self._open_time,
62
64
  self._close_time,
63
65
  self._tilt_duration,
66
+ self._actuator_activation_ms,
64
67
  position,
65
68
  self._tilt_position,
66
69
  self._tilt_restore_after_close,
@@ -79,12 +82,12 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
79
82
  if direction == OPEN:
80
83
  relay = self._open_relay
81
84
  total_steps = 100 - self._position
82
- total_tilt_step = tilt_delta if target_tilt_position is not None else 100 - self._initial_tilt_position
83
-
84
85
  elif direction == CLOSE:
85
86
  relay = self._close_relay
86
87
  total_steps = self._position
87
- total_tilt_step = tilt_delta if target_tilt_position is not None else self._initial_tilt_position
88
+ if total_steps == 0 and target_position is None:
89
+ # Down at 0% with the slats still open: closing turns them shut.
90
+ total_steps = self._initial_tilt_position
88
91
  else:
89
92
  return
90
93
  if target_tilt_position is not None:
@@ -112,85 +115,27 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
112
115
  self._loop.call_soon_threadsafe(self.send_state, self.state, self.json_position)
113
116
  return
114
117
 
115
- # Calculate actual duration based on remaining distance
116
- # duration is full time for 100% movement, scale it by actual distance to travel
117
- actual_duration = duration * (total_steps / 100.0)
118
-
119
- relay.turn_on()
120
- # Send relay state to WebSocket (not MQTT - that's handled by output_type check)
121
- self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
122
- start_time = time.monotonic()
123
- progress = 0.0
124
- tilt_progress = 0.0
125
- needed_tilt_duration = tilt_duration * (total_tilt_step / 100)
126
- if target_tilt_position is None:
127
- tilt_delta = 1.0
128
-
129
- while not self._stop_event.is_set():
130
- current_time = time.monotonic() # Pobierz aktualny czas tylko raz na iterację
131
- elapsed_time = (current_time - start_time) * 1000 # Konwersja na milisekundy
132
-
133
- if elapsed_time < needed_tilt_duration:
134
- tilt_progress = elapsed_time / needed_tilt_duration if needed_tilt_duration > 0 else 1.0
135
- progress = 0.0
136
- else:
137
- tilt_progress = 1.0
138
- progress = (elapsed_time - needed_tilt_duration) / actual_duration if actual_duration > 0 else 1.0
139
-
140
- if direction == OPEN:
141
- # Obliczanie _position dla kierunku OPEN
142
- self._position = min(100.0, self._initial_position + progress * total_steps)
143
-
144
- # Obliczanie _tilt_position dla kierunku OPEN
145
- if target_tilt_position is not None:
146
- self._tilt_position = min(
147
- target_tilt_position, self._initial_tilt_position + tilt_progress * tilt_delta
148
- )
149
- else: # Fallback jeśli nie ma target_tilt_position
150
- self._tilt_position = min(
151
- 100.0, self._initial_tilt_position + tilt_progress * (100 - self._initial_tilt_position)
152
- )
153
- elif direction == CLOSE:
154
- # Obliczanie _position dla kierunku CLOSE
155
- self._position = max(0.0, self._initial_position - progress * total_steps)
156
-
157
- # Obliczanie _tilt_position dla kierunku CLOSE
158
- if target_tilt_position is not None:
159
- self._tilt_position = max(
160
- target_tilt_position, self._initial_tilt_position - tilt_progress * tilt_delta
161
- )
162
- else: # Fallback jeśli nie ma target_tilt_position
163
- self._tilt_position = max(
164
- 0.0, self._initial_tilt_position - tilt_progress * self._initial_tilt_position
165
- )
166
-
167
- self._last_timestamp = time.time() # Wall clock for display
168
- if current_time - self._last_update_time >= 1:
169
- self._loop.call_soon_threadsafe(self.send_state, self.state, self.json_position)
170
- self._last_update_time = current_time
171
-
172
- if target_tilt_position is not None and (
173
- (direction == OPEN and self._tilt_position >= target_tilt_position)
174
- or (direction == CLOSE and self._tilt_position <= target_tilt_position)
175
- ):
176
- break
177
-
178
- if target_position is not None and (
179
- (direction == OPEN and self._position >= target_position)
180
- or (direction == CLOSE and self._position <= target_position)
181
- ):
182
- break
183
-
184
- if progress >= 1.0 or (target_tilt_position and tilt_progress >= 1.0):
185
- break
186
-
187
- if target_tilt_position is not None and abs(self._tilt_position - target_tilt_position) < 5:
188
- time.sleep(0.01)
189
- else:
190
- time.sleep(0.05)
191
- relay.turn_off()
192
- # Send relay state to WebSocket (not MQTT - that's handled by output_type check)
193
- self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
118
+ # Slats turn first, over the tilt range left in this direction; only
119
+ # once they are fully turned does the cover itself travel.
120
+ sign = 1 if direction == OPEN else -1
121
+ tilt_room = 100 - self._initial_tilt_position if direction == OPEN else self._initial_tilt_position
122
+ tilt_room_ms = tilt_duration * tilt_room / 100.0
123
+ if target_tilt_position is not None:
124
+ travel_ms = tilt_duration * tilt_delta / 100.0
125
+ else:
126
+ end_position = target_position if target_position is not None else (100 if direction == OPEN else 0)
127
+ travel_ms = tilt_room_ms + duration * abs(end_position - self._initial_position) / 100.0
128
+ travel_ms += self._endstop_overrun_ms(duration, self._initial_position, end_position)
129
+
130
+ def apply_movement(moving_ms: float) -> None:
131
+ tilt_moved = min(tilt_room, moving_ms / tilt_duration * 100.0) if tilt_duration > 0 else tilt_room
132
+ self._tilt_position = self._initial_tilt_position + sign * tilt_moved
133
+ # Movement past the tilt range is cover travel — also when a tilt
134
+ # step overruns, since the motor really did keep going.
135
+ moved = max(0.0, moving_ms - tilt_room_ms) / duration * 100.0
136
+ self._position = min(100.0, max(0.0, self._initial_position + sign * moved))
137
+
138
+ self._drive_relay(relay, travel_ms, apply_movement)
194
139
  self._current_operation = IDLE
195
140
  self._loop.call_soon_threadsafe(self.send_state_and_save, self.json_position)
196
141
  self._last_update_time = time.monotonic() # Upewnij się, że aktualizacja jest wysłana na końcu ruchu
@@ -315,6 +260,10 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
315
260
  )
316
261
  await self.set_tilt(tilt_position=0)
317
262
 
263
+ def _is_fully_closed(self) -> bool:
264
+ """Closed means down at 0% *and* the slats shut, not just 0%."""
265
+ return self._position <= 0 and self._tilt_position <= 0
266
+
318
267
  def _save_tilt_for_restore(self) -> None:
319
268
  """Save current tilt position for later restoration.
320
269
 
@@ -373,12 +322,10 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
373
322
 
374
323
  Args:
375
324
  config: Dictionary with timing values as TimePeriod objects.
376
- Keys: open_time, close_time, tilt_duration, tilt_restore_after_close
325
+ Keys: open_time, close_time, actuator_activation_duration,
326
+ tilt_duration, tilt_restore_after_close
377
327
  """
378
- if "open_time" in config:
379
- self._open_time = ensure_time_period(config["open_time"]).total_milliseconds
380
- if "close_time" in config:
381
- self._close_time = ensure_time_period(config["close_time"]).total_milliseconds
328
+ super().update_config_times(config)
382
329
  if "tilt_duration" in config and config["tilt_duration"]:
383
330
  self._tilt_duration = ensure_time_period(config["tilt_duration"]).total_milliseconds
384
331
  if "tilt_restore_after_close" in config:
@@ -69,12 +69,21 @@ def migrate_legacy_auth(
69
69
  if store.is_provisioned():
70
70
  return MigrationResult(False, reason="already_provisioned")
71
71
 
72
- if not isinstance(legacy_auth, dict) or not legacy_auth:
72
+ if not isinstance(legacy_auth, dict):
73
73
  return MigrationResult(False, reason="no_legacy_auth")
74
74
 
75
75
  username = str(legacy_auth.get("username") or "").strip()
76
76
  password = str(legacy_auth.get("password") or "")
77
77
 
78
+ # Only the login pair makes this a pre-1.6 block. The schema fills
79
+ # web.auth with its defaults (allow_anonymous: false) on every device, so
80
+ # "non-empty" was true everywhere: each fresh controller was reported as
81
+ # incomplete legacy auth and, through that, as configured before — and the
82
+ # wizard hid the import and device steps from exactly the devices that
83
+ # need them.
84
+ if not username and not password:
85
+ return MigrationResult(False, reason="no_legacy_auth")
86
+
78
87
  if not username or not password:
79
88
  _LOGGER.warning(
80
89
  "web.auth in config.yaml is incomplete (username and password are "
@@ -232,7 +232,7 @@ class CoverManager:
232
232
 
233
233
  # Normalize time period fields — during hot-reload YAML values may
234
234
  # arrive as raw strings (e.g. "5s") instead of TimePeriod objects.
235
- for time_key in ("open_time", "close_time", "actuator_activation_duration"):
235
+ for time_key in ("open_time", "close_time", "actuator_activation_duration", "direction_change_wait_time"):
236
236
  if time_key in config and config[time_key] is not None:
237
237
  config[time_key] = ensure_time_period(config[time_key])
238
238
 
@@ -269,6 +269,45 @@ class DisplayManager:
269
269
  if self._host_data is not None:
270
270
  self._host_data.refresh_mqtt_status()
271
271
 
272
+ def show_migration_progress(self, pct: int, message: str) -> None:
273
+ """Say on the display that system migrations are running.
274
+
275
+ They run before the web server starts and can take minutes — an apt
276
+ install on a controller several releases behind. Until now the display
277
+ froze on the host/version screen, the panel did not answer, and the
278
+ controller looked hung to whoever had just updated it: exactly when
279
+ somebody pulls the plug.
280
+
281
+ Args:
282
+ pct: Share of the pending migrations already done.
283
+ message: The runner's line for the migration now running.
284
+ """
285
+ step = message.removeprefix("Applying migration ")
286
+ try:
287
+ if self._oled is not None:
288
+ self._oled.show_notice(
289
+ "Updating",
290
+ lambda: ["Do not power off.", f"{pct}% {step}"],
291
+ still_needed=lambda: True,
292
+ )
293
+ else:
294
+ # No oled: section, so early_oled still owns the screen.
295
+ from boneio.hardware.display.early_oled import draw_status
296
+
297
+ draw_status(f"Updating system {pct}%", device=self._early_oled_device)
298
+ except Exception as err: # noqa: BLE001 - never stop a migration over the display
299
+ _LOGGER.debug("Could not show migration progress on the OLED: %s", err)
300
+
301
+ def clear_migration_progress(self) -> None:
302
+ """Take the migration notice down once the migrations are over."""
303
+ if self._oled is None:
304
+ return
305
+ try:
306
+ if self._oled.notice is not None and self._oled.notice[0] == "Updating":
307
+ self._oled.clear_notice()
308
+ except Exception as err: # noqa: BLE001
309
+ _LOGGER.debug("Could not clear migration progress on the OLED: %s", err)
310
+
272
311
  def reload_oled(self) -> None:
273
312
  """Hot-reload OLED configuration from file.
274
313
 
@@ -333,7 +333,9 @@ class Manager:
333
333
  # Run system migration startup check (discovers pending migrations,
334
334
  # detects bootstrap_required, applies if helper is installed).
335
335
  try:
336
- migration_status = self.migration_runner.startup_check()
336
+ migration_status = self.migration_runner.startup_check(
337
+ progress_callback=self.display.show_migration_progress
338
+ )
337
339
  _LOGGER.info(
338
340
  "Migration startup_check finished: status=%s, pending=%d, bootstrap_required=%s",
339
341
  migration_status.value,
@@ -342,6 +344,8 @@ class Manager:
342
344
  )
343
345
  except Exception as exc:
344
346
  _LOGGER.error("Migration startup_check failed: %s", exc, exc_info=True)
347
+ finally:
348
+ self.display.clear_migration_progress()
345
349
 
346
350
  _LOGGER.info("Manager initialization complete")
347
351
 
@@ -162,6 +162,15 @@ def overlay_set(overlay: str, timeout: int = 30) -> Result:
162
162
  return run("overlay-set", overlay, timeout=timeout)
163
163
 
164
164
 
165
+ def overlay_repair(timeout: int = 60) -> Result:
166
+ """Copy a missing boneIO overlay into the boot kernel's directories.
167
+
168
+ Files only: the helper leaves uEnv.txt as it is. The output is the kernel
169
+ check's report — ``status`` ok, repaired or problem, and ``message``.
170
+ """
171
+ return run("overlay-repair", timeout=timeout)
172
+
173
+
165
174
  def mqtt_password(account: str, password: str, timeout: int = 60) -> Result:
166
175
  """Set a broker password for one of the managed accounts.
167
176
 
@@ -71,40 +71,6 @@ def overlay_dirs_for_kernel(kernel_version: str) -> tuple[Path, Path]:
71
71
  return base, base / "overlays"
72
72
 
73
73
 
74
- def find_overlay_source(exclude: tuple[Path, ...] = ()) -> Path | None:
75
- """Find a directory containing boneIO overlays, to copy from.
76
-
77
- Searches every ``/boot/dtbs/*/`` directory and its ``overlays/``
78
- subdirectory, newest kernel first, so a repair prefers the most recent
79
- known-good set.
80
-
81
- Args:
82
- exclude: Directories to skip (typically the repair destinations).
83
-
84
- Returns:
85
- Directory containing at least one boneIO overlay, or ``None``.
86
- """
87
- if not DTBS_ROOT.is_dir():
88
- return None
89
-
90
- excluded = {p.resolve() for p in exclude if p.exists()}
91
-
92
- for kdir in sorted(DTBS_ROOT.iterdir(), reverse=True):
93
- if not kdir.is_dir():
94
- continue
95
- for candidate in (kdir, kdir / "overlays"):
96
- if not candidate.is_dir():
97
- continue
98
- try:
99
- if candidate.resolve() in excluded:
100
- continue
101
- except OSError:
102
- continue
103
- if any(candidate.glob(OVERLAY_GLOB)):
104
- return candidate
105
- return None
106
-
107
-
108
74
  def missing_overlay_dirs(kernel_version: str) -> list[Path]:
109
75
  """Return the overlay destinations that lack boneIO overlays.
110
76
 
@@ -13,7 +13,7 @@ bff00753c72fb17609a6f7b3a58ef78b7b394da12d19fd65b875f2889695e2b4 docker/nodered
13
13
  3f41bcf2311bef4042f8082b7ae769fe298f05f46739e47f14e661a3c47733b0 helpers/boneio-containers
14
14
  dff0cd02daad2cbd525a0535f8f3562bb742e7e737b24c69e5afa986415e67e4 helpers/boneio-helpers-heal
15
15
  7615397aa52a3cb34cda4b3831d1306121844e2cc0403c114e95d8731075dd3b helpers/boneio-migrate-v2
16
- bf2f72174edb3ccc7edef69b29792ad3885879c249ba6c50e1ec22d7bbca85b6 helpers/boneio-system
16
+ 08614f7672b7c469c5b2d981284477586a911d1a947a06d2a70ccf0c4f1a444e helpers/boneio-system
17
17
  f316c778b3125e4e992942c889c4082f8a12f578a6d68c4e7c79fa80e4cc94a1 issue.d/10-boneio.issue
18
18
  83260e860f5431f3240617e88dba456ba39c52dbe4625e832d00fd241bad7701 journald/boneio-console.conf
19
19
  e6013f4fbf11693f39123b1e6159c7d7224a7c832e994722120980f64039c17e journald/journald.conf