boneio 1.6.0.dev6__tar.gz → 1.6.0.dev7__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 (706) hide show
  1. {boneio-1.6.0.dev6/boneio.egg-info → boneio-1.6.0.dev7}/PKG-INFO +1 -1
  2. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/const.py +8 -0
  3. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/registration.py +1 -2
  4. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/config_helper.py +49 -3
  5. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/security/posture.py +75 -16
  6. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/integration/homeassistant.py +3 -5
  7. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/manifest.json +1 -1
  8. boneio-1.6.0.dev7/boneio/migrations/plans/manifest.sig +0 -0
  9. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/runner.py +1 -0
  10. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/schema.yaml +7 -1
  11. boneio-1.6.0.dev7/boneio/version.py +2 -0
  12. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/bind.py +50 -13
  13. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/AccountsView-CtAKf-Jh.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/AccountsView-BUm_P1Uw.js +1 -1
  14. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/ActionFields-00jnigwc.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/ActionFields-B--1CfM2.js +1 -1
  15. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/BackupSection-wLp_QeJD.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/BackupSection-BSZn5Skg.js +1 -1
  16. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/BindingMatrix-DqbowdSa.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/BindingMatrix-CpzvZ7i_.js +1 -1
  17. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/DeviceControlSection-Ww98-XKE.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/DeviceControlSection-CnyJz996.js +1 -1
  18. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/DiagnosticsView-B0ABEIej.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/DiagnosticsView-jzQIu7C-.js +1 -1
  19. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/EditItemDialog-DSaSr1V2.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/EditItemDialog-D_EXUFV4.js +2 -2
  20. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/EntityCard-MBcnQMqn.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/EntityCard-CzrB7v4W.js +1 -1
  21. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/FactoryResetSection-HrIaeWkh.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/FactoryResetSection-DU5Xczix.js +1 -1
  22. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/FormInputToggle-VnOgafWV.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/FormInputToggle--GD_ZMhY.js +1 -1
  23. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/HaDashboardWizard-Dusa_1tc.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/HaDashboardWizard-Cjn4NcOy.js +1 -1
  24. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/HostnameSection-C2JY6tSi.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/HostnameSection-CcgeB7c9.js +1 -1
  25. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/InputsView-P0Et4B_z.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/InputsView-D7ALwZZ2.js +1 -1
  26. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/LocationSection-DJC9Nn1t.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/LocationSection-Dbk0Rss6.js +2 -2
  27. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/LoggerForm-C7eIfgE5.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/LoggerForm-br7_NVmx.js +1 -1
  28. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/MigrationsSection-CyRlGDFu.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/MigrationsSection-B0Do-lCH.js +1 -1
  29. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/ModbusView-CpQSNUsc.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/ModbusView-B5YLw-nZ.js +1 -1
  30. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/MqttPasswordsSection-Dkxvg2F4.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/MqttPasswordsSection-B628jQwJ.js +1 -1
  31. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/NodeRedManagement-BphMNx2Y.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/NodeRedManagement-B6OKfz_P.js +1 -1
  32. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/OutputsView-D2lNpDf4.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/OutputsView-BcttMcsW.js +1 -1
  33. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/ScheduleSection-DUAIOUfk.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/ScheduleSection-CxiZBMjJ.js +1 -1
  34. boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/SecurityView-Bvk8xFtu.js +1 -0
  35. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/SensorView-CRFFyoc0.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/SensorView-C--UO0_x.js +1 -1
  36. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/SystemState-DW1QWwMH.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/SystemState-DC-bxOGD.js +1 -1
  37. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/TemplatesView-DQaBD8OP.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/TemplatesView-BgXYpvO7.js +1 -1
  38. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/TilePicker-BqXH6IvA.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/TilePicker-BJiurvDz.js +1 -1
  39. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/TimezoneSection-ceIcx6zy.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/TimezoneSection-CQ8UzB3r.js +1 -1
  40. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/UISettings-D9dRIfil.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/UISettings-CKiOXI3V.js +3 -3
  41. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/index-B6IpVqZQ.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/index-DTsVYLUw.js +6 -6
  42. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/monaco-DSHG8wk7.js → boneio-1.6.0.dev7/boneio/webui/frontend-dist/assets/monaco-DdPCJ1g6.js +1 -1
  43. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/index.html +1 -1
  44. {boneio-1.6.0.dev6/boneio/webui → boneio-1.6.0.dev7/boneio/webui/frontend-dist}/schema/config.schema.json +1 -1
  45. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/web.schema.json +1 -1
  46. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/sw.js +1 -1
  47. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config_core.py +6 -3
  48. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/remote_devices.py +14 -12
  49. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/security.py +59 -21
  50. {boneio-1.6.0.dev6/boneio/webui/frontend-dist → boneio-1.6.0.dev7/boneio/webui}/schema/config.schema.json +1 -1
  51. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/web.schema.json +1 -1
  52. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7/boneio.egg-info}/PKG-INFO +1 -1
  53. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio.egg-info/SOURCES.txt +30 -30
  54. boneio-1.6.0.dev6/boneio/migrations/plans/manifest.sig +0 -1
  55. boneio-1.6.0.dev6/boneio/version.py +0 -2
  56. boneio-1.6.0.dev6/boneio/webui/frontend-dist/assets/SecurityView-qRhXLFuR.js +0 -1
  57. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/LICENSE +0 -0
  58. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/MANIFEST.in +0 -0
  59. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/README.md +0 -0
  60. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/__init__.py +0 -0
  61. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/input.yaml +0 -0
  62. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_24_16.yaml +0 -0
  63. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_32_10.yaml +0 -0
  64. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_32_5.yaml +0 -0
  65. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_cover.yaml +0 -0
  66. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  67. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/input.yaml +0 -0
  68. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_24_16.yaml +0 -0
  69. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_32_10.yaml +0 -0
  70. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_32_5.yaml +0 -0
  71. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_cover.yaml +0 -0
  72. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  73. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/input.yaml +0 -0
  74. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_24_16.yaml +0 -0
  75. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_32_10.yaml +0 -0
  76. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_32_5.yaml +0 -0
  77. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_cover.yaml +0 -0
  78. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  79. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.5/input.yaml +0 -0
  80. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_24_16.yaml +0 -0
  81. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_32_10.yaml +0 -0
  82. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_cover.yaml +0 -0
  83. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  84. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.6/input.yaml +0 -0
  85. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_24_16.yaml +0 -0
  86. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_32_10.yaml +0 -0
  87. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_cover.yaml +0 -0
  88. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  89. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/input.yaml +0 -0
  90. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_24_16.yaml +0 -0
  91. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_32_10.yaml +0 -0
  92. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_48_4.yaml +0 -0
  93. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_cover.yaml +0 -0
  94. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  95. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/input.yaml +0 -0
  96. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_24_16.yaml +0 -0
  97. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_32_10.yaml +0 -0
  98. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_48_4.yaml +0 -0
  99. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_cover.yaml +0 -0
  100. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  101. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/input.yaml +0 -0
  102. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_24_16.yaml +0 -0
  103. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_32_10.yaml +0 -0
  104. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_48_4.yaml +0 -0
  105. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_cover.yaml +0 -0
  106. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
  107. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/bonecli.py +0 -0
  108. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/__init__.py +0 -0
  109. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/cover/__init__.py +0 -0
  110. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/cover/cover.py +0 -0
  111. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/cover/remote.py +0 -0
  112. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/cover/time_based.py +0 -0
  113. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/cover/venetian.py +0 -0
  114. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/group/__init__.py +0 -0
  115. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/group/output_group.py +0 -0
  116. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/__init__.py +0 -0
  117. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/binary_sensor.py +0 -0
  118. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/detectors.py +0 -0
  119. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/event.py +0 -0
  120. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/remote/__init__.py +0 -0
  121. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/remote/base.py +0 -0
  122. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/input/remote/esphome.py +0 -0
  123. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/irrigation/__init__.py +0 -0
  124. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/irrigation/controller.py +0 -0
  125. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/irrigation/water_source.py +0 -0
  126. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/__init__.py +0 -0
  127. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/basic.py +0 -0
  128. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/buzzer.py +0 -0
  129. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/mcp.py +0 -0
  130. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/pca.py +0 -0
  131. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/pcf.py +0 -0
  132. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/output/remote.py +0 -0
  133. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/sensor/__init__.py +0 -0
  134. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/sensor/virtual_energy.py +0 -0
  135. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/template/__init__.py +0 -0
  136. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/template/alarm_panel.py +0 -0
  137. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/template/gate_cover.py +0 -0
  138. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/components/template/thermostat.py +0 -0
  139. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/__init__.py +0 -0
  140. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/__init__.py +0 -0
  141. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/cli.py +0 -0
  142. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/hashing.py +0 -0
  143. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/migration.py +0 -0
  144. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/models.py +0 -0
  145. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/auth/store.py +0 -0
  146. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/__init__.py +0 -0
  147. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/data/__init__.py +0 -0
  148. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
  149. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  150. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  151. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/cloud/secrets.py +0 -0
  152. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/__init__.py +0 -0
  153. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/input_bindings.py +0 -0
  154. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/migrations/__init__.py +0 -0
  155. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  156. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v2_transition.py +0 -0
  157. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v4_wled_cache.py +0 -0
  158. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/migrations/v5_ina_screen.py +0 -0
  159. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/package-lock.json +0 -0
  160. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/package.json +0 -0
  161. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/provenance.py +0 -0
  162. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/schema_converter.py +0 -0
  163. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/secret_masking.py +0 -0
  164. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/yaml_compat.py +0 -0
  165. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/yaml_patch.py +0 -0
  166. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/config/yaml_util.py +0 -0
  167. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/containers.py +0 -0
  168. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/diagnostics/__init__.py +0 -0
  169. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/diagnostics/collect.py +0 -0
  170. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/discovery.py +0 -0
  171. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/events/__init__.py +0 -0
  172. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/events/bus.py +0 -0
  173. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/__init__.py +0 -0
  174. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/action_conditions.py +0 -0
  175. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/canopen.py +0 -0
  176. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/covers.py +0 -0
  177. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/display.py +0 -0
  178. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/inputs.py +0 -0
  179. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/irrigation.py +0 -0
  180. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/manager.py +0 -0
  181. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/modbus.py +0 -0
  182. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/outputs.py +0 -0
  183. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/remote.py +0 -0
  184. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/remote_input_registrar.py +0 -0
  185. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/scheduler.py +0 -0
  186. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/security_alert.py +0 -0
  187. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/sensors.py +0 -0
  188. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/sun.py +0 -0
  189. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/templates/__init__.py +0 -0
  190. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/templates/alarm.py +0 -0
  191. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/templates/gate_cover.py +0 -0
  192. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/templates/thermostat.py +0 -0
  193. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/templates.py +0 -0
  194. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/manager/update.py +0 -0
  195. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/__init__.py +0 -0
  196. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/basic.py +0 -0
  197. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/basic_mqtt.py +0 -0
  198. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/composite.py +0 -0
  199. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/local.py +0 -0
  200. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/lox.py +0 -0
  201. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/mqtt.py +0 -0
  202. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/messaging/queue.py +0 -0
  203. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/net/__init__.py +0 -0
  204. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/net/discovery_guard.py +0 -0
  205. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/__init__.py +0 -0
  206. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/base.py +0 -0
  207. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/can.py +0 -0
  208. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/esphome.py +0 -0
  209. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/mqtt.py +0 -0
  210. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/wled.py +0 -0
  211. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/remote/wled_cache.py +0 -0
  212. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/security/__init__.py +0 -0
  213. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/security/certificate.py +0 -0
  214. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/security/framing.py +0 -0
  215. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/sensor/__init__.py +0 -0
  216. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/sensor/base.py +0 -0
  217. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/sensor/sun.py +0 -0
  218. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/sensor/system.py +0 -0
  219. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/state/__init__.py +0 -0
  220. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/state/manager.py +0 -0
  221. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/system/__init__.py +0 -0
  222. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/system/host_data.py +0 -0
  223. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/system/monitor.py +0 -0
  224. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/system_ops.py +0 -0
  225. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/__init__.py +0 -0
  226. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/async_updater.py +0 -0
  227. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/conditions.py +0 -0
  228. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/filter.py +0 -0
  229. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/font_util.py +0 -0
  230. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/logger.py +0 -0
  231. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/overlay.py +0 -0
  232. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/sun.py +0 -0
  233. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/timeperiod.py +0 -0
  234. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/core/utils/util.py +0 -0
  235. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/adc.yaml +0 -0
  236. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  237. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/config.yaml +0 -0
  238. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/event.yaml +0 -0
  239. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/mqtt.yaml +0 -0
  240. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  241. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/adc.yaml +0 -0
  242. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  243. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/config.yaml +0 -0
  244. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/event.yaml +0 -0
  245. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/mqtt.yaml +0 -0
  246. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  247. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/adc.yaml +0 -0
  248. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  249. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/config.yaml +0 -0
  250. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/event.yaml +0 -0
  251. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/mqtt.yaml +0 -0
  252. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  253. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/__init__.py +0 -0
  254. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/can_master.yaml +0 -0
  255. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/can_slave.yaml +0 -0
  256. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/adc.yaml +0 -0
  257. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  258. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/config.yaml +0 -0
  259. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/cover.yaml +0 -0
  260. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/event.yaml +0 -0
  261. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/mqtt.yaml +0 -0
  262. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover/outputCover.yaml +0 -0
  263. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/adc.yaml +0 -0
  264. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  265. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/config.yaml +0 -0
  266. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/cover.yaml +0 -0
  267. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/event.yaml +0 -0
  268. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  269. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  270. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/adc.yaml +0 -0
  271. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  272. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  273. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  274. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  275. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/event_all.yaml +0 -0
  276. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  277. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  278. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  279. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  280. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  281. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  282. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/exceptions.py +0 -0
  283. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/__init__.py +0 -0
  284. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/analog/__init__.py +0 -0
  285. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/analog/adc.py +0 -0
  286. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/__init__.py +0 -0
  287. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/bridge.py +0 -0
  288. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/client.py +0 -0
  289. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/interface.py +0 -0
  290. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/node.py +0 -0
  291. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/node_id.py +0 -0
  292. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/can/test_od.py +0 -0
  293. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/display/__init__.py +0 -0
  294. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/display/early_oled.py +0 -0
  295. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  296. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/display/oled.py +0 -0
  297. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/__init__.py +0 -0
  298. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  299. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  300. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  301. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  302. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/input/__init__.py +0 -0
  303. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/input/base.py +0 -0
  304. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/gpio/input/manager.py +0 -0
  305. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/__init__.py +0 -0
  306. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/bus.py +0 -0
  307. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina219.py +0 -0
  308. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina219_driver.py +0 -0
  309. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina226.py +0 -0
  310. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/ina226_driver.py +0 -0
  311. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/mcp9808.py +0 -0
  312. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/i2c/pct2075.py +0 -0
  313. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/onewire/__init__.py +0 -0
  314. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/onewire/dallas.py +0 -0
  315. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/sensor/__init__.py +0 -0
  316. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  317. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/base.py +0 -0
  318. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  319. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  320. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/integration/__init__.py +0 -0
  321. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/integration/interlock.py +0 -0
  322. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/integration/lox_template.py +0 -0
  323. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/__init__.py +0 -0
  324. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/actions.py +0 -0
  325. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/MANIFEST.sha256 +0 -0
  326. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/daemon.json +0 -0
  327. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
  328. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
  329. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/docker-compose-cloud.yaml +0 -0
  330. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  331. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
  332. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-containers +0 -0
  333. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-helpers-heal +0 -0
  334. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-migrate-v2 +0 -0
  335. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/helpers/boneio-system +0 -0
  336. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/issue.d/10-boneio.issue +0 -0
  337. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/journald/journald.conf +0 -0
  338. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/kernel/postinst-boneio-overlay +0 -0
  339. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/migrations-recovery.pem +0 -0
  340. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/migrations.pem +0 -0
  341. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/modules-load.d/onewire.conf +0 -0
  342. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  343. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/sshd/10-boneio-hardening.conf +0 -0
  344. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/sudoers/boneio +0 -0
  345. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/sudoers/boneio-helpers +0 -0
  346. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/sudoers/boneio-timedatectl +0 -0
  347. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio-helpers-heal.service +0 -0
  348. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
  349. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
  350. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/boneio.service +0 -0
  351. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/avahi-daemon-defer.conf +0 -0
  352. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/bb-usb-gadgets-defer.conf +0 -0
  353. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/mosquitto-priority.conf +0 -0
  354. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/timer-no-persistent.conf +0 -0
  355. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/dropins/user-manager-defer.conf +0 -0
  356. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/linger-marker +0 -0
  357. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  358. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
  359. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  360. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  361. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  362. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  363. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
  364. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/bootstrap/boneio-migrate +0 -0
  365. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  366. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  367. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.0.json +0 -0
  368. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.0.sig +0 -0
  369. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.1.json +0 -0
  370. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.1.sig +0 -0
  371. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.2.json +0 -0
  372. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.3.2.sig +0 -0
  373. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.0.json +0 -0
  374. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.0.sig +0 -0
  375. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.3.json +0 -0
  376. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.3.sig +0 -0
  377. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.4.json +0 -0
  378. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.4.4.sig +0 -0
  379. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.0.json +0 -0
  380. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.0.sig +0 -0
  381. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.1.json +0 -0
  382. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.1.sig +0 -0
  383. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.10.json +0 -0
  384. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.10.sig +0 -0
  385. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.11.json +0 -0
  386. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.11.sig +0 -0
  387. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.12.json +0 -0
  388. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.12.sig +0 -0
  389. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.13.json +0 -0
  390. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.13.sig +0 -0
  391. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.14.json +0 -0
  392. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.14.sig +0 -0
  393. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.15.json +0 -0
  394. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.15.sig +0 -0
  395. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.16.json +0 -0
  396. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.16.sig +0 -0
  397. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.17.json +0 -0
  398. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.17.sig +0 -0
  399. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.18.json +0 -0
  400. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.18.sig +0 -0
  401. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.2.json +0 -0
  402. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.2.sig +0 -0
  403. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.3.json +0 -0
  404. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.3.sig +0 -0
  405. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.4.json +0 -0
  406. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.4.sig +0 -0
  407. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.5.json +0 -0
  408. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.5.sig +0 -0
  409. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.6.json +0 -0
  410. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.6.sig +0 -0
  411. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.7.json +0 -0
  412. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.7.sig +0 -0
  413. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.8.json +0 -0
  414. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.8.sig +0 -0
  415. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.9.json +0 -0
  416. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.5.9.sig +0 -0
  417. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.0.json +0 -0
  418. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.0.sig +0 -0
  419. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.1.json +0 -0
  420. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.1.sig +0 -0
  421. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.10.json +0 -0
  422. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.10.sig +0 -0
  423. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.11.json +0 -0
  424. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.11.sig +0 -0
  425. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.12.json +0 -0
  426. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.12.sig +0 -0
  427. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.13.json +0 -0
  428. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.13.sig +0 -0
  429. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.2.json +0 -0
  430. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.2.sig +0 -0
  431. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.3.json +0 -0
  432. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.3.sig +0 -0
  433. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.4.json +0 -0
  434. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.4.sig +0 -0
  435. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.5.json +0 -0
  436. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.5.sig +0 -0
  437. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.6.json +0 -0
  438. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.6.sig +0 -0
  439. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.7.json +0 -0
  440. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.7.sig +0 -0
  441. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.8.json +0 -0
  442. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.8.sig +0 -0
  443. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.9.json +0 -0
  444. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/plans/1.6.9.sig +0 -0
  445. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/runner.py +0 -0
  446. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/__init__.py +0 -0
  447. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
  448. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  449. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  450. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
  451. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
  452. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
  453. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
  454. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_10_disable_console_setup.py +0 -0
  455. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_11_timer_catchup.py +0 -0
  456. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_12_oled_splash_off_critical_path.py +0 -0
  457. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_13_mosquitto_priority.py +0 -0
  458. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_14_journal_apparent_size.py +0 -0
  459. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_15_prune_orphan_journals.py +0 -0
  460. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_16_login_linger.py +0 -0
  461. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_17_defer_user_manager.py +0 -0
  462. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_18_fix_hostname_once.py +0 -0
  463. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
  464. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_2_libyaml.py +0 -0
  465. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -0
  466. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_4_onewire_modules.py +0 -0
  467. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_5_overlay_kernel_hook.py +0 -0
  468. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_6_boot_service_order.py +0 -0
  469. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_7_journald_limits.py +0 -0
  470. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_8_apparmor_prune.py +0 -0
  471. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_5_9_defer_nonessential.py +0 -0
  472. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_0_nodered_admin_auth.py +0 -0
  473. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_10_narrow_sudo_rules.py +0 -0
  474. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_11_drop_docker_group.py +0 -0
  475. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_12_console_shows_ip.py +0 -0
  476. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_13_custom_certificate.py +0 -0
  477. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_1_mosquitto_passwd_perms.py +0 -0
  478. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_2_drop_build_sudo_rule.py +0 -0
  479. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_3_firewall_rule_gaps.py +0 -0
  480. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_4_ssh_login_hardening.py +0 -0
  481. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_5_trust_transition.py +0 -0
  482. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_6_retire_legacy_helper.py +0 -0
  483. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_7_timedatectl_sudoers.py +0 -0
  484. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_8_system_helper.py +0 -0
  485. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/migrations/versions/v1_6_9_ntp_servers.py +0 -0
  486. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/__init__.py +0 -0
  487. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/cli.py +0 -0
  488. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/client.py +0 -0
  489. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/coordinator.py +0 -0
  490. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/__init__.py +0 -0
  491. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
  492. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  493. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  494. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  495. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  496. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  497. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  498. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  499. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/defro-drx.json +0 -0
  500. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
  501. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  502. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/thessla.json +0 -0
  503. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  504. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/hvac/wanas415.json +0 -0
  505. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/inverters/sofar.json +0 -0
  506. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  507. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  508. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  509. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  510. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/cwt.json +0 -0
  511. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  512. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  513. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  514. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  515. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/pt100.json +0 -0
  516. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
  517. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/sht20.json +0 -0
  518. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/devices/sensors/sht30.json +0 -0
  519. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/__init__.py +0 -0
  520. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/base.py +0 -0
  521. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/__init__.py +0 -0
  522. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/numeric.py +0 -0
  523. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/select.py +0 -0
  524. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/switch.py +0 -0
  525. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/derived/text.py +0 -0
  526. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/__init__.py +0 -0
  527. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/binary.py +0 -0
  528. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/numeric.py +0 -0
  529. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/sensor/text.py +0 -0
  530. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/writeable/__init__.py +0 -0
  531. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/writeable/binary.py +0 -0
  532. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/entities/writeable/numeric.py +0 -0
  533. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/mock_coordinator.py +0 -0
  534. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/modbus/utils.py +0 -0
  535. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/__init__.py +0 -0
  536. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/actions.py +0 -0
  537. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/events.py +0 -0
  538. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/files.py +0 -0
  539. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/logs.py +0 -0
  540. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/mqtt.py +0 -0
  541. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/models/state.py +0 -0
  542. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/actions.yaml +0 -0
  543. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/actions_sensor.yaml +0 -0
  544. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/actions_switch.yaml +0 -0
  545. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/condition.yaml +0 -0
  546. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/filters.yaml +0 -0
  547. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/filters_adc.yaml +0 -0
  548. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/id.yaml +0 -0
  549. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/remote_devices.yaml +0 -0
  550. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/remote_inputs.yaml +0 -0
  551. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/remote_outputs.yaml +0 -0
  552. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/temp_unit.yaml +0 -0
  553. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/schema/update_interval.yaml +0 -0
  554. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/action_validation.py +0 -0
  555. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/app.py +0 -0
  556. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/dashboard_cards.py +0 -0
  557. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/AppInitContext-CsffdB9c.js +0 -0
  558. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/EntityGrid-BDdmT0qN.js +0 -0
  559. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/LongPressWrapper-BKkWvoC1.js +0 -0
  560. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/NodeRedView-Ct08K8xu.js +0 -0
  561. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/Sparkline-D-2-v-7o.js +0 -0
  562. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/ViewToggle-B8OpHNHc.js +0 -0
  563. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/aiConfig-_hPXvgdY.js +0 -0
  564. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/aiWizardPrompt-Dc7dZBzw.js +0 -0
  565. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/axios-uEi8e3Ln.js +0 -0
  566. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/basePath-CxHj-SSK.js +0 -0
  567. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/chunk-QTnfLwEv.js +0 -0
  568. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
  569. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  570. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/configCache-CLN4xEny.js +0 -0
  571. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/coverUtils-Cf4Uxn2U.js +0 -0
  572. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/createLucideIcon-BEjh8B3y.js +0 -0
  573. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/editor.worker-Cn2oRESe.js +0 -0
  574. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/fa-BEzM11bH.js +0 -0
  575. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/formatters-zOiGPJLh.js +0 -0
  576. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/gi-tOlGxC0X.js +0 -0
  577. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/index-lVrZSgFS.css +0 -0
  578. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/longPress-Dx7OCSyP.js +0 -0
  579. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
  580. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/monaco-DUFfd7ef.js +0 -0
  581. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/monaco-Dpn-hvLa.js +0 -0
  582. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/select-D3PIwbEj.js +0 -0
  583. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/tabs-box-Byn-MOyS.js +0 -0
  584. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/utils-B6KiDbIe.js +0 -0
  585. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
  586. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/assets/yaml.worker-8qQfrID5.js +0 -0
  587. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  588. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  589. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio.svg +0 -0
  590. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  591. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  592. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  593. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  594. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  595. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  596. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  597. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  598. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  599. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  600. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  601. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/ina226.schema.json +0 -0
  602. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  603. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  604. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/location.schema.json +0 -0
  605. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  606. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  607. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  608. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  609. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  610. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
  611. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  612. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  613. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  614. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  615. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  616. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  617. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  618. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
  619. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
  620. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/schedule.schema.json +0 -0
  621. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  622. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  623. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  624. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/frontend-dist/workbox-7e79c025.js +0 -0
  625. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/hvac_svg_templates.py +0 -0
  626. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/middleware/__init__.py +0 -0
  627. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/middleware/auth.py +0 -0
  628. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/middleware/csrf.py +0 -0
  629. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/middleware/policy.py +0 -0
  630. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/modbus_card_templates.py +0 -0
  631. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/rate_limit.py +0 -0
  632. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/__init__.py +0 -0
  633. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/accounts.py +0 -0
  634. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/auth.py +0 -0
  635. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/can.py +0 -0
  636. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config.py +0 -0
  637. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config_actions.py +0 -0
  638. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config_backups.py +0 -0
  639. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config_discovery.py +0 -0
  640. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/config_files.py +0 -0
  641. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/covers.py +0 -0
  642. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/dashboard.py +0 -0
  643. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/dev_fake_device.py +0 -0
  644. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/diagnostics.py +0 -0
  645. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/irrigation.py +0 -0
  646. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/migrations.py +0 -0
  647. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/modbus.py +0 -0
  648. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/mqtt_reference.py +0 -0
  649. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/nodered.py +0 -0
  650. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/onboarding.py +0 -0
  651. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/outputs.py +0 -0
  652. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/schedule.py +0 -0
  653. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/sensors.py +0 -0
  654. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/sun.py +0 -0
  655. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/system.py +0 -0
  656. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/templates.py +0 -0
  657. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/timezone_sudoers.py +0 -0
  658. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/tools.py +0 -0
  659. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/routes/update.py +0 -0
  660. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/adc.schema.json +0 -0
  661. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/areas.schema.json +0 -0
  662. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  663. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/boneio.schema.json +0 -0
  664. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/can.schema.json +0 -0
  665. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/cover.schema.json +0 -0
  666. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/dallas.schema.json +0 -0
  667. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/ds2482.schema.json +0 -0
  668. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/event.schema.json +0 -0
  669. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/ina219.schema.json +0 -0
  670. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/ina226.schema.json +0 -0
  671. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/irrigation.schema.json +0 -0
  672. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/lm75.schema.json +0 -0
  673. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/location.schema.json +0 -0
  674. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/logger.schema.json +0 -0
  675. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/lox_udp.schema.json +0 -0
  676. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/mcp23017.schema.json +0 -0
  677. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/mcp9808.schema.json +0 -0
  678. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/modbus.schema.json +0 -0
  679. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/modbus_devices.schema.json +0 -0
  680. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/mqtt.schema.json +0 -0
  681. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/oled.schema.json +0 -0
  682. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/output.schema.json +0 -0
  683. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/output_group.schema.json +0 -0
  684. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/pca9685.schema.json +0 -0
  685. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/pcf8575.schema.json +0 -0
  686. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/remote_devices.schema.json +0 -0
  687. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/remote_inputs.schema.json +0 -0
  688. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/remote_outputs.schema.json +0 -0
  689. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/schedule.schema.json +0 -0
  690. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/sensor.schema.json +0 -0
  691. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/template.schema.json +0 -0
  692. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  693. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/security_headers.py +0 -0
  694. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/services/__init__.py +0 -0
  695. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/services/logs.py +0 -0
  696. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/sudo_rate_limiter.py +0 -0
  697. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/web_server.py +0 -0
  698. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio/webui/websocket_manager.py +0 -0
  699. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio.egg-info/dependency_links.txt +0 -0
  700. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio.egg-info/entry_points.txt +0 -0
  701. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio.egg-info/requires.txt +0 -0
  702. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/boneio.egg-info/top_level.txt +0 -0
  703. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/pyproject.toml +0 -0
  704. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/setup.cfg +0 -0
  705. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/setup.py +0 -0
  706. {boneio-1.6.0.dev6 → boneio-1.6.0.dev7}/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.dev6
3
+ Version: 1.6.0.dev7
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
@@ -97,6 +97,14 @@ HOST = "host"
97
97
  USERNAME = "username"
98
98
  PASSWORD = "password"
99
99
  PORT = "port"
100
+
101
+ #: The port the device's built-in reverse proxy publishes HTTPS on.
102
+ #:
103
+ #: Set in docker-compose.yaml as HTTPS_PORT and defaulted there too; this is
104
+ #: the same number, for the parts of the application that need to name the
105
+ #: proxy without reading the compose file. It lives here rather than beside the
106
+ #: web server so that core can use it without importing the web layer.
107
+ DEFAULT_PROXY_PORT = 8443
100
108
  ONLINE = "online"
101
109
  OFFLINE = "offline"
102
110
  TOPIC = "topic"
@@ -27,6 +27,7 @@ from boneio.core.cloud.secrets import MASTER_SECRET as DEFAULT_MASTER_SECRET
27
27
  from boneio.core.system.monitor import get_network_info
28
28
 
29
29
  from boneio.core import containers
30
+ from boneio.core.system.monitor import get_network_info
30
31
 
31
32
  _LOGGER = logging.getLogger(__name__)
32
33
 
@@ -688,8 +689,6 @@ async def set_enabled(config_helper, enabled: bool, local_ip: str | None = None)
688
689
  serial = getattr(config_helper, "serial_number", None)
689
690
  if not local_ip:
690
691
  try:
691
- from boneio.core.system.monitor import get_network_info
692
-
693
692
  local_ip = (get_network_info() or {}).get("ip", "")
694
693
  except Exception as err: # noqa: BLE001
695
694
  _LOGGER.warning("Could not read this device's address: %s", err)
@@ -15,6 +15,8 @@ from boneio.const import (
15
15
  ALARM_CONTROL_PANEL,
16
16
  BINARY_SENSOR,
17
17
  BONEIO,
18
+ DEFAULT_PROXY_PORT,
19
+ IP,
18
20
  BUTTON,
19
21
  CLIMATE,
20
22
  COVER,
@@ -45,6 +47,7 @@ class ConfigHelper:
45
47
  is_web_active: bool = False,
46
48
  web_port: int = 8090,
47
49
  proxy_port: int | None = None,
50
+ expose: str = "all",
48
51
  config_file_path: str | None = None,
49
52
  send_boneio_autodiscovery: bool = True,
50
53
  receive_boneio_autodiscovery: bool = True,
@@ -98,6 +101,7 @@ class ConfigHelper:
98
101
  self._device_type = device_type
99
102
  self._web_port = web_port
100
103
  self._proxy_port = proxy_port
104
+ self._expose = expose
101
105
  self._fetch_old_discovery = None
102
106
 
103
107
  self._autodiscovery_messages = {
@@ -183,12 +187,54 @@ class ConfigHelper:
183
187
 
184
188
  @property
185
189
  def http_proto(self) -> str:
186
- return "https" if self._proxy_port else "http"
190
+ """The scheme anything linking to this panel should use."""
191
+ return "https" if self._behind_proxy else "http"
192
+
193
+ @property
194
+ def _behind_proxy(self) -> bool:
195
+ """Whether the panel is reached through the reverse proxy.
196
+
197
+ Either because somebody named its port, or because the panel's own
198
+ port has been taken off the network and the proxy is the only way in.
199
+ """
200
+ return bool(self._proxy_port) or self._expose == "proxy"
201
+
202
+ @property
203
+ def configuration_url(self) -> str | None:
204
+ """The address anything linking to this panel should use.
205
+
206
+ Home Assistant puts this on the device page, and the panel shows it so
207
+ an operator can see what was published without opening Home Assistant.
208
+ Both read it here rather than each deciding for itself: the wording in
209
+ the panel drifted away from what discovery actually sends within a day
210
+ of being written, because it described the rule instead of asking.
211
+
212
+ Returns:
213
+ The URL, or None when there is no address to build one from.
214
+ """
215
+ if self._cloud_registration and self.serial_number:
216
+ # Registered with the cloud: a real certificate on a public name,
217
+ # pointing at the local address. Nothing else can beat that.
218
+ return f"https://{self.serial_number}.black.boneio.app:{DEFAULT_PROXY_PORT}"
219
+ address = (self._network_info or {}).get(IP)
220
+ if not (self._is_web_active and address):
221
+ return None
222
+ return f"{self.http_proto}://{address}:{self.web_configuration_port}"
187
223
 
188
224
  @property
189
225
  def web_configuration_port(self) -> int:
190
- """Get port for HA discovery URL. Uses proxy_port if set, otherwise web_port."""
191
- return self._proxy_port if self._proxy_port else self._web_port
226
+ """The port to put in a link to this panel.
227
+
228
+ The configured proxy port when there is one. Otherwise the panel's own
229
+ port — unless that port has been taken off the network, in which case
230
+ it answers nothing and linking to it would hand Home Assistant a dead
231
+ address. Then it is the port the built-in proxy serves on.
232
+ """
233
+ if self._proxy_port:
234
+ return self._proxy_port
235
+ if self._expose == "proxy":
236
+ return DEFAULT_PROXY_PORT
237
+ return self._web_port
192
238
 
193
239
  @property
194
240
  def topic_prefix(self) -> str:
@@ -64,6 +64,14 @@ class Check:
64
64
  state: State
65
65
  detail: str
66
66
  remedy: str = ""
67
+ #: A fact about this device that belongs with the finding and must not be
68
+ #: translated away: the error a service reported, a name, a path.
69
+ #:
70
+ #: The panel replaces title, detail and remedy with its own wording, keyed
71
+ #: by check id — so anything the backend varies at runtime is lost the
72
+ #: moment somebody writes a translation for it. This is shown verbatim
73
+ #: underneath instead.
74
+ context: str = ""
67
75
  #: Where in the panel this is fixed, when it can be fixed there. A bare
68
76
  #: name is a Settings section; ``system:<anchor>`` is the System page.
69
77
  #: None means there is no control — the remedy is a file or a shell.
@@ -82,6 +90,7 @@ class Check:
82
90
  "state": str(self.state),
83
91
  "detail": self.detail,
84
92
  "remedy": self.remedy,
93
+ "context": self.context,
85
94
  "settings_section": self.settings_section,
86
95
  }
87
96
 
@@ -213,6 +222,9 @@ def evaluate(
213
222
  anonymous_allowed: bool,
214
223
  auth_required: bool,
215
224
  cloud_active: bool,
225
+ proxy_serving: bool | None = None,
226
+ custom_certificate: bool = False,
227
+ cloud_error: str | None = None,
216
228
  ) -> Posture:
217
229
  """Work out what is still unlocked.
218
230
 
@@ -222,6 +234,10 @@ def evaluate(
222
234
  anonymous_allowed: Whether the anonymous opt-out is set.
223
235
  auth_required: Whether requests currently need a token.
224
236
  cloud_active: Whether cloud registration is serving a real certificate.
237
+ proxy_serving: Whether the reverse proxy is answering for this
238
+ panel right now. None when nobody looked.
239
+ custom_certificate: Whether an uploaded certificate is installed.
240
+ cloud_error: What cloud registration last failed with, if anything.
225
241
 
226
242
  Returns:
227
243
  The full set of checks.
@@ -269,20 +285,35 @@ def evaluate(
269
285
  Check(
270
286
  id="web_exposed_in_clear",
271
287
  title="Panel served in the clear",
272
- severity=Severity.WARNING,
288
+ # Three states, not two. Telling somebody to move the panel behind
289
+ # a proxy that is not serving it is advice we would then refuse to
290
+ # carry out, and they would find that out by clicking. Where the
291
+ # proxy is not answering this drops to advice and points at the
292
+ # proxy instead of at the panel.
293
+ severity=Severity.WARNING if proxy_serving is not False else Severity.INFO,
273
294
  state=State.OK if behind_proxy else State.FAILED,
274
295
  detail=(
275
- "The panel answers on its own port on every network interface, "
276
- "without TLS. Anyone who can see the traffic sees the login "
277
- "form, the token it hands back, and a configuration that "
278
- "carries passwords."
279
- if not behind_proxy
280
- else "The panel is reachable only through the encrypted proxy."
296
+ "The panel is reachable only through the encrypted proxy."
297
+ if behind_proxy
298
+ else (
299
+ "The panel answers on its own port on every network "
300
+ "interface, without TLS. Anyone who can see the traffic "
301
+ "sees the login form, the token it hands back, and a "
302
+ "configuration that carries passwords."
303
+ if proxy_serving is not False
304
+ else "The panel answers on its own port on every network "
305
+ "interface, without TLS — and the proxy that would replace "
306
+ "it is not serving this panel, so closing that port now "
307
+ "would leave the device reachable on nothing."
308
+ )
281
309
  ),
282
310
  remedy=(
283
- "Move it behind the proxy from the Security section. The panel "
284
- "then answers on https and through an SSH tunnel, and not on "
285
- "the local network in the clear."
311
+ "Move it behind the proxy. It then answers over HTTPS and "
312
+ "through an SSH tunnel, and not on the local network in the "
313
+ "clear."
314
+ if proxy_serving is not False
315
+ else "Get the proxy serving this panel first — check that "
316
+ "HTTPS answers on its port — and this becomes one click."
286
317
  ),
287
318
  settings_section="security",
288
319
  )
@@ -312,6 +343,7 @@ def evaluate(
312
343
  )
313
344
 
314
345
  web = config.get("web") if isinstance(config.get("web"), dict) else {}
346
+ cloud_enabled = bool((web.get("cloud") or {}).get("enabled"))
315
347
  has_legacy = _legacy_web_auth(config)
316
348
  checks.append(
317
349
  Check(
@@ -342,15 +374,42 @@ def evaluate(
342
374
  id="certificate",
343
375
  title="HTTPS certificate",
344
376
  severity=Severity.INFO,
345
- state=State.OK if cloud_active else State.FAILED,
377
+ # Four states. This used to have two, and told an operator to
378
+ # enable cloud registration on a device where it was already on and
379
+ # failing with an error the application had in hand — while a
380
+ # second route to a trusted certificate, uploading one, had been
381
+ # added and this check knew nothing about it.
382
+ state=State.OK if (custom_certificate or cloud_active) else State.FAILED,
346
383
  detail=(
347
- "Served with a certificate browsers trust."
384
+ "Served with the certificate you uploaded."
385
+ if custom_certificate
386
+ else "Served with a certificate browsers trust."
348
387
  if cloud_active
349
- else "Served with a self-signed certificate, so browsers warn "
350
- "on every visit and people learn to click through the warning."
388
+ else (
389
+ "Cloud registration is switched on but is not serving a "
390
+ "certificate, so the panel is still served with a "
391
+ "self-signed one."
392
+ if cloud_enabled and cloud_error
393
+ else "Cloud registration is switched on but has not "
394
+ "produced a certificate yet, so the panel is still served "
395
+ "with a self-signed one."
396
+ if cloud_enabled
397
+ else "Served with a self-signed certificate, so browsers "
398
+ "warn on every visit and people learn to click through the "
399
+ "warning."
400
+ )
351
401
  ),
352
- remedy="Enable boneIO Cloud registration to get a trusted certificate.",
353
- settings_section="web",
402
+ remedy=(
403
+ ""
404
+ if custom_certificate or cloud_active
405
+ else "Sort out the registration error, or upload a certificate "
406
+ "of your own below."
407
+ if cloud_enabled
408
+ else "Enable boneIO Cloud registration, or upload a certificate "
409
+ "of your own below."
410
+ ),
411
+ context=cloud_error or "",
412
+ settings_section="security",
354
413
  )
355
414
  )
356
415
 
@@ -82,11 +82,9 @@ def ha_availabilty_message(
82
82
  topic = config_helper.topic_prefix if topic is None else topic
83
83
  device_name = config_helper.name if device_name is None else device_name
84
84
  model = f"boneIO Black {config_helper.device_type.title().replace('X', 'x')}"
85
- if config_helper.cloud_registration and config_helper.serial_number:
86
- # PWA-registered device: use the public PWA domain with TLS
87
- web_url = f"https://{config_helper.serial_number}.black.boneio.app:8443"
88
- elif config_helper.is_web_active and config_helper.network_info and IP in config_helper.network_info:
89
- web_url = f"{config_helper.http_proto}://{config_helper.network_info[IP]}:{config_helper.web_configuration_port}"
85
+ # Decided in one place, which the panel reads too. Built here, the panel's
86
+ # description of it drifted out of date within a day.
87
+ web_url = config_helper.configuration_url or web_url
90
88
 
91
89
  web_url_dict = {
92
90
  "configuration_url": web_url
@@ -1 +1 @@
1
- {"plans":{"1.3.0":"3199d74a6dda33162bbee4fc650a5a0d70d5372258f3305ad92501215e22a7fd","1.3.1":"580381a4f6f40fc1bd4e903e591ad0d5c1db27daaccafc6f79dabf8c3b84259a","1.3.2":"7a69ffaf0c41438be25a656dcdc87783daac0eae79218d023648ef9d708e373f","1.4.0":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.4.3":"a8cfbabff09d21944a822c4a70f23a7ee14960c4054de151c9fbc7cdb29adff5","1.4.4":"27ebf198e03c882c21572a9be02f63e8ffe6a610f6f395d7116ad9e258b4dac7","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":"035a0d32c891746e315fd228f8107680c856d9d128e3b4a19f6629256b3ef9b1","1.6.2":"6ef96b5e00a04a929d16f0e4a136bfcc5b8132a466d6907a99b2c8516a8952d5","1.6.3":"5c10db827bcb92b9322d4aa5751076b825da87c6d18d6953847ba72317cca862","1.6.4":"baf2bb1c2ec7c1bfccfc514ef1cef67907e056e4f7153bb5932ecb835c9cff78","1.6.5":"358dacbc8d16b1b665167de3bc1c42d101d82733502048f345184d1841ce03f2","1.6.6":"535bb041b99d5ac1bc9028ea88bc2fbf3dbadc80ea8dea236cc219123c194114","1.6.7":"d59af413e270e6f34b1b9a1c8c4acef35328f00e26fad447cfe214545af78d8f","1.6.8":"7175f827b99c602df80436db588c87277ce50f2734051a444163b048f5d0b23e","1.6.9":"732d5a9bcd2e496a260263a643c78a6346e9f3cef5b48fe59ac6b120bd03ba4e"},"release":"1.6.0.dev6"}
1
+ {"plans":{"1.3.0":"3199d74a6dda33162bbee4fc650a5a0d70d5372258f3305ad92501215e22a7fd","1.3.1":"580381a4f6f40fc1bd4e903e591ad0d5c1db27daaccafc6f79dabf8c3b84259a","1.3.2":"7a69ffaf0c41438be25a656dcdc87783daac0eae79218d023648ef9d708e373f","1.4.0":"41c3a16e7819857a4b826e944fcfb4f79c58e7192cb151b106a3acd7487d5771","1.4.3":"a8cfbabff09d21944a822c4a70f23a7ee14960c4054de151c9fbc7cdb29adff5","1.4.4":"27ebf198e03c882c21572a9be02f63e8ffe6a610f6f395d7116ad9e258b4dac7","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":"035a0d32c891746e315fd228f8107680c856d9d128e3b4a19f6629256b3ef9b1","1.6.2":"6ef96b5e00a04a929d16f0e4a136bfcc5b8132a466d6907a99b2c8516a8952d5","1.6.3":"5c10db827bcb92b9322d4aa5751076b825da87c6d18d6953847ba72317cca862","1.6.4":"baf2bb1c2ec7c1bfccfc514ef1cef67907e056e4f7153bb5932ecb835c9cff78","1.6.5":"358dacbc8d16b1b665167de3bc1c42d101d82733502048f345184d1841ce03f2","1.6.6":"535bb041b99d5ac1bc9028ea88bc2fbf3dbadc80ea8dea236cc219123c194114","1.6.7":"d59af413e270e6f34b1b9a1c8c4acef35328f00e26fad447cfe214545af78d8f","1.6.8":"7175f827b99c602df80436db588c87277ce50f2734051a444163b048f5d0b23e","1.6.9":"732d5a9bcd2e496a260263a643c78a6346e9f3cef5b48fe59ac6b120bd03ba4e"},"release":"1.6.0.dev7"}
@@ -212,6 +212,7 @@ async def async_run(
212
212
  is_web_active=web_active,
213
213
  web_port=web_config.get("port", 8090),
214
214
  proxy_port=web_config.get("proxy_port"),
215
+ expose=web_config.get("expose", "all"),
215
216
  ha_discovery=mqtt_config.get(HA_DISCOVERY, {}).get(ENABLED, False),
216
217
  ha_discovery_prefix=mqtt_config.get(HA_DISCOVERY, {}).get(TOPIC_PREFIX, "homeassistant"),
217
218
  config_file_path=config_file,
@@ -203,12 +203,18 @@ web:
203
203
  default: 8090
204
204
  meta:
205
205
  label: Port to run web server
206
+ # Not offered in the panel any more. It only ever chose the port in the
207
+ # link Home Assistant shows, the built-in proxy answers on 8443 either
208
+ # way, and a device reachable only through that proxy derives the port by
209
+ # itself. Kept here because the validator purges unknown keys: removing it
210
+ # would delete the setting from the config.yaml of the few people who have
211
+ # one, and change where their Home Assistant link points, silently.
206
212
  proxy_port:
207
213
  required: False
208
214
  type: integer
209
215
  nullable: True
210
216
  meta:
211
- label: Reverse proxy port (used in HA discovery URL). If not set, uses 'port' value.
217
+ label: Reverse proxy port for the Home Assistant link. Advanced; set it only when your own proxy fronts this panel on another port.
212
218
  expose:
213
219
  required: False
214
220
  type: string
@@ -0,0 +1,2 @@
1
+ # flake8: noqa
2
+ __version__ = "1.6.0.dev7"
@@ -18,7 +18,16 @@ belongs to Docker and an operator can change it in daemon.json.
18
18
 
19
19
  from __future__ import annotations
20
20
 
21
+ import json
21
22
  import logging
23
+ import ssl
24
+ import time
25
+ import urllib.error
26
+ import urllib.request
27
+
28
+ import psutil
29
+
30
+ from boneio.const import DEFAULT_PROXY_PORT
22
31
 
23
32
  _LOGGER = logging.getLogger(__name__)
24
33
 
@@ -50,8 +59,6 @@ def docker_bridge_addresses() -> list[str]:
50
59
  """
51
60
  addresses: list[str] = []
52
61
  try:
53
- import psutil
54
-
55
62
  for name, addrs in psutil.net_if_addrs().items():
56
63
  if not name.startswith(_BRIDGE_PREFIXES):
57
64
  continue
@@ -87,8 +94,6 @@ def _wait_for_a_bridge(timeout: float) -> list[str]:
87
94
  Returns:
88
95
  The addresses found, possibly empty.
89
96
  """
90
- import time
91
-
92
97
  deadline = time.monotonic() + timeout
93
98
  waited = False
94
99
  while True:
@@ -140,10 +145,6 @@ def binds_for(exposure: str, port: int, wait: float = BRIDGE_WAIT_SECONDS) -> li
140
145
  return [f"{host}:{port}" for host in hosts]
141
146
 
142
147
 
143
- #: Where Caddy publishes HTTPS when nothing says otherwise.
144
- DEFAULT_PROXY_PORT = 8443
145
-
146
-
147
148
  def proxy_is_serving(port: int = DEFAULT_PROXY_PORT, timeout: float = 5.0) -> tuple[bool, str]:
148
149
  """Whether the reverse proxy is answering for this device right now.
149
150
 
@@ -163,11 +164,6 @@ def proxy_is_serving(port: int = DEFAULT_PROXY_PORT, timeout: float = 5.0) -> tu
163
164
  Returns:
164
165
  Whether it is serving, and a short reason when it is not.
165
166
  """
166
- import json
167
- import ssl
168
- import urllib.error
169
- import urllib.request
170
-
171
167
  # The certificate is the device's own, usually from Caddy's internal CA,
172
168
  # and this request never leaves the machine. What is being tested is
173
169
  # whether the proxy reaches the application, not who signed the key.
@@ -191,3 +187,44 @@ def proxy_is_serving(port: int = DEFAULT_PROXY_PORT, timeout: float = 5.0) -> tu
191
187
  if "version" not in body:
192
188
  return False, f"port {port} is serving something else"
193
189
  return True, ""
190
+
191
+
192
+ #: The last probe, as ``(port, asked_at, answer)``.
193
+ _last_probe: tuple[int, float, bool] | None = None
194
+
195
+ #: How long an answer stands. Long enough that the security page's probe is
196
+ #: still good when somebody reads it and presses the button; short enough that
197
+ #: a proxy just repaired shows as repaired.
198
+ PROBE_TTL = 30.0
199
+
200
+
201
+ def proxy_is_serving_cached(port: int = DEFAULT_PROXY_PORT, max_age: float = PROBE_TTL) -> tuple[bool, str]:
202
+ """:func:`proxy_is_serving`, reusing a recent answer.
203
+
204
+ The first probe of a device's life is slow in a way the timeout alone
205
+ cannot fix: Caddy issues its internal certificates on demand, and a
206
+ connection to 127.0.0.1 carries no SNI, so the first one makes it mint a
207
+ certificate for that address before answering. On a BeagleBone that takes
208
+ seconds — long enough that the browser gave up on the save that was waiting
209
+ for it, while the save itself went through.
210
+
211
+ Sharing one answer between the page that displays the posture and the save
212
+ that acts on it means the slow probe happens while somebody is reading,
213
+ not while they are waiting for a button.
214
+
215
+ Args:
216
+ port: The port the proxy publishes HTTPS on.
217
+ max_age: How old an answer may be and still be used.
218
+
219
+ Returns:
220
+ Whether it is serving, and a short reason when it is not.
221
+ """
222
+ global _last_probe
223
+
224
+ now = time.monotonic()
225
+ if _last_probe and _last_probe[0] == port and now - _last_probe[1] < max_age:
226
+ return (_last_probe[2], "" if _last_probe[2] else "the proxy was not serving a moment ago")
227
+
228
+ serving, reason = proxy_is_serving(port)
229
+ _last_probe = (port, now, serving)
230
+ return serving, reason
@@ -1 +1 @@
1
- import{r as e}from"./chunk-QTnfLwEv.js";import{Qt as t,Zt as n,an as r,in as i}from"./fa-BEzM11bH.js";import{n as a}from"./axios-uEi8e3Ln.js";import{F as o,I as s,L as c,P as l,c as u,d,h as f,u as p,x as m}from"./index-B6IpVqZQ.js";var h=e(r(),1),g=i();function _(e,t){return e?.response?.data?.detail||t}function v(){let{t:e}=s(),{username:r,isAdmin:i}=c(),[v,y]=(0,h.useState)([]),[b,x]=(0,h.useState)(!0),[S,C]=(0,h.useState)(null),[w,T]=(0,h.useState)(null),[E,D]=(0,h.useState)(``),[O,k]=(0,h.useState)(``),[A,j]=(0,h.useState)(`viewer`),[M,N]=(0,h.useState)(!1),P=O?o(O,E):null,F=P?e(l[P],{min:8}):null,I=(0,h.useCallback)(async()=>{try{let{data:e}=await a.get(`/api/accounts`);y(e.accounts??[]),C(null)}catch(t){C(_(t,e(`accounts.load_failed`)))}finally{x(!1)}},[e]);(0,h.useEffect)(()=>{i&&I()},[i,I]);let L=async t=>{t.preventDefault(),C(null),T(null),N(!0);try{await a.post(`/api/accounts`,{username:E,password:O,role:A}),D(``),k(``),j(`viewer`),T(e(`accounts.created`)),await I()}catch(t){C(_(t,e(`accounts.create_failed`)))}finally{N(!1)}},R=async t=>{if(window.confirm(e(`accounts.confirm_delete`,{username:t.username}))){C(null),T(null);try{await a.delete(`/api/accounts/${encodeURIComponent(t.username)}`),T(e(`accounts.deleted`,{username:t.username})),await I()}catch(t){C(_(t,e(`accounts.delete_failed`)))}}},z=async(t,n)=>{C(null),T(null);try{await a.put(`/api/accounts/${encodeURIComponent(t.username)}/role`,{role:n}),await I()}catch(t){C(_(t,e(`accounts.role_failed`))),await I()}},B=async t=>{let n=window.prompt(e(`accounts.prompt_new_password`,{username:t.username}));if(!n)return;C(null),T(null);let r=o(n,t.username);if(r){C(e(l[r],{min:8}));return}try{await a.put(`/api/accounts/${encodeURIComponent(t.username)}/password`,{password:n}),T(e(`accounts.password_reset`,{username:t.username}))}catch(t){C(_(t,e(`accounts.password_failed`)))}};return i?(0,g.jsxs)(m,{width:`wide`,children:[S&&(0,g.jsx)(u,{variant:`error`,message:S}),w&&(0,g.jsx)(u,{variant:`success`,message:w}),(0,g.jsx)(f,{icon:(0,g.jsx)(t,{}),title:e(`accounts.title`),children:b?(0,g.jsx)(`div`,{className:`flex justify-center py-6`,children:(0,g.jsx)(`span`,{className:`loading loading-spinner loading-md text-primary`})}):(0,g.jsx)(`div`,{className:`stg-inset overflow-x-auto`,children:(0,g.jsxs)(`table`,{className:`table table-sm`,children:[(0,g.jsx)(`thead`,{children:(0,g.jsxs)(`tr`,{children:[(0,g.jsx)(`th`,{children:e(`accounts.username`)}),(0,g.jsx)(`th`,{children:e(`accounts.role`)}),(0,g.jsx)(`th`,{className:`text-right`,children:e(`accounts.actions`)})]})}),(0,g.jsx)(`tbody`,{children:v.map(t=>{let n=t.username.toLowerCase()===(r??``).toLowerCase();return(0,g.jsxs)(`tr`,{children:[(0,g.jsxs)(`td`,{children:[(0,g.jsx)(`span`,{className:`font-medium font-mono`,children:t.username}),n&&(0,g.jsx)(`span`,{className:`ml-2 badge badge-ghost badge-xs`,children:e(`accounts.you`)})]}),(0,g.jsx)(`td`,{children:(0,g.jsxs)(`select`,{className:`select select-xs select-bordered`,value:t.role,disabled:n,onChange:e=>z(t,e.target.value),children:[(0,g.jsx)(`option`,{value:`admin`,children:e(`accounts.role_admin`)}),(0,g.jsx)(`option`,{value:`viewer`,children:e(`accounts.role_viewer`)})]})}),(0,g.jsxs)(`td`,{className:`text-right whitespace-nowrap`,children:[(0,g.jsx)(`button`,{className:`btn btn-ghost btn-xs`,onClick:()=>B(t),children:e(`accounts.reset_password`)}),(0,g.jsx)(`button`,{className:`btn btn-ghost btn-xs text-error ml-1`,disabled:n,onClick:()=>R(t),children:e(`accounts.delete`)})]})]},t.username)})})]})})}),(0,g.jsx)(`form`,{onSubmit:L,children:(0,g.jsx)(f,{icon:(0,g.jsx)(n,{}),title:e(`accounts.add_title`),description:e(`accounts.add_intro`),footer:(0,g.jsx)(p,{children:(0,g.jsxs)(`button`,{type:`submit`,className:`btn btn-primary btn-sm gap-2`,disabled:M||!E||!O||!!F,children:[M&&(0,g.jsx)(`span`,{className:`loading loading-spinner loading-xs`}),e(`accounts.add_button`)]})}),children:(0,g.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-[1fr_1fr_auto] gap-3`,children:[(0,g.jsx)(d,{label:e(`accounts.username`),children:(0,g.jsx)(`input`,{type:`text`,className:`input input-bordered w-full font-mono`,placeholder:e(`accounts.username`),autoComplete:`off`,required:!0,value:E,onChange:e=>D(e.target.value)})}),(0,g.jsx)(d,{label:e(`accounts.password`),error:F||void 0,children:(0,g.jsx)(`input`,{type:`password`,className:`input input-bordered w-full font-mono ${F?`input-error`:``}`,placeholder:e(`accounts.password`),autoComplete:`new-password`,required:!0,minLength:8,"aria-invalid":F?!0:void 0,"aria-describedby":F?`accounts-password-error`:void 0,value:O,onChange:e=>k(e.target.value)})}),(0,g.jsx)(d,{label:e(`accounts.role`),className:`sm:w-40`,children:(0,g.jsxs)(`select`,{className:`select select-bordered w-full`,value:A,onChange:e=>j(e.target.value),children:[(0,g.jsx)(`option`,{value:`viewer`,children:e(`accounts.role_viewer`)}),(0,g.jsx)(`option`,{value:`admin`,children:e(`accounts.role_admin`)})]})})]})})})]}):(0,g.jsx)(m,{width:`wide`,children:(0,g.jsx)(u,{variant:`warning`,message:e(`accounts.admin_only`)})})}export{v as default};
1
+ import{r as e}from"./chunk-QTnfLwEv.js";import{Qt as t,Zt as n,an as r,in as i}from"./fa-BEzM11bH.js";import{n as a}from"./axios-uEi8e3Ln.js";import{F as o,I as s,L as c,P as l,c as u,d,h as f,u as p,x as m}from"./index-DTsVYLUw.js";var h=e(r(),1),g=i();function _(e,t){return e?.response?.data?.detail||t}function v(){let{t:e}=s(),{username:r,isAdmin:i}=c(),[v,y]=(0,h.useState)([]),[b,x]=(0,h.useState)(!0),[S,C]=(0,h.useState)(null),[w,T]=(0,h.useState)(null),[E,D]=(0,h.useState)(``),[O,k]=(0,h.useState)(``),[A,j]=(0,h.useState)(`viewer`),[M,N]=(0,h.useState)(!1),P=O?o(O,E):null,F=P?e(l[P],{min:8}):null,I=(0,h.useCallback)(async()=>{try{let{data:e}=await a.get(`/api/accounts`);y(e.accounts??[]),C(null)}catch(t){C(_(t,e(`accounts.load_failed`)))}finally{x(!1)}},[e]);(0,h.useEffect)(()=>{i&&I()},[i,I]);let L=async t=>{t.preventDefault(),C(null),T(null),N(!0);try{await a.post(`/api/accounts`,{username:E,password:O,role:A}),D(``),k(``),j(`viewer`),T(e(`accounts.created`)),await I()}catch(t){C(_(t,e(`accounts.create_failed`)))}finally{N(!1)}},R=async t=>{if(window.confirm(e(`accounts.confirm_delete`,{username:t.username}))){C(null),T(null);try{await a.delete(`/api/accounts/${encodeURIComponent(t.username)}`),T(e(`accounts.deleted`,{username:t.username})),await I()}catch(t){C(_(t,e(`accounts.delete_failed`)))}}},z=async(t,n)=>{C(null),T(null);try{await a.put(`/api/accounts/${encodeURIComponent(t.username)}/role`,{role:n}),await I()}catch(t){C(_(t,e(`accounts.role_failed`))),await I()}},B=async t=>{let n=window.prompt(e(`accounts.prompt_new_password`,{username:t.username}));if(!n)return;C(null),T(null);let r=o(n,t.username);if(r){C(e(l[r],{min:8}));return}try{await a.put(`/api/accounts/${encodeURIComponent(t.username)}/password`,{password:n}),T(e(`accounts.password_reset`,{username:t.username}))}catch(t){C(_(t,e(`accounts.password_failed`)))}};return i?(0,g.jsxs)(m,{width:`wide`,children:[S&&(0,g.jsx)(u,{variant:`error`,message:S}),w&&(0,g.jsx)(u,{variant:`success`,message:w}),(0,g.jsx)(f,{icon:(0,g.jsx)(t,{}),title:e(`accounts.title`),children:b?(0,g.jsx)(`div`,{className:`flex justify-center py-6`,children:(0,g.jsx)(`span`,{className:`loading loading-spinner loading-md text-primary`})}):(0,g.jsx)(`div`,{className:`stg-inset overflow-x-auto`,children:(0,g.jsxs)(`table`,{className:`table table-sm`,children:[(0,g.jsx)(`thead`,{children:(0,g.jsxs)(`tr`,{children:[(0,g.jsx)(`th`,{children:e(`accounts.username`)}),(0,g.jsx)(`th`,{children:e(`accounts.role`)}),(0,g.jsx)(`th`,{className:`text-right`,children:e(`accounts.actions`)})]})}),(0,g.jsx)(`tbody`,{children:v.map(t=>{let n=t.username.toLowerCase()===(r??``).toLowerCase();return(0,g.jsxs)(`tr`,{children:[(0,g.jsxs)(`td`,{children:[(0,g.jsx)(`span`,{className:`font-medium font-mono`,children:t.username}),n&&(0,g.jsx)(`span`,{className:`ml-2 badge badge-ghost badge-xs`,children:e(`accounts.you`)})]}),(0,g.jsx)(`td`,{children:(0,g.jsxs)(`select`,{className:`select select-xs select-bordered`,value:t.role,disabled:n,onChange:e=>z(t,e.target.value),children:[(0,g.jsx)(`option`,{value:`admin`,children:e(`accounts.role_admin`)}),(0,g.jsx)(`option`,{value:`viewer`,children:e(`accounts.role_viewer`)})]})}),(0,g.jsxs)(`td`,{className:`text-right whitespace-nowrap`,children:[(0,g.jsx)(`button`,{className:`btn btn-ghost btn-xs`,onClick:()=>B(t),children:e(`accounts.reset_password`)}),(0,g.jsx)(`button`,{className:`btn btn-ghost btn-xs text-error ml-1`,disabled:n,onClick:()=>R(t),children:e(`accounts.delete`)})]})]},t.username)})})]})})}),(0,g.jsx)(`form`,{onSubmit:L,children:(0,g.jsx)(f,{icon:(0,g.jsx)(n,{}),title:e(`accounts.add_title`),description:e(`accounts.add_intro`),footer:(0,g.jsx)(p,{children:(0,g.jsxs)(`button`,{type:`submit`,className:`btn btn-primary btn-sm gap-2`,disabled:M||!E||!O||!!F,children:[M&&(0,g.jsx)(`span`,{className:`loading loading-spinner loading-xs`}),e(`accounts.add_button`)]})}),children:(0,g.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-[1fr_1fr_auto] gap-3`,children:[(0,g.jsx)(d,{label:e(`accounts.username`),children:(0,g.jsx)(`input`,{type:`text`,className:`input input-bordered w-full font-mono`,placeholder:e(`accounts.username`),autoComplete:`off`,required:!0,value:E,onChange:e=>D(e.target.value)})}),(0,g.jsx)(d,{label:e(`accounts.password`),error:F||void 0,children:(0,g.jsx)(`input`,{type:`password`,className:`input input-bordered w-full font-mono ${F?`input-error`:``}`,placeholder:e(`accounts.password`),autoComplete:`new-password`,required:!0,minLength:8,"aria-invalid":F?!0:void 0,"aria-describedby":F?`accounts-password-error`:void 0,value:O,onChange:e=>k(e.target.value)})}),(0,g.jsx)(d,{label:e(`accounts.role`),className:`sm:w-40`,children:(0,g.jsxs)(`select`,{className:`select select-bordered w-full`,value:A,onChange:e=>j(e.target.value),children:[(0,g.jsx)(`option`,{value:`viewer`,children:e(`accounts.role_viewer`)}),(0,g.jsx)(`option`,{value:`admin`,children:e(`accounts.role_admin`)})]})})]})})})]}):(0,g.jsx)(m,{width:`wide`,children:(0,g.jsx)(u,{variant:`warning`,message:e(`accounts.admin_only`)})})}export{v as default};