boneio 1.3.0.dev17__tar.gz → 1.3.0.dev18__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 (443) hide show
  1. {boneio-1.3.0.dev17/boneio.egg-info → boneio-1.3.0.dev18}/PKG-INFO +1 -1
  2. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/cover/cover.py +17 -9
  3. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/cover/time_based.py +21 -6
  4. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/config/config_helper.py +8 -9
  5. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/discovery.py +86 -77
  6. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/covers.py +139 -98
  7. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/display.py +1 -1
  8. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/inputs.py +172 -182
  9. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/manager.py +36 -2
  10. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/modbus.py +2 -2
  11. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/outputs.py +2 -2
  12. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/remote.py +20 -4
  13. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/sensors.py +6 -6
  14. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/update.py +38 -1
  15. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/remote/base.py +18 -5
  16. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/remote/mqtt.py +14 -2
  17. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/state/manager.py +12 -2
  18. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/display/oled.py +77 -80
  19. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/integration/lox_template.py +1 -1
  20. boneio-1.3.0.dev18/boneio/migrations/__init__.py +10 -0
  21. boneio-1.3.0.dev18/boneio/migrations/actions.py +230 -0
  22. boneio-1.3.0.dev18/boneio/migrations/assets/MANIFEST.sha256 +19 -0
  23. boneio-1.3.0.dev18/boneio/migrations/assets/docker/daemon.json +7 -0
  24. boneio-1.3.0.dev18/boneio/migrations/assets/docker/nodered/docker-compose.yaml +30 -0
  25. boneio-1.3.0.dev18/boneio/migrations/assets/docker/nodered/nginx/default.conf +50 -0
  26. boneio-1.3.0.dev18/boneio/migrations/assets/docker/nodered/node-red/settings.js +5 -0
  27. boneio-1.3.0.dev18/boneio/migrations/assets/journald/journald.conf +6 -0
  28. boneio-1.3.0.dev18/boneio/migrations/assets/mosquitto/boneio.conf +2 -0
  29. boneio-1.3.0.dev18/boneio/migrations/assets/sudoers/boneio +15 -0
  30. boneio-1.3.0.dev18/boneio/migrations/assets/systemd/boneio-oled-boot.service +17 -0
  31. boneio-1.3.0.dev18/boneio/migrations/assets/systemd/boneio.service +15 -0
  32. boneio-1.3.0.dev18/boneio/migrations/assets/systemd/set-hostname-once.service +12 -0
  33. boneio-1.3.0.dev18/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +10 -0
  34. boneio-1.3.0.dev18/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +257 -0
  35. boneio-1.3.0.dev18/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +18 -0
  36. boneio-1.3.0.dev18/boneio/migrations/assets/usr-sbin/oled_msg.py +110 -0
  37. boneio-1.3.0.dev18/boneio/migrations/assets/usr-sbin/oled_msg.sh +17 -0
  38. boneio-1.3.0.dev18/boneio/migrations/bootstrap/boneio-migrate +389 -0
  39. boneio-1.3.0.dev18/boneio/migrations/bootstrap/install-helper.sh +43 -0
  40. boneio-1.3.0.dev18/boneio/migrations/bootstrap/sudoers-migrate +2 -0
  41. boneio-1.3.0.dev18/boneio/migrations/runner.py +469 -0
  42. boneio-1.3.0.dev18/boneio/migrations/versions/__init__.py +1 -0
  43. boneio-1.3.0.dev18/boneio/migrations/versions/v1_3_0_baseline.py +168 -0
  44. boneio-1.3.0.dev18/boneio/migrations/versions/v1_3_0dev18_fix_oled_boot.py +75 -0
  45. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/client.py +116 -2
  46. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/coordinator.py +7 -0
  47. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/runner.py +3 -3
  48. boneio-1.3.0.dev18/boneio/version.py +2 -0
  49. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/app.py +4 -0
  50. boneio-1.3.0.dev18/boneio/webui/frontend-dist/assets/ConfigEditor-vyhv5yQV.js +1 -0
  51. boneio-1.3.0.dev17/boneio/webui/frontend-dist/assets/aiConfig-DCT969oj.js → boneio-1.3.0.dev18/boneio/webui/frontend-dist/assets/aiConfig-LL3nlemJ.js +2 -2
  52. boneio-1.3.0.dev17/boneio/webui/frontend-dist/assets/aiWizardPrompt-Dpts0jpN.js → boneio-1.3.0.dev18/boneio/webui/frontend-dist/assets/aiWizardPrompt-CmumVq54.js +1 -1
  53. boneio-1.3.0.dev18/boneio/webui/frontend-dist/assets/index-D7hfuu2N.css +2 -0
  54. boneio-1.3.0.dev18/boneio/webui/frontend-dist/assets/index-D97SbEW0.js +44 -0
  55. boneio-1.3.0.dev18/boneio/webui/frontend-dist/assets/useTranslation-DxGR4SjZ.js +13 -0
  56. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/index.html +4 -4
  57. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/sw.js +1 -1
  58. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/__init__.py +2 -0
  59. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/config.py +59 -43
  60. boneio-1.3.0.dev18/boneio/webui/routes/migrations.py +187 -0
  61. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/modbus.py +69 -4
  62. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18/boneio.egg-info}/PKG-INFO +1 -1
  63. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio.egg-info/SOURCES.txt +32 -6
  64. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/pyproject.toml +8 -0
  65. boneio-1.3.0.dev17/boneio/version.py +0 -2
  66. boneio-1.3.0.dev17/boneio/webui/frontend-dist/assets/ConfigEditor-QHQCOrq6.js +0 -1
  67. boneio-1.3.0.dev17/boneio/webui/frontend-dist/assets/index-BvmO3gdL.css +0 -2
  68. boneio-1.3.0.dev17/boneio/webui/frontend-dist/assets/index-Dzdilk6s.js +0 -44
  69. boneio-1.3.0.dev17/boneio/webui/frontend-dist/assets/useTranslation-DjBDGbAU.js +0 -13
  70. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/LICENSE +0 -0
  71. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/MANIFEST.in +0 -0
  72. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/README.md +0 -0
  73. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/__init__.py +0 -0
  74. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.2/input.yaml +0 -0
  75. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.2/output_24_16.yaml +0 -0
  76. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.2/output_32_10.yaml +0 -0
  77. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.2/output_32_5.yaml +0 -0
  78. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.2/output_cover.yaml +0 -0
  79. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  80. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.3/input.yaml +0 -0
  81. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.3/output_24_16.yaml +0 -0
  82. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.3/output_32_10.yaml +0 -0
  83. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.3/output_32_5.yaml +0 -0
  84. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.3/output_cover.yaml +0 -0
  85. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  86. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.4/input.yaml +0 -0
  87. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.4/output_24_16.yaml +0 -0
  88. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.4/output_32_10.yaml +0 -0
  89. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.4/output_32_5.yaml +0 -0
  90. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.4/output_cover.yaml +0 -0
  91. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  92. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.5/input.yaml +0 -0
  93. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.5/output_24_16.yaml +0 -0
  94. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.5/output_32_10.yaml +0 -0
  95. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.5/output_cover.yaml +0 -0
  96. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  97. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.6/input.yaml +0 -0
  98. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.6/output_24_16.yaml +0 -0
  99. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.6/output_32_10.yaml +0 -0
  100. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.6/output_cover.yaml +0 -0
  101. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  102. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.7/input.yaml +0 -0
  103. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.7/output_24_16.yaml +0 -0
  104. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.7/output_32_10.yaml +0 -0
  105. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.7/output_48_4.yaml +0 -0
  106. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.7/output_cover.yaml +0 -0
  107. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  108. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.8/input.yaml +0 -0
  109. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.8/output_24_16.yaml +0 -0
  110. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.8/output_32_10.yaml +0 -0
  111. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.8/output_48_4.yaml +0 -0
  112. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.8/output_cover.yaml +0 -0
  113. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  114. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/bonecli.py +0 -0
  115. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/__init__.py +0 -0
  116. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/cover/__init__.py +0 -0
  117. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/cover/venetian.py +0 -0
  118. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/group/__init__.py +0 -0
  119. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/group/output_group.py +0 -0
  120. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/input/__init__.py +0 -0
  121. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/input/binary_sensor.py +0 -0
  122. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/input/detectors.py +0 -0
  123. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/input/event.py +0 -0
  124. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/irrigation/__init__.py +0 -0
  125. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/irrigation/controller.py +0 -0
  126. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/irrigation/water_source.py +0 -0
  127. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/output/__init__.py +0 -0
  128. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/output/basic.py +0 -0
  129. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/output/mcp.py +0 -0
  130. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/output/pca.py +0 -0
  131. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/output/pcf.py +0 -0
  132. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/sensor/__init__.py +0 -0
  133. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/sensor/virtual_energy.py +0 -0
  134. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/template/__init__.py +0 -0
  135. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/template/alarm_panel.py +0 -0
  136. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/template/gate_cover.py +0 -0
  137. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/components/template/thermostat.py +0 -0
  138. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/const.py +0 -0
  139. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/__init__.py +0 -0
  140. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/cloud/__init__.py +0 -0
  141. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/cloud/data/__init__.py +0 -0
  142. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
  143. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  144. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  145. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/cloud/registration.py +0 -0
  146. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/cloud/secrets.py +0 -0
  147. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/config/__init__.py +0 -0
  148. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/config/migrations/__init__.py +0 -0
  149. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  150. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/config/migrations/v2_transition.py +0 -0
  151. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/config/package-lock.json +0 -0
  152. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/config/package.json +0 -0
  153. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/config/schema_converter.py +0 -0
  154. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/config/yaml_util.py +0 -0
  155. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/events/__init__.py +0 -0
  156. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/events/bus.py +0 -0
  157. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/__init__.py +0 -0
  158. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/action_conditions.py +0 -0
  159. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/canopen.py +0 -0
  160. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/irrigation.py +0 -0
  161. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/templates/__init__.py +0 -0
  162. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/templates/alarm.py +0 -0
  163. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/templates/gate_cover.py +0 -0
  164. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/templates/thermostat.py +0 -0
  165. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/manager/templates.py +0 -0
  166. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/messaging/__init__.py +0 -0
  167. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/messaging/basic.py +0 -0
  168. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/messaging/basic_mqtt.py +0 -0
  169. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/messaging/composite.py +0 -0
  170. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/messaging/local.py +0 -0
  171. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/messaging/lox.py +0 -0
  172. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/messaging/loxone.py +0 -0
  173. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/messaging/mqtt.py +0 -0
  174. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/messaging/queue.py +0 -0
  175. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/remote/__init__.py +0 -0
  176. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/remote/can.py +0 -0
  177. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/remote/esphome.py +0 -0
  178. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/remote/wled.py +0 -0
  179. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/sensor/__init__.py +0 -0
  180. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/sensor/base.py +0 -0
  181. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/sensor/system.py +0 -0
  182. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/state/__init__.py +0 -0
  183. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/system/__init__.py +0 -0
  184. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/system/host_data.py +0 -0
  185. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/system/monitor.py +0 -0
  186. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/utils/__init__.py +0 -0
  187. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/utils/async_updater.py +0 -0
  188. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/utils/conditions.py +0 -0
  189. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/utils/filter.py +0 -0
  190. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/utils/font_util.py +0 -0
  191. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/utils/logger.py +0 -0
  192. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/utils/timeperiod.py +0 -0
  193. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/core/utils/util.py +0 -0
  194. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/24x16/adc.yaml +0 -0
  195. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  196. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/24x16/config.yaml +0 -0
  197. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/24x16/event.yaml +0 -0
  198. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/24x16/mqtt.yaml +0 -0
  199. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  200. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/32x10/adc.yaml +0 -0
  201. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  202. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/32x10/config.yaml +0 -0
  203. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/32x10/event.yaml +0 -0
  204. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/32x10/mqtt.yaml +0 -0
  205. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  206. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/48x4/adc.yaml +0 -0
  207. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  208. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/48x4/config.yaml +0 -0
  209. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/48x4/event.yaml +0 -0
  210. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/48x4/mqtt.yaml +0 -0
  211. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  212. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/__init__.py +0 -0
  213. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/can_master.yaml +0 -0
  214. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/can_slave.yaml +0 -0
  215. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover/adc.yaml +0 -0
  216. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  217. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover/config.yaml +0 -0
  218. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover/cover.yaml +0 -0
  219. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover/event.yaml +0 -0
  220. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover/mqtt.yaml +0 -0
  221. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover/outputCover.yaml +0 -0
  222. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover_mix/adc.yaml +0 -0
  223. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  224. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover_mix/config.yaml +0 -0
  225. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover_mix/cover.yaml +0 -0
  226. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover_mix/event.yaml +0 -0
  227. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  228. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  229. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/adc.yaml +0 -0
  230. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  231. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  232. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  233. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  234. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/event_all.yaml +0 -0
  235. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  236. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  237. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  238. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  239. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  240. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  241. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/exceptions.py +0 -0
  242. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/__init__.py +0 -0
  243. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/analog/__init__.py +0 -0
  244. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/analog/adc.py +0 -0
  245. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/can/__init__.py +0 -0
  246. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/can/bridge.py +0 -0
  247. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/can/client.py +0 -0
  248. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/can/interface.py +0 -0
  249. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/can/node.py +0 -0
  250. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/can/node_id.py +0 -0
  251. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/can/sudoers.py +0 -0
  252. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/can/test_od.py +0 -0
  253. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/display/__init__.py +0 -0
  254. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/display/early_oled.py +0 -0
  255. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  256. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/gpio/__init__.py +0 -0
  257. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  258. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  259. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  260. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  261. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/gpio/input/__init__.py +0 -0
  262. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/gpio/input/base.py +0 -0
  263. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/gpio/input/manager.py +0 -0
  264. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/i2c/__init__.py +0 -0
  265. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/i2c/bus.py +0 -0
  266. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/i2c/ina219.py +0 -0
  267. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/i2c/ina219_driver.py +0 -0
  268. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/i2c/mcp9808.py +0 -0
  269. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/i2c/pct2075.py +0 -0
  270. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/onewire/__init__.py +0 -0
  271. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/onewire/bus.py +0 -0
  272. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/onewire/dallas.py +0 -0
  273. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/onewire/ds2482.py +0 -0
  274. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/sensor/__init__.py +0 -0
  275. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  276. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/sensor/temperature/base.py +0 -0
  277. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  278. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  279. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/integration/__init__.py +0 -0
  280. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/integration/homeassistant.py +0 -0
  281. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/integration/interlock.py +0 -0
  282. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/__init__.py +0 -0
  283. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/cli.py +0 -0
  284. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/__init__.py +0 -0
  285. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  286. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  287. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  288. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  289. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  290. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  291. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  292. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  293. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  294. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/inverters/sofar.json +0 -0
  295. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/inverters/thessla.json +0 -0
  296. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  297. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  298. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  299. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/other/wanas415.json +0 -0
  300. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  301. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/sensors/cwt.json +0 -0
  302. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/sensors/dts1964_3f.json +0 -0
  303. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  304. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  305. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  306. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  307. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/sensors/pt100.json +0 -0
  308. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/sensors/sht20.json +0 -0
  309. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/devices/sensors/sht30.json +0 -0
  310. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/__init__.py +0 -0
  311. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/base.py +0 -0
  312. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/derived/__init__.py +0 -0
  313. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/derived/numeric.py +0 -0
  314. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/derived/select.py +0 -0
  315. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/derived/switch.py +0 -0
  316. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/derived/text.py +0 -0
  317. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/sensor/__init__.py +0 -0
  318. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/sensor/binary.py +0 -0
  319. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/sensor/numeric.py +0 -0
  320. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/sensor/text.py +0 -0
  321. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/writeable/__init__.py +0 -0
  322. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/writeable/binary.py +0 -0
  323. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/entities/writeable/numeric.py +0 -0
  324. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/modbus/utils.py +0 -0
  325. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/models/__init__.py +0 -0
  326. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/models/actions.py +0 -0
  327. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/models/events.py +0 -0
  328. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/models/files.py +0 -0
  329. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/models/logs.py +0 -0
  330. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/models/mqtt.py +0 -0
  331. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/models/state.py +0 -0
  332. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/schema/actions.yaml +0 -0
  333. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/schema/actions_sensor.yaml +0 -0
  334. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/schema/actions_switch.yaml +0 -0
  335. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/schema/condition.yaml +0 -0
  336. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/schema/filters.yaml +0 -0
  337. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/schema/filters_adc.yaml +0 -0
  338. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/schema/id.yaml +0 -0
  339. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/schema/remote_devices.yaml +0 -0
  340. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/schema/schema.yaml +0 -0
  341. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/schema/temp_unit.yaml +0 -0
  342. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/schema/update_interval.yaml +0 -0
  343. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/action_validation.py +0 -0
  344. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/assets/codicon-DCmgc-ay.ttf +0 -0
  345. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/assets/editor.worker-BVjSvWeP.js +0 -0
  346. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/assets/json.worker-CqOJL4FD.js +0 -0
  347. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/assets/monaco-B9WiNxkw.css +0 -0
  348. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/assets/monaco-CAZoGZNF.js +0 -0
  349. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/assets/rolldown-runtime-Dw2cE7zH.js +0 -0
  350. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/assets/vendor-BD5Ml_Uz.js +0 -0
  351. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-BJd1pjeW.js +0 -0
  352. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/assets/yaml.worker-nZQZSRZ7.js +0 -0
  353. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  354. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  355. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/boneio.svg +0 -0
  356. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  357. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  358. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  359. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  360. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  361. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  362. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/config.schema.json +0 -0
  363. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  364. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  365. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  366. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  367. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  368. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  369. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  370. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  371. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  372. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  373. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  374. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  375. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
  376. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  377. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  378. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  379. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  380. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  381. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  382. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  383. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  384. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  385. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  386. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
  387. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/frontend-dist/workbox-4eca85ba.js +0 -0
  388. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/middleware/__init__.py +0 -0
  389. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/middleware/auth.py +0 -0
  390. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/auth.py +0 -0
  391. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/caddy.py +0 -0
  392. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/can.py +0 -0
  393. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/covers.py +0 -0
  394. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/irrigation.py +0 -0
  395. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/outputs.py +0 -0
  396. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/remote_devices.py +0 -0
  397. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/sensors.py +0 -0
  398. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/system.py +0 -0
  399. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/templates.py +0 -0
  400. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/timezone_sudoers.py +0 -0
  401. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/tools.py +0 -0
  402. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/routes/update.py +0 -0
  403. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/adc.schema.json +0 -0
  404. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/areas.schema.json +0 -0
  405. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  406. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/boneio.schema.json +0 -0
  407. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/can.schema.json +0 -0
  408. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/config.schema.json +0 -0
  409. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/cover.schema.json +0 -0
  410. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/dallas.schema.json +0 -0
  411. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/ds2482.schema.json +0 -0
  412. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/event.schema.json +0 -0
  413. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/ina219.schema.json +0 -0
  414. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/irrigation.schema.json +0 -0
  415. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/lm75.schema.json +0 -0
  416. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/logger.schema.json +0 -0
  417. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/lox_udp.schema.json +0 -0
  418. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/mcp23017.schema.json +0 -0
  419. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/mcp9808.schema.json +0 -0
  420. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/modbus.schema.json +0 -0
  421. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/modbus_devices.schema.json +0 -0
  422. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/mqtt.schema.json +0 -0
  423. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/oled.schema.json +0 -0
  424. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/output.schema.json +0 -0
  425. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/output_group.schema.json +0 -0
  426. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/pca9685.schema.json +0 -0
  427. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/pcf8575.schema.json +0 -0
  428. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/remote_devices.schema.json +0 -0
  429. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/sensor.schema.json +0 -0
  430. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/template.schema.json +0 -0
  431. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  432. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/schema/web.schema.json +0 -0
  433. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/services/__init__.py +0 -0
  434. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/services/logs.py +0 -0
  435. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/web_server.py +0 -0
  436. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio/webui/websocket_manager.py +0 -0
  437. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio.egg-info/dependency_links.txt +0 -0
  438. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio.egg-info/entry_points.txt +0 -0
  439. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio.egg-info/requires.txt +0 -0
  440. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/boneio.egg-info/top_level.txt +0 -0
  441. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/setup.cfg +0 -0
  442. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/setup.py +0 -0
  443. {boneio-1.3.0.dev17 → boneio-1.3.0.dev18}/tests/test_py313_compatibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boneio
3
- Version: 1.3.0.dev17
3
+ Version: 1.3.0.dev18
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
@@ -187,13 +187,17 @@ class BaseCover(BaseCoverABC, BasicMqtt):
187
187
 
188
188
  self._event_bus.add_sigterm_listener(self.on_exit)
189
189
 
190
- self._loop.call_soon_threadsafe(
191
- self._loop.call_later,
192
- 0.5,
193
- self.send_state,
194
- self.state,
195
- self.json_position
196
- )
190
+ try:
191
+ self._loop.call_soon_threadsafe(
192
+ self._loop.call_later,
193
+ 0.5,
194
+ self.send_state,
195
+ self.state,
196
+ self.json_position
197
+ )
198
+ except RuntimeError:
199
+ # Event loop is closed (e.g. during tests)
200
+ pass
197
201
 
198
202
  async def on_exit(self) -> None:
199
203
  """Stop on exit."""
@@ -206,8 +210,12 @@ class BaseCover(BaseCoverABC, BasicMqtt):
206
210
  self._open_relay.turn_off()
207
211
  self._close_relay.turn_off()
208
212
  # Send relay states to WebSocket (not MQTT - that's handled by output_type check)
209
- asyncio.create_task(self._open_relay.async_send_state())
210
- asyncio.create_task(self._close_relay.async_send_state())
213
+ try:
214
+ asyncio.create_task(self._open_relay.async_send_state())
215
+ asyncio.create_task(self._close_relay.async_send_state())
216
+ except RuntimeError:
217
+ # Event loop is closed (e.g. during tests or shutdown)
218
+ pass
211
219
  if self._current_operation in (OPENING, CLOSING):
212
220
  self._last_operation = self._current_operation
213
221
  self._current_operation = IDLE
@@ -43,7 +43,7 @@ class TimeBasedCover(BaseCover):
43
43
 
44
44
  def _move_cover(self, direction: str, duration: float, target_position: int | None = None):
45
45
  """Run in sepearate thread.
46
-
46
+
47
47
  Args:
48
48
  direction: Direction of movement (OPEN or CLOSE)
49
49
  duration: Full time for 0-100% movement in milliseconds
@@ -60,7 +60,10 @@ class TimeBasedCover(BaseCover):
60
60
 
61
61
  if total_steps == 0 or duration == 0:
62
62
  self._current_operation = IDLE
63
- self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
63
+ try:
64
+ self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
65
+ except RuntimeError:
66
+ pass
64
67
  return
65
68
 
66
69
  # Calculate actual duration based on remaining distance
@@ -69,7 +72,10 @@ class TimeBasedCover(BaseCover):
69
72
 
70
73
  relay.turn_on()
71
74
  # Send relay state to WebSocket (not MQTT - that's handled by output_type check)
72
- self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
75
+ try:
76
+ self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
77
+ except RuntimeError:
78
+ pass
73
79
  start_time = time.monotonic()
74
80
 
75
81
  while not self._stop_event.is_set():
@@ -84,7 +90,10 @@ class TimeBasedCover(BaseCover):
84
90
 
85
91
  self._last_timestamp = current_time # Użyj pobranego czasu
86
92
  if current_time - self._last_update_time >= 1:
87
- self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
93
+ try:
94
+ self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
95
+ except RuntimeError:
96
+ break
88
97
  self._last_update_time = current_time
89
98
 
90
99
  if target_position is not None:
@@ -98,9 +107,15 @@ class TimeBasedCover(BaseCover):
98
107
  time.sleep(0.05) # Małe opóźnienie, aby nie blokować CPU
99
108
  relay.turn_off()
100
109
  # Send relay state to WebSocket (not MQTT - that's handled by output_type check)
101
- self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
110
+ try:
111
+ self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
112
+ except RuntimeError:
113
+ pass
102
114
  self._current_operation = IDLE
103
- self._loop.call_soon_threadsafe(lambda: self.send_state_and_save(self.json_position))
115
+ try:
116
+ self._loop.call_soon_threadsafe(lambda: self.send_state_and_save(self.json_position))
117
+ except RuntimeError:
118
+ pass
104
119
  self._last_update_time = time.monotonic() # Upewnij się, że aktualizacja jest wysłana na końcu ruchu
105
120
 
106
121
  async def run_cover(self, current_operation: str, target_position: int | None = None) -> None:
@@ -386,8 +386,14 @@ class ConfigHelper:
386
386
  def reload_config(self) -> dict[str, Any]:
387
387
  """Reload configuration from file and update cache.
388
388
 
389
- Waits for any background config cache rebuild to complete before
390
- loading, so the fast cached path is used instead of full validation.
389
+ Loads config from file using load_config_from_file() which tries the
390
+ disk cache first (~0.5s) and falls back to full Cerberus validation
391
+ (~20s) on cache miss. This method does NOT wait for any background
392
+ cache rebuild — it's independent.
393
+
394
+ NOTE: This method may take up to ~20s on BeagleBone if disk cache
395
+ is not available. Callers should run it via asyncio.to_thread() to
396
+ avoid blocking the event loop.
391
397
 
392
398
  Returns:
393
399
  dict: Reloaded configuration dictionary
@@ -395,13 +401,6 @@ class ConfigHelper:
395
401
  Raises:
396
402
  ValueError: If config_file_path is not set
397
403
  """
398
- # Wait for background cache rebuild (started after config save)
399
- try:
400
- from boneio.webui.routes.config import wait_for_config_cache
401
- wait_for_config_cache(timeout=30.0)
402
- except ImportError:
403
- pass # Web module not available (e.g., during tests)
404
-
405
404
  _LOGGER.info("Reloading config from file: %s", self._config_file_path)
406
405
  return self.get_config(force_reload=True)
407
406
 
@@ -18,10 +18,10 @@ _LOGGER = logging.getLogger(__name__)
18
18
 
19
19
  class BlackDiscoveryPublisher:
20
20
  """Publishes BoneIO Black device discovery information to MQTT.
21
-
21
+
22
22
  This is NOT Home Assistant discovery - it's for autodiscovery
23
23
  of neighboring BoneIO Black devices.
24
-
24
+
25
25
  Discovery is split into separate topics for efficiency:
26
26
  - discovery/device - Device info (id, name, serial, firmware)
27
27
  - discovery/outputs - Available outputs
@@ -29,13 +29,13 @@ class BlackDiscoveryPublisher:
29
29
  - discovery/inputs - Available inputs
30
30
  - discovery/sensors - Available sensors
31
31
  - discovery/modbus - Available modbus devices
32
-
32
+
33
33
  All topics are published with retain=True.
34
34
  """
35
-
35
+
36
36
  def __init__(self, manager: Manager, message_bus: MessageBus) -> None:
37
37
  """Initialize discovery publisher.
38
-
38
+
39
39
  Args:
40
40
  manager: Manager instance
41
41
  message_bus: Message bus for MQTT communication
@@ -43,10 +43,10 @@ class BlackDiscoveryPublisher:
43
43
  self._manager = manager
44
44
  self._message_bus = message_bus
45
45
  self._base_topic = f"{manager._config_helper.topic_prefix}/discovery"
46
-
46
+
47
47
  def _publish(self, subtopic: str, payload: Any) -> None:
48
48
  """Publish payload to discovery subtopic with retain.
49
-
49
+
50
50
  Args:
51
51
  subtopic: Subtopic name (e.g., "device", "outputs")
52
52
  payload: Payload to publish (will be JSON encoded)
@@ -55,11 +55,11 @@ class BlackDiscoveryPublisher:
55
55
  payload_json = json.dumps(payload)
56
56
  self._message_bus.send_message(topic=topic, payload=payload_json, retain=True)
57
57
  _LOGGER.debug("Published discovery/%s: %s", subtopic, payload_json)
58
-
58
+
59
59
  def _build_device_info(self) -> dict[str, Any]:
60
60
  """Build device information payload."""
61
61
  from boneio.version import __version__
62
-
62
+
63
63
  config_helper = self._manager._config_helper
64
64
  device_info = {
65
65
  "id": config_helper._serial_no or "unknown",
@@ -72,104 +72,116 @@ class BlackDiscoveryPublisher:
72
72
  if config_helper._network_info:
73
73
  device_info["ip"] = config_helper._network_info.get("ip", "")
74
74
  return device_info
75
-
75
+
76
76
  def _build_outputs(self) -> list[dict[str, Any]]:
77
77
  """Build outputs list (excludes cover outputs - those are in discovery/covers)."""
78
78
  outputs = []
79
- if hasattr(self._manager, 'outputs') and self._manager.outputs:
79
+ if hasattr(self._manager, "outputs") and self._manager.outputs:
80
80
  for output_id, output in self._manager.outputs._outputs.items():
81
81
  # Skip cover outputs - they are published in discovery/covers
82
- output_type = getattr(output, 'output_type', None)
83
- if output_type == 'cover':
82
+ output_type = getattr(output, "output_type", None)
83
+ if output_type == "cover":
84
84
  continue
85
85
  output_info = {
86
86
  "id": output_id,
87
- "name": getattr(output, 'name', output_id),
87
+ "name": getattr(output, "name", output_id),
88
88
  }
89
89
  if output_type:
90
90
  output_info["type"] = output_type
91
91
  outputs.append(output_info)
92
92
  return outputs
93
-
93
+
94
94
  def _build_covers(self) -> list[dict[str, Any]]:
95
- """Build covers list."""
95
+ """Build covers list with tilt support info."""
96
96
  covers = []
97
- if hasattr(self._manager, 'covers') and self._manager.covers:
97
+ if hasattr(self._manager, "covers") and self._manager.covers:
98
98
  for cover_id, cover in self._manager.covers._covers.items():
99
- covers.append({
99
+ cover_info: dict[str, Any] = {
100
100
  "id": cover_id,
101
- "name": getattr(cover, 'name', cover_id),
102
- })
101
+ "name": getattr(cover, "name", cover_id),
102
+ "kind": getattr(cover, "kind", "time"),
103
+ "supports_tilt": getattr(cover, "kind", "time") == "venetian",
104
+ }
105
+ covers.append(cover_info)
103
106
  return covers
104
-
107
+
105
108
  def _build_inputs(self) -> list[dict[str, Any]]:
106
109
  """Build inputs list."""
107
110
  inputs = []
108
- if hasattr(self._manager, 'inputs') and self._manager.inputs:
111
+ if hasattr(self._manager, "inputs") and self._manager.inputs:
109
112
  for input_id, input_device in self._manager.inputs._inputs.items():
110
- inputs.append({
111
- "id": input_id,
112
- "name": getattr(input_device, 'name', input_id),
113
- })
113
+ inputs.append(
114
+ {
115
+ "id": input_id,
116
+ "name": getattr(input_device, "name", input_id),
117
+ }
118
+ )
114
119
  return inputs
115
-
120
+
116
121
  def _build_sensors(self) -> list[dict[str, Any]]:
117
122
  """Build sensors list."""
118
123
  sensors = []
119
- if hasattr(self._manager, 'sensors') and self._manager.sensors:
120
- if hasattr(self._manager.sensors, '_dallas_sensors'):
124
+ if hasattr(self._manager, "sensors") and self._manager.sensors:
125
+ if hasattr(self._manager.sensors, "_dallas_sensors"):
121
126
  for sensor in self._manager.sensors._dallas_sensors:
122
- sensors.append({
123
- "id": sensor.id,
124
- "name": sensor.name,
125
- "type": "temperature",
126
- })
127
- if hasattr(self._manager.sensors, '_adc_sensors'):
127
+ sensors.append(
128
+ {
129
+ "id": sensor.id,
130
+ "name": sensor.name,
131
+ "type": "temperature",
132
+ }
133
+ )
134
+ if hasattr(self._manager.sensors, "_adc_sensors"):
128
135
  for sensor in self._manager.sensors._adc_sensors:
129
- sensors.append({
130
- "id": sensor.id,
131
- "name": sensor.name,
132
- "type": "adc",
133
- })
136
+ sensors.append(
137
+ {
138
+ "id": sensor.id,
139
+ "name": sensor.name,
140
+ "type": "adc",
141
+ }
142
+ )
134
143
  return sensors
135
-
144
+
136
145
  def _build_modbus(self) -> list[dict[str, Any]]:
137
146
  """Build modbus devices list."""
138
147
  modbus_devices = []
139
- if hasattr(self._manager, 'modbus') and self._manager.modbus:
140
- if hasattr(self._manager.modbus, '_modbus_coordinators'):
141
- for device_id, device in self._manager.modbus._modbus_coordinators.items():
142
- device_info = {
143
- "id": device_id,
144
- "name": getattr(device, 'name', device_id),
145
- }
146
- if hasattr(device, 'model'):
147
- device_info["model"] = device.model
148
- modbus_devices.append(device_info)
148
+ if (
149
+ hasattr(self._manager, "modbus")
150
+ and self._manager.modbus
151
+ and hasattr(self._manager.modbus, "_modbus_coordinators")
152
+ ):
153
+ for device_id, device in self._manager.modbus._modbus_coordinators.items():
154
+ device_info = {
155
+ "id": device_id,
156
+ "name": getattr(device, "name", device_id),
157
+ }
158
+ if hasattr(device, "model"):
159
+ device_info["model"] = device.model
160
+ modbus_devices.append(device_info)
149
161
  return modbus_devices
150
-
162
+
151
163
  # Public methods for publishing individual sections
152
-
164
+
153
165
  def publish_device(self) -> None:
154
166
  """Publish device info to discovery/device."""
155
167
  self._publish("device", self._build_device_info())
156
-
168
+
157
169
  def publish_outputs(self) -> None:
158
170
  """Publish outputs list to discovery/outputs."""
159
171
  self._publish("outputs", self._build_outputs())
160
-
172
+
161
173
  def publish_covers(self) -> None:
162
174
  """Publish covers list to discovery/covers."""
163
175
  self._publish("covers", self._build_covers())
164
-
176
+
165
177
  def publish_inputs(self) -> None:
166
178
  """Publish inputs list to discovery/inputs."""
167
179
  self._publish("inputs", self._build_inputs())
168
-
180
+
169
181
  def publish_sensors(self) -> None:
170
182
  """Publish sensors list to discovery/sensors."""
171
183
  self._publish("sensors", self._build_sensors())
172
-
184
+
173
185
  def publish_modbus(self) -> None:
174
186
  """Publish modbus devices list to discovery/modbus."""
175
187
  self._publish("modbus", self._build_modbus())
@@ -177,13 +189,15 @@ class BlackDiscoveryPublisher:
177
189
  def _build_irrigation(self) -> list[dict[str, Any]]:
178
190
  """Build irrigation controllers list."""
179
191
  controllers = []
180
- if hasattr(self._manager, 'irrigation') and self._manager.irrigation:
192
+ if hasattr(self._manager, "irrigation") and self._manager.irrigation:
181
193
  for ctrl_id, ctrl in self._manager.irrigation._controllers.items():
182
- controllers.append({
183
- "id": ctrl_id,
184
- "name": ctrl.name,
185
- "zones": [{"id": z.id, "name": z.name} for z in ctrl.zones],
186
- })
194
+ controllers.append(
195
+ {
196
+ "id": ctrl_id,
197
+ "name": ctrl.name,
198
+ "zones": [{"id": z.id, "name": z.name} for z in ctrl.zones],
199
+ }
200
+ )
187
201
  return controllers
188
202
 
189
203
  def publish_irrigation(self) -> None:
@@ -192,7 +206,7 @@ class BlackDiscoveryPublisher:
192
206
 
193
207
  async def publish_discovery(self) -> None:
194
208
  """Publish all discovery sections.
195
-
209
+
196
210
  Publishes to:
197
211
  - boneio/{device_id}/discovery/device
198
212
  - boneio/{device_id}/discovery/outputs
@@ -201,24 +215,20 @@ class BlackDiscoveryPublisher:
201
215
  - boneio/{device_id}/discovery/sensors
202
216
  - boneio/{device_id}/discovery/modbus
203
217
  - boneio/{device_id}/discovery/irrigation
204
-
218
+
205
219
  All with retain=True.
206
-
220
+
207
221
  Does nothing if send_boneio_autodiscovery is disabled in config.
208
222
  """
209
223
  # Check if autodiscovery publishing is enabled
210
224
  if not self._manager._config_helper.send_boneio_autodiscovery:
211
225
  _LOGGER.debug("BoneIO autodiscovery publishing is disabled")
212
226
  return
213
-
227
+
214
228
  try:
215
229
  device_info = self._build_device_info()
216
- _LOGGER.info(
217
- "Publishing discovery for device '%s' to '%s/*'",
218
- device_info["id"],
219
- self._base_topic
220
- )
221
-
230
+ _LOGGER.info("Publishing discovery for device '%s' to '%s/*'", device_info["id"], self._base_topic)
231
+
222
232
  self.publish_device()
223
233
  self.publish_outputs()
224
234
  self.publish_covers()
@@ -226,9 +236,8 @@ class BlackDiscoveryPublisher:
226
236
  self.publish_sensors()
227
237
  self.publish_modbus()
228
238
  self.publish_irrigation()
229
-
239
+
230
240
  _LOGGER.info("Discovery published successfully")
231
-
241
+
232
242
  except Exception as e:
233
243
  _LOGGER.error("Failed to publish discovery: %s", e, exc_info=True)
234
-