boneio 1.6.0.dev29__tar.gz → 1.6.0.dev31__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 (896) hide show
  1. {boneio-1.6.0.dev29/boneio.egg-info → boneio-1.6.0.dev31}/PKG-INFO +1 -1
  2. boneio-1.6.0.dev31/boneio/core/auth/jwt_secret.py +129 -0
  3. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/cloud/registration.py +40 -6
  4. boneio-1.6.0.dev31/boneio/core/nodered_guard.py +153 -0
  5. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/MANIFEST.sha256 +1 -0
  6. boneio-1.6.0.dev31/boneio/migrations/assets/sshd/15-boneio-penalties.conf +19 -0
  7. boneio-1.6.0.dev31/boneio/migrations/plans/1.6.34.json +1 -0
  8. boneio-1.6.0.dev31/boneio/migrations/plans/1.6.34.sig +2 -0
  9. boneio-1.6.0.dev31/boneio/migrations/plans/1.6.35.json +1 -0
  10. boneio-1.6.0.dev31/boneio/migrations/plans/1.6.35.sig +1 -0
  11. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/manifest.json +1 -1
  12. boneio-1.6.0.dev31/boneio/migrations/plans/manifest.sig +1 -0
  13. boneio-1.6.0.dev31/boneio/migrations/versions/v1_6_34_nodered_admin_auth_again.py +51 -0
  14. boneio-1.6.0.dev31/boneio/migrations/versions/v1_6_35_ssh_guessing_penalty.py +52 -0
  15. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/runner.py +11 -0
  16. boneio-1.6.0.dev31/boneio/version.py +2 -0
  17. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/app.py +14 -1
  18. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/AccountsView-hSkFhGZn.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/AccountsView-CrzcITM9.js +1 -1
  19. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/AccountsView-CrzcITM9.js.gz +0 -0
  20. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/AppInitContext-XnlT3sSY.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/AppInitContext-BaUlPm1W.js +1 -1
  21. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/AppInitContext-BaUlPm1W.js.gz +0 -0
  22. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/BackupSection-CdrNqwc2.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/BackupSection-AHoCSntx.js +1 -1
  23. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/BackupSection-AHoCSntx.js.gz +0 -0
  24. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/BindingMatrix-Dyyc2Plw.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/BindingMatrix-Bh6eogZS.js +1 -1
  25. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/BindingMatrix-Bh6eogZS.js.gz +0 -0
  26. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/DeviceControlSection-BI2Gx_ht.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/DeviceControlSection-BEZ-rfT5.js +1 -1
  27. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/DeviceControlSection-BEZ-rfT5.js.gz +0 -0
  28. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/DiagnosticsView-DVFMNJGF.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/DiagnosticsView-hXKAR31e.js +1 -1
  29. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/DiagnosticsView-hXKAR31e.js.gz +0 -0
  30. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/EntityGrid-D1gJhSPK.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/EntityGrid-DmqQBGaN.js +1 -1
  31. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/EntityGrid-DmqQBGaN.js.gz +0 -0
  32. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/FactoryResetSection-B6zeFfLF.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/FactoryResetSection-DgiR5Lle.js +1 -1
  33. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/FactoryResetSection-DgiR5Lle.js.gz +0 -0
  34. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/FormInputToggle-B9vctUNt.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/FormInputToggle-CxFL8RKD.js +1 -1
  35. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/FormInputToggle-CxFL8RKD.js.gz +0 -0
  36. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/HaDashboardWizard-BtouQnje.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/HaDashboardWizard-V8b13hJz.js +1 -1
  37. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/HaDashboardWizard-V8b13hJz.js.gz +0 -0
  38. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/HostnameSection-h9UyWAS0.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/HostnameSection-CK_d38Cu.js +1 -1
  39. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/HostnameSection-CK_d38Cu.js.gz +0 -0
  40. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/InputsView-DHMMyEtN.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/InputsView-AnIelzWL.js +1 -1
  41. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/InputsView-AnIelzWL.js.gz +0 -0
  42. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/LoadingState-BnMjvLnH.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/LoadingState-k0MWyIJz.js +1 -1
  43. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/LocationSection-BWJEPzOe.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/LocationSection-Cw5XoezZ.js +2 -2
  44. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/LocationSection-Cw5XoezZ.js.gz +0 -0
  45. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/LoggerForm-B4wgrOCg.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/LoggerForm-BThTeHcV.js +1 -1
  46. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/LoggerForm-BThTeHcV.js.gz +0 -0
  47. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/LongPressWrapper-BuYVn91a.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/LongPressWrapper-DysRtE34.js +1 -1
  48. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/LongPressWrapper-DysRtE34.js.gz +0 -0
  49. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/MigrationsSection-CyxjY5qf.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/MigrationsSection-DG-0G83Q.js +1 -1
  50. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/MigrationsSection-DG-0G83Q.js.gz +0 -0
  51. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/ModbusView-3TzfMJLo.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/ModbusView-Co7H3-1O.js +1 -1
  52. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/ModbusView-Co7H3-1O.js.gz +0 -0
  53. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/MqttPasswordsSection-BJUmLN6j.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/MqttPasswordsSection-DbmNuJsl.js +1 -1
  54. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/MqttPasswordsSection-DbmNuJsl.js.gz +0 -0
  55. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/NodeRedManagement-DuFEL1SK.js +1 -0
  56. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/NodeRedManagement-DuFEL1SK.js.gz +0 -0
  57. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/OutputsView-hB9mXMLS.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/OutputsView-DJgHXWaD.js +1 -1
  58. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/OutputsView-DJgHXWaD.js.gz +0 -0
  59. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/SecurityView-DxbLaDjP.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/SecurityView-FRya51LN.js +1 -1
  60. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/SecurityView-FRya51LN.js.gz +0 -0
  61. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/SensorView-BA_6vwE1.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/SensorView-D5SQeEU1.js +1 -1
  62. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/SensorView-D5SQeEU1.js.gz +0 -0
  63. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/SystemState-CLMEarw1.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/SystemState-CoJxY13l.js +1 -1
  64. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/SystemState-CoJxY13l.js.gz +0 -0
  65. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/TemplatesView-B7Hx_815.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/TemplatesView-C8KHVSAd.js +1 -1
  66. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/TemplatesView-C8KHVSAd.js.gz +0 -0
  67. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/TilePicker-u6F0_WYh.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/TilePicker-vWXRKYi4.js +1 -1
  68. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/TilePicker-vWXRKYi4.js.gz +0 -0
  69. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/TimezoneSection-D2NOMHRt.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/TimezoneSection-CLAdLi7w.js +1 -1
  70. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/TimezoneSection-CLAdLi7w.js.gz +0 -0
  71. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/UISettings-D09Ovoxp.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/UISettings-BAI0qkpM.js +5 -5
  72. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/UISettings-BAI0qkpM.js.gz +0 -0
  73. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-5anVj_YS.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-DuHAF2_n.js +1 -1
  74. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-DuHAF2_n.js.gz +0 -0
  75. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/aiConfig-AbhmFxmh.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/aiConfig-CA8wKp_v.js +1 -1
  76. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/aiConfig-CA8wKp_v.js.gz +0 -0
  77. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/aiWizardPrompt-DROK5vS0.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/aiWizardPrompt-BSYiCh9D.js +1 -1
  78. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/aiWizardPrompt-BSYiCh9D.js.gz +0 -0
  79. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/groupByArea-S-fs_0iK.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/groupByArea-CJJPwGJ3.js +1 -1
  80. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/groupByArea-CJJPwGJ3.js.gz +0 -0
  81. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/index-DULLFI0R.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/index-D2ManUuV.js +11 -11
  82. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/index-D2ManUuV.js.gz +0 -0
  83. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/index-Mmx3ZGXj.css → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/index-ybynnlsQ.css +1 -1
  84. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/index-Mmx3ZGXj.css.gz → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/index-ybynnlsQ.css.gz +0 -0
  85. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/monaco-C_baIGg_.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/monaco-BNh4MXlA.js +1 -1
  86. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/monaco-BNh4MXlA.js.gz +0 -0
  87. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/monaco-sF_y08LI.js → boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/monaco-DbB-_Hga.js +2 -2
  88. boneio-1.6.0.dev31/boneio/webui/frontend-dist/assets/monaco-DbB-_Hga.js.gz +0 -0
  89. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/index.html +3 -3
  90. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/sw.js +1 -1
  91. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/nodered.py +169 -88
  92. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/system.py +28 -8
  93. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/security_headers.py +7 -1
  94. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31/boneio.egg-info}/PKG-INFO +1 -1
  95. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio.egg-info/SOURCES.txt +79 -71
  96. boneio-1.6.0.dev29/boneio/core/auth/jwt_secret.py +0 -59
  97. boneio-1.6.0.dev29/boneio/migrations/plans/manifest.sig +0 -0
  98. boneio-1.6.0.dev29/boneio/version.py +0 -2
  99. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/AccountsView-hSkFhGZn.js.gz +0 -0
  100. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/AppInitContext-XnlT3sSY.js.gz +0 -0
  101. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/BackupSection-CdrNqwc2.js.gz +0 -0
  102. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/BindingMatrix-Dyyc2Plw.js.gz +0 -0
  103. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/DeviceControlSection-BI2Gx_ht.js.gz +0 -0
  104. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/DiagnosticsView-DVFMNJGF.js.gz +0 -0
  105. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/EntityGrid-D1gJhSPK.js.gz +0 -0
  106. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/FactoryResetSection-B6zeFfLF.js.gz +0 -0
  107. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/FormInputToggle-B9vctUNt.js.gz +0 -0
  108. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/HaDashboardWizard-BtouQnje.js.gz +0 -0
  109. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/HostnameSection-h9UyWAS0.js.gz +0 -0
  110. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/InputsView-DHMMyEtN.js.gz +0 -0
  111. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/LocationSection-BWJEPzOe.js.gz +0 -0
  112. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/LoggerForm-B4wgrOCg.js.gz +0 -0
  113. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/LongPressWrapper-BuYVn91a.js.gz +0 -0
  114. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/MigrationsSection-CyxjY5qf.js.gz +0 -0
  115. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/ModbusView-3TzfMJLo.js.gz +0 -0
  116. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/MqttPasswordsSection-BJUmLN6j.js.gz +0 -0
  117. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/NodeRedManagement-BVfo9HUs.js +0 -1
  118. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/NodeRedManagement-BVfo9HUs.js.gz +0 -0
  119. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/OutputsView-hB9mXMLS.js.gz +0 -0
  120. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/SecurityView-DxbLaDjP.js.gz +0 -0
  121. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/SensorView-BA_6vwE1.js.gz +0 -0
  122. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/SystemState-CLMEarw1.js.gz +0 -0
  123. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/TemplatesView-B7Hx_815.js.gz +0 -0
  124. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/TilePicker-u6F0_WYh.js.gz +0 -0
  125. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/TimezoneSection-D2NOMHRt.js.gz +0 -0
  126. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/UISettings-D09Ovoxp.js.gz +0 -0
  127. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/UpdateSafetyNotice-5anVj_YS.js.gz +0 -0
  128. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/aiConfig-AbhmFxmh.js.gz +0 -0
  129. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/aiWizardPrompt-DROK5vS0.js.gz +0 -0
  130. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/groupByArea-S-fs_0iK.js.gz +0 -0
  131. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/index-DULLFI0R.js.gz +0 -0
  132. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/monaco-C_baIGg_.js.gz +0 -0
  133. boneio-1.6.0.dev29/boneio/webui/frontend-dist/assets/monaco-sF_y08LI.js.gz +0 -0
  134. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/LICENSE +0 -0
  135. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/MANIFEST.in +0 -0
  136. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/README.md +0 -0
  137. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/__init__.py +0 -0
  138. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.2/input.yaml +0 -0
  139. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.2/output_24_16.yaml +0 -0
  140. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.2/output_32_10.yaml +0 -0
  141. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.2/output_32_5.yaml +0 -0
  142. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.2/output_cover.yaml +0 -0
  143. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  144. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.3/input.yaml +0 -0
  145. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.3/output_24_16.yaml +0 -0
  146. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.3/output_32_10.yaml +0 -0
  147. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.3/output_32_5.yaml +0 -0
  148. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.3/output_cover.yaml +0 -0
  149. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  150. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.4/input.yaml +0 -0
  151. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.4/output_24_16.yaml +0 -0
  152. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.4/output_32_10.yaml +0 -0
  153. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.4/output_32_5.yaml +0 -0
  154. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.4/output_cover.yaml +0 -0
  155. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  156. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.5/input.yaml +0 -0
  157. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.5/output_24_16.yaml +0 -0
  158. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.5/output_32_10.yaml +0 -0
  159. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.5/output_cover.yaml +0 -0
  160. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  161. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.6/input.yaml +0 -0
  162. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.6/output_24_16.yaml +0 -0
  163. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.6/output_32_10.yaml +0 -0
  164. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.6/output_cover.yaml +0 -0
  165. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  166. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.7/input.yaml +0 -0
  167. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.7/output_24_16.yaml +0 -0
  168. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.7/output_32_10.yaml +0 -0
  169. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.7/output_48_4.yaml +0 -0
  170. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.7/output_cover.yaml +0 -0
  171. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  172. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.8/input.yaml +0 -0
  173. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.8/output_24_16.yaml +0 -0
  174. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.8/output_32_10.yaml +0 -0
  175. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.8/output_48_4.yaml +0 -0
  176. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.8/output_cover.yaml +0 -0
  177. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  178. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.0/input.yaml +0 -0
  179. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.0/output_24_16.yaml +0 -0
  180. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.0/output_32_10.yaml +0 -0
  181. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.0/output_48_4.yaml +0 -0
  182. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.0/output_cover.yaml +0 -0
  183. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
  184. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.1/input.yaml +0 -0
  185. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.1/output_24_16.yaml +0 -0
  186. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.1/output_32_10.yaml +0 -0
  187. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.1/output_48_4.yaml +0 -0
  188. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.1/output_cover.yaml +0 -0
  189. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/boards/1.1/output_cover_mix.yaml +0 -0
  190. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/bonecli.py +0 -0
  191. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/__init__.py +0 -0
  192. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/cover/__init__.py +0 -0
  193. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/cover/cover.py +0 -0
  194. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/cover/remote.py +0 -0
  195. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/cover/time_based.py +0 -0
  196. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/cover/venetian.py +0 -0
  197. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/group/__init__.py +0 -0
  198. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/group/output_group.py +0 -0
  199. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/input/__init__.py +0 -0
  200. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/input/binary_sensor.py +0 -0
  201. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/input/detectors.py +0 -0
  202. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/input/event.py +0 -0
  203. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/input/remote/__init__.py +0 -0
  204. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/input/remote/base.py +0 -0
  205. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/input/remote/esphome.py +0 -0
  206. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/input/remote/mqtt.py +0 -0
  207. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/irrigation/__init__.py +0 -0
  208. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/irrigation/controller.py +0 -0
  209. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/irrigation/water_source.py +0 -0
  210. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/output/__init__.py +0 -0
  211. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/output/basic.py +0 -0
  212. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/output/buzzer.py +0 -0
  213. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/output/mcp.py +0 -0
  214. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/output/pca.py +0 -0
  215. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/output/pcf.py +0 -0
  216. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/output/remote.py +0 -0
  217. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/sensor/__init__.py +0 -0
  218. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/sensor/virtual_energy.py +0 -0
  219. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/template/__init__.py +0 -0
  220. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/template/alarm_panel.py +0 -0
  221. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/template/gate_cover.py +0 -0
  222. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/template/thermostat.py +0 -0
  223. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/components/virtual_switch.py +0 -0
  224. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/const.py +0 -0
  225. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/__init__.py +0 -0
  226. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/atomic_file.py +0 -0
  227. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/auth/__init__.py +0 -0
  228. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/auth/cli.py +0 -0
  229. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/auth/hashing.py +0 -0
  230. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/auth/migration.py +0 -0
  231. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/auth/models.py +0 -0
  232. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/auth/store.py +0 -0
  233. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/cloud/__init__.py +0 -0
  234. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/cloud/data/__init__.py +0 -0
  235. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  236. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  237. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/cloud/secrets.py +0 -0
  238. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/__init__.py +0 -0
  239. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/config_helper.py +0 -0
  240. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/input_bindings.py +0 -0
  241. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/migrations/__init__.py +0 -0
  242. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  243. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/migrations/v2_transition.py +0 -0
  244. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/migrations/v4_wled_cache.py +0 -0
  245. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/migrations/v5_ina_screen.py +0 -0
  246. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/migrations/v6_input_keys.py +0 -0
  247. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/migrations/v7_mqtt_password_secret.py +0 -0
  248. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/package-lock.json +0 -0
  249. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/package.json +0 -0
  250. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/provenance.py +0 -0
  251. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/schema_converter.py +0 -0
  252. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/secret_masking.py +0 -0
  253. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/write_lock.py +0 -0
  254. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/yaml_compat.py +0 -0
  255. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/yaml_patch.py +0 -0
  256. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/config/yaml_util.py +0 -0
  257. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/containers.py +0 -0
  258. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/diagnostics/__init__.py +0 -0
  259. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/diagnostics/collect.py +0 -0
  260. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/discovery.py +0 -0
  261. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/events/__init__.py +0 -0
  262. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/events/bus.py +0 -0
  263. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/__init__.py +0 -0
  264. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/action_conditions.py +0 -0
  265. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/canopen.py +0 -0
  266. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/covers.py +0 -0
  267. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/display.py +0 -0
  268. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/inputs.py +0 -0
  269. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/irrigation.py +0 -0
  270. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/manager.py +0 -0
  271. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/modbus.py +0 -0
  272. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/outputs.py +0 -0
  273. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/remote.py +0 -0
  274. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/remote_input_registrar.py +0 -0
  275. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/scheduler.py +0 -0
  276. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/security_alert.py +0 -0
  277. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/sensors.py +0 -0
  278. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/sun.py +0 -0
  279. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/templates/__init__.py +0 -0
  280. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/templates/alarm.py +0 -0
  281. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/templates/gate_cover.py +0 -0
  282. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/templates/thermostat.py +0 -0
  283. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/templates.py +0 -0
  284. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/update.py +0 -0
  285. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/manager/virtual_switches.py +0 -0
  286. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/messaging/__init__.py +0 -0
  287. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/messaging/basic.py +0 -0
  288. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/messaging/basic_mqtt.py +0 -0
  289. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/messaging/broker_tls.py +0 -0
  290. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/messaging/composite.py +0 -0
  291. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/messaging/local.py +0 -0
  292. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/messaging/lox.py +0 -0
  293. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/messaging/mqtt.py +0 -0
  294. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/messaging/mqtt_tls.py +0 -0
  295. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/messaging/queue.py +0 -0
  296. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/net/__init__.py +0 -0
  297. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/net/discovery_guard.py +0 -0
  298. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/recovery.py +0 -0
  299. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/remote/__init__.py +0 -0
  300. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/remote/base.py +0 -0
  301. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/remote/can.py +0 -0
  302. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/remote/esphome.py +0 -0
  303. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/remote/mqtt.py +0 -0
  304. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/remote/wled.py +0 -0
  305. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/remote/wled_cache.py +0 -0
  306. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/security/__init__.py +0 -0
  307. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/security/certificate.py +0 -0
  308. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/security/framing.py +0 -0
  309. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/security/posture.py +0 -0
  310. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/sensor/__init__.py +0 -0
  311. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/sensor/base.py +0 -0
  312. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/sensor/sun.py +0 -0
  313. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/sensor/system.py +0 -0
  314. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/state/__init__.py +0 -0
  315. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/state/manager.py +0 -0
  316. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/system/__init__.py +0 -0
  317. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/system/host_data.py +0 -0
  318. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/system/monitor.py +0 -0
  319. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/system_ops.py +0 -0
  320. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/utils/__init__.py +0 -0
  321. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/utils/async_updater.py +0 -0
  322. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/utils/conditions.py +0 -0
  323. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/utils/filter.py +0 -0
  324. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/utils/font_util.py +0 -0
  325. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/utils/logger.py +0 -0
  326. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/utils/naming.py +0 -0
  327. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/utils/overlay.py +0 -0
  328. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/utils/sun.py +0 -0
  329. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/utils/timeperiod.py +0 -0
  330. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/core/utils/util.py +0 -0
  331. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/24x16/adc.yaml +0 -0
  332. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  333. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/24x16/config.yaml +0 -0
  334. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/24x16/event.yaml +0 -0
  335. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/24x16/mqtt.yaml +0 -0
  336. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  337. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/32x10/adc.yaml +0 -0
  338. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  339. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/32x10/config.yaml +0 -0
  340. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/32x10/event.yaml +0 -0
  341. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/32x10/mqtt.yaml +0 -0
  342. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  343. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/48x4/adc.yaml +0 -0
  344. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  345. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/48x4/config.yaml +0 -0
  346. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/48x4/event.yaml +0 -0
  347. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/48x4/mqtt.yaml +0 -0
  348. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  349. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/__init__.py +0 -0
  350. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/can_master.yaml +0 -0
  351. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/can_slave.yaml +0 -0
  352. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover/adc.yaml +0 -0
  353. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  354. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover/config.yaml +0 -0
  355. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover/cover.yaml +0 -0
  356. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover/event.yaml +0 -0
  357. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover/mqtt.yaml +0 -0
  358. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover/outputCover.yaml +0 -0
  359. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover_mix/adc.yaml +0 -0
  360. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  361. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover_mix/config.yaml +0 -0
  362. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover_mix/cover.yaml +0 -0
  363. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover_mix/event.yaml +0 -0
  364. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  365. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  366. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/adc.yaml +0 -0
  367. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  368. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  369. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  370. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  371. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/event_all.yaml +0 -0
  372. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  373. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  374. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  375. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  376. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  377. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  378. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/exceptions.py +0 -0
  379. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/__init__.py +0 -0
  380. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/analog/__init__.py +0 -0
  381. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/analog/adc.py +0 -0
  382. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/can/__init__.py +0 -0
  383. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/can/bridge.py +0 -0
  384. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/can/client.py +0 -0
  385. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/can/interface.py +0 -0
  386. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/can/node.py +0 -0
  387. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/can/node_id.py +0 -0
  388. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/can/test_od.py +0 -0
  389. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/display/__init__.py +0 -0
  390. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/display/early_oled.py +0 -0
  391. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  392. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/display/oled.py +0 -0
  393. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/gpio/__init__.py +0 -0
  394. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  395. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  396. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  397. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  398. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/gpio/input/__init__.py +0 -0
  399. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/gpio/input/base.py +0 -0
  400. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/gpio/input/manager.py +0 -0
  401. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/i2c/__init__.py +0 -0
  402. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/i2c/bus.py +0 -0
  403. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/i2c/ina219.py +0 -0
  404. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/i2c/ina219_driver.py +0 -0
  405. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/i2c/ina226.py +0 -0
  406. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/i2c/ina226_driver.py +0 -0
  407. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/i2c/mcp9808.py +0 -0
  408. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/i2c/pct2075.py +0 -0
  409. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/onewire/__init__.py +0 -0
  410. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/onewire/dallas.py +0 -0
  411. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/sensor/__init__.py +0 -0
  412. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  413. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/sensor/temperature/base.py +0 -0
  414. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  415. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  416. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/hardware/udev_wait.py +0 -0
  417. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/integration/__init__.py +0 -0
  418. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/integration/homeassistant.py +0 -0
  419. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/integration/interlock.py +0 -0
  420. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/integration/lox_template.py +0 -0
  421. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/__init__.py +0 -0
  422. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/actions.py +0 -0
  423. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/apt/52boneio-periodic +0 -0
  424. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/apt/52boneio-unattended +0 -0
  425. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/docker/daemon.json +0 -0
  426. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
  427. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
  428. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/docker/nodered/docker-compose-cloud.yaml +0 -0
  429. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  430. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
  431. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/helpers/boneio-containers +0 -0
  432. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/helpers/boneio-helpers-heal +0 -0
  433. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/helpers/boneio-migrate-v2 +0 -0
  434. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/helpers/boneio-system +0 -0
  435. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/issue.d/10-boneio.issue +0 -0
  436. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/journald/boneio-console.conf +0 -0
  437. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/journald/journald.conf +0 -0
  438. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/kernel/postinst-boneio-overlay +0 -0
  439. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/migrations-recovery.pem +0 -0
  440. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/migrations.pem +0 -0
  441. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/modules-load.d/onewire.conf +0 -0
  442. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  443. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/motd/20-boneio +0 -0
  444. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/overlays/BONEIO-BLACK-PINS-v0.2-v0.3.dtbo +0 -0
  445. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/sshd/10-boneio-hardening.conf +0 -0
  446. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/sshd/20-boneio-banner.conf +0 -0
  447. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/sshd/boneio-banner +0 -0
  448. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/sudoers/boneio +0 -0
  449. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/sudoers/boneio-helpers +0 -0
  450. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/sudoers/boneio-timedatectl +0 -0
  451. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/boneio-dpkg-recover.service +0 -0
  452. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/boneio-helpers-heal.service +0 -0
  453. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
  454. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
  455. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/boneio.service +0 -0
  456. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/dropins/apt-daily-priority.conf +0 -0
  457. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/dropins/avahi-daemon-defer.conf +0 -0
  458. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/dropins/bb-usb-gadgets-defer.conf +0 -0
  459. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/dropins/mosquitto-priority.conf +0 -0
  460. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/dropins/timer-no-persistent.conf +0 -0
  461. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/dropins/user-manager-defer.conf +0 -0
  462. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/linger-marker +0 -0
  463. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  464. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
  465. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  466. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  467. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  468. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  469. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
  470. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/bootstrap/boneio-migrate +0 -0
  471. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  472. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  473. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.3.0.json +0 -0
  474. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.3.0.sig +0 -0
  475. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.3.1.json +0 -0
  476. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.3.1.sig +0 -0
  477. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.3.2.json +0 -0
  478. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.3.2.sig +0 -0
  479. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.4.0.json +0 -0
  480. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.4.0.sig +0 -0
  481. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.4.3.json +0 -0
  482. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.4.3.sig +0 -0
  483. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.4.4.json +0 -0
  484. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.4.4.sig +0 -0
  485. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.0.json +0 -0
  486. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.0.sig +0 -0
  487. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.1.json +0 -0
  488. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.1.sig +0 -0
  489. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.10.json +0 -0
  490. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.10.sig +0 -0
  491. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.11.json +0 -0
  492. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.11.sig +0 -0
  493. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.12.json +0 -0
  494. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.12.sig +0 -0
  495. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.13.json +0 -0
  496. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.13.sig +0 -0
  497. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.14.json +0 -0
  498. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.14.sig +0 -0
  499. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.15.json +0 -0
  500. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.15.sig +0 -0
  501. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.16.json +0 -0
  502. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.16.sig +0 -0
  503. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.17.json +0 -0
  504. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.17.sig +0 -0
  505. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.18.json +0 -0
  506. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.18.sig +0 -0
  507. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.2.json +0 -0
  508. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.2.sig +0 -0
  509. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.3.json +0 -0
  510. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.3.sig +0 -0
  511. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.4.json +0 -0
  512. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.4.sig +0 -0
  513. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.5.json +0 -0
  514. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.5.sig +0 -0
  515. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.6.json +0 -0
  516. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.6.sig +0 -0
  517. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.7.json +0 -0
  518. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.7.sig +0 -0
  519. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.8.json +0 -0
  520. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.8.sig +0 -0
  521. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.9.json +0 -0
  522. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.5.9.sig +0 -0
  523. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.0.json +0 -0
  524. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.0.sig +0 -0
  525. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.1.json +0 -0
  526. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.1.sig +0 -0
  527. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.10.json +0 -0
  528. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.10.sig +0 -0
  529. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.11.json +0 -0
  530. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.11.sig +0 -0
  531. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.12.json +0 -0
  532. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.12.sig +0 -0
  533. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.13.json +0 -0
  534. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.13.sig +0 -0
  535. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.14.json +0 -0
  536. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.14.sig +0 -0
  537. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.15.json +0 -0
  538. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.15.sig +0 -0
  539. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.16.json +0 -0
  540. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.16.sig +0 -0
  541. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.17.json +0 -0
  542. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.17.sig +0 -0
  543. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.18.json +0 -0
  544. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.18.sig +0 -0
  545. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.19.json +0 -0
  546. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.19.sig +0 -0
  547. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.2.json +0 -0
  548. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.2.sig +0 -0
  549. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.20.json +0 -0
  550. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.20.sig +0 -0
  551. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.21.json +0 -0
  552. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.21.sig +0 -0
  553. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.22.json +0 -0
  554. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.22.sig +0 -0
  555. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.23.json +0 -0
  556. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.23.sig +0 -0
  557. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.24.json +0 -0
  558. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.24.sig +0 -0
  559. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.25.json +0 -0
  560. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.25.sig +0 -0
  561. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.26.json +0 -0
  562. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.26.sig +0 -0
  563. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.27.json +0 -0
  564. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.27.sig +0 -0
  565. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.28.json +0 -0
  566. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.28.sig +0 -0
  567. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.29.json +0 -0
  568. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.29.sig +0 -0
  569. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.3.json +0 -0
  570. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.3.sig +0 -0
  571. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.30.json +0 -0
  572. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.30.sig +0 -0
  573. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.31.json +0 -0
  574. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.31.sig +0 -0
  575. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.32.json +0 -0
  576. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.32.sig +0 -0
  577. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.33.json +0 -0
  578. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.33.sig +0 -0
  579. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.4.json +0 -0
  580. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.4.sig +0 -0
  581. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.5.json +0 -0
  582. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.5.sig +0 -0
  583. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.6.json +0 -0
  584. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.6.sig +0 -0
  585. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.7.json +0 -0
  586. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.7.sig +0 -0
  587. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.8.json +0 -0
  588. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.8.sig +0 -0
  589. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.9.json +0 -0
  590. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/plans/1.6.9.sig +0 -0
  591. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/runner.py +0 -0
  592. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/__init__.py +0 -0
  593. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
  594. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  595. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  596. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
  597. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
  598. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
  599. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
  600. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_10_disable_console_setup.py +0 -0
  601. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_11_timer_catchup.py +0 -0
  602. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_12_oled_splash_off_critical_path.py +0 -0
  603. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_13_mosquitto_priority.py +0 -0
  604. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_14_journal_apparent_size.py +0 -0
  605. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_15_prune_orphan_journals.py +0 -0
  606. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_16_login_linger.py +0 -0
  607. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_17_defer_user_manager.py +0 -0
  608. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_18_fix_hostname_once.py +0 -0
  609. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
  610. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_2_libyaml.py +0 -0
  611. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -0
  612. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_4_onewire_modules.py +0 -0
  613. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_5_overlay_kernel_hook.py +0 -0
  614. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_6_boot_service_order.py +0 -0
  615. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_7_journald_limits.py +0 -0
  616. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_8_apparmor_prune.py +0 -0
  617. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_5_9_defer_nonessential.py +0 -0
  618. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_0_nodered_admin_auth.py +0 -0
  619. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_10_narrow_sudo_rules.py +0 -0
  620. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_11_drop_docker_group.py +0 -0
  621. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_12_console_shows_ip.py +0 -0
  622. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_13_custom_certificate.py +0 -0
  623. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_14_certificate_lifetime.py +0 -0
  624. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_15_web_port_reaches_caddy.py +0 -0
  625. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_16_release_floor_ordering.py +0 -0
  626. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_17_service_password.py +0 -0
  627. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_18_os_updates.py +0 -0
  628. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_19_helper_apt_purge.py +0 -0
  629. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py +0 -0
  630. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_20_drop_packagekit.py +0 -0
  631. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_21_caddy_pinned.py +0 -0
  632. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_22_security_autoupdates.py +0 -0
  633. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_23_helper_fstab_options.py +0 -0
  634. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_24_boot_partition_nofail.py +0 -0
  635. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_25_journal_to_serial_console.py +0 -0
  636. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_26_kernel_check_old_images.py +0 -0
  637. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_27_startup_overlay_repair.py +0 -0
  638. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_28_ssh_login_screen.py +0 -0
  639. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_29_service_password_change.py +0 -0
  640. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py +0 -0
  641. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_30_os_update_apt_cache.py +0 -0
  642. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_31_overlay_v02_v03_inputs.py +0 -0
  643. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_32_mqtt_broker_tls.py +0 -0
  644. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_33_os_update_measured_space.py +0 -0
  645. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py +0 -0
  646. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_4_ssh_login_hardening.py +0 -0
  647. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_5_trust_transition.py +0 -0
  648. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_6_retire_legacy_helper.py +0 -0
  649. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_7_timedatectl_sudoers.py +0 -0
  650. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_8_system_helper.py +0 -0
  651. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/migrations/versions/v1_6_9_ntp_servers.py +0 -0
  652. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/__init__.py +0 -0
  653. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/cli.py +0 -0
  654. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/client.py +0 -0
  655. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/coordinator.py +0 -0
  656. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/__init__.py +0 -0
  657. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
  658. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  659. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  660. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  661. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  662. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  663. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  664. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  665. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/hvac/defro-drx.json +0 -0
  666. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
  667. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  668. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/hvac/thessla.json +0 -0
  669. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  670. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/hvac/wanas415.json +0 -0
  671. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/inverters/sofar.json +0 -0
  672. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  673. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  674. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  675. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  676. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/sensors/cwt.json +0 -0
  677. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  678. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  679. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  680. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  681. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/sensors/pt100.json +0 -0
  682. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
  683. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/sensors/sht20.json +0 -0
  684. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/devices/sensors/sht30.json +0 -0
  685. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/__init__.py +0 -0
  686. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/base.py +0 -0
  687. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/derived/__init__.py +0 -0
  688. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/derived/numeric.py +0 -0
  689. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/derived/select.py +0 -0
  690. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/derived/switch.py +0 -0
  691. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/derived/text.py +0 -0
  692. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/sensor/__init__.py +0 -0
  693. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/sensor/binary.py +0 -0
  694. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/sensor/numeric.py +0 -0
  695. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/sensor/text.py +0 -0
  696. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/writeable/__init__.py +0 -0
  697. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/writeable/binary.py +0 -0
  698. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/entities/writeable/numeric.py +0 -0
  699. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/mock_coordinator.py +0 -0
  700. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/modbus/utils.py +0 -0
  701. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/models/__init__.py +0 -0
  702. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/models/actions.py +0 -0
  703. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/models/events.py +0 -0
  704. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/models/files.py +0 -0
  705. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/models/logs.py +0 -0
  706. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/models/mqtt.py +0 -0
  707. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/models/state.py +0 -0
  708. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/actions.yaml +0 -0
  709. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/actions_sensor.yaml +0 -0
  710. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/actions_switch.yaml +0 -0
  711. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/condition.yaml +0 -0
  712. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/filters.yaml +0 -0
  713. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/filters_adc.yaml +0 -0
  714. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/id.yaml +0 -0
  715. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/remote_devices.yaml +0 -0
  716. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/remote_inputs.yaml +0 -0
  717. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/remote_outputs.yaml +0 -0
  718. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/schema.yaml +0 -0
  719. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/temp_unit.yaml +0 -0
  720. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/schema/update_interval.yaml +0 -0
  721. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/action_validation.py +0 -0
  722. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/bind.py +0 -0
  723. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/dashboard_cards.py +0 -0
  724. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/NodeRedView-CP86NnC4.js +0 -0
  725. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/NodeRedView-CP86NnC4.js.gz +0 -0
  726. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/NumericInput-CrVNlFps.js +0 -0
  727. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/NumericInput-CrVNlFps.js.gz +0 -0
  728. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/Sparkline-6iDv_8hd.js +0 -0
  729. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/Sparkline-6iDv_8hd.js.gz +0 -0
  730. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/ViewToggle-CVWoIKqI.js +0 -0
  731. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/axios-DyqbZVcF.js +0 -0
  732. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/axios-DyqbZVcF.js.gz +0 -0
  733. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/basePath-CxHj-SSK.js +0 -0
  734. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
  735. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  736. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf.gz +0 -0
  737. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/configCache-DZ0vWq_Z.js +0 -0
  738. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/dialog-DMaCttcv.js +0 -0
  739. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/dialog-DMaCttcv.js.gz +0 -0
  740. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/editor.worker-O-CH8JUO.js +0 -0
  741. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/editor.worker-O-CH8JUO.js.gz +0 -0
  742. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/fa-ChDOCx3T.js +0 -0
  743. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/fa-ChDOCx3T.js.gz +0 -0
  744. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/formatters-Cc0QIRxb.js +0 -0
  745. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/gi-DiFRP1nv.js +0 -0
  746. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
  747. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css.gz +0 -0
  748. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/rolldown-runtime-hePW80VL.js +0 -0
  749. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/select-iQAUlBVk.js +0 -0
  750. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/select-iQAUlBVk.js.gz +0 -0
  751. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/utils-DOQQTBMN.js +0 -0
  752. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/utils-DOQQTBMN.js.gz +0 -0
  753. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
  754. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js.gz +0 -0
  755. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/yaml.worker-CeS-z5zL.js +0 -0
  756. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/assets/yaml.worker-CeS-z5zL.js.gz +0 -0
  757. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  758. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  759. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/boneio.svg +0 -0
  760. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  761. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  762. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  763. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  764. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  765. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  766. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/config.schema.json +0 -0
  767. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  768. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  769. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  770. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  771. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  772. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/ina226.schema.json +0 -0
  773. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  774. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  775. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/location.schema.json +0 -0
  776. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  777. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  778. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  779. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  780. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  781. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
  782. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  783. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  784. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/osdp.schema.json +0 -0
  785. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  786. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  787. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  788. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  789. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  790. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
  791. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
  792. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/schedule.schema.json +0 -0
  793. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  794. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  795. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  796. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/virtual_switch.schema.json +0 -0
  797. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
  798. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/frontend-dist/workbox-7e79c025.js +0 -0
  799. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/hvac_svg_templates.py +0 -0
  800. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/input_validation.py +0 -0
  801. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/middleware/__init__.py +0 -0
  802. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/middleware/auth.py +0 -0
  803. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/middleware/csrf.py +0 -0
  804. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/middleware/policy.py +0 -0
  805. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/middleware/proxy.py +0 -0
  806. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/modbus_card_templates.py +0 -0
  807. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/rate_limit.py +0 -0
  808. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/recovery/__init__.py +0 -0
  809. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/recovery/app.py +0 -0
  810. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/recovery/server.py +0 -0
  811. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/recovery/static/index.html +0 -0
  812. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/recovery/static/recovery.css +0 -0
  813. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/recovery/static/recovery.js +0 -0
  814. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/__init__.py +0 -0
  815. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/accounts.py +0 -0
  816. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/auth.py +0 -0
  817. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/can.py +0 -0
  818. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/config.py +0 -0
  819. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/config_actions.py +0 -0
  820. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/config_backups.py +0 -0
  821. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/config_core.py +0 -0
  822. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/config_discovery.py +0 -0
  823. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/config_files.py +0 -0
  824. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/covers.py +0 -0
  825. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/dashboard.py +0 -0
  826. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/dev_fake_device.py +0 -0
  827. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/diagnostics.py +0 -0
  828. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/irrigation.py +0 -0
  829. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/migrations.py +0 -0
  830. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/modbus.py +0 -0
  831. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/mqtt_reference.py +0 -0
  832. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/mqtt_tls.py +0 -0
  833. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/onboarding.py +0 -0
  834. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/os_update.py +0 -0
  835. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/outputs.py +0 -0
  836. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/remote_devices.py +0 -0
  837. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/schedule.py +0 -0
  838. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/security.py +0 -0
  839. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/sensors.py +0 -0
  840. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/sun.py +0 -0
  841. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/templates.py +0 -0
  842. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/timezone_sudoers.py +0 -0
  843. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/tools.py +0 -0
  844. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/routes/update.py +0 -0
  845. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/adc.schema.json +0 -0
  846. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/areas.schema.json +0 -0
  847. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  848. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/boneio.schema.json +0 -0
  849. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/can.schema.json +0 -0
  850. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/config.schema.json +0 -0
  851. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/cover.schema.json +0 -0
  852. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/dallas.schema.json +0 -0
  853. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/ds2482.schema.json +0 -0
  854. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/event.schema.json +0 -0
  855. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/ina219.schema.json +0 -0
  856. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/ina226.schema.json +0 -0
  857. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/irrigation.schema.json +0 -0
  858. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/lm75.schema.json +0 -0
  859. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/location.schema.json +0 -0
  860. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/logger.schema.json +0 -0
  861. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/lox_udp.schema.json +0 -0
  862. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/mcp23017.schema.json +0 -0
  863. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/mcp9808.schema.json +0 -0
  864. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/modbus.schema.json +0 -0
  865. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/modbus_devices.schema.json +0 -0
  866. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/mqtt.schema.json +0 -0
  867. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/oled.schema.json +0 -0
  868. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/osdp.schema.json +0 -0
  869. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/output.schema.json +0 -0
  870. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/output_group.schema.json +0 -0
  871. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/pca9685.schema.json +0 -0
  872. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/pcf8575.schema.json +0 -0
  873. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/remote_devices.schema.json +0 -0
  874. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/remote_inputs.schema.json +0 -0
  875. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/remote_outputs.schema.json +0 -0
  876. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/schedule.schema.json +0 -0
  877. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/sensor.schema.json +0 -0
  878. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/template.schema.json +0 -0
  879. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  880. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/virtual_switch.schema.json +0 -0
  881. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/schema/web.schema.json +0 -0
  882. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/security_events.py +0 -0
  883. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/services/__init__.py +0 -0
  884. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/services/logs.py +0 -0
  885. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/static_assets.py +0 -0
  886. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/sudo_rate_limiter.py +0 -0
  887. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/web_server.py +0 -0
  888. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio/webui/websocket_manager.py +0 -0
  889. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio.egg-info/dependency_links.txt +0 -0
  890. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio.egg-info/entry_points.txt +0 -0
  891. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio.egg-info/requires.txt +0 -0
  892. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/boneio.egg-info/top_level.txt +0 -0
  893. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/pyproject.toml +0 -0
  894. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/setup.cfg +0 -0
  895. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/setup.py +0 -0
  896. {boneio-1.6.0.dev29 → boneio-1.6.0.dev31}/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.dev29
3
+ Version: 1.6.0.dev31
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
@@ -0,0 +1,129 @@
1
+ """The secret the panel signs its login tokens with.
2
+
3
+ Kept in ``jwt_secret`` next to config.yaml so a token outlives a restart. Here
4
+ rather than in the web server so recovery mode signs with the same secret
5
+ without importing the web server, which pulls in the whole Manager: a token
6
+ issued in recovery keeps working once the controller is back, and the other
7
+ way round.
8
+
9
+ The secret belongs to one controller, and the file says which: its second
10
+ line is a hash of the machine-id it was drawn on. A file that names another
11
+ machine — or none — came from somewhere else, most likely an SD card image
12
+ built on a controller that had already run, and every device flashed from that
13
+ image would otherwise sign with the same key. Anyone holding the image could
14
+ then sign an administrator's token for all of them. Such a file is replaced
15
+ rather than trusted, which signs everybody out once.
16
+
17
+ Only the hash is stored: machine-id is meant to stay on the machine, and the
18
+ file needs no more than to recognise it.
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ import hashlib
24
+ import logging
25
+ import os
26
+ import secrets
27
+ from pathlib import Path
28
+
29
+ _LOGGER = logging.getLogger(__name__)
30
+
31
+ JWT_SECRET_FILENAME = "jwt_secret"
32
+
33
+ #: Where systemd keeps this installation's identity. Emptied when an image is
34
+ #: sealed and drawn afresh on the first boot, which is what makes it the thing
35
+ #: to bind to.
36
+ MACHINE_ID_PATH = Path("/etc/machine-id")
37
+
38
+ _BINDING_PREFIX = "machine:"
39
+
40
+
41
+ def _machine_binding(machine_id_path: Path) -> str | None:
42
+ """The binding line for this machine, or None when it has no identity yet.
43
+
44
+ None is not an error. On an image being built machine-id is empty on
45
+ purpose; a secret drawn then stays unbound and is replaced on the first
46
+ boot, once there is an identity to bind it to.
47
+
48
+ Args:
49
+ machine_id_path: The machine-id file.
50
+
51
+ Returns:
52
+ ``machine:<sha256 of machine-id>``, or None.
53
+ """
54
+ try:
55
+ machine_id = machine_id_path.read_text().strip()
56
+ except OSError:
57
+ return None
58
+ if not machine_id:
59
+ return None
60
+ digest = hashlib.sha256(f"boneio-jwt:{machine_id}".encode()).hexdigest()
61
+ return f"{_BINDING_PREFIX}{digest}"
62
+
63
+
64
+ def _write_secret(path: Path, secret: str, binding: str | None) -> None:
65
+ """Write the secret readable by its owner only, from the first byte.
66
+
67
+ Created 0600 rather than chmod-ed afterwards, and swapped in with a rename,
68
+ so there is never a moment when the key is on disk with looser permissions
69
+ or half written.
70
+ """
71
+ content = secret + (f"\n{binding}" if binding else "") + "\n"
72
+ tmp = path.with_name(f".{path.name}.tmp")
73
+ try:
74
+ tmp.unlink()
75
+ except FileNotFoundError:
76
+ pass
77
+ fd = os.open(tmp, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o600)
78
+ with os.fdopen(fd, "w") as f:
79
+ f.write(content)
80
+ f.flush()
81
+ os.fsync(f.fileno())
82
+ os.replace(tmp, path)
83
+
84
+
85
+ def load_or_create_jwt_secret(
86
+ config_dir: str | os.PathLike[str],
87
+ machine_id_path: Path = MACHINE_ID_PATH,
88
+ ) -> str:
89
+ """Read the token secret, creating it on first use.
90
+
91
+ A stored secret is used only if it was drawn on this machine. One with no
92
+ binding, or another machine's, is replaced — unless this machine has no
93
+ identity to compare with, in which case it is kept as it is: replacing it
94
+ then would sign everybody out on every start.
95
+
96
+ Never raises: a secret that cannot be persisted is replaced by one that
97
+ lives as long as the process, which logs everybody out on the next restart
98
+ but does not keep the panel from starting.
99
+
100
+ Args:
101
+ config_dir: The directory config.yaml is in.
102
+ machine_id_path: The machine-id file. A parameter for the tests.
103
+
104
+ Returns:
105
+ The secret.
106
+ """
107
+ jwt_secret_file = Path(config_dir) / JWT_SECRET_FILENAME
108
+ binding = _machine_binding(machine_id_path)
109
+
110
+ try:
111
+ if jwt_secret_file.exists():
112
+ lines = jwt_secret_file.read_text().split()
113
+ stored = lines[0] if lines else ""
114
+ stored_binding = lines[1] if len(lines) > 1 else None
115
+ if stored and (binding is None or stored_binding == binding):
116
+ return stored
117
+ if stored:
118
+ _LOGGER.warning(
119
+ "The token secret was not drawn on this controller; "
120
+ "replacing it. Everybody signed in has to sign in again."
121
+ )
122
+
123
+ jwt_secret = secrets.token_hex(32) # 256-bit random secret
124
+ _write_secret(jwt_secret_file, jwt_secret, binding)
125
+ except Exception as e:
126
+ # If we can't persist the secret, generate a temporary one
127
+ _LOGGER.error(f"Failed to handle JWT secret file: {e}")
128
+ jwt_secret = secrets.token_hex(32)
129
+ return jwt_secret
@@ -88,6 +88,7 @@ class CloudRegistration:
88
88
  self._task: asyncio.Task | None = None
89
89
  self._session: aiohttp.ClientSession | None = None
90
90
  self._last_error: str | None = None
91
+ self._switching = False
91
92
 
92
93
  @property
93
94
  def domain(self) -> str | None:
@@ -104,6 +105,18 @@ class CloudRegistration:
104
105
  """Get the last error message, if any."""
105
106
  return self._last_error
106
107
 
108
+ @property
109
+ def serving(self) -> bool:
110
+ """Whether Caddy is up on the cloud template with the certificate.
111
+
112
+ False while the template is being swapped and Caddy recreated: the
113
+ compose file already names the cloud script then, but the proxy — the
114
+ only way into a panel with ``web.expose: proxy`` — is down for the half
115
+ minute that takes. Anything sending somebody to the registered name
116
+ has to wait for this rather than for the template.
117
+ """
118
+ return self._domain is not None and not self._switching and self.is_cloud_config_active()
119
+
107
120
  @property
108
121
  def is_compose_writable(self) -> bool:
109
122
  """Check if docker-compose.yaml is writable without side effects."""
@@ -551,6 +564,14 @@ class CloudRegistration:
551
564
  Returns:
552
565
  True if the switch was successful.
553
566
  """
567
+ self._switching = True
568
+ try:
569
+ return await self._apply_cloud_config()
570
+ finally:
571
+ self._switching = False
572
+
573
+ async def _apply_cloud_config(self) -> bool:
574
+ """The body of :meth:`_switch_to_cloud_config`, without the flag."""
554
575
  # The init script still comes from the package; it is mounted read-only
555
576
  # into the container and is not what compose executes on the host.
556
577
  self._ensure_cloud_script()
@@ -571,7 +592,9 @@ class CloudRegistration:
571
592
  return False
572
593
 
573
594
  _LOGGER.info("Switched docker-compose.yaml to the cloud template")
574
- return await self._recreate_caddy()
595
+ # The service definition changed, so ``up`` recreates the container
596
+ # and it reads the certificate as it starts.
597
+ return await self._recreate_caddy(restart=False)
575
598
 
576
599
  async def _restore_local_config(self) -> bool:
577
600
  """Restore the plain compose template and restart Caddy.
@@ -595,14 +618,21 @@ class CloudRegistration:
595
618
  return False
596
619
 
597
620
  _LOGGER.info("Restored the local docker-compose.yaml template")
598
- return await self._recreate_caddy()
621
+ return await self._recreate_caddy(restart=False)
599
622
 
600
- async def _recreate_caddy(self) -> bool:
623
+ async def _recreate_caddy(self, restart: bool = True) -> bool:
601
624
  """Recreate and restart Caddy so it picks up new certs or compose config.
602
625
 
603
626
  Both steps go through the container helper, so neither passes anything
604
627
  from here to Docker.
605
628
 
629
+ Args:
630
+ restart: Restart after ``up``. Needed when the compose file did not
631
+ change — ``up`` then leaves the running container alone and it
632
+ keeps the certificate it read at start. Not after a template
633
+ swap: ``up`` has just recreated it, and a restart on top takes
634
+ the proxy down a second time.
635
+
606
636
  Returns:
607
637
  True if the recreate was successful.
608
638
  """
@@ -614,12 +644,16 @@ class CloudRegistration:
614
644
  )
615
645
  return False
616
646
 
647
+ if not restart:
648
+ _LOGGER.info("Caddy container recreated successfully")
649
+ return True
650
+
617
651
  # Restart as well: mounted TLS certificates are only re-read on start.
618
- restart = await loop.run_in_executor(None, containers.restart_caddy)
619
- if not restart.ok:
652
+ restarted = await loop.run_in_executor(None, containers.restart_caddy)
653
+ if not restarted.ok:
620
654
  _LOGGER.warning(
621
655
  "Caddy was recreated but the restart failed: %s",
622
- restart.stderr.strip() or "unknown error",
656
+ restarted.stderr.strip() or "unknown error",
623
657
  )
624
658
 
625
659
  _LOGGER.info("Caddy container recreated and restarted successfully")
@@ -0,0 +1,153 @@
1
+ """Make sure the running Node-RED asks for a password.
2
+
3
+ Node-RED reads ``settings.js`` once, when its container starts. The file can
4
+ say ``adminAuth`` while the editor still answers anyone: a migration installs
5
+ the file during an update, and an update restarts boneIO, not the controller,
6
+ so the container goes on with the settings it started with — an open editor,
7
+ and deploying a flow with an ``exec`` node is code execution in it.
8
+
9
+ So after boneIO starts it asks Node-RED, through the local proxy the way a
10
+ browser would, what its login looks like. An editor that wants no login while
11
+ the file on disk asks for one is restarted, once. Anything else is left alone:
12
+ Node-RED switched off, still starting, or behind a proxy that is being
13
+ recreated all look like "no answer", which is not a reason to restart.
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ import asyncio
19
+ import json
20
+ import logging
21
+ import re
22
+ import ssl
23
+ import urllib.error
24
+ import urllib.request
25
+ from collections.abc import Callable
26
+ from pathlib import Path
27
+
28
+ from boneio.core import containers
29
+
30
+ _LOGGER = logging.getLogger(__name__)
31
+
32
+ SETTINGS_FILE = containers.PROJECT_DIR / "node-red" / "settings.js"
33
+
34
+ #: Node-RED needs a while after a boot; so does the first start of Caddy.
35
+ FIRST_CHECK_AFTER = 60.0
36
+ RETRY_EVERY = 60.0
37
+ ATTEMPTS = 10
38
+
39
+ OPEN = "open"
40
+ PROTECTED = "protected"
41
+ UNKNOWN = "unknown"
42
+
43
+
44
+ def probe(port: int, timeout: float = 5.0) -> str:
45
+ """Ask the editor how it signs people in.
46
+
47
+ ``GET /nodered/auth/login`` answers ``{}`` when ``adminAuth`` is off and
48
+ names the login type when it is on. The proxy's certificate is the
49
+ device's own, unverifiable from here, and this request never leaves the
50
+ machine, so it is not checked.
51
+
52
+ Args:
53
+ port: The HTTPS port Caddy publishes.
54
+ timeout: Seconds to wait.
55
+
56
+ Returns:
57
+ OPEN, PROTECTED, or UNKNOWN when there was no usable answer.
58
+ """
59
+ context = ssl.create_default_context()
60
+ context.check_hostname = False
61
+ context.verify_mode = ssl.CERT_NONE
62
+ url = f"https://127.0.0.1:{port}/nodered/auth/login"
63
+ try:
64
+ with urllib.request.urlopen(url, timeout=timeout, context=context) as response: # noqa: S310
65
+ body = json.loads(response.read(4096) or b"null")
66
+ except (OSError, ValueError, urllib.error.URLError):
67
+ return UNKNOWN
68
+ if not isinstance(body, dict):
69
+ return UNKNOWN
70
+ return PROTECTED if body.get("type") else OPEN
71
+
72
+
73
+ #: Comments, so a commented-out ``adminAuth`` — or the shipped file's own
74
+ #: explanation of it — does not count as one that is set.
75
+ _JS_COMMENTS = re.compile(r"/\*.*?\*/|//[^\n]*", re.DOTALL)
76
+ _ADMIN_AUTH = re.compile(r"\badminAuth\s*:")
77
+
78
+
79
+ def settings_require_login(path: Path = SETTINGS_FILE) -> bool:
80
+ """Whether the settings on disk turn ``adminAuth`` on.
81
+
82
+ A property, outside comments. Not a JavaScript parser: it decides only
83
+ whether restarting Node-RED could help, and a file that fools it gets an
84
+ error in the log instead of a restart that changes nothing.
85
+
86
+ Args:
87
+ path: Node-RED's settings.js.
88
+
89
+ Returns:
90
+ True when the file configures it.
91
+ """
92
+ try:
93
+ code = _JS_COMMENTS.sub("", path.read_text())
94
+ except OSError:
95
+ return False
96
+ return bool(_ADMIN_AUTH.search(code))
97
+
98
+
99
+ async def ensure_admin_auth(
100
+ port: int,
101
+ *,
102
+ first_check_after: float = FIRST_CHECK_AFTER,
103
+ retry_every: float = RETRY_EVERY,
104
+ attempts: int = ATTEMPTS,
105
+ probe_fn: Callable[[int], str] = probe,
106
+ settings_path: Path = SETTINGS_FILE,
107
+ restart: Callable[[], containers.Result] = containers.restart_nodered,
108
+ ) -> str:
109
+ """Restart Node-RED once if it runs open while its settings say otherwise.
110
+
111
+ Args:
112
+ port: The HTTPS port Caddy publishes.
113
+ first_check_after: Seconds before the first look.
114
+ retry_every: Seconds between looks while there is no answer.
115
+ attempts: Looks before giving up on an editor that never answers.
116
+ probe_fn: The probe. A parameter for the tests.
117
+ settings_path: Node-RED's settings.js.
118
+ restart: Restarts the container. A parameter for the tests.
119
+
120
+ Returns:
121
+ What it found or did: ``protected``, ``restarted``, ``open`` (the file
122
+ itself asks for no login), ``restart_failed`` or ``unknown``.
123
+ """
124
+ loop = asyncio.get_running_loop()
125
+ await asyncio.sleep(first_check_after)
126
+ for attempt in range(attempts):
127
+ if attempt:
128
+ await asyncio.sleep(retry_every)
129
+ state = await loop.run_in_executor(None, probe_fn, port)
130
+ if state == UNKNOWN:
131
+ continue
132
+ if state == PROTECTED:
133
+ return PROTECTED
134
+ if not settings_require_login(settings_path):
135
+ _LOGGER.error(
136
+ "Node-RED's editor accepts anyone, and %s does not configure "
137
+ "adminAuth either. Apply the pending system migrations.",
138
+ settings_path,
139
+ )
140
+ return OPEN
141
+ _LOGGER.warning(
142
+ "Node-RED is running without the login its settings ask for; "
143
+ "restarting it so it reads them."
144
+ )
145
+ result = await loop.run_in_executor(None, restart)
146
+ if not result.ok:
147
+ _LOGGER.error(
148
+ "Could not restart Node-RED: %s",
149
+ (result.stderr or result.stdout).strip() or "unknown error",
150
+ )
151
+ return "restart_failed"
152
+ return "restarted"
153
+ return UNKNOWN
@@ -25,6 +25,7 @@ d28f2e9336b881b102c42f4278ec9ddf046c83dab4469dc5be7326768e074cb6 kernel/postins
25
25
  99a9d81f833347563e8349599a248a641216d01d182e8a2723344b017d87f9f4 motd/20-boneio
26
26
  e4dc9400201f74f04e71e2e9eaab3eed4dca39f0906dd717511578c138fcf97b overlays/BONEIO-BLACK-PINS-v0.2-v0.3.dtbo
27
27
  6289c9b3d6e7836fcd809b7a9dcd85f5a2acf85af09be279dd6e466b99a14209 sshd/10-boneio-hardening.conf
28
+ e8759a106b07c05a7f945f5cb9cc0e53c1d190a93d8e9184ae2b864967e4fa81 sshd/15-boneio-penalties.conf
28
29
  27adb0eb71d07b1f0e3fbd5098795325672a55f8d6bb6f5bb505300152dd5256 sshd/20-boneio-banner.conf
29
30
  00e4fb7961045f99f2559ebc76472c9d001f8e128182e48762f7a2b177896d11 sshd/boneio-banner
30
31
  6c994908ea9d8d0cb85501480b7a6236a31310012deebe6ee3d034da2dc2d4e9 sudoers/boneio
@@ -0,0 +1,19 @@
1
+ # boneIO SSH guessing penalty. Installed by migration 1.6.35; edit at your own
2
+ # risk, as a later migration may replace it.
3
+ #
4
+ # Password login stays on: people setting up from Windows with PuTTY rarely
5
+ # have a key, and a controller they cannot reach is worse than one they reach
6
+ # with a password. What it must not allow is guessing at network speed.
7
+ #
8
+ # sshd keeps the count itself (OpenSSH 9.8+), per source address, in memory —
9
+ # no log parser, no firewall rules, no extra daemon on a board with half a
10
+ # gigabyte of RAM. A connection that ends without a successful login costs its
11
+ # source five minutes in which sshd refuses it outright; repeated, the penalty
12
+ # adds up to an hour. Typing the password wrong and then right in the same
13
+ # connection costs nothing. Three guesses per connection (MaxAuthTries, in
14
+ # 10-boneio-hardening.conf) every five minutes is under nine hundred a day.
15
+ #
16
+ # The penalty is per address, so behind one NAT a stranger's guessing also
17
+ # keeps a colleague out for those minutes. The panel's own login is counted
18
+ # separately and is unaffected.
19
+ PerSourcePenalties authfail:300s max:3600s
@@ -0,0 +1 @@
1
+ [{"action":"install_file","dst":"/home/boneio/docker/nodered/node-red/settings.js","expected_sha256":"bff00753c72fb17609a6f7b3a58ef78b7b394da12d19fd65b875f2889695e2b4","group":"boneio","mode":420,"owner":"boneio","src":"docker/nodered/node-red/settings.js","template_vars":{}}]
@@ -0,0 +1,2 @@
1
+ /�Kb'щ��*���g��fJ< �҃wߏ
2
+ �G��)���J�ؼ���v*�� �4�>Z�z���
@@ -0,0 +1 @@
1
+ [{"action":"install_file","dst":"/etc/ssh/sshd_config.d/15-boneio-penalties.conf","expected_sha256":"e8759a106b07c05a7f945f5cb9cc0e53c1d190a93d8e9184ae2b864967e4fa81","group":"root","mode":420,"on_change":{"action":"systemctl_reload","unit":"ssh"},"owner":"root","src":"sshd/15-boneio-penalties.conf","template_vars":{},"validate":"sshd"}]
@@ -0,0 +1 @@
1
+ ?aQ�N���>ZN0�"�����/5��s�".YCi߿�ܠnYd�XP�L�Fh/6Dx��
@@ -1 +1 @@
1
- {"plans":{"1.3.0":"645ac6bdda8dc0a73c219aa3684a29df4bdd4032aad97a833b259de489b2ce32","1.3.1":"580381a4f6f40fc1bd4e903e591ad0d5c1db27daaccafc6f79dabf8c3b84259a","1.3.2":"7a69ffaf0c41438be25a656dcdc87783daac0eae79218d023648ef9d708e373f","1.4.0":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.4.3":"a8cfbabff09d21944a822c4a70f23a7ee14960c4054de151c9fbc7cdb29adff5","1.4.4":"19508f66d84f1e16bd24932aaa17d45417912ffd1c20d326b2f003b931ac2f8c","1.5.0":"52d9d118da099abda0e0153cd16892e201681f6e4d3c6e5790284d1ac469a407","1.5.1":"d283cb8c01024338fb614ae2199744d883379f59579423e4eb9234f5c59ebdd8","1.5.10":"889e2f12614e6e67d342571c1c3bab8940659bfbbf43fa30a6847e73decb85d1","1.5.11":"4906e4de2b3a9c2f0b0181817c9dc168cb910ba6941691d4e86b8387802b624a","1.5.12":"c0a0dc085bb33d9718e869ed5effc2c1581deffd7ed0d5adc119b94312181625","1.5.13":"bfe58c8756f9b5f5e55d5acbb6f7cfc469d201004d312c14e022eb7c52369b7d","1.5.14":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.15":"0687a735cb4aaf8f8f74ad6e228ca1b14e045cba8821991c7d19fc9beaeac766","1.5.16":"3544ac754f39d56ecf2b06300b7cca1b6f8723f99885cd11bd690f1a704d3728","1.5.17":"cf1e9e0ff6812cb7092a82dd588392d625decbe3680fe003dfc554f9045809d3","1.5.18":"1fd873effa66b632217d674745722f712a48b36bb79957fefae722757a74bc30","1.5.2":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.3":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.4":"e86174ba5aff6f257f8a3f4721c7942885cd203469a9d8ddc15dbe6c704e0f45","1.5.5":"f93ed2d4342e447eb9900a0150331113918f2a8b3baeeb795c07231d80f0337c","1.5.6":"e3d90e6ceb20d760f1e9fa63224c5a070a16b3ca6e7dc4cc2c594138e929cce8","1.5.7":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.8":"f075b84fb04f4043658a28402d963494dd58481f164c0b371cec94322fe6d131","1.5.9":"ac170fc924019fc2acd69a90a82ba5c2552dce7a2c01a05e5407443e7a9e5af7","1.6.0":"c8286514d1a4f1805e727e13d3c350bb390378c6f31ad6920030412d61ec9b3f","1.6.1":"aa1d3934091853fc21208993930c1bf92e17136428d1d0baaefabfa65d13e7fa","1.6.10":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.6.11":"d136203e08e3b052254403815d4ccedb555b0a297686fe97952d275eb1f322eb","1.6.12":"c328d4e36bd6277e01cef0140993e23970f4dff84425f3eba236cdd9a8954355","1.6.13":"f1f8b091d054a08665f047b5ad91f1f309f729a8aa30a2992d6ffdbd7f9fa7e4","1.6.14":"f1f8b091d054a08665f047b5ad91f1f309f729a8aa30a2992d6ffdbd7f9fa7e4","1.6.15":"8cfaeae24ceefe171d40241549c1f62527ce41821e5fd2904c0df1973596c0c7","1.6.16":"4b7e00dbe218a173ee83dd9cb32103f7129520352bdb4b11172d62e55df519c1","1.6.17":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.18":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.19":"4b7e00dbe218a173ee83dd9cb32103f7129520352bdb4b11172d62e55df519c1","1.6.2":"6ef96b5e00a04a929d16f0e4a136bfcc5b8132a466d6907a99b2c8516a8952d5","1.6.20":"28027c836eef19b21b95500760961e181f6078d22cccf8cca62b77bbbb11a0c5","1.6.21":"b0d0777e81edc8532d42bcd3b6d518fecd6078153dfe9f5f859469d2c13b369d","1.6.22":"6600f96197356bdc676e9cd7d2d40b18c9d8838323f8cae0892f056175396313","1.6.23":"4b7e00dbe218a173ee83dd9cb32103f7129520352bdb4b11172d62e55df519c1","1.6.24":"701460ed5e3ed236c8c7273ba0a98a0235786b4a04bd6c7aa6088fb835549aa6","1.6.25":"efa09d1677148bdfe4639273479c9a1fa527d4cf5d2ca9af6dd876883652ba22","1.6.26":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.27":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.28":"6e219d09a06a5de8162a521c9b3c3b54067e6bb4d1d15b3b47a8ec522fd76b5c","1.6.29":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.3":"5c10db827bcb92b9322d4aa5751076b825da87c6d18d6953847ba72317cca862","1.6.30":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.31":"fe5e93397dfe4e459cb7c19bfb09153707ebe4b6c92a60a279bf61b0fbc482fb","1.6.32":"c5dbc5a513107d179d55c2f7360e66299167107acd92bc1f5c3a6b19bc7b6e31","1.6.33":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.4":"baf2bb1c2ec7c1bfccfc514ef1cef67907e056e4f7153bb5932ecb835c9cff78","1.6.5":"65a083182affb9a2beef674bb17dee390bec0007441f1ee71b92e05117c65937","1.6.6":"535bb041b99d5ac1bc9028ea88bc2fbf3dbadc80ea8dea236cc219123c194114","1.6.7":"d59af413e270e6f34b1b9a1c8c4acef35328f00e26fad447cfe214545af78d8f","1.6.8":"5c03d447037a48211f0223bb9ecc8cdc1fa84b93bec8e61b1a3073188ac7ea4e","1.6.9":"978c88cc23a2ce07fe419d40a4f9aaf1a1388d01c6b43235e6f08fc09a03a96f"},"release":"1.6.0.dev29"}
1
+ {"plans":{"1.3.0":"645ac6bdda8dc0a73c219aa3684a29df4bdd4032aad97a833b259de489b2ce32","1.3.1":"580381a4f6f40fc1bd4e903e591ad0d5c1db27daaccafc6f79dabf8c3b84259a","1.3.2":"7a69ffaf0c41438be25a656dcdc87783daac0eae79218d023648ef9d708e373f","1.4.0":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.4.3":"a8cfbabff09d21944a822c4a70f23a7ee14960c4054de151c9fbc7cdb29adff5","1.4.4":"19508f66d84f1e16bd24932aaa17d45417912ffd1c20d326b2f003b931ac2f8c","1.5.0":"52d9d118da099abda0e0153cd16892e201681f6e4d3c6e5790284d1ac469a407","1.5.1":"d283cb8c01024338fb614ae2199744d883379f59579423e4eb9234f5c59ebdd8","1.5.10":"889e2f12614e6e67d342571c1c3bab8940659bfbbf43fa30a6847e73decb85d1","1.5.11":"4906e4de2b3a9c2f0b0181817c9dc168cb910ba6941691d4e86b8387802b624a","1.5.12":"c0a0dc085bb33d9718e869ed5effc2c1581deffd7ed0d5adc119b94312181625","1.5.13":"bfe58c8756f9b5f5e55d5acbb6f7cfc469d201004d312c14e022eb7c52369b7d","1.5.14":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.15":"0687a735cb4aaf8f8f74ad6e228ca1b14e045cba8821991c7d19fc9beaeac766","1.5.16":"3544ac754f39d56ecf2b06300b7cca1b6f8723f99885cd11bd690f1a704d3728","1.5.17":"cf1e9e0ff6812cb7092a82dd588392d625decbe3680fe003dfc554f9045809d3","1.5.18":"1fd873effa66b632217d674745722f712a48b36bb79957fefae722757a74bc30","1.5.2":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.3":"39fccb7582e13e7e3436861fde7b83ddb8057788cbde792f2f0cf7003f068850","1.5.4":"e86174ba5aff6f257f8a3f4721c7942885cd203469a9d8ddc15dbe6c704e0f45","1.5.5":"f93ed2d4342e447eb9900a0150331113918f2a8b3baeeb795c07231d80f0337c","1.5.6":"e3d90e6ceb20d760f1e9fa63224c5a070a16b3ca6e7dc4cc2c594138e929cce8","1.5.7":"a0464f11e05128cba8881e6295e591fce1ed1e8d43ab0e16710effb8e543d810","1.5.8":"f075b84fb04f4043658a28402d963494dd58481f164c0b371cec94322fe6d131","1.5.9":"ac170fc924019fc2acd69a90a82ba5c2552dce7a2c01a05e5407443e7a9e5af7","1.6.0":"c8286514d1a4f1805e727e13d3c350bb390378c6f31ad6920030412d61ec9b3f","1.6.1":"aa1d3934091853fc21208993930c1bf92e17136428d1d0baaefabfa65d13e7fa","1.6.10":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.6.11":"d136203e08e3b052254403815d4ccedb555b0a297686fe97952d275eb1f322eb","1.6.12":"c328d4e36bd6277e01cef0140993e23970f4dff84425f3eba236cdd9a8954355","1.6.13":"f1f8b091d054a08665f047b5ad91f1f309f729a8aa30a2992d6ffdbd7f9fa7e4","1.6.14":"f1f8b091d054a08665f047b5ad91f1f309f729a8aa30a2992d6ffdbd7f9fa7e4","1.6.15":"8cfaeae24ceefe171d40241549c1f62527ce41821e5fd2904c0df1973596c0c7","1.6.16":"4b7e00dbe218a173ee83dd9cb32103f7129520352bdb4b11172d62e55df519c1","1.6.17":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.18":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.19":"4b7e00dbe218a173ee83dd9cb32103f7129520352bdb4b11172d62e55df519c1","1.6.2":"6ef96b5e00a04a929d16f0e4a136bfcc5b8132a466d6907a99b2c8516a8952d5","1.6.20":"28027c836eef19b21b95500760961e181f6078d22cccf8cca62b77bbbb11a0c5","1.6.21":"b0d0777e81edc8532d42bcd3b6d518fecd6078153dfe9f5f859469d2c13b369d","1.6.22":"6600f96197356bdc676e9cd7d2d40b18c9d8838323f8cae0892f056175396313","1.6.23":"4b7e00dbe218a173ee83dd9cb32103f7129520352bdb4b11172d62e55df519c1","1.6.24":"701460ed5e3ed236c8c7273ba0a98a0235786b4a04bd6c7aa6088fb835549aa6","1.6.25":"efa09d1677148bdfe4639273479c9a1fa527d4cf5d2ca9af6dd876883652ba22","1.6.26":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.27":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.28":"6e219d09a06a5de8162a521c9b3c3b54067e6bb4d1d15b3b47a8ec522fd76b5c","1.6.29":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.3":"5c10db827bcb92b9322d4aa5751076b825da87c6d18d6953847ba72317cca862","1.6.30":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.31":"fe5e93397dfe4e459cb7c19bfb09153707ebe4b6c92a60a279bf61b0fbc482fb","1.6.32":"c5dbc5a513107d179d55c2f7360e66299167107acd92bc1f5c3a6b19bc7b6e31","1.6.33":"7f87b537e2d2618d0fed97683c9db9b13143025f63aae7fa6bf6ee2534d9cf68","1.6.34":"c8286514d1a4f1805e727e13d3c350bb390378c6f31ad6920030412d61ec9b3f","1.6.35":"f111f7717fd1fb7f36ff50c59e5aae0f37440ae8e60ae649e0a781d107f13216","1.6.4":"baf2bb1c2ec7c1bfccfc514ef1cef67907e056e4f7153bb5932ecb835c9cff78","1.6.5":"65a083182affb9a2beef674bb17dee390bec0007441f1ee71b92e05117c65937","1.6.6":"535bb041b99d5ac1bc9028ea88bc2fbf3dbadc80ea8dea236cc219123c194114","1.6.7":"d59af413e270e6f34b1b9a1c8c4acef35328f00e26fad447cfe214545af78d8f","1.6.8":"5c03d447037a48211f0223bb9ecc8cdc1fa84b93bec8e61b1a3073188ac7ea4e","1.6.9":"978c88cc23a2ce07fe419d40a4f9aaf1a1388d01c6b43235e6f08fc09a03a96f"},"release":"1.6.0.dev31"}
@@ -0,0 +1 @@
1
+ ��G �����z�`���k� ]= }�m��9�-X��O��r��=�-X��;�`�ڲQ /�vE~
@@ -0,0 +1,51 @@
1
+ """BoneIO 1.6.34 — install the Node-RED settings that require a login, again.
2
+
3
+ 1.6.0 installed ``settings.js`` with ``adminAuth`` delegated to boneIO, and
4
+ recorded itself as applied. On the SD card images that record did not mean the
5
+ file was still there: the images are built on a rootfs that had already been
6
+ through setup once, so 1.6.0 counted as done, and the image script's own step
7
+ then wrote its four-line ``settings.js`` over the real one — no ``adminAuth``.
8
+ Every controller flashed from such an image (seen on dev29, blk239bb2, audit
9
+ finding A-02) ran Node-RED's editor open to anyone who could reach the device,
10
+ which is F-01 back: a flow with an ``exec`` node is code execution.
11
+
12
+ The same file again, under a new version so it is applied once more on every
13
+ device. Where the file is already the right one, the helper finds the hash
14
+ matching and writes nothing.
15
+
16
+ The running container keeps the settings it started with. boneIO restarts it
17
+ on its own after starting, when the editor answers without a login while this
18
+ file asks for one (see :mod:`boneio.core.nodered_guard`), so an update is
19
+ enough and no reboot is needed.
20
+
21
+ To retry on a device, delete ``/var/lib/boneio/migrations.d/1.6.34.applied``
22
+ and restart boneIO.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ from boneio.migrations.actions import InstallFile, MigrationAction
28
+
29
+ VERSION = "1.6.34"
30
+ DESCRIPTION = "Install the Node-RED settings that require a login, again (F-01, A-02)"
31
+ REQUIRES_ROOT = True
32
+
33
+ _BONEIO_HOME = "/home/boneio"
34
+ _BONEIO_USER = "boneio"
35
+
36
+
37
+ def plan() -> list[MigrationAction]:
38
+ """Return the ordered list of migration actions for version 1.6.34.
39
+
40
+ Returns:
41
+ List of :class:`MigrationAction` to apply in order.
42
+ """
43
+ return [
44
+ InstallFile(
45
+ src="docker/nodered/node-red/settings.js",
46
+ dst=f"{_BONEIO_HOME}/docker/nodered/node-red/settings.js",
47
+ mode=0o644,
48
+ owner=_BONEIO_USER,
49
+ group=_BONEIO_USER,
50
+ ),
51
+ ]
@@ -0,0 +1,52 @@
1
+ """BoneIO 1.6.35 — make guessing an SSH password slow.
2
+
3
+ 1.6.4 cut attempts per connection to three and shortened the window, but
4
+ nothing stopped a client opening the next connection straight away, so a
5
+ password could still be guessed at network speed. The audit of blk239bb2 on
6
+ dev30 (A-03, the SSH half of F-06) found exactly that: password login on,
7
+ ``boneio`` a sudoer with that same password, and no throttling.
8
+
9
+ Password login stays on — owners setting up from Windows with PuTTY rarely
10
+ have a key. Instead a drop-in sets ``PerSourcePenalties``: sshd, not a log
11
+ parser, keeps the count per source address and refuses a source for five
12
+ minutes after a connection that ends without logging in, accumulating up to an
13
+ hour. No new package, no daemon, nothing in the firewall; fail2ban was weighed
14
+ and set aside for its memory on a 512 MB board.
15
+
16
+ A file of its own rather than a line in ``10-boneio-hardening.conf``, so the
17
+ 1.6.4 plan and its signature stay as they are. Validated with ``sshd -t``
18
+ before it goes in, like the other drop-ins: OpenSSH learned the keyword in 9.8,
19
+ and every 1.6 device runs Debian 13 (OpenSSH 10). On an older sshd the
20
+ validation would fail this migration rather than leave a config that sshd
21
+ cannot start with. Reloaded, not restarted — open sessions stay up.
22
+
23
+ To retry on a device, delete ``/var/lib/boneio/migrations.d/1.6.35.applied``
24
+ and restart boneIO.
25
+ """
26
+
27
+ from __future__ import annotations
28
+
29
+ from boneio.migrations.actions import InstallFile, MigrationAction, SystemctlReload
30
+
31
+ VERSION = "1.6.35"
32
+ DESCRIPTION = "Make guessing an SSH password slow: per-source penalties (F-06, A-03)"
33
+ REQUIRES_ROOT = True
34
+
35
+
36
+ def plan() -> list[MigrationAction]:
37
+ """Return the ordered list of migration actions for version 1.6.35.
38
+
39
+ Returns:
40
+ List of :class:`MigrationAction` to apply in order.
41
+ """
42
+ return [
43
+ InstallFile(
44
+ src="sshd/15-boneio-penalties.conf",
45
+ dst="/etc/ssh/sshd_config.d/15-boneio-penalties.conf",
46
+ mode=0o644,
47
+ owner="root",
48
+ group="root",
49
+ validate="sshd",
50
+ on_change=SystemctlReload(unit="ssh"),
51
+ ),
52
+ ]
@@ -616,6 +616,16 @@ async def async_run(
616
616
 
617
617
  stable_task = asyncio.create_task(_forgive_earlier_crashes())
618
618
 
619
+ # An update restarts boneIO, not the controller, so a Node-RED settings
620
+ # file installed by it is not what the running editor read. Not in the
621
+ # main gather either: it finishes after a look or two.
622
+ from boneio.const import DEFAULT_PROXY_PORT
623
+ from boneio.core.nodered_guard import ensure_admin_auth
624
+
625
+ nodered_task = asyncio.create_task(
626
+ ensure_admin_auth(_config_helper.proxy_port or DEFAULT_PROXY_PORT)
627
+ )
628
+
619
629
  try:
620
630
  # Convert tasks set to list for main gather
621
631
  task_list = list(tasks)
@@ -668,6 +678,7 @@ async def async_run(
668
678
  finally:
669
679
  _LOGGER.info("Cleaning up resources...")
670
680
  stable_task.cancel()
681
+ nodered_task.cancel()
671
682
 
672
683
  # Cancel pending deferred state saves and write final state synchronously.
673
684
  # This MUST happen before event_bus.stop() which may trigger sigterm
@@ -0,0 +1,2 @@
1
+ # flake8: noqa
2
+ __version__ = "1.6.0.dev31"
@@ -14,7 +14,7 @@ from typing import TYPE_CHECKING
14
14
  from fastapi import Depends, FastAPI, WebSocket, WebSocketDisconnect
15
15
  from fastapi.middleware.cors import CORSMiddleware
16
16
  from fastapi.middleware.gzip import GZipMiddleware
17
- from fastapi.responses import FileResponse, JSONResponse
17
+ from fastapi.responses import FileResponse, JSONResponse, Response
18
18
  from fastapi.staticfiles import StaticFiles
19
19
  from starlette.types import Receive, Scope, Send
20
20
  from starlette.websockets import WebSocketState
@@ -1096,6 +1096,12 @@ if FRONTEND_DIR.exists() and (FRONTEND_DIR / "index.html").exists():
1096
1096
  headers={"Cache-Control": "no-store, no-cache, must-revalidate"},
1097
1097
  )
1098
1098
 
1099
+ #: FastAPI's own schema and docs routes. In dev mode they are registered
1100
+ #: ahead of this catch-all and answer first; otherwise nothing should.
1101
+ _API_DOC_PATHS = frozenset(
1102
+ {"docs", "docs/oauth2-redirect", "redoc", "openapi.json", "openapi.yaml"}
1103
+ )
1104
+
1099
1105
  @app.get("/{filename:path}")
1100
1106
  async def serve_react_app(filename: str):
1101
1107
  """Serve static files from frontend-dist, fallback to index.html for SPA routing.
@@ -1104,6 +1110,13 @@ if FRONTEND_DIR.exists() and (FRONTEND_DIR / "index.html").exists():
1104
1110
  them. index.html (SPA fallback) is never cached to prevent stale
1105
1111
  versions being served through Cloudflare Tunnel or other caching proxies.
1106
1112
  """
1113
+ # Matched loosely — a trailing slash or capitals reach the same
1114
+ # fallback, and a scanner tries both.
1115
+ if filename.strip("/").lower() in _API_DOC_PATHS:
1116
+ # The schema is off outside dev mode, and these names answering
1117
+ # with the panel's index.html read to a scanner as an exposed API
1118
+ # schema. Saying "not here" is the truth.
1119
+ return Response(status_code=404)
1107
1120
  file_path = (FRONTEND_DIR / filename).resolve()
1108
1121
  if filename and file_path.is_relative_to(FRONTEND_DIR.resolve()) and file_path.exists() and file_path.is_file():
1109
1122
  return FileResponse(str(file_path))