boneio 1.5.0.dev6__tar.gz → 1.5.0.dev8__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 (472) hide show
  1. {boneio-1.5.0.dev6/boneio.egg-info → boneio-1.5.0.dev8}/PKG-INFO +1 -1
  2. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/remote/wled.py +9 -1
  3. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/runner.py +82 -0
  4. boneio-1.5.0.dev8/boneio/version.py +2 -0
  5. boneio-1.5.0.dev6/boneio/webui/frontend-dist/assets/ConfigEditor-DbZgmkmq.js → boneio-1.5.0.dev8/boneio/webui/frontend-dist/assets/ConfigEditor-D4xZU9og.js +1 -1
  6. boneio-1.5.0.dev6/boneio/webui/frontend-dist/assets/aiWizardPrompt-BubjUKaK.js → boneio-1.5.0.dev8/boneio/webui/frontend-dist/assets/aiWizardPrompt-DFwp2Xa8.js +1 -1
  7. boneio-1.5.0.dev6/boneio/webui/frontend-dist/assets/index-qx3gjAAI.js → boneio-1.5.0.dev8/boneio/webui/frontend-dist/assets/index-BpK_lX6d.js +20 -10
  8. boneio-1.5.0.dev6/boneio/webui/frontend-dist/assets/index-D6g-vdBv.css → boneio-1.5.0.dev8/boneio/webui/frontend-dist/assets/index-zdMDZxqr.css +1 -1
  9. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/index.html +2 -2
  10. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/sw.js +1 -1
  11. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/modbus.py +2 -2
  12. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8/boneio.egg-info}/PKG-INFO +1 -1
  13. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio.egg-info/SOURCES.txt +4 -4
  14. boneio-1.5.0.dev6/boneio/version.py +0 -2
  15. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/LICENSE +0 -0
  16. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/MANIFEST.in +0 -0
  17. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/README.md +0 -0
  18. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/__init__.py +0 -0
  19. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.2/input.yaml +0 -0
  20. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.2/output_24_16.yaml +0 -0
  21. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.2/output_32_10.yaml +0 -0
  22. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.2/output_32_5.yaml +0 -0
  23. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.2/output_cover.yaml +0 -0
  24. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  25. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.3/input.yaml +0 -0
  26. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.3/output_24_16.yaml +0 -0
  27. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.3/output_32_10.yaml +0 -0
  28. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.3/output_32_5.yaml +0 -0
  29. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.3/output_cover.yaml +0 -0
  30. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  31. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.4/input.yaml +0 -0
  32. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.4/output_24_16.yaml +0 -0
  33. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.4/output_32_10.yaml +0 -0
  34. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.4/output_32_5.yaml +0 -0
  35. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.4/output_cover.yaml +0 -0
  36. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  37. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.5/input.yaml +0 -0
  38. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.5/output_24_16.yaml +0 -0
  39. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.5/output_32_10.yaml +0 -0
  40. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.5/output_cover.yaml +0 -0
  41. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  42. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.6/input.yaml +0 -0
  43. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.6/output_24_16.yaml +0 -0
  44. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.6/output_32_10.yaml +0 -0
  45. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.6/output_cover.yaml +0 -0
  46. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  47. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.7/input.yaml +0 -0
  48. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.7/output_24_16.yaml +0 -0
  49. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.7/output_32_10.yaml +0 -0
  50. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.7/output_48_4.yaml +0 -0
  51. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.7/output_cover.yaml +0 -0
  52. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  53. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.8/input.yaml +0 -0
  54. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.8/output_24_16.yaml +0 -0
  55. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.8/output_32_10.yaml +0 -0
  56. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.8/output_48_4.yaml +0 -0
  57. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.8/output_cover.yaml +0 -0
  58. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  59. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/1.0/input.yaml +0 -0
  60. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/1.0/output_24_16.yaml +0 -0
  61. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/1.0/output_32_10.yaml +0 -0
  62. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/1.0/output_48_4.yaml +0 -0
  63. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/1.0/output_cover.yaml +0 -0
  64. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/boards/1.0/output_cover_mix.yaml +0 -0
  65. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/bonecli.py +0 -0
  66. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/__init__.py +0 -0
  67. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/cover/__init__.py +0 -0
  68. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/cover/cover.py +0 -0
  69. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/cover/time_based.py +0 -0
  70. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/cover/venetian.py +0 -0
  71. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/group/__init__.py +0 -0
  72. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/group/output_group.py +0 -0
  73. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/input/__init__.py +0 -0
  74. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/input/binary_sensor.py +0 -0
  75. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/input/detectors.py +0 -0
  76. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/input/event.py +0 -0
  77. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/input/remote/__init__.py +0 -0
  78. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/input/remote/base.py +0 -0
  79. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/input/remote/esphome.py +0 -0
  80. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/irrigation/__init__.py +0 -0
  81. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/irrigation/controller.py +0 -0
  82. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/irrigation/water_source.py +0 -0
  83. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/output/__init__.py +0 -0
  84. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/output/basic.py +0 -0
  85. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/output/buzzer.py +0 -0
  86. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/output/mcp.py +0 -0
  87. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/output/pca.py +0 -0
  88. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/output/pcf.py +0 -0
  89. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/output/remote.py +0 -0
  90. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/sensor/__init__.py +0 -0
  91. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/sensor/virtual_energy.py +0 -0
  92. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/template/__init__.py +0 -0
  93. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/template/alarm_panel.py +0 -0
  94. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/template/gate_cover.py +0 -0
  95. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/components/template/thermostat.py +0 -0
  96. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/const.py +0 -0
  97. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/__init__.py +0 -0
  98. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/cloud/__init__.py +0 -0
  99. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/cloud/data/__init__.py +0 -0
  100. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
  101. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  102. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  103. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/cloud/registration.py +0 -0
  104. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/cloud/secrets.py +0 -0
  105. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/config/__init__.py +0 -0
  106. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/config/config_helper.py +0 -0
  107. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/config/migrations/__init__.py +0 -0
  108. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  109. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/config/migrations/v2_transition.py +0 -0
  110. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/config/package-lock.json +0 -0
  111. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/config/package.json +0 -0
  112. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/config/schema_converter.py +0 -0
  113. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/config/yaml_util.py +0 -0
  114. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/discovery.py +0 -0
  115. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/events/__init__.py +0 -0
  116. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/events/bus.py +0 -0
  117. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/__init__.py +0 -0
  118. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/action_conditions.py +0 -0
  119. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/canopen.py +0 -0
  120. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/covers.py +0 -0
  121. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/display.py +0 -0
  122. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/inputs.py +0 -0
  123. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/irrigation.py +0 -0
  124. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/manager.py +0 -0
  125. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/modbus.py +0 -0
  126. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/outputs.py +0 -0
  127. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/remote.py +0 -0
  128. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/remote_input_registrar.py +0 -0
  129. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/sensors.py +0 -0
  130. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/templates/__init__.py +0 -0
  131. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/templates/alarm.py +0 -0
  132. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/templates/gate_cover.py +0 -0
  133. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/templates/thermostat.py +0 -0
  134. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/templates.py +0 -0
  135. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/manager/update.py +0 -0
  136. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/messaging/__init__.py +0 -0
  137. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/messaging/basic.py +0 -0
  138. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/messaging/basic_mqtt.py +0 -0
  139. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/messaging/composite.py +0 -0
  140. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/messaging/local.py +0 -0
  141. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/messaging/lox.py +0 -0
  142. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/messaging/mqtt.py +0 -0
  143. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/messaging/queue.py +0 -0
  144. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/remote/__init__.py +0 -0
  145. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/remote/base.py +0 -0
  146. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/remote/can.py +0 -0
  147. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/remote/esphome.py +0 -0
  148. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/remote/mqtt.py +0 -0
  149. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/sensor/__init__.py +0 -0
  150. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/sensor/base.py +0 -0
  151. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/sensor/system.py +0 -0
  152. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/state/__init__.py +0 -0
  153. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/state/manager.py +0 -0
  154. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/system/__init__.py +0 -0
  155. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/system/host_data.py +0 -0
  156. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/system/monitor.py +0 -0
  157. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/utils/__init__.py +0 -0
  158. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/utils/async_updater.py +0 -0
  159. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/utils/conditions.py +0 -0
  160. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/utils/filter.py +0 -0
  161. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/utils/font_util.py +0 -0
  162. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/utils/logger.py +0 -0
  163. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/utils/timeperiod.py +0 -0
  164. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/core/utils/util.py +0 -0
  165. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/24x16/adc.yaml +0 -0
  166. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  167. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/24x16/config.yaml +0 -0
  168. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/24x16/event.yaml +0 -0
  169. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/24x16/mqtt.yaml +0 -0
  170. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  171. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/32x10/adc.yaml +0 -0
  172. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  173. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/32x10/config.yaml +0 -0
  174. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/32x10/event.yaml +0 -0
  175. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/32x10/mqtt.yaml +0 -0
  176. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  177. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/48x4/adc.yaml +0 -0
  178. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  179. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/48x4/config.yaml +0 -0
  180. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/48x4/event.yaml +0 -0
  181. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/48x4/mqtt.yaml +0 -0
  182. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  183. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/__init__.py +0 -0
  184. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/can_master.yaml +0 -0
  185. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/can_slave.yaml +0 -0
  186. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover/adc.yaml +0 -0
  187. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  188. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover/config.yaml +0 -0
  189. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover/cover.yaml +0 -0
  190. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover/event.yaml +0 -0
  191. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover/mqtt.yaml +0 -0
  192. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover/outputCover.yaml +0 -0
  193. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover_mix/adc.yaml +0 -0
  194. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  195. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover_mix/config.yaml +0 -0
  196. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover_mix/cover.yaml +0 -0
  197. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover_mix/event.yaml +0 -0
  198. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  199. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  200. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/adc.yaml +0 -0
  201. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  202. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  203. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  204. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  205. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/event_all.yaml +0 -0
  206. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  207. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  208. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  209. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  210. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  211. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  212. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/exceptions.py +0 -0
  213. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/__init__.py +0 -0
  214. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/analog/__init__.py +0 -0
  215. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/analog/adc.py +0 -0
  216. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/can/__init__.py +0 -0
  217. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/can/bridge.py +0 -0
  218. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/can/client.py +0 -0
  219. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/can/interface.py +0 -0
  220. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/can/node.py +0 -0
  221. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/can/node_id.py +0 -0
  222. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/can/test_od.py +0 -0
  223. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/display/__init__.py +0 -0
  224. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/display/early_oled.py +0 -0
  225. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  226. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/display/oled.py +0 -0
  227. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/gpio/__init__.py +0 -0
  228. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  229. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  230. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  231. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  232. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/gpio/input/__init__.py +0 -0
  233. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/gpio/input/base.py +0 -0
  234. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/gpio/input/manager.py +0 -0
  235. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/i2c/__init__.py +0 -0
  236. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/i2c/bus.py +0 -0
  237. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/i2c/ina219.py +0 -0
  238. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/i2c/ina219_driver.py +0 -0
  239. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/i2c/mcp9808.py +0 -0
  240. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/i2c/pct2075.py +0 -0
  241. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/onewire/__init__.py +0 -0
  242. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/onewire/bus.py +0 -0
  243. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/onewire/dallas.py +0 -0
  244. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/onewire/ds2482.py +0 -0
  245. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/sensor/__init__.py +0 -0
  246. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  247. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/sensor/temperature/base.py +0 -0
  248. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  249. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  250. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/integration/__init__.py +0 -0
  251. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/integration/homeassistant.py +0 -0
  252. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/integration/interlock.py +0 -0
  253. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/integration/lox_template.py +0 -0
  254. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/__init__.py +0 -0
  255. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/actions.py +0 -0
  256. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/MANIFEST.sha256 +0 -0
  257. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/docker/daemon.json +0 -0
  258. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
  259. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
  260. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  261. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/docker/nodered/nginx/default.conf +0 -0
  262. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
  263. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/journald/journald.conf +0 -0
  264. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  265. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/sudoers/boneio +0 -0
  266. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
  267. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
  268. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/systemd/boneio.service +0 -0
  269. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  270. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
  271. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  272. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  273. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  274. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  275. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/bootstrap/boneio-migrate +0 -0
  276. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  277. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  278. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/versions/__init__.py +0 -0
  279. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
  280. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  281. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  282. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
  283. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
  284. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
  285. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
  286. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
  287. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/__init__.py +0 -0
  288. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/cli.py +0 -0
  289. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/client.py +0 -0
  290. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/coordinator.py +0 -0
  291. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/__init__.py +0 -0
  292. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
  293. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  294. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  295. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  296. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  297. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  298. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  299. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  300. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
  301. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  302. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/hvac/thessla.json +0 -0
  303. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  304. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/hvac/wanas415.json +0 -0
  305. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/inverters/sofar.json +0 -0
  306. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  307. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  308. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  309. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  310. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/sensors/cwt.json +0 -0
  311. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  312. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  313. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  314. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  315. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/sensors/pt100.json +0 -0
  316. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/sensors/sht20.json +0 -0
  317. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/devices/sensors/sht30.json +0 -0
  318. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/__init__.py +0 -0
  319. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/base.py +0 -0
  320. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/derived/__init__.py +0 -0
  321. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/derived/numeric.py +0 -0
  322. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/derived/select.py +0 -0
  323. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/derived/switch.py +0 -0
  324. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/derived/text.py +0 -0
  325. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/sensor/__init__.py +0 -0
  326. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/sensor/binary.py +0 -0
  327. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/sensor/numeric.py +0 -0
  328. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/sensor/text.py +0 -0
  329. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/writeable/__init__.py +0 -0
  330. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/writeable/binary.py +0 -0
  331. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/entities/writeable/numeric.py +0 -0
  332. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/mock_coordinator.py +0 -0
  333. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/modbus/utils.py +0 -0
  334. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/models/__init__.py +0 -0
  335. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/models/actions.py +0 -0
  336. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/models/events.py +0 -0
  337. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/models/files.py +0 -0
  338. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/models/logs.py +0 -0
  339. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/models/mqtt.py +0 -0
  340. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/models/state.py +0 -0
  341. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/runner.py +0 -0
  342. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/actions.yaml +0 -0
  343. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/actions_sensor.yaml +0 -0
  344. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/actions_switch.yaml +0 -0
  345. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/condition.yaml +0 -0
  346. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/filters.yaml +0 -0
  347. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/filters_adc.yaml +0 -0
  348. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/id.yaml +0 -0
  349. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/remote_devices.yaml +0 -0
  350. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/remote_inputs.yaml +0 -0
  351. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/remote_outputs.yaml +0 -0
  352. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/schema.yaml +0 -0
  353. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/temp_unit.yaml +0 -0
  354. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/schema/update_interval.yaml +0 -0
  355. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/action_validation.py +0 -0
  356. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/app.py +0 -0
  357. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/dashboard_cards.py +0 -0
  358. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  359. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/css.worker-CvXBzhp8.js +0 -0
  360. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/editor.worker-Cn2oRESe.js +0 -0
  361. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/html.worker-BO6WuOEO.js +0 -0
  362. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/json.worker-BkJRGcCJ.js +0 -0
  363. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/monaco-61yH0vfd.js +0 -0
  364. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
  365. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/rolldown-runtime-QTnfLwEv.js +0 -0
  366. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/ts.worker-B0J26iPs.js +0 -0
  367. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/vendor-pmGLHP0_.js +0 -0
  368. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
  369. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/assets/yaml.worker-BKRoXlmz.js +0 -0
  370. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  371. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  372. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/boneio.svg +0 -0
  373. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  374. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  375. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  376. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  377. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  378. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  379. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/config.schema.json +0 -0
  380. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  381. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  382. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  383. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  384. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  385. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  386. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  387. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  388. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  389. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  390. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  391. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  392. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
  393. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  394. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  395. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  396. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  397. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  398. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  399. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  400. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
  401. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
  402. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  403. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  404. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  405. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
  406. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/frontend-dist/workbox-4918f2f6.js +0 -0
  407. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/hvac_svg_templates.py +0 -0
  408. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/middleware/__init__.py +0 -0
  409. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/middleware/auth.py +0 -0
  410. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/modbus_card_templates.py +0 -0
  411. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/__init__.py +0 -0
  412. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/auth.py +0 -0
  413. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/caddy.py +0 -0
  414. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/can.py +0 -0
  415. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/config.py +0 -0
  416. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/covers.py +0 -0
  417. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/dashboard.py +0 -0
  418. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/dev_fake_device.py +0 -0
  419. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/irrigation.py +0 -0
  420. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/migrations.py +0 -0
  421. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/outputs.py +0 -0
  422. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/remote_devices.py +0 -0
  423. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/sensors.py +0 -0
  424. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/system.py +0 -0
  425. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/templates.py +0 -0
  426. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/timezone_sudoers.py +0 -0
  427. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/tools.py +0 -0
  428. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/routes/update.py +0 -0
  429. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/adc.schema.json +0 -0
  430. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/areas.schema.json +0 -0
  431. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  432. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/boneio.schema.json +0 -0
  433. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/can.schema.json +0 -0
  434. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/config.schema.json +0 -0
  435. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/cover.schema.json +0 -0
  436. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/dallas.schema.json +0 -0
  437. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/ds2482.schema.json +0 -0
  438. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/event.schema.json +0 -0
  439. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/ina219.schema.json +0 -0
  440. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/irrigation.schema.json +0 -0
  441. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/lm75.schema.json +0 -0
  442. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/logger.schema.json +0 -0
  443. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/lox_udp.schema.json +0 -0
  444. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/mcp23017.schema.json +0 -0
  445. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/mcp9808.schema.json +0 -0
  446. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/modbus.schema.json +0 -0
  447. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/modbus_devices.schema.json +0 -0
  448. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/mqtt.schema.json +0 -0
  449. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/oled.schema.json +0 -0
  450. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/output.schema.json +0 -0
  451. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/output_group.schema.json +0 -0
  452. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/pca9685.schema.json +0 -0
  453. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/pcf8575.schema.json +0 -0
  454. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/remote_devices.schema.json +0 -0
  455. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/remote_inputs.schema.json +0 -0
  456. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/remote_outputs.schema.json +0 -0
  457. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/sensor.schema.json +0 -0
  458. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/template.schema.json +0 -0
  459. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  460. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/schema/web.schema.json +0 -0
  461. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/services/__init__.py +0 -0
  462. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/services/logs.py +0 -0
  463. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/web_server.py +0 -0
  464. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio/webui/websocket_manager.py +0 -0
  465. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio.egg-info/dependency_links.txt +0 -0
  466. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio.egg-info/entry_points.txt +0 -0
  467. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio.egg-info/requires.txt +0 -0
  468. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/boneio.egg-info/top_level.txt +0 -0
  469. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/pyproject.toml +0 -0
  470. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/setup.cfg +0 -0
  471. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/setup.py +0 -0
  472. {boneio-1.5.0.dev6 → boneio-1.5.0.dev8}/tests/test_py313_compatibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boneio
3
- Version: 1.5.0.dev6
3
+ Version: 1.5.0.dev8
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
@@ -288,10 +288,18 @@ class WLEDRemoteDevice(RemoteDevice):
288
288
 
289
289
  if action == "ON":
290
290
  seg_state["on"] = True
291
+ # Ensure device is globally on so the segment is visible
292
+ state["on"] = True
291
293
  elif action == "OFF":
292
294
  seg_state["on"] = False
293
295
  elif action == "TOGGLE":
294
- seg_state["on"] = "t" # WLED toggle syntax
296
+ # WLED ignores "on": "t" at segment level (tested on
297
+ # v0.15.0-b4) — resolve toggle using cached state.
298
+ current_on = self.segment_is_on(segment_id)
299
+ seg_state["on"] = not current_on
300
+ if not current_on:
301
+ # Turning on — ensure device is globally on
302
+ state["on"] = True
295
303
 
296
304
  if brightness is not None:
297
305
  seg_state["bri"] = max(0, min(255, brightness))
@@ -14,6 +14,7 @@ Flow:
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
+ import hashlib
17
18
  import importlib
18
19
  import importlib.util
19
20
  import json
@@ -155,6 +156,7 @@ class MigrationRunner:
155
156
  self.status = MigrationStatus.BOOTSTRAP_REQUIRED
156
157
  return self.status
157
158
 
159
+ self._ensure_helper_up_to_date()
158
160
  self._apply_pending(pending)
159
161
 
160
162
  except Exception as exc:
@@ -184,6 +186,7 @@ class MigrationRunner:
184
186
  self.status = MigrationStatus.OK
185
187
  return True
186
188
 
189
+ self._ensure_helper_up_to_date()
187
190
  return self._apply_pending(pending, progress_callback=progress_callback)
188
191
 
189
192
  def get_status_dict(self) -> dict[str, Any]:
@@ -282,6 +285,85 @@ class MigrationRunner:
282
285
  """Return True when the helper binary exists and is executable."""
283
286
  return os.path.isfile(HELPER_PATH) and os.access(HELPER_PATH, os.X_OK)
284
287
 
288
+ def _ensure_helper_up_to_date(self) -> None:
289
+ """Auto-update /usr/sbin/boneio-migrate if the bundled version differs.
290
+
291
+ Compares SHA256 of the installed helper vs the one shipped in the
292
+ package. If they differ, sends an ``install_file`` action to the
293
+ currently installed helper to overwrite itself with the new version.
294
+ This works because ``sudo -n /usr/sbin/boneio-migrate`` is already
295
+ allowed in sudoers on all systems.
296
+ """
297
+ if not BOOTSTRAP_HELPER_SRC.exists():
298
+ return
299
+ if not self._helper_installed():
300
+ return
301
+
302
+ try:
303
+ installed_hash = hashlib.sha256(
304
+ Path(HELPER_PATH).read_bytes()
305
+ ).hexdigest()
306
+ bundled_hash = hashlib.sha256(
307
+ BOOTSTRAP_HELPER_SRC.read_bytes()
308
+ ).hexdigest()
309
+
310
+ if installed_hash == bundled_hash:
311
+ _LOGGER.debug("boneio-migrate helper is up to date.")
312
+ return
313
+
314
+ _LOGGER.info(
315
+ "boneio-migrate helper outdated (installed=%s, bundled=%s). Updating...",
316
+ installed_hash[:12],
317
+ bundled_hash[:12],
318
+ )
319
+
320
+ # Copy the new helper to assets dir so install_file can find it
321
+ update_asset = ASSETS_DIR / "_helper_update"
322
+ update_asset.mkdir(parents=True, exist_ok=True)
323
+ update_src = update_asset / "boneio-migrate"
324
+ update_src.write_bytes(BOOTSTRAP_HELPER_SRC.read_bytes())
325
+
326
+ # Send install_file action to the old helper to overwrite itself
327
+ plan_payload = {
328
+ "version": "_helper_update",
329
+ "actions": [
330
+ {
331
+ "action": "install_file",
332
+ "src": "_helper_update/boneio-migrate",
333
+ "dst": HELPER_PATH,
334
+ "mode": 0o755,
335
+ "owner": "root",
336
+ "group": "root",
337
+ "template_vars": {},
338
+ "expected_sha256": bundled_hash,
339
+ }
340
+ ],
341
+ "assets_base": str(ASSETS_DIR),
342
+ }
343
+
344
+ result = subprocess.run(
345
+ ["sudo", "-n", HELPER_PATH],
346
+ input=json.dumps(plan_payload),
347
+ capture_output=True,
348
+ text=True,
349
+ timeout=15,
350
+ )
351
+
352
+ # Clean up temp asset
353
+ update_src.unlink(missing_ok=True)
354
+ update_asset.rmdir()
355
+
356
+ if result.returncode == 0:
357
+ _LOGGER.info("boneio-migrate helper updated successfully.")
358
+ else:
359
+ _LOGGER.warning(
360
+ "Helper self-update failed (rc=%d): %s",
361
+ result.returncode,
362
+ result.stderr.strip(),
363
+ )
364
+ except Exception as exc:
365
+ _LOGGER.warning("Could not check/update boneio-migrate helper: %s", exc)
366
+
285
367
  def _load_manifest(self) -> None:
286
368
  """Load MANIFEST.sha256 from the assets directory."""
287
369
  if not MANIFEST_PATH.exists():
@@ -0,0 +1,2 @@
1
+ # flake8: noqa
2
+ __version__ = "1.5.0dev8"
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,c as n,i as r,n as i,o as a,r as o,t as s}from"./monaco-61yH0vfd.js";import{b as c}from"./vendor-pmGLHP0_.js";import{a as l,c as u,i as d,l as f,n as p,o as m,r as h,s as g}from"./index-qx3gjAAI.js";var _=e(n(),1);function v(){let[e,t]=(0,_.useState)(`dark`);return(0,_.useEffect)(()=>{t(localStorage.getItem(`theme`)||`dark`);let e=new MutationObserver(e=>{e.forEach(e=>{e.attributeName===`data-theme`&&t(document.documentElement.getAttribute(`data-theme`)||`dark`)})});return e.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]}),()=>e.disconnect()},[]),e}function y(e){return u({tag:`svg`,attr:{viewBox:`0 0 24 24`},child:[{tag:`path`,attr:{d:`M11.28 9.53 8.81 12l2.47 2.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-3-3a.75.75 0 0 1 0-1.06l3-3a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734Z`},child:[]},{tag:`path`,attr:{d:`M3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25V3.75C2 2.784 2.784 2 3.75 2ZM3.5 3.75v16.5c0 .138.112.25.25.25H15v-17H3.75a.25.25 0 0 0-.25.25Zm13 16.75h3.75a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25H16.5Z`},child:[]}]})(e)}var b=c();function x({isOpen:e,onClose:t}){let{t:n}=p(),[r,i]=(0,_.useState)(!1),[a,o]=(0,_.useState)(null),s=async()=>{i(!0);try{let e=await f.get(`/api/check_configuration`);o({status:e.data.status,message:e.data.message})}catch{o({status:`error`,message:n(`config_check.failed`)})}finally{i(!1)}};return e?(0,b.jsx)(`div`,{className:`fixed inset-0 bg-base-300/80 flex items-center justify-center z-50`,children:(0,b.jsxs)(`div`,{className:`bg-base-200 p-8 rounded-lg shadow-lg max-w-2xl w-full mx-4`,children:[(0,b.jsx)(`h2`,{className:`text-2xl font-bold mb-6`,children:n(`config_check.title`)}),r?(0,b.jsxs)(`div`,{className:`flex flex-col items-center gap-4 py-8`,children:[(0,b.jsx)(`div`,{className:`loading loading-spinner loading-lg`}),(0,b.jsx)(`p`,{className:`text-lg`,children:n(`config_check.checking`)})]}):a?(0,b.jsxs)(`div`,{className:`space-y-4`,children:[(0,b.jsx)(`div`,{className:`text-lg font-semibold ${a.status===`success`?`text-success`:`text-error`}`,children:a.status===`success`?n(`config_check.valid`):n(`config_check.error`)}),a.message&&(0,b.jsx)(`pre`,{className:`bg-base-300 p-4 rounded-lg whitespace-pre-wrap`,children:a.message}),(0,b.jsxs)(`div`,{className:`flex justify-end gap-4 mt-6`,children:[(0,b.jsx)(`button`,{className:`btn btn-ghost`,onClick:()=>{o(null),t()},children:n(`common.close`)}),(0,b.jsx)(`button`,{className:`btn btn-primary`,onClick:()=>{o(null),s()},children:n(`config_check.check_again`)})]})]}):(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(`p`,{className:`text-base-content/70`,children:n(`config_check.description`)}),(0,b.jsxs)(`div`,{className:`flex justify-end gap-4`,children:[(0,b.jsx)(`button`,{className:`btn btn-ghost`,onClick:t,children:n(`common.cancel`)}),(0,b.jsx)(`button`,{className:`btn btn-primary`,onClick:s,children:n(`config_check.check_button`)})]})]})]})}):null}function S(e){return new Worker(`/assets/yaml.worker-BKRoXlmz.js`,{name:e?.name})}self.MonacoEnvironment={getWorker(e,t){return t===`yaml`?new S:t===`json`?new s:new i}},a.config({monaco:r});var C;function w(){let[e,n]=(0,_.useState)([]),[r,i]=(0,_.useState)(null),[a,s]=(0,_.useState)(``),[c,u]=(0,_.useState)(!1),[p,S]=(0,_.useState)(`waiting`),[w,T]=(0,_.useState)(!0),[E,D]=(0,_.useState)(!1),O=v(),k=async()=>{try{n((await f.get(`/api/files`)).data.items)}catch(e){console.error(`Error loading directory:`,e)}},A=async e=>{try{let t=`/api/files/${encodeURIComponent(e)}`,n=await f.get(t);i(e),s(n.data.content),localStorage.setItem(`lastOpenedFile`,e)}catch(e){console.error(`Error loading file:`,e)}},j=async()=>{if(r)try{await f.put(`/api/files/${encodeURIComponent(r)}`,{content:a}),console.log(`File saved successfully`)}catch(e){console.error(`Error saving file:`,e)}},M=async e=>{if(!C){let t=(await f.get(`/schema/config.schema.json`)).data;C=await o(e,{enableSchemaRequest:!0,schemas:[{uri:window.location.origin+`/schema/config.schema.json`,fileMatch:[`config.yaml`,`config.yml`],schema:t},...Object.keys(t.properties).map(e=>({uri:window.location.origin+`/schema/${e}.schema.json`,fileMatch:[`${e}.yaml`,`${e}.yml`],schema:t.properties[e]}))],validate:!0})}},N=async(e,t)=>{e.addCommand(t.KeyMod.CtrlCmd|t.KeyCode.KeyS,()=>{j()})},P=e=>{n(t=>{let n=t=>t.map(t=>t.path===e?{...t,isOpen:!t.isOpen}:t.children?{...t,children:n(t.children)}:t);return n(t)})},F=(e,t=0)=>e.map(e=>{let n=t==0||e.isOpen;return(0,b.jsxs)(`div`,{children:[(0,b.jsxs)(`button`,{className:`flex items-center gap-2 w-full px-2 py-1 hover:bg-base-300 ${r===e.path?`bg-primary/10`:``}`,style:{paddingLeft:`${t*16+8}px`},onClick:()=>e.type===`file`?A(e.path):P(e.path),children:[e.type===`directory`&&(0,b.jsx)(`span`,{className:`text-xs`,children:n?(0,b.jsx)(h,{}):(0,b.jsx)(d,{})}),(0,b.jsx)(`span`,{className:`text-base-content/70`,children:e.type===`directory`?n?(0,b.jsx)(g,{}):(0,b.jsx)(m,{}):(0,b.jsx)(l,{})}),(0,b.jsx)(`span`,{className:`text-sm truncate`,children:e.name})]}),e.type===`directory`&&n&&e.children&&F(e.children,t+1)]},e.path)}),I=async()=>{try{return await f.get(`/api/files`),!0}catch{return!1}},L=async()=>{for(u(!0),S(`waiting`),await new Promise(e=>setTimeout(e,2e3)),S(`checking`);;){if(await I()){S(`ready`),await new Promise(e=>setTimeout(e,1e3)),u(!1),k();break}await new Promise(e=>setTimeout(e,1e3))}};return(0,_.useEffect)(()=>{(async()=>{await k();let e=localStorage.getItem(`lastOpenedFile`);e&&A(e)})()},[]),(0,b.jsxs)(`div`,{className:`flex h-full bg-base-300`,children:[c?(0,b.jsx)(`div`,{className:`fixed inset-0 bg-base-300/80 flex items-center justify-center z-50`,children:(0,b.jsxs)(`div`,{className:`bg-base-200 p-8 rounded-lg shadow-lg text-center`,children:[(0,b.jsx)(`div`,{className:`loading loading-spinner loading-lg mb-4`}),(0,b.jsxs)(`h2`,{className:`text-xl font-bold mb-4`,children:[p===`waiting`&&`Restarting Service...`,p===`checking`&&`Waiting for Service...`,p===`ready`&&`Service Restarted!`]}),(0,b.jsxs)(`p`,{className:`text-base-content/70`,children:[p===`waiting`&&`Initiating service restart`,p===`checking`&&`Checking if service is back online`,p===`ready`&&`Redirecting...`]})]})}):null,(0,b.jsxs)(`div`,{className:`${w?`w-64`:`w-0`} transition-all duration-300 bg-base-200 border-r border-base-content/10 overflow-hidden`,children:[(0,b.jsx)(`div`,{className:`p-2 text-sm font-semibold text-base-content/70 uppercase`,children:`Explorer`}),(0,b.jsx)(`div`,{className:`overflow-y-auto`,children:F(e)})]}),(0,b.jsxs)(`div`,{className:`flex-1 overflow-hidden flex flex-col h-full max-h-screen`,children:[(0,b.jsxs)(`div`,{className:`flex items-center p-2 border-b border-base-content/10`,children:[(0,b.jsx)(`button`,{onClick:()=>T(!w),className:`btn btn-ghost btn-sm p-1`,title:w?`Hide file tree`:`Show file tree`,children:(0,b.jsx)(y,{className:`h-5 w-5 opacity-70 transition-transform duration-200 ${w?``:`rotate-180`}`})}),r&&(0,b.jsx)(`span`,{className:`ml-2 text-sm opacity-70`,children:r})]}),(0,b.jsx)(`div`,{className:`flex-1 overflow-hidden`,children:(0,b.jsx)(t,{height:`100%`,width:`100%`,defaultLanguage:`yaml`,path:r||`config.yaml`,theme:O===`light`?`vs-light`:`vs-dark`,value:a,onChange:e=>s(e||``),onMount:N,beforeMount:M,options:{minimap:{enabled:!0},scrollBeyondLastLine:!1,fontSize:14,automaticLayout:!0,readOnly:!1,formatOnType:!0,formatOnPaste:!0,quickSuggestions:{other:!0,comments:!1,strings:!0}}})}),(0,b.jsxs)(`div`,{className:`h-12 bg-base-200 border-t border-base-content/10 flex items-center justify-end px-4 gap-4`,children:[(0,b.jsx)(`button`,{onClick:j,disabled:!r,className:`btn btn-primary btn-sm`,children:`Save`}),(0,b.jsx)(`button`,{onClick:()=>D(!0),className:`btn btn-primary btn-sm`,children:`Check Config`}),(0,b.jsx)(`button`,{onClick:async()=>{await j();try{if((await f.post(`/api/restart`)).data.status===`not available`){let e=document.getElementById(`toast`);e&&(e.classList.remove(`hidden`),setTimeout(()=>{e.classList.add(`hidden`)},5e3))}else console.log(`Service restarted successfully`),L()}catch(e){console.error(`Error restarting service:`,e)}},disabled:!r,className:`btn btn-secondary btn-sm`,children:`Save and Restart`})]})]}),(0,b.jsx)(`div`,{id:`toast`,className:`toast toast-end hidden`,children:(0,b.jsx)(`div`,{className:`alert alert-warning`,children:(0,b.jsx)(`span`,{children:`Restart not possible. Application is not running as systemd service. Restart manually.`})})}),(0,b.jsx)(x,{isOpen:E,onClose:()=>D(!1)})]})}export{w as default};
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,c as n,i as r,n as i,o as a,r as o,t as s}from"./monaco-61yH0vfd.js";import{b as c}from"./vendor-pmGLHP0_.js";import{a as l,c as u,i as d,l as f,n as p,o as m,r as h,s as g}from"./index-BpK_lX6d.js";var _=e(n(),1);function v(){let[e,t]=(0,_.useState)(`dark`);return(0,_.useEffect)(()=>{t(localStorage.getItem(`theme`)||`dark`);let e=new MutationObserver(e=>{e.forEach(e=>{e.attributeName===`data-theme`&&t(document.documentElement.getAttribute(`data-theme`)||`dark`)})});return e.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]}),()=>e.disconnect()},[]),e}function y(e){return u({tag:`svg`,attr:{viewBox:`0 0 24 24`},child:[{tag:`path`,attr:{d:`M11.28 9.53 8.81 12l2.47 2.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-3-3a.75.75 0 0 1 0-1.06l3-3a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734Z`},child:[]},{tag:`path`,attr:{d:`M3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25V3.75C2 2.784 2.784 2 3.75 2ZM3.5 3.75v16.5c0 .138.112.25.25.25H15v-17H3.75a.25.25 0 0 0-.25.25Zm13 16.75h3.75a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25H16.5Z`},child:[]}]})(e)}var b=c();function x({isOpen:e,onClose:t}){let{t:n}=p(),[r,i]=(0,_.useState)(!1),[a,o]=(0,_.useState)(null),s=async()=>{i(!0);try{let e=await f.get(`/api/check_configuration`);o({status:e.data.status,message:e.data.message})}catch{o({status:`error`,message:n(`config_check.failed`)})}finally{i(!1)}};return e?(0,b.jsx)(`div`,{className:`fixed inset-0 bg-base-300/80 flex items-center justify-center z-50`,children:(0,b.jsxs)(`div`,{className:`bg-base-200 p-8 rounded-lg shadow-lg max-w-2xl w-full mx-4`,children:[(0,b.jsx)(`h2`,{className:`text-2xl font-bold mb-6`,children:n(`config_check.title`)}),r?(0,b.jsxs)(`div`,{className:`flex flex-col items-center gap-4 py-8`,children:[(0,b.jsx)(`div`,{className:`loading loading-spinner loading-lg`}),(0,b.jsx)(`p`,{className:`text-lg`,children:n(`config_check.checking`)})]}):a?(0,b.jsxs)(`div`,{className:`space-y-4`,children:[(0,b.jsx)(`div`,{className:`text-lg font-semibold ${a.status===`success`?`text-success`:`text-error`}`,children:a.status===`success`?n(`config_check.valid`):n(`config_check.error`)}),a.message&&(0,b.jsx)(`pre`,{className:`bg-base-300 p-4 rounded-lg whitespace-pre-wrap`,children:a.message}),(0,b.jsxs)(`div`,{className:`flex justify-end gap-4 mt-6`,children:[(0,b.jsx)(`button`,{className:`btn btn-ghost`,onClick:()=>{o(null),t()},children:n(`common.close`)}),(0,b.jsx)(`button`,{className:`btn btn-primary`,onClick:()=>{o(null),s()},children:n(`config_check.check_again`)})]})]}):(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(`p`,{className:`text-base-content/70`,children:n(`config_check.description`)}),(0,b.jsxs)(`div`,{className:`flex justify-end gap-4`,children:[(0,b.jsx)(`button`,{className:`btn btn-ghost`,onClick:t,children:n(`common.cancel`)}),(0,b.jsx)(`button`,{className:`btn btn-primary`,onClick:s,children:n(`config_check.check_button`)})]})]})]})}):null}function S(e){return new Worker(`/assets/yaml.worker-BKRoXlmz.js`,{name:e?.name})}self.MonacoEnvironment={getWorker(e,t){return t===`yaml`?new S:t===`json`?new s:new i}},a.config({monaco:r});var C;function w(){let[e,n]=(0,_.useState)([]),[r,i]=(0,_.useState)(null),[a,s]=(0,_.useState)(``),[c,u]=(0,_.useState)(!1),[p,S]=(0,_.useState)(`waiting`),[w,T]=(0,_.useState)(!0),[E,D]=(0,_.useState)(!1),O=v(),k=async()=>{try{n((await f.get(`/api/files`)).data.items)}catch(e){console.error(`Error loading directory:`,e)}},A=async e=>{try{let t=`/api/files/${encodeURIComponent(e)}`,n=await f.get(t);i(e),s(n.data.content),localStorage.setItem(`lastOpenedFile`,e)}catch(e){console.error(`Error loading file:`,e)}},j=async()=>{if(r)try{await f.put(`/api/files/${encodeURIComponent(r)}`,{content:a}),console.log(`File saved successfully`)}catch(e){console.error(`Error saving file:`,e)}},M=async e=>{if(!C){let t=(await f.get(`/schema/config.schema.json`)).data;C=await o(e,{enableSchemaRequest:!0,schemas:[{uri:window.location.origin+`/schema/config.schema.json`,fileMatch:[`config.yaml`,`config.yml`],schema:t},...Object.keys(t.properties).map(e=>({uri:window.location.origin+`/schema/${e}.schema.json`,fileMatch:[`${e}.yaml`,`${e}.yml`],schema:t.properties[e]}))],validate:!0})}},N=async(e,t)=>{e.addCommand(t.KeyMod.CtrlCmd|t.KeyCode.KeyS,()=>{j()})},P=e=>{n(t=>{let n=t=>t.map(t=>t.path===e?{...t,isOpen:!t.isOpen}:t.children?{...t,children:n(t.children)}:t);return n(t)})},F=(e,t=0)=>e.map(e=>{let n=t==0||e.isOpen;return(0,b.jsxs)(`div`,{children:[(0,b.jsxs)(`button`,{className:`flex items-center gap-2 w-full px-2 py-1 hover:bg-base-300 ${r===e.path?`bg-primary/10`:``}`,style:{paddingLeft:`${t*16+8}px`},onClick:()=>e.type===`file`?A(e.path):P(e.path),children:[e.type===`directory`&&(0,b.jsx)(`span`,{className:`text-xs`,children:n?(0,b.jsx)(h,{}):(0,b.jsx)(d,{})}),(0,b.jsx)(`span`,{className:`text-base-content/70`,children:e.type===`directory`?n?(0,b.jsx)(g,{}):(0,b.jsx)(m,{}):(0,b.jsx)(l,{})}),(0,b.jsx)(`span`,{className:`text-sm truncate`,children:e.name})]}),e.type===`directory`&&n&&e.children&&F(e.children,t+1)]},e.path)}),I=async()=>{try{return await f.get(`/api/files`),!0}catch{return!1}},L=async()=>{for(u(!0),S(`waiting`),await new Promise(e=>setTimeout(e,2e3)),S(`checking`);;){if(await I()){S(`ready`),await new Promise(e=>setTimeout(e,1e3)),u(!1),k();break}await new Promise(e=>setTimeout(e,1e3))}};return(0,_.useEffect)(()=>{(async()=>{await k();let e=localStorage.getItem(`lastOpenedFile`);e&&A(e)})()},[]),(0,b.jsxs)(`div`,{className:`flex h-full bg-base-300`,children:[c?(0,b.jsx)(`div`,{className:`fixed inset-0 bg-base-300/80 flex items-center justify-center z-50`,children:(0,b.jsxs)(`div`,{className:`bg-base-200 p-8 rounded-lg shadow-lg text-center`,children:[(0,b.jsx)(`div`,{className:`loading loading-spinner loading-lg mb-4`}),(0,b.jsxs)(`h2`,{className:`text-xl font-bold mb-4`,children:[p===`waiting`&&`Restarting Service...`,p===`checking`&&`Waiting for Service...`,p===`ready`&&`Service Restarted!`]}),(0,b.jsxs)(`p`,{className:`text-base-content/70`,children:[p===`waiting`&&`Initiating service restart`,p===`checking`&&`Checking if service is back online`,p===`ready`&&`Redirecting...`]})]})}):null,(0,b.jsxs)(`div`,{className:`${w?`w-64`:`w-0`} transition-all duration-300 bg-base-200 border-r border-base-content/10 overflow-hidden`,children:[(0,b.jsx)(`div`,{className:`p-2 text-sm font-semibold text-base-content/70 uppercase`,children:`Explorer`}),(0,b.jsx)(`div`,{className:`overflow-y-auto`,children:F(e)})]}),(0,b.jsxs)(`div`,{className:`flex-1 overflow-hidden flex flex-col h-full max-h-screen`,children:[(0,b.jsxs)(`div`,{className:`flex items-center p-2 border-b border-base-content/10`,children:[(0,b.jsx)(`button`,{onClick:()=>T(!w),className:`btn btn-ghost btn-sm p-1`,title:w?`Hide file tree`:`Show file tree`,children:(0,b.jsx)(y,{className:`h-5 w-5 opacity-70 transition-transform duration-200 ${w?``:`rotate-180`}`})}),r&&(0,b.jsx)(`span`,{className:`ml-2 text-sm opacity-70`,children:r})]}),(0,b.jsx)(`div`,{className:`flex-1 overflow-hidden`,children:(0,b.jsx)(t,{height:`100%`,width:`100%`,defaultLanguage:`yaml`,path:r||`config.yaml`,theme:O===`light`?`vs-light`:`vs-dark`,value:a,onChange:e=>s(e||``),onMount:N,beforeMount:M,options:{minimap:{enabled:!0},scrollBeyondLastLine:!1,fontSize:14,automaticLayout:!0,readOnly:!1,formatOnType:!0,formatOnPaste:!0,quickSuggestions:{other:!0,comments:!1,strings:!0}}})}),(0,b.jsxs)(`div`,{className:`h-12 bg-base-200 border-t border-base-content/10 flex items-center justify-end px-4 gap-4`,children:[(0,b.jsx)(`button`,{onClick:j,disabled:!r,className:`btn btn-primary btn-sm`,children:`Save`}),(0,b.jsx)(`button`,{onClick:()=>D(!0),className:`btn btn-primary btn-sm`,children:`Check Config`}),(0,b.jsx)(`button`,{onClick:async()=>{await j();try{if((await f.post(`/api/restart`)).data.status===`not available`){let e=document.getElementById(`toast`);e&&(e.classList.remove(`hidden`),setTimeout(()=>{e.classList.add(`hidden`)},5e3))}else console.log(`Service restarted successfully`),L()}catch(e){console.error(`Error restarting service:`,e)}},disabled:!r,className:`btn btn-secondary btn-sm`,children:`Save and Restart`})]})]}),(0,b.jsx)(`div`,{id:`toast`,className:`toast toast-end hidden`,children:(0,b.jsx)(`div`,{className:`alert alert-warning`,children:(0,b.jsx)(`span`,{children:`Restart not possible. Application is not running as systemd service. Restart manually.`})})}),(0,b.jsx)(x,{isOpen:E,onClose:()=>D(!1)})]})}export{w as default};
@@ -1,2 +1,2 @@
1
- import{t as e}from"./index-qx3gjAAI.js";function t(t){let n=e(t);return[`=== ROLE ===`,`You are a friendly boneIO Black input configuration wizard.`,`Your job is to help the user configure a physical input (button/switch) step by step.`,``,`=== CONVERSATION RULES ===`,`1. Ask ONE question at a time. Keep questions short and clear.`,`2. ONLY use IDs and values from the CONTEXT section below — never invent IDs.`,`3. When the user describes an action in natural language, match it to the closest available output, cover, or remote device from the context.`,`4. After each user answer, confirm what you understood before moving on.`,`5. When the user mentions a "light" or ESPHome light output, ask follow-up questions about:`,` - Action type (TOGGLE, ON, OFF, BRIGHTNESS_UP, BRIGHTNESS_DOWN, SET_BRIGHTNESS)`,` - Transition time (in seconds)`,` - Brightness level (0-255)`,` - Color temperature (if supported)`,`6. When the user mentions a "cover" or "blind" or "roller shutter", ask about:`,` - Cover action (TOGGLE, OPEN, CLOSE, STOP, SMART_TOGGLE, TILT)`,` - Position (0-100) if applicable`,`7. When the user mentions MQTT action, ask for the MQTT topic and message payload.`,`8. Skip questions about features the user says they don't need.`,``,`=== CONVERSATION FLOW ===`,`Follow this order (skip steps the user already answered):`,``,`Step 1: Ask which physical input to configure (e.g. IN_01 to IN_49).`,` Show a few available inputs from the context if helpful.`,` IMPORTANT: Check "configured_inputs" in the context first.`,` If an input is already configured, warn the user and ask if they want to reconfigure it.`,`Step 2: Ask what name to give this input (e.g. "Bedroom Light Switch").`,`Step 3: Ask which area/room it belongs to (show available areas).`,`Step 4: Ask what should happen on SINGLE CLICK.`,` - Which output/cover/remote device should it control?`,` - What action? (TOGGLE, ON, OFF, etc.)`,` - If it's a light with brightness: ask about transition, brightness.`,`Step 5: Ask if the user wants a DOUBLE CLICK action.`,` - If yes, same sub-questions as Step 4.`,` - If no, skip to Step 6.`,`Step 6: Ask if the user wants a LONG PRESS action.`,` - If yes, same sub-questions as Step 4.`,` - If no, skip to Step 7.`,`Step 7: Ask if they want any advanced settings (bounce_time, double_click_duration, etc.).`,` - Most users will say no — that's fine, use defaults.`,`Step 8: Show a summary of the configuration and ask for confirmation.`,`Step 9: Output the final JSON.`,``,`=== OUTPUT FORMAT ===`,`When the user confirms the configuration, output ONLY a valid JSON block.`,`No markdown code fences, no explanations around the JSON.`,`The JSON must have this exact shape:`,`{"version":1,"entity_type":"event","apply_to":"current_form","changes":{...}}`,``,`The "changes" object should contain ALL fields for the configured input:`,`- "name": display name`,`- "boneio_input": the selected input ID (e.g. "IN_01")`,`- "area": room/area ID (if selected)`,`- "actions": object with click type keys, each containing an array of action objects`,``,`Action object fields: action, boneio_output, action_output, boneio_cover, action_cover,`,`remote_device, output_id, cover_id, brightness, color_temp, transition, topic, action_mqtt_msg.`,`Only include fields relevant to the action type.`,``,`=== EXAMPLE FINAL JSON ===`,JSON.stringify({version:1,entity_type:`event`,apply_to:`current_form`,changes:{name:`Bedroom Light`,boneio_input:`IN_01`,area:`bedroom`,actions:{single:[{action:`output`,boneio_output:`out_01`,action_output:`TOGGLE`}],double:[{action:`output`,boneio_output:`out_01`,action_output:`ON`,brightness:255}],long:[{action:`output`,boneio_output:`out_01`,action_output:`OFF`}]}}},null,2),``,`=== CONTEXT (your knowledge about this boneIO device) ===`,JSON.stringify(n,null,2),``,`=== BEGIN ===`,`Start by greeting the user and asking which input (IN_01 to IN_49) they want to configure.`,`If there are no available inputs left, let the user know.`].join(`
1
+ import{t as e}from"./index-BpK_lX6d.js";function t(t){let n=e(t);return[`=== ROLE ===`,`You are a friendly boneIO Black input configuration wizard.`,`Your job is to help the user configure a physical input (button/switch) step by step.`,``,`=== CONVERSATION RULES ===`,`1. Ask ONE question at a time. Keep questions short and clear.`,`2. ONLY use IDs and values from the CONTEXT section below — never invent IDs.`,`3. When the user describes an action in natural language, match it to the closest available output, cover, or remote device from the context.`,`4. After each user answer, confirm what you understood before moving on.`,`5. When the user mentions a "light" or ESPHome light output, ask follow-up questions about:`,` - Action type (TOGGLE, ON, OFF, BRIGHTNESS_UP, BRIGHTNESS_DOWN, SET_BRIGHTNESS)`,` - Transition time (in seconds)`,` - Brightness level (0-255)`,` - Color temperature (if supported)`,`6. When the user mentions a "cover" or "blind" or "roller shutter", ask about:`,` - Cover action (TOGGLE, OPEN, CLOSE, STOP, SMART_TOGGLE, TILT)`,` - Position (0-100) if applicable`,`7. When the user mentions MQTT action, ask for the MQTT topic and message payload.`,`8. Skip questions about features the user says they don't need.`,``,`=== CONVERSATION FLOW ===`,`Follow this order (skip steps the user already answered):`,``,`Step 1: Ask which physical input to configure (e.g. IN_01 to IN_49).`,` Show a few available inputs from the context if helpful.`,` IMPORTANT: Check "configured_inputs" in the context first.`,` If an input is already configured, warn the user and ask if they want to reconfigure it.`,`Step 2: Ask what name to give this input (e.g. "Bedroom Light Switch").`,`Step 3: Ask which area/room it belongs to (show available areas).`,`Step 4: Ask what should happen on SINGLE CLICK.`,` - Which output/cover/remote device should it control?`,` - What action? (TOGGLE, ON, OFF, etc.)`,` - If it's a light with brightness: ask about transition, brightness.`,`Step 5: Ask if the user wants a DOUBLE CLICK action.`,` - If yes, same sub-questions as Step 4.`,` - If no, skip to Step 6.`,`Step 6: Ask if the user wants a LONG PRESS action.`,` - If yes, same sub-questions as Step 4.`,` - If no, skip to Step 7.`,`Step 7: Ask if they want any advanced settings (bounce_time, double_click_duration, etc.).`,` - Most users will say no — that's fine, use defaults.`,`Step 8: Show a summary of the configuration and ask for confirmation.`,`Step 9: Output the final JSON.`,``,`=== OUTPUT FORMAT ===`,`When the user confirms the configuration, output ONLY a valid JSON block.`,`No markdown code fences, no explanations around the JSON.`,`The JSON must have this exact shape:`,`{"version":1,"entity_type":"event","apply_to":"current_form","changes":{...}}`,``,`The "changes" object should contain ALL fields for the configured input:`,`- "name": display name`,`- "boneio_input": the selected input ID (e.g. "IN_01")`,`- "area": room/area ID (if selected)`,`- "actions": object with click type keys, each containing an array of action objects`,``,`Action object fields: action, boneio_output, action_output, boneio_cover, action_cover,`,`remote_device, output_id, cover_id, brightness, color_temp, transition, topic, action_mqtt_msg.`,`Only include fields relevant to the action type.`,``,`=== EXAMPLE FINAL JSON ===`,JSON.stringify({version:1,entity_type:`event`,apply_to:`current_form`,changes:{name:`Bedroom Light`,boneio_input:`IN_01`,area:`bedroom`,actions:{single:[{action:`output`,boneio_output:`out_01`,action_output:`TOGGLE`}],double:[{action:`output`,boneio_output:`out_01`,action_output:`ON`,brightness:255}],long:[{action:`output`,boneio_output:`out_01`,action_output:`OFF`}]}}},null,2),``,`=== CONTEXT (your knowledge about this boneIO device) ===`,JSON.stringify(n,null,2),``,`=== BEGIN ===`,`Start by greeting the user and asking which input (IN_01 to IN_49) they want to configure.`,`If there are no available inputs left, let the user know.`].join(`
2
2
  `)}export{t as buildAiWizardPrompt};