boneio 1.6.0.dev15__tar.gz → 1.6.0.dev17__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 (768) hide show
  1. {boneio-1.6.0.dev15/boneio.egg-info → boneio-1.6.0.dev17}/PKG-INFO +1 -1
  2. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/migrations/__init__.py +13 -1
  3. boneio-1.6.0.dev17/boneio/core/config/migrations/v7_mqtt_password_secret.py +54 -0
  4. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/yaml_patch.py +76 -0
  5. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/yaml_util.py +202 -5
  6. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/display.py +2 -2
  7. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/display/oled.py +197 -5
  8. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/actions.py +25 -0
  9. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/MANIFEST.sha256 +1 -1
  10. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/helpers/boneio-migrate-v2 +107 -0
  11. boneio-1.6.0.dev17/boneio/migrations/plans/1.6.16.json +1 -0
  12. boneio-1.6.0.dev17/boneio/migrations/plans/1.6.16.sig +1 -0
  13. boneio-1.6.0.dev17/boneio/migrations/plans/1.6.19.json +1 -0
  14. boneio-1.6.0.dev17/boneio/migrations/plans/1.6.19.sig +1 -0
  15. boneio-1.6.0.dev17/boneio/migrations/plans/1.6.23.json +1 -0
  16. boneio-1.6.0.dev17/boneio/migrations/plans/1.6.23.sig +1 -0
  17. boneio-1.6.0.dev17/boneio/migrations/plans/1.6.24.json +1 -0
  18. boneio-1.6.0.dev17/boneio/migrations/plans/1.6.24.sig +1 -0
  19. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.5.json +1 -1
  20. boneio-1.6.0.dev17/boneio/migrations/plans/1.6.5.sig +1 -0
  21. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/manifest.json +1 -1
  22. boneio-1.6.0.dev17/boneio/migrations/plans/manifest.sig +1 -0
  23. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/runner.py +1 -1
  24. boneio-1.6.0.dev17/boneio/migrations/versions/v1_6_23_helper_fstab_options.py +53 -0
  25. boneio-1.6.0.dev17/boneio/migrations/versions/v1_6_24_boot_partition_nofail.py +49 -0
  26. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/runner.py +52 -7
  27. boneio-1.6.0.dev17/boneio/version.py +2 -0
  28. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/AccountsView-B5UZiRGW.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/AccountsView-TbSkH9UL.js +1 -1
  29. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/BackupSection-8GT7vpuH.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/BackupSection-EvCtwFQL.js +1 -1
  30. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/BindingMatrix-CxQl1VOm.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/BindingMatrix-sRRfB8jC.js +1 -1
  31. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/DeviceControlSection-akl63I0o.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/DeviceControlSection-CvFyHv7S.js +1 -1
  32. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/DiagnosticsView-CG4ax2y-.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/DiagnosticsView-rVS5qDH1.js +1 -1
  33. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/EntityGrid-Cv1Uo0zY.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/EntityGrid-Don0ym4o.js +1 -1
  34. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/FactoryResetSection-BR2jvi92.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/FactoryResetSection-CWLBpFcy.js +1 -1
  35. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/FormInputToggle-aLYpUS-x.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/FormInputToggle-wkyu5nWZ.js +1 -1
  36. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/HaDashboardWizard-D_UVKWpT.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/HaDashboardWizard-Cxcr8qUY.js +1 -1
  37. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/HostnameSection-DW9-2qpm.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/HostnameSection-1i8lcR91.js +1 -1
  38. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/InputsView-CGcgJgga.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/InputsView-djkHXGOO.js +1 -1
  39. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/LocationSection-w1b0toMH.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/LocationSection-D2CiUIwU.js +2 -2
  40. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/LoggerForm-CUYH8NgD.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/LoggerForm-Jivd_RXP.js +1 -1
  41. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/LongPressWrapper-CzUUPJt9.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/LongPressWrapper-CFu1CzuN.js +1 -1
  42. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/MigrationsSection-BzIAgtBk.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/MigrationsSection-DEzC0mN6.js +1 -1
  43. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/ModbusView-BajWrYrq.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/ModbusView-CHatoXuR.js +1 -1
  44. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/MqttPasswordsSection-x25bWMgI.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/MqttPasswordsSection-DaxpKeP6.js +1 -1
  45. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/NodeRedManagement-35JRm9JH.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/NodeRedManagement-KfLTXyHL.js +1 -1
  46. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/OutputsView-BU85e0Ar.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/OutputsView-CBLnm1Rx.js +1 -1
  47. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/SecurityView-CeQj1X27.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/SecurityView-C12Ye4pF.js +1 -1
  48. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/SensorView-Bs7Vou_q.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/SensorView-Cz60X005.js +1 -1
  49. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/SystemState-RNXVYdNx.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/SystemState-2u8fEUcf.js +2 -2
  50. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/TemplatesView-DR9E5__-.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/TemplatesView-8ES2KODg.js +1 -1
  51. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/TilePicker-C413YRFn.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/TilePicker-ByrlXspI.js +1 -1
  52. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/TimezoneSection-CbzWiCHs.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/TimezoneSection-DitamIoS.js +1 -1
  53. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/UISettings-r739sHGY.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/UISettings-D8hwUItg.js +4 -4
  54. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-DBFx_ZD1.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-Ch0iC5e1.js +1 -1
  55. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/aiConfig-C_B1zOY8.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/aiConfig-B7uJx9nA.js +1 -1
  56. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/aiWizardPrompt-X9_lrmYw.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/aiWizardPrompt-abAmCO-3.js +1 -1
  57. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/bodies-LCcudJje.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/bodies-CN3Xf7Dt.js +1 -1
  58. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/index-UQJ1vWT5.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/index-CLjnGlT9.js +4 -4
  59. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/monaco-CSUyZZpP.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/monaco-CVsEQEbX.js +1 -1
  60. boneio-1.6.0.dev15/boneio/webui/frontend-dist/assets/monaco-BLbWyoLh.js → boneio-1.6.0.dev17/boneio/webui/frontend-dist/assets/monaco-Dw6H67rn.js +2 -2
  61. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/index.html +1 -1
  62. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/sw.js +1 -1
  63. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/update.py +140 -12
  64. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17/boneio.egg-info}/PKG-INFO +1 -1
  65. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio.egg-info/SOURCES.txt +40 -33
  66. boneio-1.6.0.dev15/boneio/migrations/plans/1.6.16.json +0 -1
  67. boneio-1.6.0.dev15/boneio/migrations/plans/1.6.16.sig +0 -0
  68. boneio-1.6.0.dev15/boneio/migrations/plans/1.6.19.json +0 -1
  69. boneio-1.6.0.dev15/boneio/migrations/plans/1.6.19.sig +0 -0
  70. boneio-1.6.0.dev15/boneio/migrations/plans/1.6.5.sig +0 -0
  71. boneio-1.6.0.dev15/boneio/migrations/plans/manifest.sig +0 -1
  72. boneio-1.6.0.dev15/boneio/version.py +0 -2
  73. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/LICENSE +0 -0
  74. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/MANIFEST.in +0 -0
  75. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/README.md +0 -0
  76. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/__init__.py +0 -0
  77. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.2/input.yaml +0 -0
  78. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.2/output_24_16.yaml +0 -0
  79. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.2/output_32_10.yaml +0 -0
  80. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.2/output_32_5.yaml +0 -0
  81. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.2/output_cover.yaml +0 -0
  82. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  83. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.3/input.yaml +0 -0
  84. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.3/output_24_16.yaml +0 -0
  85. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.3/output_32_10.yaml +0 -0
  86. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.3/output_32_5.yaml +0 -0
  87. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.3/output_cover.yaml +0 -0
  88. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  89. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.4/input.yaml +0 -0
  90. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.4/output_24_16.yaml +0 -0
  91. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.4/output_32_10.yaml +0 -0
  92. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.4/output_32_5.yaml +0 -0
  93. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.4/output_cover.yaml +0 -0
  94. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  95. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.5/input.yaml +0 -0
  96. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.5/output_24_16.yaml +0 -0
  97. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.5/output_32_10.yaml +0 -0
  98. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.5/output_cover.yaml +0 -0
  99. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  100. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.6/input.yaml +0 -0
  101. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.6/output_24_16.yaml +0 -0
  102. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.6/output_32_10.yaml +0 -0
  103. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.6/output_cover.yaml +0 -0
  104. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  105. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.7/input.yaml +0 -0
  106. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.7/output_24_16.yaml +0 -0
  107. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.7/output_32_10.yaml +0 -0
  108. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.7/output_48_4.yaml +0 -0
  109. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.7/output_cover.yaml +0 -0
  110. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  111. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.8/input.yaml +0 -0
  112. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.8/output_24_16.yaml +0 -0
  113. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.8/output_32_10.yaml +0 -0
  114. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.8/output_48_4.yaml +0 -0
  115. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.8/output_cover.yaml +0 -0
  116. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  117. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.0/input.yaml +0 -0
  118. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.0/output_24_16.yaml +0 -0
  119. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.0/output_32_10.yaml +0 -0
  120. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.0/output_48_4.yaml +0 -0
  121. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.0/output_cover.yaml +0 -0
  122. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
  123. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.1/input.yaml +0 -0
  124. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.1/output_24_16.yaml +0 -0
  125. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.1/output_32_10.yaml +0 -0
  126. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.1/output_48_4.yaml +0 -0
  127. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.1/output_cover.yaml +0 -0
  128. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/boards/1.1/output_cover_mix.yaml +0 -0
  129. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/bonecli.py +0 -0
  130. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/__init__.py +0 -0
  131. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/cover/__init__.py +0 -0
  132. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/cover/cover.py +0 -0
  133. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/cover/remote.py +0 -0
  134. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/cover/time_based.py +0 -0
  135. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/cover/venetian.py +0 -0
  136. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/group/__init__.py +0 -0
  137. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/group/output_group.py +0 -0
  138. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/input/__init__.py +0 -0
  139. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/input/binary_sensor.py +0 -0
  140. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/input/detectors.py +0 -0
  141. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/input/event.py +0 -0
  142. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/input/remote/__init__.py +0 -0
  143. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/input/remote/base.py +0 -0
  144. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/input/remote/esphome.py +0 -0
  145. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/input/remote/mqtt.py +0 -0
  146. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/irrigation/__init__.py +0 -0
  147. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/irrigation/controller.py +0 -0
  148. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/irrigation/water_source.py +0 -0
  149. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/output/__init__.py +0 -0
  150. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/output/basic.py +0 -0
  151. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/output/buzzer.py +0 -0
  152. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/output/mcp.py +0 -0
  153. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/output/pca.py +0 -0
  154. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/output/pcf.py +0 -0
  155. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/output/remote.py +0 -0
  156. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/sensor/__init__.py +0 -0
  157. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/sensor/virtual_energy.py +0 -0
  158. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/template/__init__.py +0 -0
  159. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/template/alarm_panel.py +0 -0
  160. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/template/gate_cover.py +0 -0
  161. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/template/thermostat.py +0 -0
  162. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/components/virtual_switch.py +0 -0
  163. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/const.py +0 -0
  164. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/__init__.py +0 -0
  165. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/atomic_file.py +0 -0
  166. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/auth/__init__.py +0 -0
  167. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/auth/cli.py +0 -0
  168. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/auth/hashing.py +0 -0
  169. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/auth/jwt_secret.py +0 -0
  170. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/auth/migration.py +0 -0
  171. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/auth/models.py +0 -0
  172. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/auth/store.py +0 -0
  173. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/cloud/__init__.py +0 -0
  174. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/cloud/data/__init__.py +0 -0
  175. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  176. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  177. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/cloud/registration.py +0 -0
  178. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/cloud/secrets.py +0 -0
  179. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/__init__.py +0 -0
  180. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/config_helper.py +0 -0
  181. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/input_bindings.py +0 -0
  182. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  183. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/migrations/v2_transition.py +0 -0
  184. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/migrations/v4_wled_cache.py +0 -0
  185. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/migrations/v5_ina_screen.py +0 -0
  186. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/migrations/v6_input_keys.py +0 -0
  187. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/package-lock.json +0 -0
  188. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/package.json +0 -0
  189. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/provenance.py +0 -0
  190. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/schema_converter.py +0 -0
  191. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/secret_masking.py +0 -0
  192. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/write_lock.py +0 -0
  193. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/config/yaml_compat.py +0 -0
  194. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/containers.py +0 -0
  195. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/diagnostics/__init__.py +0 -0
  196. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/diagnostics/collect.py +0 -0
  197. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/discovery.py +0 -0
  198. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/events/__init__.py +0 -0
  199. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/events/bus.py +0 -0
  200. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/__init__.py +0 -0
  201. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/action_conditions.py +0 -0
  202. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/canopen.py +0 -0
  203. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/covers.py +0 -0
  204. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/inputs.py +0 -0
  205. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/irrigation.py +0 -0
  206. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/manager.py +0 -0
  207. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/modbus.py +0 -0
  208. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/outputs.py +0 -0
  209. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/remote.py +0 -0
  210. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/remote_input_registrar.py +0 -0
  211. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/scheduler.py +0 -0
  212. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/security_alert.py +0 -0
  213. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/sensors.py +0 -0
  214. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/sun.py +0 -0
  215. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/templates/__init__.py +0 -0
  216. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/templates/alarm.py +0 -0
  217. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/templates/gate_cover.py +0 -0
  218. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/templates/thermostat.py +0 -0
  219. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/templates.py +0 -0
  220. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/update.py +0 -0
  221. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/manager/virtual_switches.py +0 -0
  222. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/messaging/__init__.py +0 -0
  223. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/messaging/basic.py +0 -0
  224. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/messaging/basic_mqtt.py +0 -0
  225. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/messaging/composite.py +0 -0
  226. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/messaging/local.py +0 -0
  227. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/messaging/lox.py +0 -0
  228. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/messaging/mqtt.py +0 -0
  229. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/messaging/queue.py +0 -0
  230. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/net/__init__.py +0 -0
  231. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/net/discovery_guard.py +0 -0
  232. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/recovery.py +0 -0
  233. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/remote/__init__.py +0 -0
  234. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/remote/base.py +0 -0
  235. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/remote/can.py +0 -0
  236. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/remote/esphome.py +0 -0
  237. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/remote/mqtt.py +0 -0
  238. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/remote/wled.py +0 -0
  239. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/remote/wled_cache.py +0 -0
  240. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/security/__init__.py +0 -0
  241. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/security/certificate.py +0 -0
  242. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/security/framing.py +0 -0
  243. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/security/posture.py +0 -0
  244. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/sensor/__init__.py +0 -0
  245. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/sensor/base.py +0 -0
  246. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/sensor/sun.py +0 -0
  247. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/sensor/system.py +0 -0
  248. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/state/__init__.py +0 -0
  249. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/state/manager.py +0 -0
  250. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/system/__init__.py +0 -0
  251. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/system/host_data.py +0 -0
  252. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/system/monitor.py +0 -0
  253. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/system_ops.py +0 -0
  254. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/utils/__init__.py +0 -0
  255. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/utils/async_updater.py +0 -0
  256. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/utils/conditions.py +0 -0
  257. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/utils/filter.py +0 -0
  258. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/utils/font_util.py +0 -0
  259. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/utils/logger.py +0 -0
  260. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/utils/naming.py +0 -0
  261. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/utils/overlay.py +0 -0
  262. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/utils/sun.py +0 -0
  263. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/utils/timeperiod.py +0 -0
  264. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/core/utils/util.py +0 -0
  265. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/24x16/adc.yaml +0 -0
  266. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  267. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/24x16/config.yaml +0 -0
  268. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/24x16/event.yaml +0 -0
  269. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/24x16/mqtt.yaml +0 -0
  270. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  271. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/32x10/adc.yaml +0 -0
  272. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  273. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/32x10/config.yaml +0 -0
  274. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/32x10/event.yaml +0 -0
  275. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/32x10/mqtt.yaml +0 -0
  276. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  277. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/48x4/adc.yaml +0 -0
  278. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  279. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/48x4/config.yaml +0 -0
  280. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/48x4/event.yaml +0 -0
  281. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/48x4/mqtt.yaml +0 -0
  282. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  283. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/__init__.py +0 -0
  284. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/can_master.yaml +0 -0
  285. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/can_slave.yaml +0 -0
  286. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover/adc.yaml +0 -0
  287. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  288. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover/config.yaml +0 -0
  289. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover/cover.yaml +0 -0
  290. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover/event.yaml +0 -0
  291. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover/mqtt.yaml +0 -0
  292. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover/outputCover.yaml +0 -0
  293. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover_mix/adc.yaml +0 -0
  294. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  295. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover_mix/config.yaml +0 -0
  296. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover_mix/cover.yaml +0 -0
  297. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover_mix/event.yaml +0 -0
  298. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  299. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  300. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/adc.yaml +0 -0
  301. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  302. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  303. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  304. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  305. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/event_all.yaml +0 -0
  306. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  307. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  308. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  309. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  310. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  311. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  312. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/exceptions.py +0 -0
  313. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/__init__.py +0 -0
  314. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/analog/__init__.py +0 -0
  315. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/analog/adc.py +0 -0
  316. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/can/__init__.py +0 -0
  317. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/can/bridge.py +0 -0
  318. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/can/client.py +0 -0
  319. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/can/interface.py +0 -0
  320. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/can/node.py +0 -0
  321. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/can/node_id.py +0 -0
  322. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/can/test_od.py +0 -0
  323. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/display/__init__.py +0 -0
  324. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/display/early_oled.py +0 -0
  325. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  326. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/gpio/__init__.py +0 -0
  327. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  328. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  329. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  330. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  331. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/gpio/input/__init__.py +0 -0
  332. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/gpio/input/base.py +0 -0
  333. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/gpio/input/manager.py +0 -0
  334. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/i2c/__init__.py +0 -0
  335. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/i2c/bus.py +0 -0
  336. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/i2c/ina219.py +0 -0
  337. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/i2c/ina219_driver.py +0 -0
  338. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/i2c/ina226.py +0 -0
  339. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/i2c/ina226_driver.py +0 -0
  340. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/i2c/mcp9808.py +0 -0
  341. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/i2c/pct2075.py +0 -0
  342. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/onewire/__init__.py +0 -0
  343. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/onewire/dallas.py +0 -0
  344. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/sensor/__init__.py +0 -0
  345. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  346. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/sensor/temperature/base.py +0 -0
  347. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  348. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  349. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/integration/__init__.py +0 -0
  350. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/integration/homeassistant.py +0 -0
  351. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/integration/interlock.py +0 -0
  352. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/integration/lox_template.py +0 -0
  353. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/__init__.py +0 -0
  354. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/apt/52boneio-periodic +0 -0
  355. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/apt/52boneio-unattended +0 -0
  356. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/docker/daemon.json +0 -0
  357. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
  358. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
  359. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/docker/nodered/docker-compose-cloud.yaml +0 -0
  360. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  361. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
  362. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/helpers/boneio-containers +0 -0
  363. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/helpers/boneio-helpers-heal +0 -0
  364. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/helpers/boneio-system +0 -0
  365. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/issue.d/10-boneio.issue +0 -0
  366. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/journald/journald.conf +0 -0
  367. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/kernel/postinst-boneio-overlay +0 -0
  368. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/migrations-recovery.pem +0 -0
  369. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/migrations.pem +0 -0
  370. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/modules-load.d/onewire.conf +0 -0
  371. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  372. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/sshd/10-boneio-hardening.conf +0 -0
  373. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/sudoers/boneio +0 -0
  374. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/sudoers/boneio-helpers +0 -0
  375. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/sudoers/boneio-timedatectl +0 -0
  376. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/boneio-dpkg-recover.service +0 -0
  377. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/boneio-helpers-heal.service +0 -0
  378. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
  379. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
  380. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/boneio.service +0 -0
  381. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/dropins/apt-daily-priority.conf +0 -0
  382. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/dropins/avahi-daemon-defer.conf +0 -0
  383. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/dropins/bb-usb-gadgets-defer.conf +0 -0
  384. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/dropins/mosquitto-priority.conf +0 -0
  385. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/dropins/timer-no-persistent.conf +0 -0
  386. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/dropins/user-manager-defer.conf +0 -0
  387. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/linger-marker +0 -0
  388. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  389. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
  390. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  391. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  392. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  393. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  394. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
  395. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/bootstrap/boneio-migrate +0 -0
  396. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  397. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  398. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.3.0.json +0 -0
  399. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.3.0.sig +0 -0
  400. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.3.1.json +0 -0
  401. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.3.1.sig +0 -0
  402. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.3.2.json +0 -0
  403. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.3.2.sig +0 -0
  404. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.4.0.json +0 -0
  405. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.4.0.sig +0 -0
  406. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.4.3.json +0 -0
  407. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.4.3.sig +0 -0
  408. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.4.4.json +0 -0
  409. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.4.4.sig +0 -0
  410. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.0.json +0 -0
  411. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.0.sig +0 -0
  412. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.1.json +0 -0
  413. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.1.sig +0 -0
  414. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.10.json +0 -0
  415. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.10.sig +0 -0
  416. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.11.json +0 -0
  417. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.11.sig +0 -0
  418. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.12.json +0 -0
  419. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.12.sig +0 -0
  420. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.13.json +0 -0
  421. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.13.sig +0 -0
  422. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.14.json +0 -0
  423. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.14.sig +0 -0
  424. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.15.json +0 -0
  425. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.15.sig +0 -0
  426. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.16.json +0 -0
  427. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.16.sig +0 -0
  428. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.17.json +0 -0
  429. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.17.sig +0 -0
  430. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.18.json +0 -0
  431. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.18.sig +0 -0
  432. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.2.json +0 -0
  433. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.2.sig +0 -0
  434. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.3.json +0 -0
  435. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.3.sig +0 -0
  436. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.4.json +0 -0
  437. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.4.sig +0 -0
  438. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.5.json +0 -0
  439. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.5.sig +0 -0
  440. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.6.json +0 -0
  441. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.6.sig +0 -0
  442. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.7.json +0 -0
  443. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.7.sig +0 -0
  444. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.8.json +0 -0
  445. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.8.sig +0 -0
  446. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.9.json +0 -0
  447. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.5.9.sig +0 -0
  448. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.0.json +0 -0
  449. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.0.sig +0 -0
  450. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.1.json +0 -0
  451. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.1.sig +0 -0
  452. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.10.json +0 -0
  453. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.10.sig +0 -0
  454. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.11.json +0 -0
  455. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.11.sig +0 -0
  456. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.12.json +0 -0
  457. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.12.sig +0 -0
  458. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.13.json +0 -0
  459. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.13.sig +0 -0
  460. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.14.json +0 -0
  461. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.14.sig +0 -0
  462. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.15.json +0 -0
  463. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.15.sig +0 -0
  464. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.17.json +0 -0
  465. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.17.sig +0 -0
  466. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.18.json +0 -0
  467. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.18.sig +0 -0
  468. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.2.json +0 -0
  469. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.2.sig +0 -0
  470. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.20.json +0 -0
  471. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.20.sig +0 -0
  472. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.21.json +0 -0
  473. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.21.sig +0 -0
  474. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.22.json +0 -0
  475. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.22.sig +0 -0
  476. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.3.json +0 -0
  477. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.3.sig +0 -0
  478. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.4.json +0 -0
  479. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.4.sig +0 -0
  480. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.6.json +0 -0
  481. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.6.sig +0 -0
  482. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.7.json +0 -0
  483. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.7.sig +0 -0
  484. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.8.json +0 -0
  485. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.8.sig +0 -0
  486. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.9.json +0 -0
  487. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/plans/1.6.9.sig +0 -0
  488. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/__init__.py +0 -0
  489. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
  490. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  491. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  492. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
  493. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
  494. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
  495. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
  496. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_10_disable_console_setup.py +0 -0
  497. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_11_timer_catchup.py +0 -0
  498. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_12_oled_splash_off_critical_path.py +0 -0
  499. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_13_mosquitto_priority.py +0 -0
  500. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_14_journal_apparent_size.py +0 -0
  501. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_15_prune_orphan_journals.py +0 -0
  502. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_16_login_linger.py +0 -0
  503. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_17_defer_user_manager.py +0 -0
  504. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_18_fix_hostname_once.py +0 -0
  505. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
  506. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_2_libyaml.py +0 -0
  507. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -0
  508. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_4_onewire_modules.py +0 -0
  509. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_5_overlay_kernel_hook.py +0 -0
  510. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_6_boot_service_order.py +0 -0
  511. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_7_journald_limits.py +0 -0
  512. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_8_apparmor_prune.py +0 -0
  513. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_5_9_defer_nonessential.py +0 -0
  514. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_0_nodered_admin_auth.py +0 -0
  515. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_10_narrow_sudo_rules.py +0 -0
  516. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_11_drop_docker_group.py +0 -0
  517. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_12_console_shows_ip.py +0 -0
  518. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_13_custom_certificate.py +0 -0
  519. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_14_certificate_lifetime.py +0 -0
  520. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_15_web_port_reaches_caddy.py +0 -0
  521. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_16_release_floor_ordering.py +0 -0
  522. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_17_service_password.py +0 -0
  523. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_18_os_updates.py +0 -0
  524. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_19_helper_apt_purge.py +0 -0
  525. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py +0 -0
  526. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_20_drop_packagekit.py +0 -0
  527. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_21_caddy_pinned.py +0 -0
  528. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_22_security_autoupdates.py +0 -0
  529. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py +0 -0
  530. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py +0 -0
  531. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_4_ssh_login_hardening.py +0 -0
  532. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_5_trust_transition.py +0 -0
  533. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_6_retire_legacy_helper.py +0 -0
  534. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_7_timedatectl_sudoers.py +0 -0
  535. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_8_system_helper.py +0 -0
  536. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/migrations/versions/v1_6_9_ntp_servers.py +0 -0
  537. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/__init__.py +0 -0
  538. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/cli.py +0 -0
  539. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/client.py +0 -0
  540. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/coordinator.py +0 -0
  541. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/__init__.py +0 -0
  542. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
  543. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  544. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  545. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  546. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  547. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  548. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  549. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  550. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/hvac/defro-drx.json +0 -0
  551. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
  552. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  553. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/hvac/thessla.json +0 -0
  554. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  555. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/hvac/wanas415.json +0 -0
  556. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/inverters/sofar.json +0 -0
  557. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  558. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  559. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  560. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  561. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/sensors/cwt.json +0 -0
  562. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  563. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  564. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  565. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  566. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/sensors/pt100.json +0 -0
  567. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
  568. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/sensors/sht20.json +0 -0
  569. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/devices/sensors/sht30.json +0 -0
  570. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/__init__.py +0 -0
  571. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/base.py +0 -0
  572. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/derived/__init__.py +0 -0
  573. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/derived/numeric.py +0 -0
  574. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/derived/select.py +0 -0
  575. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/derived/switch.py +0 -0
  576. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/derived/text.py +0 -0
  577. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/sensor/__init__.py +0 -0
  578. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/sensor/binary.py +0 -0
  579. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/sensor/numeric.py +0 -0
  580. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/sensor/text.py +0 -0
  581. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/writeable/__init__.py +0 -0
  582. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/writeable/binary.py +0 -0
  583. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/entities/writeable/numeric.py +0 -0
  584. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/mock_coordinator.py +0 -0
  585. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/modbus/utils.py +0 -0
  586. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/models/__init__.py +0 -0
  587. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/models/actions.py +0 -0
  588. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/models/events.py +0 -0
  589. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/models/files.py +0 -0
  590. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/models/logs.py +0 -0
  591. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/models/mqtt.py +0 -0
  592. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/models/state.py +0 -0
  593. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/actions.yaml +0 -0
  594. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/actions_sensor.yaml +0 -0
  595. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/actions_switch.yaml +0 -0
  596. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/condition.yaml +0 -0
  597. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/filters.yaml +0 -0
  598. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/filters_adc.yaml +0 -0
  599. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/id.yaml +0 -0
  600. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/remote_devices.yaml +0 -0
  601. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/remote_inputs.yaml +0 -0
  602. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/remote_outputs.yaml +0 -0
  603. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/schema.yaml +0 -0
  604. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/temp_unit.yaml +0 -0
  605. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/schema/update_interval.yaml +0 -0
  606. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/action_validation.py +0 -0
  607. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/app.py +0 -0
  608. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/bind.py +0 -0
  609. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/dashboard_cards.py +0 -0
  610. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/AppInitContext-BeNfj23N.js +0 -0
  611. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/NodeRedView-C_0IlqZ6.js +0 -0
  612. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/NumericInput-DGzxoNxg.js +0 -0
  613. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/Sparkline-IwpgUXqb.js +0 -0
  614. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/ViewToggle-CTm9ZUC_.js +0 -0
  615. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/axios-DJBeJS4R.js +0 -0
  616. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/basePath-CxHj-SSK.js +0 -0
  617. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
  618. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  619. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/configCache-BS98BpF9.js +0 -0
  620. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/dialog-DUHsilMe.js +0 -0
  621. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/editor.worker-O-CH8JUO.js +0 -0
  622. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/fa-Bo0hGcDa.js +0 -0
  623. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/formatters-Cc0QIRxb.js +0 -0
  624. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/gi-BEb-YkSt.js +0 -0
  625. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/index-bS3WyOSw.css +0 -0
  626. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
  627. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/rolldown-runtime-hePW80VL.js +0 -0
  628. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/select-DCMFLjZt.js +0 -0
  629. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/utils-DOQQTBMN.js +0 -0
  630. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
  631. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/assets/yaml.worker-CeS-z5zL.js +0 -0
  632. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  633. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  634. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/boneio.svg +0 -0
  635. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  636. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  637. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  638. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  639. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  640. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  641. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/config.schema.json +0 -0
  642. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  643. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  644. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  645. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  646. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  647. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/ina226.schema.json +0 -0
  648. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  649. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  650. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/location.schema.json +0 -0
  651. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  652. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  653. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  654. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  655. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  656. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
  657. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  658. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  659. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/osdp.schema.json +0 -0
  660. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  661. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  662. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  663. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  664. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  665. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
  666. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
  667. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/schedule.schema.json +0 -0
  668. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  669. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  670. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  671. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/virtual_switch.schema.json +0 -0
  672. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
  673. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/frontend-dist/workbox-7e79c025.js +0 -0
  674. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/hvac_svg_templates.py +0 -0
  675. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/middleware/__init__.py +0 -0
  676. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/middleware/auth.py +0 -0
  677. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/middleware/csrf.py +0 -0
  678. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/middleware/policy.py +0 -0
  679. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/modbus_card_templates.py +0 -0
  680. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/rate_limit.py +0 -0
  681. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/recovery/__init__.py +0 -0
  682. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/recovery/app.py +0 -0
  683. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/recovery/server.py +0 -0
  684. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/recovery/static/index.html +0 -0
  685. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/recovery/static/recovery.css +0 -0
  686. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/recovery/static/recovery.js +0 -0
  687. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/__init__.py +0 -0
  688. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/accounts.py +0 -0
  689. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/auth.py +0 -0
  690. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/can.py +0 -0
  691. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/config.py +0 -0
  692. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/config_actions.py +0 -0
  693. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/config_backups.py +0 -0
  694. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/config_core.py +0 -0
  695. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/config_discovery.py +0 -0
  696. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/config_files.py +0 -0
  697. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/covers.py +0 -0
  698. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/dashboard.py +0 -0
  699. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/dev_fake_device.py +0 -0
  700. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/diagnostics.py +0 -0
  701. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/irrigation.py +0 -0
  702. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/migrations.py +0 -0
  703. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/modbus.py +0 -0
  704. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/mqtt_reference.py +0 -0
  705. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/nodered.py +0 -0
  706. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/onboarding.py +0 -0
  707. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/os_update.py +0 -0
  708. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/outputs.py +0 -0
  709. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/remote_devices.py +0 -0
  710. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/schedule.py +0 -0
  711. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/security.py +0 -0
  712. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/sensors.py +0 -0
  713. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/sun.py +0 -0
  714. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/system.py +0 -0
  715. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/templates.py +0 -0
  716. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/timezone_sudoers.py +0 -0
  717. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/routes/tools.py +0 -0
  718. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/adc.schema.json +0 -0
  719. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/areas.schema.json +0 -0
  720. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  721. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/boneio.schema.json +0 -0
  722. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/can.schema.json +0 -0
  723. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/config.schema.json +0 -0
  724. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/cover.schema.json +0 -0
  725. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/dallas.schema.json +0 -0
  726. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/ds2482.schema.json +0 -0
  727. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/event.schema.json +0 -0
  728. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/ina219.schema.json +0 -0
  729. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/ina226.schema.json +0 -0
  730. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/irrigation.schema.json +0 -0
  731. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/lm75.schema.json +0 -0
  732. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/location.schema.json +0 -0
  733. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/logger.schema.json +0 -0
  734. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/lox_udp.schema.json +0 -0
  735. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/mcp23017.schema.json +0 -0
  736. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/mcp9808.schema.json +0 -0
  737. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/modbus.schema.json +0 -0
  738. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/modbus_devices.schema.json +0 -0
  739. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/mqtt.schema.json +0 -0
  740. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/oled.schema.json +0 -0
  741. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/osdp.schema.json +0 -0
  742. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/output.schema.json +0 -0
  743. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/output_group.schema.json +0 -0
  744. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/pca9685.schema.json +0 -0
  745. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/pcf8575.schema.json +0 -0
  746. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/remote_devices.schema.json +0 -0
  747. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/remote_inputs.schema.json +0 -0
  748. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/remote_outputs.schema.json +0 -0
  749. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/schedule.schema.json +0 -0
  750. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/sensor.schema.json +0 -0
  751. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/template.schema.json +0 -0
  752. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  753. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/virtual_switch.schema.json +0 -0
  754. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/schema/web.schema.json +0 -0
  755. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/security_headers.py +0 -0
  756. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/services/__init__.py +0 -0
  757. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/services/logs.py +0 -0
  758. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/sudo_rate_limiter.py +0 -0
  759. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/web_server.py +0 -0
  760. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio/webui/websocket_manager.py +0 -0
  761. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio.egg-info/dependency_links.txt +0 -0
  762. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio.egg-info/entry_points.txt +0 -0
  763. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio.egg-info/requires.txt +0 -0
  764. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/boneio.egg-info/top_level.txt +0 -0
  765. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/pyproject.toml +0 -0
  766. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/setup.cfg +0 -0
  767. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/setup.py +0 -0
  768. {boneio-1.6.0.dev15 → boneio-1.6.0.dev17}/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.dev15
3
+ Version: 1.6.0.dev17
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
@@ -19,7 +19,7 @@ from boneio.core.atomic_file import write_atomically
19
19
  _LOGGER = logging.getLogger(__name__)
20
20
 
21
21
  # Current schema version — bump this when adding new migrations
22
- CURRENT_SCHEMA_VERSION = 6
22
+ CURRENT_SCHEMA_VERSION = 7
23
23
 
24
24
  # Minimum app version that introduced each schema version.
25
25
  # Used by the WebUI to warn before rolling back to an incompatible version.
@@ -31,6 +31,7 @@ SCHEMA_VERSION_APP_MAP: dict[int, str] = {
31
31
  4: "1.5.0dev13", # WLED effects/palettes → JSON cache
32
32
  5: "1.5.0dev35", # OLED screen name: ina219 → ina
33
33
  6: "1.6.0dev15", # gpio_mode, clear_message removed from inputs
34
+ 7: "1.6.0dev16", # MQTT password moved to secrets.yaml
34
35
  }
35
36
 
36
37
 
@@ -165,6 +166,16 @@ def _has_legacy_fields(doc: dict) -> bool:
165
166
  ):
166
167
  return True
167
168
 
169
+ # v7: a broker password written in the config itself. A value that came
170
+ # through !secret is a SecretStr, so only a plain one counts.
171
+ from boneio.core.config.yaml_util import SecretStr
172
+
173
+ mqtt = doc.get("mqtt")
174
+ if isinstance(mqtt, dict):
175
+ password = mqtt.get("password")
176
+ if password not in (None, "") and not isinstance(password, SecretStr):
177
+ return True
178
+
168
179
  return False
169
180
 
170
181
 
@@ -322,4 +333,5 @@ from boneio.core.config.migrations import (
322
333
  v4_wled_cache, # noqa: E402, F401
323
334
  v5_ina_screen, # noqa: E402, F401
324
335
  v6_input_keys, # noqa: E402, F401
336
+ v7_mqtt_password_secret, # noqa: E402, F401
325
337
  )
@@ -0,0 +1,54 @@
1
+ """Migration v7: Keep the broker password in secrets.yaml.
2
+
3
+ Images draw the broker password per device at first boot and write it to
4
+ secrets.yaml, so the shipped mqtt.yaml says ``password: !secret mqtt_password``.
5
+ Controllers installed before that keep the password in mqtt.yaml itself, which
6
+ then travels with every config backup and every copy someone pastes into a
7
+ support thread. This moves it next to the device's other secrets.
8
+
9
+ Before (mqtt.yaml):
10
+ host: localhost
11
+ password: "s3cret"
12
+ After:
13
+ host: localhost
14
+ password: !secret mqtt_password
15
+ and secrets.yaml:
16
+ mqtt_password: "s3cret"
17
+
18
+ A password already given as ``!secret`` is left alone. If secrets.yaml already
19
+ holds a different ``mqtt_password``, the value goes under ``mqtt_password_2``.
20
+ """
21
+
22
+ from __future__ import annotations
23
+
24
+ import logging
25
+
26
+ from boneio.core.config.migrations import register_migration
27
+
28
+ _LOGGER = logging.getLogger(__name__)
29
+
30
+ _FIELD = ("mqtt", "password")
31
+ _SECRET_NAME = "mqtt_password"
32
+
33
+
34
+ def _persist_mqtt_password_secret(config_file: str) -> None:
35
+ from boneio.core.config.yaml_patch import move_to_secret
36
+
37
+ move_to_secret(config_file, _FIELD, _SECRET_NAME)
38
+
39
+
40
+ @register_migration(
41
+ version=7,
42
+ name="Move the MQTT password to secrets.yaml",
43
+ migrate_file=_persist_mqtt_password_secret,
44
+ )
45
+ def migrate_v7_mqtt_password_secret(doc: dict) -> dict:
46
+ """Nothing changes in memory: the password is the same, only where it is kept.
47
+
48
+ Args:
49
+ doc: Raw config dictionary.
50
+
51
+ Returns:
52
+ The same dictionary.
53
+ """
54
+ return doc
@@ -587,3 +587,79 @@ def set_secret(secrets_file: str | Path, name: str, value: str) -> None:
587
587
 
588
588
  write_atomically(file_path, "".join(lines))
589
589
  _LOGGER.info("Wrote the secret %s", name)
590
+
591
+
592
+ @_locked
593
+ def move_to_secret(
594
+ config_file: str | Path, path: tuple[str, ...], name: str, *, overwrite: bool = False
595
+ ) -> str | None:
596
+ """Move a plain value into secrets.yaml and leave a ``!secret`` in its place.
597
+
598
+ The secrets file is the one beside the file holding the field — that is
599
+ where BoneIOLoader looks for it — and is created, 0600, when missing. A
600
+ name already taken by a different value is not overwritten; the value goes
601
+ under ``<name>_2``, ``<name>_3``… instead.
602
+
603
+ Args:
604
+ config_file: Path to config.yaml.
605
+ path: Field path, outermost first, e.g. ``("mqtt", "password")``.
606
+ name: The secret's preferred name.
607
+ overwrite: Store the value under ``name`` whatever it held — for a
608
+ field that referred to that secret before a save wrote it out.
609
+
610
+ Returns:
611
+ The name the value went under, or None when there was nothing to move:
612
+ the field is missing, empty, or already a reference.
613
+
614
+ Raises:
615
+ YamlPatchError: If secrets.yaml is there but is not a mapping — adding
616
+ a line to a file the loader cannot read would hide the value.
617
+ """
618
+ import os
619
+
620
+ import yaml
621
+
622
+ file_path, inner = resolve_field(config_file, path)
623
+ if not file_path.is_file():
624
+ return None
625
+ lines = file_path.read_text(encoding="utf-8").splitlines(keepends=True)
626
+ index = _find_section_line(lines, inner)
627
+ if index is None:
628
+ return None
629
+ parsed = _line_key(lines[index])
630
+ if parsed is None or _SECRET_REFERENCE.match(_strip_comment(parsed[2])):
631
+ return None
632
+ try:
633
+ value = yaml.safe_load(parsed[2]) if parsed[2] else None
634
+ except yaml.YAMLError as err:
635
+ raise YamlPatchError(f"{file_path.name}: cannot read {'.'.join(inner)}") from err
636
+ if value is None or value == "" or isinstance(value, (dict, list)):
637
+ return None
638
+ value = str(value)
639
+
640
+ secrets_file = file_path.parent / "secrets.yaml"
641
+ existing: dict = {}
642
+ if secrets_file.is_file():
643
+ try:
644
+ loaded = yaml.safe_load(secrets_file.read_text(encoding="utf-8"))
645
+ except yaml.YAMLError as err:
646
+ raise YamlPatchError(f"{secrets_file} is not valid YAML") from err
647
+ if loaded is not None and not isinstance(loaded, dict):
648
+ raise YamlPatchError(f"{secrets_file} is not a mapping")
649
+ existing = loaded or {}
650
+ else:
651
+ write_atomically(secrets_file, "", mode=0o600)
652
+
653
+ chosen, suffix = name, 1
654
+ while not overwrite and chosen in existing and str(existing[chosen]) != value:
655
+ suffix += 1
656
+ chosen = f"{name}_{suffix}"
657
+ if chosen not in existing or str(existing[chosen]) != value:
658
+ set_secret(secrets_file, chosen, value)
659
+ # It holds a password now, whatever it held before.
660
+ os.chmod(secrets_file, 0o600)
661
+
662
+ lines[index] = f"{' ' * parsed[1]}{inner[-1]}: !secret {chosen}\n"
663
+ write_atomically(file_path, "".join(lines))
664
+ _LOGGER.info("Moved %s in %s to secrets.yaml as %s", ".".join(inner), file_path.name, chosen)
665
+ return chosen
@@ -1,4 +1,5 @@
1
1
  import contextlib
2
+ import copy
2
3
  import fnmatch
3
4
  import logging
4
5
  import os
@@ -12,6 +13,7 @@ from typing import Any
12
13
 
13
14
  from cerberus import TypeDefinition, Validator
14
15
  from cerberus.schema import DefinitionSchema
16
+ import yaml
15
17
  from yaml import MarkedYAMLError, YAMLError, dump, load
16
18
 
17
19
  from boneio.const import OUTPUT, VIRTUAL_SWITCH
@@ -28,6 +30,44 @@ _LOGGER = logging.getLogger(__name__)
28
30
 
29
31
  SECRET_YAML = "secrets.yaml"
30
32
  _SECRET_VALUES = {}
33
+ #: Names of every secret a YAML load resolved, whatever its type — so the cache
34
+ #: can tell a secret it kept as a reference from one validation turned into a
35
+ #: number and it had to keep by value.
36
+ _SECRET_NAMES_LOADED: set[str] = set()
37
+
38
+
39
+ class SecretStr(str):
40
+ """A string that came from ``!secret``, and knows which secret it was.
41
+
42
+ The config cache holds the validated config. It used to hold it with every
43
+ secret already substituted — the passwords sat in ``.cache.pkl``, and
44
+ secrets.yaml was not part of the cache key, so changing a password there did
45
+ nothing until some other edit invalidated the cache. The cache now stores a
46
+ :class:`_SecretRef` in place of each ``SecretStr`` and resolves it against
47
+ secrets.yaml as it is read back. Validation keeps the subclass (it checks
48
+ type, it does not copy), which is what lets the cache find them.
49
+ """
50
+
51
+ secret_name: str
52
+
53
+ def __new__(cls, value: str, name: str) -> "SecretStr":
54
+ obj = super().__new__(cls, value)
55
+ obj.secret_name = name
56
+ return obj
57
+
58
+ def __reduce__(self):
59
+ # Anything else that pickles a config gets the plain value, never a
60
+ # boneIO type that another build may not define.
61
+ return (str, (str(self),))
62
+
63
+
64
+ class _SecretRef:
65
+ """What the config cache stores instead of a secret's value."""
66
+
67
+ __slots__ = ("name",)
68
+
69
+ def __init__(self, name: str) -> None:
70
+ self.name = name
31
71
 
32
72
  #: Cerberus checks that the schema is itself a legal cerberus schema every time
33
73
  #: a Validator is built, and that - not validating anybody's config - is where a
@@ -342,6 +382,17 @@ def represent_time_period(dumper, data):
342
382
  TimePeriodDumper.add_representer(TimePeriod, represent_time_period)
343
383
 
344
384
 
385
+ def _represent_secret_str(dumper, data):
386
+ # Written as the plain string it always was: a SecretStr only exists so the
387
+ # config cache can keep secrets out of .cache.pkl, and must not change what
388
+ # a save puts in a YAML file.
389
+ return dumper.represent_scalar("tag:yaml.org,2002:str", str(data))
390
+
391
+
392
+ for _dumper in {TimePeriodDumper, FastSafeDumper, yaml.SafeDumper, yaml.Dumper}:
393
+ _dumper.add_representer(SecretStr, _represent_secret_str)
394
+
395
+
345
396
  class BoneIOLoader(FastSafeLoader):
346
397
  """Loader which support for include in yaml files."""
347
398
 
@@ -365,7 +416,8 @@ class BoneIOLoader(FastSafeLoader):
365
416
  raise MarkedYAMLError(f"Secret '{node.value}' not defined", node.start_mark)
366
417
  val = secrets[node.value]
367
418
  _SECRET_VALUES[str(val)] = node.value
368
- return val
419
+ _SECRET_NAMES_LOADED.add(node.value)
420
+ return SecretStr(val, node.value) if isinstance(val, str) else val
369
421
 
370
422
  def represent_stringify(self, value):
371
423
  # Type: ignore[attr-defined] - represent_scalar is inherited from the loader base
@@ -1432,6 +1484,60 @@ def _compute_config_dir_hash(config_file: str) -> str:
1432
1484
  return h.hexdigest()
1433
1485
 
1434
1486
 
1487
+ def _secret_digest(value: Any) -> str:
1488
+ import hashlib
1489
+
1490
+ return hashlib.sha256(repr(value).encode("utf-8")).hexdigest()
1491
+
1492
+
1493
+ def _secrets_to_refs(node: Any, found: set[str]) -> Any:
1494
+ """A copy of *node* with every :class:`SecretStr` replaced by a reference."""
1495
+ if isinstance(node, SecretStr):
1496
+ found.add(node.secret_name)
1497
+ return _SecretRef(node.secret_name)
1498
+ if isinstance(node, dict):
1499
+ out = copy.copy(node)
1500
+ for key, value in node.items():
1501
+ out[key] = _secrets_to_refs(value, found)
1502
+ return out
1503
+ if isinstance(node, list):
1504
+ return [_secrets_to_refs(item, found) for item in node]
1505
+ if isinstance(node, tuple):
1506
+ return tuple(_secrets_to_refs(item, found) for item in node)
1507
+ return node
1508
+
1509
+
1510
+ def _refs_to_secrets(node: Any, secrets: dict) -> Any:
1511
+ """Resolve the cache's secret references against secrets.yaml, in place.
1512
+
1513
+ Raises:
1514
+ KeyError: A reference names a secret secrets.yaml no longer defines.
1515
+ """
1516
+ if isinstance(node, _SecretRef):
1517
+ value = secrets[node.name]
1518
+ _SECRET_VALUES[str(value)] = node.name
1519
+ return SecretStr(value, node.name) if isinstance(value, str) else value
1520
+ if isinstance(node, dict):
1521
+ for key in list(node):
1522
+ node[key] = _refs_to_secrets(node[key], secrets)
1523
+ return node
1524
+ if isinstance(node, list):
1525
+ for index, item in enumerate(node):
1526
+ node[index] = _refs_to_secrets(item, secrets)
1527
+ return node
1528
+ if isinstance(node, tuple):
1529
+ return tuple(_refs_to_secrets(item, secrets) for item in node)
1530
+ return node
1531
+
1532
+
1533
+ def _load_secrets_for(config_file: str) -> dict:
1534
+ path = os.path.join(os.path.dirname(config_file), SECRET_YAML)
1535
+ if not os.path.isfile(path):
1536
+ return {}
1537
+ secrets = load_yaml_file(path)
1538
+ return secrets if isinstance(secrets, dict) else {}
1539
+
1540
+
1435
1541
  def _try_load_cached_config(config_file: str) -> dict | None:
1436
1542
  """Try to load validated config from cache.
1437
1543
 
@@ -1499,12 +1605,31 @@ def _try_load_cached_config(config_file: str) -> dict | None:
1499
1605
  _LOGGER.debug("Schema file changed, cache invalidated")
1500
1606
  return None
1501
1607
 
1608
+ # A secret validation turned into something other than a string is
1609
+ # in the payload by value, so its current value has to match.
1610
+ baked = header.get("baked_secrets", {})
1611
+ secrets = _load_secrets_for(config_file) if baked or header.get("secret_refs") else {}
1612
+ for name, digest in baked.items():
1613
+ # A name the loader saw but secrets.yaml lacks was recorded as
1614
+ # the digest of None; lacking it still is not a change.
1615
+ if _secret_digest(secrets.get(name)) != digest:
1616
+ _LOGGER.debug("Secret %r changed, cache invalidated", name)
1617
+ return None
1618
+
1502
1619
  data = pickle.load(f)
1503
1620
 
1504
1621
  if not isinstance(data, dict):
1505
1622
  _LOGGER.warning("Config cache %s holds no config, revalidating", cache_path)
1506
1623
  return None
1507
1624
 
1625
+ try:
1626
+ data = _refs_to_secrets(data, secrets)
1627
+ except KeyError as missing:
1628
+ _LOGGER.info(
1629
+ "secrets.yaml no longer defines %s, revalidating config", missing
1630
+ )
1631
+ return None
1632
+
1508
1633
  _LOGGER.debug("Loading validated config from cache (skipping Cerberus validation)")
1509
1634
  return data
1510
1635
  except FileNotFoundError:
@@ -1536,16 +1661,30 @@ def _save_config_cache(config_file: str, validated_config: dict) -> None:
1536
1661
 
1537
1662
  cache_path = _get_config_cache_path(config_file)
1538
1663
  try:
1664
+ # No secret's value goes into the payload when it can be avoided:
1665
+ # strings from !secret become references, resolved from secrets.yaml
1666
+ # when the cache is read. A secret validation coerced (a port given as
1667
+ # !secret, say) stays by value, and its digest in the header makes a
1668
+ # change to it invalidate the cache instead of going unnoticed.
1669
+ as_refs: set[str] = set()
1670
+ payload = _secrets_to_refs(validated_config, as_refs)
1671
+ baked: dict[str, str] = {}
1672
+ leftover = _SECRET_NAMES_LOADED - as_refs
1673
+ if leftover:
1674
+ secrets = _load_secrets_for(config_file)
1675
+ baked = {name: _secret_digest(secrets.get(name)) for name in sorted(leftover)}
1539
1676
  header = {
1540
1677
  "version": __version__,
1541
1678
  "config_hash": _compute_config_dir_hash(config_file),
1542
1679
  "schema_hash": _compute_file_hash(schema_file),
1680
+ "secret_refs": sorted(as_refs),
1681
+ "baked_secrets": baked,
1543
1682
  }
1544
1683
  with open(cache_path, "wb") as f:
1545
1684
  # Header first, payload second, so the reader can reject a cache
1546
1685
  # from another build without unpickling boneIO objects at all.
1547
1686
  pickle.dump(header, f, protocol=pickle.HIGHEST_PROTOCOL)
1548
- pickle.dump(validated_config, f, protocol=pickle.HIGHEST_PROTOCOL)
1687
+ pickle.dump(payload, f, protocol=pickle.HIGHEST_PROTOCOL)
1549
1688
  _LOGGER.debug("Saved validated config cache to %s", cache_path)
1550
1689
  except (OSError, pickle.PicklingError) as e:
1551
1690
  _LOGGER.debug("Could not save config cache: %s", e)
@@ -1778,9 +1917,16 @@ def _full_config_validation(
1778
1917
  if not _is_downgraded:
1779
1918
  _check_virtual_switch_references(merged_doc)
1780
1919
 
1781
- # Save to cache for next startup
1782
- _progress("Saving cache...")
1783
- _save_config_cache(config_file, merged_doc)
1920
+ # Save to cache for next startup — unless a migration just rewrote the
1921
+ # files. The document in hand was read before that, so it no longer says
1922
+ # what they say (v7 moves a password behind !secret: cached from here, it
1923
+ # would sit in .cache.pkl by value and a later change in secrets.yaml would
1924
+ # not be seen). The next start reads the files as they are now.
1925
+ if migrations_applied:
1926
+ _LOGGER.info("Config migrated; the cache is written on the next start")
1927
+ else:
1928
+ _progress("Saving cache...")
1929
+ _save_config_cache(config_file, merged_doc)
1784
1930
 
1785
1931
  return merged_doc
1786
1932
 
@@ -1812,6 +1958,7 @@ def load_config_from_file(
1812
1958
 
1813
1959
  # Cache miss — full validation (slow path)
1814
1960
  _LOGGER.info("Config cache miss, running full validation...")
1961
+ _SECRET_NAMES_LOADED.clear()
1815
1962
  if progress_callback:
1816
1963
  progress_callback("Parsing YAML...")
1817
1964
  try:
@@ -1951,6 +2098,52 @@ def strip_default_values(data: Any, schema: dict | None = None, section: str | N
1951
2098
  return data
1952
2099
 
1953
2100
 
2101
+ def _section_secret_refs(config_file: str, section: str, data: Any) -> dict[str, str]:
2102
+ """Which of a section's fields defer to secrets.yaml, before a save.
2103
+
2104
+ A save dumps the section from the values the panel sent back, and the
2105
+ dumper writes a secret as the plain string it is. Recorded here, each
2106
+ reference is put back afterwards by :func:`_keep_secret_refs`.
2107
+ """
2108
+ if not isinstance(data, dict):
2109
+ return {}
2110
+ from boneio.core.config.yaml_patch import secret_reference
2111
+
2112
+ refs: dict[str, str] = {}
2113
+ for key in data:
2114
+ try:
2115
+ ref = secret_reference(config_file, (section, str(key)))
2116
+ except OSError:
2117
+ continue
2118
+ if ref is not None:
2119
+ refs[str(key)] = ref
2120
+ return refs
2121
+
2122
+
2123
+ def _keep_secret_refs(config_file: str, section: str, data: Any, refs: dict[str, str]) -> None:
2124
+ """Move secret values a save wrote out back into secrets.yaml.
2125
+
2126
+ Every field that was ``!secret name`` gets its (possibly new) value stored
2127
+ under that name and the reference back. The broker password goes to
2128
+ secrets.yaml even when it was plain, as migration v7 does on upgrade.
2129
+ """
2130
+ if not isinstance(data, dict):
2131
+ return
2132
+ from boneio.core.config.yaml_patch import YamlPatchError, move_to_secret
2133
+
2134
+ fields = dict(refs)
2135
+ if section == "mqtt" and "password" not in fields:
2136
+ fields["password"] = "mqtt_password"
2137
+ for key, name in fields.items():
2138
+ value = data.get(key)
2139
+ if not isinstance(value, str) or not value:
2140
+ continue
2141
+ try:
2142
+ move_to_secret(config_file, (section, key), name, overwrite=key in refs)
2143
+ except (OSError, YamlPatchError) as err:
2144
+ _LOGGER.error("%s.%s saved in the config instead of secrets.yaml: %s", section, key, err)
2145
+
2146
+
1954
2147
  def update_config_section(config_file: str, section: str, data: dict | list) -> dict:
1955
2148
  """
1956
2149
  Update content of a configuration section with intelligent !include handling.
@@ -1973,6 +2166,8 @@ def update_config_section(config_file: str, section: str, data: dict | list) ->
1973
2166
  section, data_size,
1974
2167
  )
1975
2168
 
2169
+ secret_refs = _section_secret_refs(config_file, section, data)
2170
+
1976
2171
  # Special handling for mcp23017 - convert hex strings to integers
1977
2172
  # This ensures YAML writes them as integers which are then read back as hex
1978
2173
  if section == "mcp23017" and isinstance(data, list):
@@ -2145,6 +2340,8 @@ def update_config_section(config_file: str, section: str, data: dict | list) ->
2145
2340
 
2146
2341
  _LOGGER.info(f"Successfully added new section '{section}' to config.yaml")
2147
2342
 
2343
+ _keep_secret_refs(config_file, section, data, secret_refs)
2344
+
2148
2345
  t_total = time.perf_counter() - t_start
2149
2346
  _LOGGER.info(
2150
2347
  "[SAVE] DONE section='%s' total=%.3fs",
@@ -316,8 +316,8 @@ class DisplayManager:
316
316
  self._oled._sleep_timeout = TimePeriod(seconds=int(timeout_seconds))
317
317
 
318
318
  # Reset to first screen and refresh
319
- if self._configured_screen_order:
320
- self._oled._current_screen = self._configured_screen_order[0]
319
+ # The notice, if one stands, stays first.
320
+ self._oled._current_screen = self._oled.first_screen()
321
321
  self._oled.render_display()
322
322
 
323
323
  _LOGGER.info(