boneio 1.5.0.dev4__tar.gz → 1.5.0.dev5__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 (464) hide show
  1. {boneio-1.5.0.dev4/boneio.egg-info → boneio-1.5.0.dev5}/PKG-INFO +1 -1
  2. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/output/basic.py +14 -2
  3. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/state/manager.py +26 -1
  4. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/derived/text.py +0 -1
  5. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/runner.py +11 -0
  6. boneio-1.5.0.dev5/boneio/version.py +2 -0
  7. boneio-1.5.0.dev4/boneio/webui/frontend-dist/assets/ConfigEditor-DSm0FS9G.js → boneio-1.5.0.dev5/boneio/webui/frontend-dist/assets/ConfigEditor-B5IWaYQG.js +1 -1
  8. boneio-1.5.0.dev4/boneio/webui/frontend-dist/assets/aiWizardPrompt-ChA7lLsf.js → boneio-1.5.0.dev5/boneio/webui/frontend-dist/assets/aiWizardPrompt-DGU7pfbV.js +1 -1
  9. boneio-1.5.0.dev4/boneio/webui/frontend-dist/assets/index-BT7TrtpF.css → boneio-1.5.0.dev5/boneio/webui/frontend-dist/assets/index-D6g-vdBv.css +1 -1
  10. boneio-1.5.0.dev4/boneio/webui/frontend-dist/assets/index-wbedWLv9.js → boneio-1.5.0.dev5/boneio/webui/frontend-dist/assets/index-Uwrd1-uP.js +3 -3
  11. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/index.html +2 -2
  12. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/sw.js +1 -1
  13. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5/boneio.egg-info}/PKG-INFO +1 -1
  14. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio.egg-info/SOURCES.txt +4 -4
  15. boneio-1.5.0.dev4/boneio/version.py +0 -2
  16. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/LICENSE +0 -0
  17. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/MANIFEST.in +0 -0
  18. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/README.md +0 -0
  19. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/__init__.py +0 -0
  20. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.2/input.yaml +0 -0
  21. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.2/output_24_16.yaml +0 -0
  22. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.2/output_32_10.yaml +0 -0
  23. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.2/output_32_5.yaml +0 -0
  24. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.2/output_cover.yaml +0 -0
  25. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  26. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.3/input.yaml +0 -0
  27. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.3/output_24_16.yaml +0 -0
  28. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.3/output_32_10.yaml +0 -0
  29. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.3/output_32_5.yaml +0 -0
  30. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.3/output_cover.yaml +0 -0
  31. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  32. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.4/input.yaml +0 -0
  33. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.4/output_24_16.yaml +0 -0
  34. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.4/output_32_10.yaml +0 -0
  35. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.4/output_32_5.yaml +0 -0
  36. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.4/output_cover.yaml +0 -0
  37. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  38. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.5/input.yaml +0 -0
  39. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.5/output_24_16.yaml +0 -0
  40. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.5/output_32_10.yaml +0 -0
  41. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.5/output_cover.yaml +0 -0
  42. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  43. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.6/input.yaml +0 -0
  44. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.6/output_24_16.yaml +0 -0
  45. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.6/output_32_10.yaml +0 -0
  46. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.6/output_cover.yaml +0 -0
  47. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  48. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.7/input.yaml +0 -0
  49. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.7/output_24_16.yaml +0 -0
  50. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.7/output_32_10.yaml +0 -0
  51. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.7/output_48_4.yaml +0 -0
  52. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.7/output_cover.yaml +0 -0
  53. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  54. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.8/input.yaml +0 -0
  55. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.8/output_24_16.yaml +0 -0
  56. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.8/output_32_10.yaml +0 -0
  57. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.8/output_48_4.yaml +0 -0
  58. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.8/output_cover.yaml +0 -0
  59. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  60. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/bonecli.py +0 -0
  61. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/__init__.py +0 -0
  62. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/cover/__init__.py +0 -0
  63. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/cover/cover.py +0 -0
  64. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/cover/time_based.py +0 -0
  65. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/cover/venetian.py +0 -0
  66. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/group/__init__.py +0 -0
  67. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/group/output_group.py +0 -0
  68. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/input/__init__.py +0 -0
  69. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/input/binary_sensor.py +0 -0
  70. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/input/detectors.py +0 -0
  71. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/input/event.py +0 -0
  72. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/input/remote/__init__.py +0 -0
  73. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/input/remote/base.py +0 -0
  74. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/input/remote/esphome.py +0 -0
  75. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/irrigation/__init__.py +0 -0
  76. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/irrigation/controller.py +0 -0
  77. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/irrigation/water_source.py +0 -0
  78. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/output/__init__.py +0 -0
  79. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/output/mcp.py +0 -0
  80. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/output/pca.py +0 -0
  81. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/output/pcf.py +0 -0
  82. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/output/remote.py +0 -0
  83. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/sensor/__init__.py +0 -0
  84. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/sensor/virtual_energy.py +0 -0
  85. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/template/__init__.py +0 -0
  86. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/template/alarm_panel.py +0 -0
  87. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/template/gate_cover.py +0 -0
  88. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/components/template/thermostat.py +0 -0
  89. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/const.py +0 -0
  90. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/__init__.py +0 -0
  91. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/cloud/__init__.py +0 -0
  92. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/cloud/data/__init__.py +0 -0
  93. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
  94. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  95. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  96. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/cloud/registration.py +0 -0
  97. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/cloud/secrets.py +0 -0
  98. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/config/__init__.py +0 -0
  99. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/config/config_helper.py +0 -0
  100. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/config/migrations/__init__.py +0 -0
  101. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  102. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/config/migrations/v2_transition.py +0 -0
  103. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/config/package-lock.json +0 -0
  104. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/config/package.json +0 -0
  105. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/config/schema_converter.py +0 -0
  106. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/config/yaml_util.py +0 -0
  107. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/discovery.py +0 -0
  108. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/events/__init__.py +0 -0
  109. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/events/bus.py +0 -0
  110. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/__init__.py +0 -0
  111. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/action_conditions.py +0 -0
  112. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/canopen.py +0 -0
  113. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/covers.py +0 -0
  114. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/display.py +0 -0
  115. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/inputs.py +0 -0
  116. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/irrigation.py +0 -0
  117. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/manager.py +0 -0
  118. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/modbus.py +0 -0
  119. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/outputs.py +0 -0
  120. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/remote.py +0 -0
  121. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/remote_input_registrar.py +0 -0
  122. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/sensors.py +0 -0
  123. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/templates/__init__.py +0 -0
  124. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/templates/alarm.py +0 -0
  125. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/templates/gate_cover.py +0 -0
  126. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/templates/thermostat.py +0 -0
  127. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/templates.py +0 -0
  128. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/manager/update.py +0 -0
  129. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/messaging/__init__.py +0 -0
  130. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/messaging/basic.py +0 -0
  131. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/messaging/basic_mqtt.py +0 -0
  132. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/messaging/composite.py +0 -0
  133. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/messaging/local.py +0 -0
  134. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/messaging/lox.py +0 -0
  135. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/messaging/mqtt.py +0 -0
  136. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/messaging/queue.py +0 -0
  137. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/remote/__init__.py +0 -0
  138. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/remote/base.py +0 -0
  139. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/remote/can.py +0 -0
  140. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/remote/esphome.py +0 -0
  141. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/remote/mqtt.py +0 -0
  142. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/remote/wled.py +0 -0
  143. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/sensor/__init__.py +0 -0
  144. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/sensor/base.py +0 -0
  145. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/sensor/system.py +0 -0
  146. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/state/__init__.py +0 -0
  147. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/system/__init__.py +0 -0
  148. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/system/host_data.py +0 -0
  149. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/system/monitor.py +0 -0
  150. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/utils/__init__.py +0 -0
  151. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/utils/async_updater.py +0 -0
  152. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/utils/conditions.py +0 -0
  153. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/utils/filter.py +0 -0
  154. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/utils/font_util.py +0 -0
  155. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/utils/logger.py +0 -0
  156. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/utils/timeperiod.py +0 -0
  157. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/core/utils/util.py +0 -0
  158. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/24x16/adc.yaml +0 -0
  159. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  160. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/24x16/config.yaml +0 -0
  161. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/24x16/event.yaml +0 -0
  162. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/24x16/mqtt.yaml +0 -0
  163. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  164. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/32x10/adc.yaml +0 -0
  165. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  166. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/32x10/config.yaml +0 -0
  167. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/32x10/event.yaml +0 -0
  168. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/32x10/mqtt.yaml +0 -0
  169. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  170. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/48x4/adc.yaml +0 -0
  171. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  172. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/48x4/config.yaml +0 -0
  173. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/48x4/event.yaml +0 -0
  174. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/48x4/mqtt.yaml +0 -0
  175. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  176. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/__init__.py +0 -0
  177. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/can_master.yaml +0 -0
  178. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/can_slave.yaml +0 -0
  179. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover/adc.yaml +0 -0
  180. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  181. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover/config.yaml +0 -0
  182. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover/cover.yaml +0 -0
  183. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover/event.yaml +0 -0
  184. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover/mqtt.yaml +0 -0
  185. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover/outputCover.yaml +0 -0
  186. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover_mix/adc.yaml +0 -0
  187. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  188. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover_mix/config.yaml +0 -0
  189. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover_mix/cover.yaml +0 -0
  190. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover_mix/event.yaml +0 -0
  191. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  192. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  193. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/adc.yaml +0 -0
  194. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  195. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  196. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  197. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  198. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/event_all.yaml +0 -0
  199. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  200. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  201. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  202. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  203. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  204. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  205. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/exceptions.py +0 -0
  206. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/__init__.py +0 -0
  207. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/analog/__init__.py +0 -0
  208. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/analog/adc.py +0 -0
  209. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/can/__init__.py +0 -0
  210. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/can/bridge.py +0 -0
  211. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/can/client.py +0 -0
  212. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/can/interface.py +0 -0
  213. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/can/node.py +0 -0
  214. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/can/node_id.py +0 -0
  215. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/can/test_od.py +0 -0
  216. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/display/__init__.py +0 -0
  217. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/display/early_oled.py +0 -0
  218. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  219. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/display/oled.py +0 -0
  220. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/gpio/__init__.py +0 -0
  221. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  222. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  223. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  224. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  225. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/gpio/input/__init__.py +0 -0
  226. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/gpio/input/base.py +0 -0
  227. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/gpio/input/manager.py +0 -0
  228. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/i2c/__init__.py +0 -0
  229. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/i2c/bus.py +0 -0
  230. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/i2c/ina219.py +0 -0
  231. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/i2c/ina219_driver.py +0 -0
  232. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/i2c/mcp9808.py +0 -0
  233. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/i2c/pct2075.py +0 -0
  234. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/onewire/__init__.py +0 -0
  235. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/onewire/bus.py +0 -0
  236. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/onewire/dallas.py +0 -0
  237. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/onewire/ds2482.py +0 -0
  238. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/sensor/__init__.py +0 -0
  239. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  240. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/sensor/temperature/base.py +0 -0
  241. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  242. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  243. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/integration/__init__.py +0 -0
  244. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/integration/homeassistant.py +0 -0
  245. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/integration/interlock.py +0 -0
  246. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/integration/lox_template.py +0 -0
  247. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/__init__.py +0 -0
  248. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/actions.py +0 -0
  249. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/MANIFEST.sha256 +0 -0
  250. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/docker/daemon.json +0 -0
  251. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
  252. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
  253. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  254. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/docker/nodered/nginx/default.conf +0 -0
  255. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
  256. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/journald/journald.conf +0 -0
  257. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  258. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/sudoers/boneio +0 -0
  259. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
  260. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
  261. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/systemd/boneio.service +0 -0
  262. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  263. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
  264. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  265. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  266. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  267. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  268. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/bootstrap/boneio-migrate +0 -0
  269. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  270. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  271. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/runner.py +0 -0
  272. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/versions/__init__.py +0 -0
  273. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
  274. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  275. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  276. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
  277. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
  278. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
  279. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
  280. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/__init__.py +0 -0
  281. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/cli.py +0 -0
  282. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/client.py +0 -0
  283. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/coordinator.py +0 -0
  284. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/__init__.py +0 -0
  285. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
  286. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  287. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  288. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  289. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  290. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  291. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  292. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  293. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
  294. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  295. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/hvac/thessla.json +0 -0
  296. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  297. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/hvac/wanas415.json +0 -0
  298. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/inverters/sofar.json +0 -0
  299. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  300. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  301. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  302. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  303. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/sensors/cwt.json +0 -0
  304. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  305. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  306. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  307. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  308. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/sensors/pt100.json +0 -0
  309. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/sensors/sht20.json +0 -0
  310. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/devices/sensors/sht30.json +0 -0
  311. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/__init__.py +0 -0
  312. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/base.py +0 -0
  313. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/derived/__init__.py +0 -0
  314. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/derived/numeric.py +0 -0
  315. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/derived/select.py +0 -0
  316. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/derived/switch.py +0 -0
  317. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/sensor/__init__.py +0 -0
  318. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/sensor/binary.py +0 -0
  319. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/sensor/numeric.py +0 -0
  320. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/sensor/text.py +0 -0
  321. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/writeable/__init__.py +0 -0
  322. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/writeable/binary.py +0 -0
  323. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/entities/writeable/numeric.py +0 -0
  324. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/mock_coordinator.py +0 -0
  325. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/modbus/utils.py +0 -0
  326. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/models/__init__.py +0 -0
  327. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/models/actions.py +0 -0
  328. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/models/events.py +0 -0
  329. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/models/files.py +0 -0
  330. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/models/logs.py +0 -0
  331. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/models/mqtt.py +0 -0
  332. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/models/state.py +0 -0
  333. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/actions.yaml +0 -0
  334. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/actions_sensor.yaml +0 -0
  335. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/actions_switch.yaml +0 -0
  336. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/condition.yaml +0 -0
  337. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/filters.yaml +0 -0
  338. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/filters_adc.yaml +0 -0
  339. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/id.yaml +0 -0
  340. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/remote_devices.yaml +0 -0
  341. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/remote_inputs.yaml +0 -0
  342. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/remote_outputs.yaml +0 -0
  343. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/schema.yaml +0 -0
  344. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/temp_unit.yaml +0 -0
  345. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/schema/update_interval.yaml +0 -0
  346. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/action_validation.py +0 -0
  347. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/app.py +0 -0
  348. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/dashboard_cards.py +0 -0
  349. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  350. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/css.worker-CvXBzhp8.js +0 -0
  351. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/editor.worker-Cn2oRESe.js +0 -0
  352. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/html.worker-BO6WuOEO.js +0 -0
  353. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/json.worker-BkJRGcCJ.js +0 -0
  354. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/monaco-61yH0vfd.js +0 -0
  355. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
  356. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/rolldown-runtime-QTnfLwEv.js +0 -0
  357. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/ts.worker-B0J26iPs.js +0 -0
  358. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/vendor-pmGLHP0_.js +0 -0
  359. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
  360. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/assets/yaml.worker-BKRoXlmz.js +0 -0
  361. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  362. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  363. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/boneio.svg +0 -0
  364. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  365. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  366. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  367. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  368. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  369. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  370. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/config.schema.json +0 -0
  371. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  372. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  373. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  374. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  375. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  376. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  377. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  378. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  379. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  380. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  381. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  382. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  383. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
  384. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  385. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  386. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  387. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  388. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  389. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  390. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  391. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
  392. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
  393. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  394. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  395. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  396. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
  397. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/frontend-dist/workbox-4918f2f6.js +0 -0
  398. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/hvac_svg_templates.py +0 -0
  399. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/middleware/__init__.py +0 -0
  400. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/middleware/auth.py +0 -0
  401. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/modbus_card_templates.py +0 -0
  402. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/__init__.py +0 -0
  403. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/auth.py +0 -0
  404. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/caddy.py +0 -0
  405. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/can.py +0 -0
  406. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/config.py +0 -0
  407. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/covers.py +0 -0
  408. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/dashboard.py +0 -0
  409. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/dev_fake_device.py +0 -0
  410. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/irrigation.py +0 -0
  411. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/migrations.py +0 -0
  412. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/modbus.py +0 -0
  413. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/outputs.py +0 -0
  414. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/remote_devices.py +0 -0
  415. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/sensors.py +0 -0
  416. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/system.py +0 -0
  417. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/templates.py +0 -0
  418. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/timezone_sudoers.py +0 -0
  419. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/tools.py +0 -0
  420. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/routes/update.py +0 -0
  421. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/adc.schema.json +0 -0
  422. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/areas.schema.json +0 -0
  423. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  424. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/boneio.schema.json +0 -0
  425. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/can.schema.json +0 -0
  426. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/config.schema.json +0 -0
  427. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/cover.schema.json +0 -0
  428. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/dallas.schema.json +0 -0
  429. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/ds2482.schema.json +0 -0
  430. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/event.schema.json +0 -0
  431. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/ina219.schema.json +0 -0
  432. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/irrigation.schema.json +0 -0
  433. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/lm75.schema.json +0 -0
  434. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/logger.schema.json +0 -0
  435. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/lox_udp.schema.json +0 -0
  436. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/mcp23017.schema.json +0 -0
  437. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/mcp9808.schema.json +0 -0
  438. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/modbus.schema.json +0 -0
  439. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/modbus_devices.schema.json +0 -0
  440. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/mqtt.schema.json +0 -0
  441. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/oled.schema.json +0 -0
  442. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/output.schema.json +0 -0
  443. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/output_group.schema.json +0 -0
  444. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/pca9685.schema.json +0 -0
  445. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/pcf8575.schema.json +0 -0
  446. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/remote_devices.schema.json +0 -0
  447. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/remote_inputs.schema.json +0 -0
  448. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/remote_outputs.schema.json +0 -0
  449. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/sensor.schema.json +0 -0
  450. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/template.schema.json +0 -0
  451. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  452. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/schema/web.schema.json +0 -0
  453. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/services/__init__.py +0 -0
  454. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/services/logs.py +0 -0
  455. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/web_server.py +0 -0
  456. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio/webui/websocket_manager.py +0 -0
  457. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio.egg-info/dependency_links.txt +0 -0
  458. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio.egg-info/entry_points.txt +0 -0
  459. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio.egg-info/requires.txt +0 -0
  460. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/boneio.egg-info/top_level.txt +0 -0
  461. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/pyproject.toml +0 -0
  462. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/setup.cfg +0 -0
  463. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/setup.py +0 -0
  464. {boneio-1.5.0.dev4 → boneio-1.5.0.dev5}/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.dev4
3
+ Version: 1.5.0.dev5
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
@@ -186,7 +186,13 @@ class BasicOutput(BasicMqtt):
186
186
  """
187
187
  can_turn_on = self.check_interlock()
188
188
  if can_turn_on:
189
- await self._loop.run_in_executor(None, self.turn_on, timestamp)
189
+ try:
190
+ await self._loop.run_in_executor(None, self.turn_on, timestamp)
191
+ except RuntimeError as err:
192
+ if "Executor shutdown" in str(err):
193
+ self.turn_on(timestamp) # Fall back to sync during shutdown
194
+ else:
195
+ raise
190
196
  else:
191
197
  _LOGGER.warning("Interlock active: cannot turn on %s.", self.id)
192
198
  # Workaround for HA is sendind state ON/OFF without physically changing the relay.
@@ -197,7 +203,13 @@ class BasicOutput(BasicMqtt):
197
203
 
198
204
  async def async_turn_off(self, timestamp=None) -> None:
199
205
  """Turn off the relay asynchronously."""
200
- await self._loop.run_in_executor(None, self.turn_off, timestamp)
206
+ try:
207
+ await self._loop.run_in_executor(None, self.turn_off, timestamp)
208
+ except RuntimeError as err:
209
+ if "Executor shutdown" in str(err):
210
+ self.turn_off(timestamp) # Fall back to sync during shutdown
211
+ else:
212
+ raise
201
213
  await self.async_send_state()
202
214
 
203
215
  async def async_toggle(self, timestamp=None) -> None:
@@ -25,6 +25,7 @@ class StateManager:
25
25
  _LOGGER.info("Loaded state file from %s", self._file)
26
26
  self._file_uptodate = False
27
27
  self._save_attributes_callback = None
28
+ self._shutting_down = False
28
29
 
29
30
  def load_states(self) -> dict:
30
31
  """Load state file.
@@ -105,6 +106,8 @@ class StateManager:
105
106
  if attr_type not in self._state:
106
107
  self._state[attr_type] = {}
107
108
  self._state[attr_type][attribute] = value
109
+ if self._shutting_down:
110
+ return
108
111
  if self._save_attributes_callback is not None:
109
112
  self._save_attributes_callback.cancel()
110
113
  self._save_attributes_callback = None
@@ -182,4 +185,26 @@ class StateManager:
182
185
  # Let's not save state if something happens same time.
183
186
  return False
184
187
  async with self._lock:
185
- return await self._loop.run_in_executor(None, self._save_state)
188
+ try:
189
+ return await self._loop.run_in_executor(None, self._save_state)
190
+ except RuntimeError as err:
191
+ if "Executor shutdown" in str(err):
192
+ # Python 3.13+: executor already closed, fall back to sync
193
+ _LOGGER.debug("Executor shutdown, saving state synchronously")
194
+ return self._save_state()
195
+ raise
196
+
197
+ def cancel_pending_and_save(self) -> None:
198
+ """Cancel any pending deferred save and do a final synchronous write.
199
+
200
+ Must be called during application shutdown BEFORE the event loop
201
+ closes the default executor. This prevents the RuntimeError:
202
+ 'Executor shutdown has been called' on Python 3.13+.
203
+ """
204
+ self._shutting_down = True
205
+ if self._save_attributes_callback is not None:
206
+ self._save_attributes_callback.cancel()
207
+ self._save_attributes_callback = None
208
+ # Final synchronous save to persist any in-memory changes
209
+ self._save_state()
210
+ _LOGGER.debug("StateManager: pending save cancelled, final state written")
@@ -45,7 +45,6 @@ class ModbusDerivedTextSensor(ModbusDerivedEntity):
45
45
  def context(self) -> dict:
46
46
  return self._context_config
47
47
 
48
- @property
49
48
  def discovery_message(self):
50
49
  """Generate Home Assistant discovery message for this entity."""
51
50
  kwargs = {
@@ -418,6 +418,17 @@ async def async_run(
418
418
  finally:
419
419
  _LOGGER.info("Cleaning up resources...")
420
420
 
421
+ # Cancel pending deferred state saves and write final state synchronously.
422
+ # This MUST happen before event_bus.stop() which may trigger sigterm
423
+ # listeners that call save_attribute() (e.g. covers turning off).
424
+ # On Python 3.13+, the default executor is shut down after async_run returns,
425
+ # so any call_later(1, save_state) that fires later would crash with
426
+ # RuntimeError: Executor shutdown has been called.
427
+ try:
428
+ manager._state_manager.cancel_pending_and_save()
429
+ except Exception as e:
430
+ _LOGGER.error(f"Error cancelling pending state saves: {e}")
431
+
421
432
  # Trigger web server shutdown if it's running
422
433
  if web_server and hasattr(web_server, "trigger_shutdown"):
423
434
  try:
@@ -0,0 +1,2 @@
1
+ # flake8: noqa
2
+ __version__ = "1.5.0dev5"
@@ -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-wbedWLv9.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-Uwrd1-uP.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-wbedWLv9.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-Uwrd1-uP.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};