boneio 1.5.0.dev29__tar.gz → 1.5.0.dev31__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. {boneio-1.5.0.dev29/boneio.egg-info → boneio-1.5.0.dev31}/PKG-INFO +1 -1
  2. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/1.0/output_24_16.yaml +1 -4
  3. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/1.0/output_32_10.yaml +1 -4
  4. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/1.0/output_48_4.yaml +0 -3
  5. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/1.0/output_cover.yaml +1 -4
  6. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/1.0/output_cover_mix.yaml +1 -4
  7. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/const.py +0 -2
  8. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/config/yaml_util.py +8 -3
  9. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/manager.py +1 -4
  10. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/sensors.py +44 -106
  11. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/i2c/bus.py +1 -1
  12. boneio-1.5.0.dev31/boneio/hardware/onewire/__init__.py +11 -0
  13. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/MANIFEST.sha256 +1 -0
  14. boneio-1.5.0.dev31/boneio/migrations/assets/modules-load.d/onewire.conf +2 -0
  15. boneio-1.5.0.dev31/boneio/migrations/versions/v1_5_4_onewire_modules.py +22 -0
  16. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/runner.py +0 -2
  17. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/schema.yaml +1 -29
  18. boneio-1.5.0.dev31/boneio/version.py +2 -0
  19. boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/BindingMatrix-LxACKGJk.js +1 -0
  20. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/ConfigEditor-BQfZO4_0.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/ConfigEditor-Db9Hv4K7.js +1 -1
  21. boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/EditItemDialog-BBgUejNu.js +66 -0
  22. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/EntityCard-2hJpg-A_.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/EntityCard-V_dIvm7h.js +1 -1
  23. boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/EntityGrid-CSg0J6S3.js +1 -0
  24. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/FormInputToggle-DmHO14qM.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/FormInputToggle-jYwQBCms.js +1 -1
  25. boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/InputsView--0TitNzt.js +1 -0
  26. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/LogViewer-DMbcVvVH.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/LogViewer-0bOsZFY4.js +2 -2
  27. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/ModbusView-BcRORBp6.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/ModbusView-B65zWo-u.js +1 -1
  28. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/NodeRedView-Bp0Z9Jxz.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/NodeRedView-4hx1AtCh.js +1 -1
  29. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/OutputsView-C8pyuOab.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/OutputsView-feRbZLV7.js +1 -1
  30. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/SensorView-C7ginngD.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/SensorView-BI9r6Khx.js +1 -1
  31. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/SudoPasswordDialog-LcIr6tz_.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/SudoPasswordDialog-CdKObBJL.js +1 -1
  32. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/SystemState-Dz4_0BKq.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/SystemState-Xwy9Q9yE.js +1 -1
  33. boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/TemplatesView-BZPOKY7l.js +1 -0
  34. boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/Tools--HWg7Etd.js +14 -0
  35. boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/UISettings-DrOjn7rw.js +38 -0
  36. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/fa-DZjnKSF-.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/fa-C9nnJsGR.js +1 -1
  37. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/gi-dWLzT3C8.js → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/gi-DFg4IokC.js +1 -1
  38. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/index-BZgrhnag.css → boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/index-Co9Pvhx4.css +1 -1
  39. boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/index-DIN8b655.js +2 -0
  40. boneio-1.5.0.dev31/boneio/webui/frontend-dist/assets/useTranslation-Dy6J9cmj.js +13 -0
  41. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/index.html +4 -4
  42. {boneio-1.5.0.dev29/boneio/webui → boneio-1.5.0.dev31/boneio/webui/frontend-dist}/schema/config.schema.json +1 -46
  43. {boneio-1.5.0.dev29/boneio/webui → boneio-1.5.0.dev31/boneio/webui/frontend-dist}/schema/sensor.schema.json +1 -19
  44. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/sw.js +1 -1
  45. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/sensors.py +8 -14
  46. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/tools.py +1 -1
  47. {boneio-1.5.0.dev29/boneio/webui/frontend-dist → boneio-1.5.0.dev31/boneio/webui}/schema/config.schema.json +1 -46
  48. {boneio-1.5.0.dev29/boneio/webui/frontend-dist → boneio-1.5.0.dev31/boneio/webui}/schema/sensor.schema.json +1 -19
  49. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31/boneio.egg-info}/PKG-INFO +1 -1
  50. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio.egg-info/SOURCES.txt +24 -24
  51. boneio-1.5.0.dev29/boneio/hardware/onewire/__init__.py +0 -23
  52. boneio-1.5.0.dev29/boneio/hardware/onewire/bus.py +0 -324
  53. boneio-1.5.0.dev29/boneio/hardware/onewire/ds2482.py +0 -457
  54. boneio-1.5.0.dev29/boneio/version.py +0 -2
  55. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/BindingMatrix-DYfJZz17.js +0 -1
  56. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/EditItemDialog-BTQYm5Cu.js +0 -66
  57. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/EntityGrid-Bhx9A7J2.js +0 -1
  58. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/InputsView-CIeHTh-Q.js +0 -1
  59. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/TemplatesView-BJdp6Xuw.js +0 -1
  60. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/Tools-C0Ek_s6a.js +0 -14
  61. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/UISettings-DMnckJ_4.js +0 -38
  62. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/index-CE9oK8Xc.js +0 -2
  63. boneio-1.5.0.dev29/boneio/webui/frontend-dist/assets/useTranslation-Cu6M9vro.js +0 -13
  64. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/LICENSE +0 -0
  65. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/MANIFEST.in +0 -0
  66. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/README.md +0 -0
  67. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/__init__.py +0 -0
  68. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.2/input.yaml +0 -0
  69. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.2/output_24_16.yaml +0 -0
  70. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.2/output_32_10.yaml +0 -0
  71. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.2/output_32_5.yaml +0 -0
  72. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.2/output_cover.yaml +0 -0
  73. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  74. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.3/input.yaml +0 -0
  75. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.3/output_24_16.yaml +0 -0
  76. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.3/output_32_10.yaml +0 -0
  77. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.3/output_32_5.yaml +0 -0
  78. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.3/output_cover.yaml +0 -0
  79. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  80. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.4/input.yaml +0 -0
  81. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.4/output_24_16.yaml +0 -0
  82. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.4/output_32_10.yaml +0 -0
  83. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.4/output_32_5.yaml +0 -0
  84. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.4/output_cover.yaml +0 -0
  85. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  86. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.5/input.yaml +0 -0
  87. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.5/output_24_16.yaml +0 -0
  88. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.5/output_32_10.yaml +0 -0
  89. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.5/output_cover.yaml +0 -0
  90. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  91. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.6/input.yaml +0 -0
  92. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.6/output_24_16.yaml +0 -0
  93. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.6/output_32_10.yaml +0 -0
  94. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.6/output_cover.yaml +0 -0
  95. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  96. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.7/input.yaml +0 -0
  97. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.7/output_24_16.yaml +0 -0
  98. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.7/output_32_10.yaml +0 -0
  99. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.7/output_48_4.yaml +0 -0
  100. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.7/output_cover.yaml +0 -0
  101. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  102. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.8/input.yaml +0 -0
  103. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.8/output_24_16.yaml +0 -0
  104. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.8/output_32_10.yaml +0 -0
  105. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.8/output_48_4.yaml +0 -0
  106. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.8/output_cover.yaml +0 -0
  107. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  108. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/boards/1.0/input.yaml +0 -0
  109. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/bonecli.py +0 -0
  110. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/__init__.py +0 -0
  111. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/cover/__init__.py +0 -0
  112. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/cover/cover.py +0 -0
  113. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/cover/time_based.py +0 -0
  114. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/cover/venetian.py +0 -0
  115. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/group/__init__.py +0 -0
  116. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/group/output_group.py +0 -0
  117. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/input/__init__.py +0 -0
  118. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/input/binary_sensor.py +0 -0
  119. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/input/detectors.py +0 -0
  120. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/input/event.py +0 -0
  121. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/input/remote/__init__.py +0 -0
  122. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/input/remote/base.py +0 -0
  123. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/input/remote/esphome.py +0 -0
  124. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/irrigation/__init__.py +0 -0
  125. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/irrigation/controller.py +0 -0
  126. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/irrigation/water_source.py +0 -0
  127. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/output/__init__.py +0 -0
  128. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/output/basic.py +0 -0
  129. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/output/buzzer.py +0 -0
  130. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/output/mcp.py +0 -0
  131. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/output/pca.py +0 -0
  132. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/output/pcf.py +0 -0
  133. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/output/remote.py +0 -0
  134. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/sensor/__init__.py +0 -0
  135. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/sensor/virtual_energy.py +0 -0
  136. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/template/__init__.py +0 -0
  137. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/template/alarm_panel.py +0 -0
  138. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/template/gate_cover.py +0 -0
  139. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/components/template/thermostat.py +0 -0
  140. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/__init__.py +0 -0
  141. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/cloud/__init__.py +0 -0
  142. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/cloud/data/__init__.py +0 -0
  143. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
  144. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  145. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  146. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/cloud/registration.py +0 -0
  147. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/cloud/secrets.py +0 -0
  148. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/config/__init__.py +0 -0
  149. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/config/config_helper.py +0 -0
  150. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/config/migrations/__init__.py +0 -0
  151. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  152. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/config/migrations/v2_transition.py +0 -0
  153. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/config/migrations/v4_wled_cache.py +0 -0
  154. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/config/package-lock.json +0 -0
  155. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/config/package.json +0 -0
  156. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/config/schema_converter.py +0 -0
  157. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/config/yaml_compat.py +0 -0
  158. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/discovery.py +0 -0
  159. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/events/__init__.py +0 -0
  160. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/events/bus.py +0 -0
  161. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/__init__.py +0 -0
  162. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/action_conditions.py +0 -0
  163. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/canopen.py +0 -0
  164. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/covers.py +0 -0
  165. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/display.py +0 -0
  166. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/inputs.py +0 -0
  167. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/irrigation.py +0 -0
  168. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/modbus.py +0 -0
  169. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/outputs.py +0 -0
  170. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/remote.py +0 -0
  171. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/remote_input_registrar.py +0 -0
  172. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/templates/__init__.py +0 -0
  173. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/templates/alarm.py +0 -0
  174. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/templates/gate_cover.py +0 -0
  175. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/templates/thermostat.py +0 -0
  176. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/templates.py +0 -0
  177. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/manager/update.py +0 -0
  178. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/messaging/__init__.py +0 -0
  179. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/messaging/basic.py +0 -0
  180. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/messaging/basic_mqtt.py +0 -0
  181. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/messaging/composite.py +0 -0
  182. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/messaging/local.py +0 -0
  183. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/messaging/lox.py +0 -0
  184. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/messaging/mqtt.py +0 -0
  185. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/messaging/queue.py +0 -0
  186. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/remote/__init__.py +0 -0
  187. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/remote/base.py +0 -0
  188. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/remote/can.py +0 -0
  189. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/remote/esphome.py +0 -0
  190. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/remote/mqtt.py +0 -0
  191. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/remote/wled.py +0 -0
  192. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/remote/wled_cache.py +0 -0
  193. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/sensor/__init__.py +0 -0
  194. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/sensor/base.py +0 -0
  195. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/sensor/system.py +0 -0
  196. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/state/__init__.py +0 -0
  197. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/state/manager.py +0 -0
  198. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/system/__init__.py +0 -0
  199. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/system/host_data.py +0 -0
  200. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/system/monitor.py +0 -0
  201. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/utils/__init__.py +0 -0
  202. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/utils/async_updater.py +0 -0
  203. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/utils/conditions.py +0 -0
  204. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/utils/filter.py +0 -0
  205. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/utils/font_util.py +0 -0
  206. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/utils/logger.py +0 -0
  207. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/utils/timeperiod.py +0 -0
  208. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/core/utils/util.py +0 -0
  209. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/24x16/adc.yaml +0 -0
  210. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  211. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/24x16/config.yaml +0 -0
  212. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/24x16/event.yaml +0 -0
  213. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/24x16/mqtt.yaml +0 -0
  214. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  215. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/32x10/adc.yaml +0 -0
  216. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  217. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/32x10/config.yaml +0 -0
  218. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/32x10/event.yaml +0 -0
  219. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/32x10/mqtt.yaml +0 -0
  220. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  221. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/48x4/adc.yaml +0 -0
  222. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  223. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/48x4/config.yaml +0 -0
  224. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/48x4/event.yaml +0 -0
  225. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/48x4/mqtt.yaml +0 -0
  226. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  227. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/__init__.py +0 -0
  228. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/can_master.yaml +0 -0
  229. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/can_slave.yaml +0 -0
  230. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover/adc.yaml +0 -0
  231. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  232. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover/config.yaml +0 -0
  233. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover/cover.yaml +0 -0
  234. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover/event.yaml +0 -0
  235. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover/mqtt.yaml +0 -0
  236. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover/outputCover.yaml +0 -0
  237. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover_mix/adc.yaml +0 -0
  238. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  239. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover_mix/config.yaml +0 -0
  240. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover_mix/cover.yaml +0 -0
  241. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover_mix/event.yaml +0 -0
  242. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  243. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  244. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/adc.yaml +0 -0
  245. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  246. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  247. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  248. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  249. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/event_all.yaml +0 -0
  250. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  251. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  252. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  253. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  254. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  255. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  256. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/exceptions.py +0 -0
  257. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/__init__.py +0 -0
  258. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/analog/__init__.py +0 -0
  259. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/analog/adc.py +0 -0
  260. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/can/__init__.py +0 -0
  261. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/can/bridge.py +0 -0
  262. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/can/client.py +0 -0
  263. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/can/interface.py +0 -0
  264. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/can/node.py +0 -0
  265. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/can/node_id.py +0 -0
  266. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/can/test_od.py +0 -0
  267. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/display/__init__.py +0 -0
  268. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/display/early_oled.py +0 -0
  269. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  270. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/display/oled.py +0 -0
  271. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/gpio/__init__.py +0 -0
  272. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  273. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  274. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  275. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  276. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/gpio/input/__init__.py +0 -0
  277. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/gpio/input/base.py +0 -0
  278. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/gpio/input/manager.py +0 -0
  279. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/i2c/__init__.py +0 -0
  280. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/i2c/ina219.py +0 -0
  281. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/i2c/ina219_driver.py +0 -0
  282. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/i2c/mcp9808.py +0 -0
  283. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/i2c/pct2075.py +0 -0
  284. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/onewire/dallas.py +0 -0
  285. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/sensor/__init__.py +0 -0
  286. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  287. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/sensor/temperature/base.py +0 -0
  288. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  289. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  290. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/integration/__init__.py +0 -0
  291. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/integration/homeassistant.py +0 -0
  292. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/integration/interlock.py +0 -0
  293. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/integration/lox_template.py +0 -0
  294. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/__init__.py +0 -0
  295. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/actions.py +0 -0
  296. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/docker/daemon.json +0 -0
  297. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/docker/nodered/caddy/502.html +0 -0
  298. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/docker/nodered/caddy/init-certs.sh +0 -0
  299. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  300. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/docker/nodered/nginx/default.conf +0 -0
  301. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
  302. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/journald/journald.conf +0 -0
  303. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  304. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/sudoers/boneio +0 -0
  305. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
  306. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/systemd/boneio-oled-shutdown.service +0 -0
  307. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/systemd/boneio.service +0 -0
  308. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  309. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
  310. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  311. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  312. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  313. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  314. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/assets/wheels/pyyaml-6.0.3-cp313-cp313-linux_armv7l.whl +0 -0
  315. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/bootstrap/boneio-migrate +0 -0
  316. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  317. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  318. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/runner.py +0 -0
  319. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/versions/__init__.py +0 -0
  320. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
  321. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  322. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  323. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/versions/v1_4_0_fix_mqtt_sudoers.py +0 -0
  324. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/versions/v1_4_3_oled_shutdown.py +0 -0
  325. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/versions/v1_4_4_caddy.py +0 -0
  326. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/versions/v1_5_0_fix_oled_fifo_permissions.py +0 -0
  327. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/versions/v1_5_1_ufw_lox_udp.py +0 -0
  328. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/versions/v1_5_2_libyaml.py +0 -0
  329. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/migrations/versions/v1_5_3_libyaml_retry.py +0 -0
  330. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/__init__.py +0 -0
  331. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/cli.py +0 -0
  332. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/client.py +0 -0
  333. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/coordinator.py +0 -0
  334. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/__init__.py +0 -0
  335. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/energy_meters/dts1964_3f.json +0 -0
  336. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  337. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  338. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  339. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  340. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  341. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  342. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  343. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/hvac/eht-topventil-plus.json +0 -0
  344. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  345. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/hvac/thessla.json +0 -0
  346. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  347. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/hvac/wanas415.json +0 -0
  348. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/inverters/sofar.json +0 -0
  349. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  350. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  351. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  352. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  353. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/sensors/cwt.json +0 -0
  354. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  355. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  356. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  357. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  358. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/sensors/pt100.json +0 -0
  359. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/sensors/qdw90a.json +0 -0
  360. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/sensors/sht20.json +0 -0
  361. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/devices/sensors/sht30.json +0 -0
  362. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/__init__.py +0 -0
  363. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/base.py +0 -0
  364. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/derived/__init__.py +0 -0
  365. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/derived/numeric.py +0 -0
  366. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/derived/select.py +0 -0
  367. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/derived/switch.py +0 -0
  368. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/derived/text.py +0 -0
  369. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/sensor/__init__.py +0 -0
  370. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/sensor/binary.py +0 -0
  371. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/sensor/numeric.py +0 -0
  372. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/sensor/text.py +0 -0
  373. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/writeable/__init__.py +0 -0
  374. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/writeable/binary.py +0 -0
  375. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/entities/writeable/numeric.py +0 -0
  376. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/mock_coordinator.py +0 -0
  377. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/modbus/utils.py +0 -0
  378. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/models/__init__.py +0 -0
  379. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/models/actions.py +0 -0
  380. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/models/events.py +0 -0
  381. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/models/files.py +0 -0
  382. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/models/logs.py +0 -0
  383. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/models/mqtt.py +0 -0
  384. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/models/state.py +0 -0
  385. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/actions.yaml +0 -0
  386. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/actions_sensor.yaml +0 -0
  387. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/actions_switch.yaml +0 -0
  388. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/condition.yaml +0 -0
  389. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/filters.yaml +0 -0
  390. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/filters_adc.yaml +0 -0
  391. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/id.yaml +0 -0
  392. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/remote_devices.yaml +0 -0
  393. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/remote_inputs.yaml +0 -0
  394. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/remote_outputs.yaml +0 -0
  395. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/temp_unit.yaml +0 -0
  396. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/schema/update_interval.yaml +0 -0
  397. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/action_validation.py +0 -0
  398. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/app.py +0 -0
  399. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/dashboard_cards.py +0 -0
  400. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/HelpLabel-BSTjOtDA.js +0 -0
  401. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/LongPressWrapper-BHOQV7Wq.js +0 -0
  402. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/Sparkline-BGWlVLtt.js +0 -0
  403. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/aiConfig-IRYCBmLm.js +0 -0
  404. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/aiWizardPrompt-D9OJ-cE7.js +0 -0
  405. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/clipboard-CCtx29e-.js +0 -0
  406. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/codicon-ngg6Pgfi.ttf +0 -0
  407. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/css.worker-CvXBzhp8.js +0 -0
  408. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/editor.worker-Cn2oRESe.js +0 -0
  409. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/formatters-zOiGPJLh.js +0 -0
  410. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/html.worker-BO6WuOEO.js +0 -0
  411. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/json.worker-BkJRGcCJ.js +0 -0
  412. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/longPress-Dx7OCSyP.js +0 -0
  413. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/modbusDeviceCatalog-L6as-BKo.js +0 -0
  414. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/monaco-61yH0vfd.js +0 -0
  415. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/monaco-Br_kD0ds.css +0 -0
  416. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/rolldown-runtime-QTnfLwEv.js +0 -0
  417. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/select-B2YDgQ4X.js +0 -0
  418. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/tabs-box-Dj36r4_e.js +0 -0
  419. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/ts.worker-B0J26iPs.js +0 -0
  420. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/utils-C8nShLO6.js +0 -0
  421. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/vendor-IzweXARb.js +0 -0
  422. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -0
  423. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/assets/yaml.worker-BKRoXlmz.js +0 -0
  424. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  425. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  426. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/boneio.svg +0 -0
  427. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  428. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  429. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  430. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  431. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  432. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  433. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  434. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  435. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  436. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  437. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  438. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  439. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  440. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  441. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  442. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  443. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  444. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  445. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
  446. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  447. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  448. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  449. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  450. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  451. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  452. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  453. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/remote_inputs.schema.json +0 -0
  454. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/remote_outputs.schema.json +0 -0
  455. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  456. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  457. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
  458. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/frontend-dist/workbox-4918f2f6.js +0 -0
  459. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/hvac_svg_templates.py +0 -0
  460. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/middleware/__init__.py +0 -0
  461. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/middleware/auth.py +0 -0
  462. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/modbus_card_templates.py +0 -0
  463. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/__init__.py +0 -0
  464. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/auth.py +0 -0
  465. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/caddy.py +0 -0
  466. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/can.py +0 -0
  467. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/config.py +0 -0
  468. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/config_actions.py +0 -0
  469. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/config_backups.py +0 -0
  470. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/config_core.py +0 -0
  471. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/config_discovery.py +0 -0
  472. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/config_files.py +0 -0
  473. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/covers.py +0 -0
  474. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/dashboard.py +0 -0
  475. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/dev_fake_device.py +0 -0
  476. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/irrigation.py +0 -0
  477. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/migrations.py +0 -0
  478. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/modbus.py +0 -0
  479. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/mqtt_reference.py +0 -0
  480. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/nodered.py +0 -0
  481. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/outputs.py +0 -0
  482. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/remote_devices.py +0 -0
  483. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/system.py +0 -0
  484. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/templates.py +0 -0
  485. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/timezone_sudoers.py +0 -0
  486. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/routes/update.py +0 -0
  487. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/adc.schema.json +0 -0
  488. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/areas.schema.json +0 -0
  489. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  490. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/boneio.schema.json +0 -0
  491. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/can.schema.json +0 -0
  492. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/cover.schema.json +0 -0
  493. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/dallas.schema.json +0 -0
  494. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/ds2482.schema.json +0 -0
  495. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/event.schema.json +0 -0
  496. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/ina219.schema.json +0 -0
  497. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/irrigation.schema.json +0 -0
  498. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/lm75.schema.json +0 -0
  499. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/logger.schema.json +0 -0
  500. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/lox_udp.schema.json +0 -0
  501. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/mcp23017.schema.json +0 -0
  502. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/mcp9808.schema.json +0 -0
  503. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/modbus.schema.json +0 -0
  504. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/modbus_devices.schema.json +0 -0
  505. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/mqtt.schema.json +0 -0
  506. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/oled.schema.json +0 -0
  507. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/output.schema.json +0 -0
  508. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/output_group.schema.json +0 -0
  509. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/pca9685.schema.json +0 -0
  510. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/pcf8575.schema.json +0 -0
  511. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/remote_devices.schema.json +0 -0
  512. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/remote_inputs.schema.json +0 -0
  513. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/remote_outputs.schema.json +0 -0
  514. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/template.schema.json +0 -0
  515. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  516. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/schema/web.schema.json +0 -0
  517. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/services/__init__.py +0 -0
  518. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/services/logs.py +0 -0
  519. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/sudo_rate_limiter.py +0 -0
  520. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/web_server.py +0 -0
  521. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio/webui/websocket_manager.py +0 -0
  522. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio.egg-info/dependency_links.txt +0 -0
  523. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio.egg-info/entry_points.txt +0 -0
  524. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio.egg-info/requires.txt +0 -0
  525. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/boneio.egg-info/top_level.txt +0 -0
  526. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/pyproject.toml +0 -0
  527. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/setup.cfg +0 -0
  528. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/setup.py +0 -0
  529. {boneio-1.5.0.dev29 → boneio-1.5.0.dev31}/tests/test_py313_compatibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boneio
3
- Version: 1.5.0.dev29
3
+ Version: 1.5.0.dev31
4
4
  Summary: Python App for BoneIO
5
5
  Author-email: Paweł Szafer <pszafer@gmail.com>
6
6
  License: GNU General Public License v3.0
@@ -126,7 +126,4 @@ output_mapping:
126
126
  output_type: switch
127
127
  buzzer:
128
128
  kind: buzzer
129
- output_type: switch
130
- ds2482:
131
- - id: ds2482_bus
132
- address: '0x18'
129
+ output_type: switch
@@ -166,7 +166,4 @@ output_mapping:
166
166
  output_type: light
167
167
  buzzer:
168
168
  kind: buzzer
169
- output_type: switch
170
- ds2482:
171
- - id: ds2482_bus
172
- address: '0x18'
169
+ output_type: switch
@@ -249,6 +249,3 @@ output_mapping:
249
249
  buzzer:
250
250
  kind: buzzer
251
251
  output_type: switch
252
- ds2482:
253
- - id: ds2482_bus
254
- address: '0x18'
@@ -166,7 +166,4 @@ output_mapping:
166
166
  output_type: cover
167
167
  buzzer:
168
168
  kind: buzzer
169
- output_type: switch
170
- ds2482:
171
- - id: ds2482_bus
172
- address: '0x18'
169
+ output_type: switch
@@ -166,7 +166,4 @@ output_mapping:
166
166
  output_type: light
167
167
  buzzer:
168
168
  kind: buzzer
169
- output_type: switch
170
- ds2482:
171
- - id: ds2482_bus
172
- address: '0x18'
169
+ output_type: switch
@@ -130,7 +130,6 @@ BINARY_SENSOR = "binary_sensor"
130
130
  LM75 = "lm75"
131
131
  MCP_TEMP_9808 = "mcp9808"
132
132
  INPUT_SENSOR = "inputsensor"
133
- DS2482 = "ds2482"
134
133
  DALLAS = "dallas"
135
134
  ONEWIRE = "onewire"
136
135
 
@@ -176,7 +175,6 @@ OledDataTypes = Literal[UPTIME, NETWORK, CPU, DISK, MEMORY, SWAP, OUTPUT]
176
175
  InputTypes = Literal[INPUT, INPUT_SENSOR]
177
176
  ExpanderTypes = Literal[MCP23017, PCA9685, PCF8575]
178
177
  DEVICE_CLASS = "device_class"
179
- DallasBusTypes = Literal[DS2482, DALLAS]
180
178
  FILTERS = "filters"
181
179
 
182
180
  cover_actions = {
@@ -501,9 +501,14 @@ def merge_board_config(config: dict) -> dict:
501
501
  if "mcp23017" not in config and "mcp23017" in board_config:
502
502
  config["mcp23017"] = board_config["mcp23017"]
503
503
 
504
- # Copy DS2482 configuration if not already defined
505
- if "ds2482" not in config and "ds2482" in board_config:
506
- config["ds2482"] = board_config["ds2482"]
504
+ # Remove deprecated ds2482 section (kernel modules handle 1-Wire now)
505
+ if "ds2482" in config:
506
+ _LOGGER.warning(
507
+ "Deprecated 'ds2482' section found in config — "
508
+ "1-Wire is now handled by kernel modules (ds2482/w1-therm). "
509
+ "Removing from config."
510
+ )
511
+ del config["ds2482"]
507
512
 
508
513
 
509
514
  # Process outputs
@@ -94,7 +94,7 @@ class Manager:
94
94
  pca9685: List of PCA9685 configurations
95
95
  mcp23017: List of MCP23017 configurations
96
96
  pcf8575: List of PCF8575 configurations
97
- ds2482: List of DS2482 configurations
97
+ adc: List of ADC configurations
98
98
  dallas: Dallas 1-Wire configuration
99
99
  oled: OLED display configuration
100
100
  adc: List of ADC configurations
@@ -120,7 +120,6 @@ class Manager:
120
120
  pca9685: list[dict] | None = None,
121
121
  mcp23017: list[dict] | None = None,
122
122
  pcf8575: list[dict] | None = None,
123
- ds2482: list[dict] | None = None,
124
123
  dallas: dict[str, Any] | None = None,
125
124
  oled: dict[str, Any] | None = None,
126
125
  adc: list[dict] | None = None,
@@ -147,7 +146,6 @@ class Manager:
147
146
  pca9685 = pca9685 or []
148
147
  mcp23017 = mcp23017 or []
149
148
  pcf8575 = pcf8575 or []
150
- ds2482 = ds2482 or []
151
149
  oled = oled or {}
152
150
  cover = cover or []
153
151
  template = template or []
@@ -211,7 +209,6 @@ class Manager:
211
209
  manager=self,
212
210
  sensors=sensors,
213
211
  dallas=dallas,
214
- ds2482=ds2482,
215
212
  adc=adc,
216
213
  )
217
214
 
@@ -16,7 +16,6 @@ from typing import TYPE_CHECKING, Any
16
16
  from boneio.const import (
17
17
  ADDRESS,
18
18
  DALLAS,
19
- DS2482,
20
19
  FILTERS,
21
20
  ID,
22
21
  INA219,
@@ -29,18 +28,10 @@ from boneio.const import (
29
28
  SHOW_HA,
30
29
  UPDATE_INTERVAL,
31
30
  VIRTUAL_ENERGY_SENSOR,
32
- DallasBusTypes,
33
31
  )
34
32
  from boneio.core.utils import TimePeriod
35
33
  from boneio.exceptions import I2CError
36
- from boneio.hardware.onewire import (
37
- DS2482 as DS2482Bridge,
38
- )
39
- from boneio.hardware.onewire import (
40
- DS2482_ADDRESS,
41
- DallasSensor,
42
- OneWireBus,
43
- )
34
+ from boneio.hardware.onewire import DallasSensor
44
35
  from boneio.integration.homeassistant import (
45
36
  ha_adc_sensor_availabilty_message,
46
37
  ha_sensor_ina_availabilty_message,
@@ -74,7 +65,6 @@ class SensorManager:
74
65
  manager: Parent Manager instance
75
66
  sensors: Dictionary of sensor configurations by type
76
67
  dallas: Dallas 1-Wire configuration
77
- ds2482: List of DS2482 I2C-to-1Wire bridge configurations
78
68
  adc: List of ADC sensor configurations
79
69
  """
80
70
 
@@ -83,7 +73,6 @@ class SensorManager:
83
73
  manager: Manager,
84
74
  sensors: dict[str, list],
85
75
  dallas: dict[str, Any] | None,
86
- ds2482: list[dict] | None,
87
76
  adc: list[dict] | None,
88
77
  ):
89
78
  """Initialize sensor manager."""
@@ -92,7 +81,6 @@ class SensorManager:
92
81
  self._ina219_sensors = []
93
82
  self._adc_sensors = []
94
83
  self._dallas_sensors: list[DallasSensor] = []
95
- self._ds2482_buses: dict[str, OneWireBus] = {}
96
84
  self._system_sensors = []
97
85
  self._virtual_energy_sensors = []
98
86
  self._virtual_energy_sensor_configs = sensors.get(VIRTUAL_ENERGY_SENSOR, [])
@@ -100,7 +88,7 @@ class SensorManager:
100
88
  # Configure all sensor types
101
89
  self._configure_temp_sensors(sensors=sensors)
102
90
  self._configure_ina219_sensors(sensors=sensors)
103
- self._configure_dallas_sensors(dallas=dallas, ds2482=ds2482, sensors=sensors.get(ONEWIRE))
91
+ self._configure_dallas_sensors(dallas=dallas, sensors=sensors.get(ONEWIRE))
104
92
  self._configure_adc(adc_list=adc)
105
93
  self._configure_system_sensors()
106
94
  # Note: virtual_energy_sensors are configured after outputs are ready
@@ -270,49 +258,29 @@ class SensorManager:
270
258
  def _configure_dallas_sensors(
271
259
  self,
272
260
  dallas: dict | None,
273
- ds2482: list | None,
274
261
  sensors: list | None,
275
262
  ) -> None:
276
- """Configure Dallas 1-Wire sensors via GPIO or DS2482 bridge.
263
+ """Configure Dallas 1-Wire sensors.
264
+
265
+ Hardware communication is handled by kernel modules (ds2482, w1-therm).
266
+ This method only creates sensor wrapper objects.
277
267
 
278
268
  Args:
279
269
  dallas: Dallas GPIO configuration (deprecated, kept for backward compat)
280
- ds2482: List of DS2482 bridge configurations
281
270
  sensors: List of sensor configurations
282
271
  """
283
- # Configure DS2482 I2C-to-1Wire bridges (always, even without sensors,
284
- # so scan_onewire_buses() can discover devices on the bus)
285
- if ds2482:
286
- for _single_ds in ds2482:
287
- _LOGGER.debug("Preparing DS2482 bus at address %s", _single_ds[ADDRESS])
288
- try:
289
- ow_bus = self._configure_ds2482(address=_single_ds[ADDRESS])
290
- self._ds2482_buses[_single_ds[ID]] = ow_bus
291
- except Exception as err:
292
- _LOGGER.error("Failed to configure DS2482 at %s: %s", _single_ds[ADDRESS], err)
293
-
294
272
  if not sensors:
295
273
  return
296
274
 
297
- # Create sensor instances based on platform
275
+ # Create sensor instances
298
276
  for sensor_config in sensors:
299
- platform = sensor_config.get("platform", "gpio_onewire")
300
277
  address = sensor_config.get("address")
301
278
 
302
279
  if not address:
303
280
  _LOGGER.warning("Sensor config missing address, skipping")
304
281
  continue
305
282
 
306
- _LOGGER.debug("Configuring %s sensor at address %s", platform, address)
307
-
308
- if platform == "ds2482":
309
- # DS2482 platform - need bus_id
310
- bus_id = sensor_config.get("bus_id")
311
- if not bus_id or bus_id not in self._ds2482_buses:
312
- _LOGGER.error(
313
- "DS2482 sensor %s requires valid bus_id. Available: %s", address, list(self._ds2482_buses.keys())
314
- )
315
- continue
283
+ _LOGGER.debug("Configuring 1-Wire sensor at address %s", address)
316
284
 
317
285
  # Create sensor instance
318
286
  sensor = self._create_dallas_sensor(
@@ -323,28 +291,15 @@ class SensorManager:
323
291
  self._dallas_sensors.append(sensor)
324
292
  self._temp_sensors.append(sensor)
325
293
 
326
- def _configure_ds2482(self, address: int = DS2482_ADDRESS) -> OneWireBus:
327
- """Configure DS2482 I2C-to-1Wire bridge.
328
-
329
- Args:
330
- address: I2C address of DS2482
331
-
332
- Returns:
333
- OneWireBus instance
334
- """
335
- ds2482 = DS2482Bridge(i2c=self._manager._i2cbusio, address=address)
336
- return OneWireBus(ds2482=ds2482)
337
-
338
294
  def scan_onewire_buses(self) -> list[dict]:
339
- """Scan all configured DS2482 buses for connected 1-Wire devices.
340
-
341
- Performs a ROM search on each bus and returns a list of discovered
342
- devices with their addresses, family codes, and configuration status.
295
+ """Scan 1-Wire devices via kernel w1 subsystem.
343
296
 
344
297
  Returns:
345
298
  List of dicts with keys: bus_id, address, family, family_name,
346
299
  configured (whether sensor is already in config).
347
300
  """
301
+ from pathlib import Path
302
+
348
303
  # Family code -> human-readable name
349
304
  family_names: dict[str, str] = {
350
305
  "28": "DS18B20",
@@ -354,65 +309,49 @@ class SensorManager:
354
309
  "42": "DS28EA00",
355
310
  }
356
311
 
357
- # Collect addresses already configured
358
- configured_addresses: set[str] = set()
312
+ # Collect normalized addresses already configured
313
+ configured_normalized: set[str] = set()
359
314
  for sensor in self._dallas_sensors:
360
315
  if hasattr(sensor, "_address") and sensor._address:
361
- configured_addresses.add(sensor._address.upper())
316
+ addr = str(sensor._address).upper().replace("-", "")
317
+ configured_normalized.add(addr)
362
318
 
363
319
  results: list[dict] = []
364
320
 
365
- for bus_id, ow_bus in self._ds2482_buses.items():
366
- _LOGGER.info("Scanning 1-Wire bus '%s' for devices...", bus_id)
367
- try:
368
- devices = ow_bus.scan()
369
- _LOGGER.info("Bus '%s': found %d device(s)", bus_id, len(devices))
370
- for dev in devices:
371
- hex_id = dev.hex_id.upper()
372
- family_code = hex_id[:2]
373
- results.append({
374
- "bus_id": bus_id,
375
- "address": hex_id,
376
- "family": family_code,
377
- "family_name": family_names.get(family_code, f"Unknown (0x{family_code})"),
378
- "configured": hex_id in configured_addresses,
379
- })
380
- except Exception as err:
381
- _LOGGER.error("Failed to scan bus '%s': %s", bus_id, err)
321
+ # Scan kernel 1-Wire subsystem (/sys/bus/w1/devices)
322
+ w1_sys_dir = Path("/sys/bus/w1/devices")
323
+ if not w1_sys_dir.is_dir():
324
+ _LOGGER.warning(
325
+ "No kernel 1-Wire subsystem found at /sys/bus/w1/devices. "
326
+ "Ensure ds2482 and w1-therm kernel modules are loaded."
327
+ )
328
+ return results
329
+
330
+ _LOGGER.info("Scanning 1-Wire devices via kernel subsystem (/sys/bus/w1/devices)...")
331
+ try:
332
+ for item in w1_sys_dir.iterdir():
333
+ if item.name.startswith("w1_bus_master"):
334
+ continue
335
+ # item.name is e.g. "28-0000098c7df0"
336
+ raw_id = item.name.upper()
337
+ clean_addr = raw_id.replace("-", "")
338
+ family_code = clean_addr[:2] if len(clean_addr) >= 2 else "28"
339
+ is_configured = clean_addr in configured_normalized
340
+
382
341
  results.append({
383
- "bus_id": bus_id,
384
- "address": None,
385
- "error": str(err),
342
+ "bus_id": "kernel",
343
+ "address": item.name,
344
+ "family": family_code,
345
+ "family_name": family_names.get(family_code, f"Unknown (0x{family_code})"),
346
+ "configured": is_configured,
386
347
  })
348
+ if results:
349
+ _LOGGER.info("Kernel 1-Wire scan: found %d device(s)", len(results))
350
+ except Exception as err:
351
+ _LOGGER.error("Failed scanning /sys/bus/w1/devices: %s", err)
387
352
 
388
353
  return results
389
354
 
390
- def _find_onewire_devices(
391
- self,
392
- ow_bus: OneWireBus,
393
- bus_id: str,
394
- bus_type: str,
395
- ) -> dict[str, str]:
396
- """Scan for 1-Wire devices on bus.
397
-
398
- Args:
399
- ow_bus: OneWire bus instance
400
- bus_id: Bus identifier
401
- bus_type: Type of bus (DS2482 or DALLAS)
402
-
403
- Returns:
404
- Dictionary mapping device addresses to bus IDs
405
- """
406
- out = {}
407
- try:
408
- devices = ow_bus.scan()
409
- for device in devices:
410
- _addr = device.hw_id
411
- _LOGGER.debug("Found device on bus %s with address %s", bus_id, _addr)
412
- out[_addr] = bus_id
413
- except RuntimeError as err:
414
- _LOGGER.error("Problem with scanning %s bus: %s", bus_type, err)
415
- return out
416
355
 
417
356
  def _find_dallas_gpio_devices(self, bus_id: str) -> dict[str, str]:
418
357
  """Scan for Dallas sensors using Linux kernel w1 subsystem.
@@ -624,7 +563,6 @@ class SensorManager:
624
563
  # Get config from ConfigHelper (already reloaded by Manager)
625
564
  config = self._manager._config_helper.get_config()
626
565
  new_sensors_config = config.get(SENSOR_SECTION, [])
627
- ds2482_config = config.get(DS2482, [])
628
566
 
629
567
  # Get current sensor addresses
630
568
  current_addresses = {s._address for s in self._dallas_sensors}
@@ -234,7 +234,7 @@ class SMBus2I2C:
234
234
 
235
235
  # ========== Direct SMBus methods for low-level device access ==========
236
236
  # These methods provide direct access to SMBus operations for devices
237
- # like DS2482 that need byte-level control.
237
+ # that need byte-level control.
238
238
 
239
239
  def write_byte(self, address: int, value: int) -> None:
240
240
  """Write a single byte to I2C device (no register).
@@ -0,0 +1,11 @@
1
+ """OneWire hardware sensors.
2
+
3
+ The kernel ds2482/w1-therm modules handle hardware communication;
4
+ this package exposes only the DallasSensor wrapper.
5
+ """
6
+
7
+ from boneio.hardware.onewire.dallas import DallasSensor
8
+
9
+ __all__ = [
10
+ "DallasSensor",
11
+ ]
@@ -9,6 +9,7 @@ cd90e1bcb6488669179c8e7a40a6265923e0fea045cc79d5b7559ebb309131b6 docker/nodered
9
9
  30467786de3a35e02f9f5049b29ec1808056814e7c2fc5e507ff4b0991cde557 docker/nodered/nginx/default.conf
10
10
  66b00c1e480113a098b90d9948284781896c943006c1a3fe882d515f63b9d3e8 docker/nodered/node-red/settings.js
11
11
  67b4d45f890f073bee66dcf6d6026bd42515d938566b90d2b2a6f7ea016f3764 journald/journald.conf
12
+ 75e3985aabe2170021dcdc70eb07ff4516ce9f7190e32ddfae3b0e9d963aac88 modules-load.d/onewire.conf
12
13
  3db75f83033d82ca229e2d3bcb7daf4a5584f65b298d834bd0ee12527ae06e22 mosquitto/boneio.conf
13
14
  3fc86895f5fd3e59d2ee2d229ff7ff7c0030752f0c4eca0bb04314ea57ac0ede sudoers/boneio
14
15
  80e528c3a0e03a4d269bcb46db4224c8e5b6c75553b266cfc4f301b515ddcd95 systemd/boneio-oled-boot.service
@@ -0,0 +1,22 @@
1
+ """Enable 1-Wire kernel modules (ds2482 and w1-therm) for DS2482/DS2484 I2C bridges."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from boneio.migrations.actions import InstallFile, MigrationAction
6
+
7
+ VERSION = "1.5.4"
8
+ DESCRIPTION = "Load ds2482 and w1-therm kernel modules for 1-Wire support"
9
+ REQUIRES_ROOT = True
10
+
11
+
12
+ def plan() -> list[MigrationAction]:
13
+ """Return the ordered list of migration actions."""
14
+ return [
15
+ InstallFile(
16
+ src="modules-load.d/onewire.conf",
17
+ dst="/etc/modules-load.d/onewire.conf",
18
+ mode=0o644,
19
+ owner="root",
20
+ group="root",
21
+ ),
22
+ ]
@@ -17,7 +17,6 @@ from boneio.const import (
17
17
  CAN,
18
18
  COVER,
19
19
  DALLAS,
20
- DS2482,
21
20
  ENABLED,
22
21
  EVENT_ENTITY,
23
22
  HA_DISCOVERY,
@@ -103,7 +102,6 @@ config_modules = [
103
102
  {"name": MCP23017, "default": []},
104
103
  {"name": PCF8575, "default": []},
105
104
  {"name": PCA9685, "default": []},
106
- {"name": DS2482, "default": []},
107
105
  {"name": ADC, "default": []},
108
106
  {"name": COVER, "default": []},
109
107
  {"name": MODBUS, "default": {}},
@@ -2129,28 +2129,12 @@ irrigation:
2129
2129
  meta:
2130
2130
  label: Run zone every Nth scheduled cycle. 1 = every time.
2131
2131
 
2132
- ds2482:
2133
- type: list
2134
- required: False
2135
- meta:
2136
- label: "https://boneio.eu/docs/black/configuration/ds2482 \n DS2482 section of boneIO Black. It enables DS2482 1 wire extenders, which you can use in sensor: config."
2137
- schema:
2138
- type: dict
2139
- required: False
2140
- schema:
2141
- id: !include id.yaml
2142
- address:
2143
- type: string
2144
- required: True
2145
- default: 0x18
2146
- meta:
2147
- label: GPIO of I2C SDA
2148
2132
 
2149
2133
  sensor:
2150
2134
  type: list
2151
2135
  required: False
2152
2136
  meta:
2153
- label: Sensor list. Currently only Dallas DS18B20 and DS2482 support. Check DS18B20 or DS2482 section for more info.
2137
+ label: Sensor list for Dallas 1-Wire temperature sensors (DS18B20, etc.). Detected via kernel w1 subsystem.
2154
2138
  schema:
2155
2139
  type: dict
2156
2140
  schema:
@@ -2169,23 +2153,11 @@ sensor:
2169
2153
  required: False
2170
2154
  meta:
2171
2155
  label: Area/room where the sensor is located. Used for HA device grouping.
2172
- platform:
2173
- type: string
2174
- required: False
2175
- default: gpio_onewire
2176
- allowed: ['gpio_onewire', 'ds2482']
2177
- meta:
2178
- label: Platform - gpio_onewire for kernel 1-Wire, ds2482 for I2C bridge.
2179
2156
  address:
2180
2157
  type: string
2181
2158
  required: True
2182
2159
  meta:
2183
2160
  label: Address of Dallas device (e.g. 28-0000098c7df0)
2184
- bus_id:
2185
- type: string
2186
- required: False
2187
- meta:
2188
- label: DS2482 bus ID (only for ds2482 platform). References ds2482 section id.
2189
2161
  show_in_ha:
2190
2162
  type: boolean
2191
2163
  required: False
@@ -0,0 +1,2 @@
1
+ # flake8: noqa
2
+ __version__ = "1.5.0.dev31"
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{c as t}from"./monaco-61yH0vfd.js";import{b as n}from"./vendor-IzweXARb.js";import{F as r,I as i,M as a,O as o,Q as s,Vt as c,Xt as l,Yt as u,_ as d,m as f,p,ut as m,z as h,zt as g}from"./fa-C9nnJsGR.js";import{t as _}from"./useTranslation-Dy6J9cmj.js";import{r as v}from"./utils-C8nShLO6.js";import{t as y}from"./EditItemDialog-BBgUejNu.js";var b=e(t(),1);function x(e){return l({tag:`svg`,attr:{viewBox:`0 0 512 512`},child:[{tag:`path`,attr:{d:`M224 0c17.7 0 32 14.3 32 32l0 12 96-12c17.7 0 32 14.3 32 32s-14.3 32-32 32L256 84l-31-3.9-1-.1-1 .1L192 84 96 96C78.3 96 64 81.7 64 64s14.3-32 32-32l96 12 0-12c0-17.7 14.3-32 32-32zM0 224c0-17.7 14.3-32 32-32l96 0 22.6-22.6c6-6 14.1-9.4 22.6-9.4l18.7 0 0-43.8 32-4 32 4 0 43.8 18.7 0c8.5 0 16.6 3.4 22.6 9.4L320 192l32 0c88.4 0 160 71.6 160 160c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s-14.3-32-32-32l-36.1 0c-20.2 29-53.9 48-91.9 48s-71.7-19-91.9-48L32 320c-17.7 0-32-14.3-32-32l0-64zM436.8 423.4c1.9-4.5 6.3-7.4 11.2-7.4s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1l0 1.2c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-1.2c0-4.5 .9-8.9 2.7-13.1l18.2-42.4z`},child:[]}]})(e)}var S=n();function C({outputType:e,className:t}){switch(e){case`light`:return(0,S.jsx)(s,{className:v(`text-warning`,t)});case`switch`:return(0,S.jsx)(c,{className:v(`text-info`,t)});case`valve`:return(0,S.jsx)(x,{className:v(`text-accent`,t)});case`cover`:return(0,S.jsx)(o,{className:v(`text-secondary`,t)});case`shutter`:case`blind`:case`curtain`:return(0,S.jsx)(u,{className:v(`text-secondary`,t)});default:return null}}var w={single:`1×`,double:`2×`,triple:`3×`,long:`L`,pressed:`P`,released:`R`,double_then_long:`2×L`,single_then_long:`1×L`,double_then_single:`2×1`},T={TOGGLE:`short_toggle`,ON:`short_on`,OFF:`short_off`,OPEN:`short_open`,CLOSE:`short_close`,STOP:`short_stop`},E=[{key:`single`,labelKey:`binding_matrix.legend_single`,icon:`1×`},{key:`double`,labelKey:`binding_matrix.legend_double`,icon:`2×`},{key:`triple`,labelKey:`binding_matrix.legend_triple`,icon:`3×`},{key:`long`,labelKey:`binding_matrix.legend_long`,icon:`L`},{key:`pressed`,labelKey:`binding_matrix.legend_pressed`,icon:`P`},{key:`released`,labelKey:`binding_matrix.legend_released`,icon:`R`}],D=[{labelKey:`actions.toggle`,shortKey:`actions.short_toggle`},{labelKey:`actions.on`,shortKey:`actions.short_on`},{labelKey:`actions.off`,shortKey:`actions.short_off`},{labelKey:`actions.open`,shortKey:`actions.short_open`},{labelKey:`actions.close`,shortKey:`actions.short_close`},{labelKey:`actions.stop`,shortKey:`actions.short_stop`}],O={single:`single`,double:`double`,triple:`triple`,long:`long`,pressed:`pressed`,released:`released`,double_then_long:`sequences`,single_then_long:`sequences`,double_then_single:`sequences`};function k(e,t){let n=w[e.clickType]||e.clickType,r=T[e.actionValue];return`${n} ${r?t(`actions.${r}`):e.actionValue}`}function A(e,t){let n=`actions.${e.actionValue.toLowerCase()}`,r=t(n),i=r===n?e.actionValue:r;return`${e.clickType} → ${i}`}function j(e){let t=e.action||`output`,n=``,r=``,i;switch(t){case`output`:n=e.boneio_output||``,r=e.action_output||`TOGGLE`;break;case`cover`:n=e.boneio_cover||``,r=e.action_cover||`TOGGLE`;break;case`remote_output`:i=e.boneio_id||``,n=i?`${i}/${e.output_id||``}`:e.output_id||``,r=e.action_output||`TOGGLE`;break;case`remote_cover`:i=e.boneio_id||``,n=i?`${i}/${e.cover_id||``}`:e.cover_id||``,r=e.action_cover||`TOGGLE`;break;default:n=``,r=e.action_output||e.action_cover||``;break}return{targetId:n,actionType:t,actionValue:r,remoteDevice:i}}function M(e){let t=[],n=[`single`,`double`,`triple`,`long`,`pressed`,`released`,`double_then_long`,`single_then_long`,`double_then_single`],r=e.local_inputs||[];for(let e=0;e<r.length;e++){let i=r[e],a=i.id||i.boneio_input||i.pin||`local_${e}`,o=[];for(let e of n){let t=i.actions?.[e]||[];for(let n of t){let{targetId:t,actionType:r,actionValue:i,remoteDevice:a}=j(n);t&&o.push({clickType:e,actionType:r,targetId:t,actionValue:i,remoteDevice:a})}}t.push({id:a,name:i.name||i.id||i.boneio_input||i.pin||a,area:i.area||void 0,type:`local`,inputKind:i._type===`binary_sensor`?`binary_sensor`:`event`,bindings:o})}let i=e.remote_inputs||[];for(let e=0;e<i.length;e++){let r=i[e],a=r.boneio_id||r.remote_device||``,o=r.id||r.entity_id||``,s=a?`${a}/${o}`:o||`remote_${e}`,c=[];for(let e of n){let t=r.actions?.[e]||[];for(let n of t){let{targetId:t,actionType:r,actionValue:i,remoteDevice:a}=j(n);t&&c.push({clickType:e,actionType:r,targetId:t,actionValue:i,remoteDevice:a})}}t.push({id:s,name:r.name||r.id||o,area:r.area||void 0,type:`remote`,inputKind:r._type===`binary_sensor`?`binary_sensor`:`event`,remoteDevice:a,bindings:c})}return t}function N(e){let t=[],n=e.output||[];for(let e=0;e<n.length;e++){let r=n[e];if(r.output_type===`cover`||r.output_type===`none`)continue;let i=r.id||`output_${e}`;t.push({id:i,name:r.name||r.id||i,area:r.area||void 0,type:`output`,outputType:r.output_type})}let r=e.cover||[];for(let e=0;e<r.length;e++){let n=r[e],i=n.id||`cover_${e}`;t.push({id:i,name:n.name||n.id||i,area:n.area||void 0,type:`cover`,outputType:n.device_class||`cover`})}let i=e.remote_outputs||[];for(let e=0;e<i.length;e++){let n=i[e],r=n.boneio_id||n.remote_device||``,a=n.id||n.output_id||``,o=r?`${r}/${a}`:a||`remote_out_${e}`;t.push({id:o,name:n.name||n.id||a,area:n.area||void 0,type:`remote_output`,remoteDevice:r,outputType:n.output_type})}return t}function P({inputs:e,outputs:t,t:n}){let r=e.filter(e=>e.type===`local`),i=e.filter(e=>e.type===`remote`),a=t.filter(e=>e.type===`output`),o=t.filter(e=>e.type===`cover`),s=t.filter(e=>e.type===`remote_output`||e.type===`remote_cover`),c=r.filter(e=>e.bindings.length>0),l=i.filter(e=>e.bindings.length>0),u=new Set(e.flatMap(e=>e.bindings.map(e=>e.targetId))),d=a.filter(e=>u.has(e.id)),f=o.filter(e=>u.has(e.id)),p=s.filter(e=>u.has(e.id)),m=e.reduce((e,t)=>e+t.bindings.length,0);return(0,S.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-4 gap-3 mb-4`,children:[(0,S.jsxs)(`div`,{className:`bg-base-200/50 rounded-xl p-3 border border-base-300 space-y-1`,children:[(0,S.jsx)(`h4`,{className:`text-xs font-bold uppercase tracking-wider text-base-content/50`,children:n(`binding_matrix.local`)}),(0,S.jsxs)(`p`,{className:`text-xs text-base-content/70`,children:[`📥 `,n(`binding_matrix.inputs`),`: `,r.length,(0,S.jsxs)(`span`,{className:`text-success ml-1`,children:[`(`,c.length,` ✓)`]}),(0,S.jsxs)(`span`,{className:`text-warning ml-1`,children:[`(`,r.length-c.length,` ○)`]})]}),(0,S.jsxs)(`p`,{className:`text-xs text-base-content/70`,children:[`💡 `,n(`binding_matrix.outputs`),`: `,a.length,(0,S.jsxs)(`span`,{className:`text-success ml-1`,children:[`(`,d.length,` ✓)`]}),(0,S.jsxs)(`span`,{className:`text-warning ml-1`,children:[`(`,a.length-d.length,` ○)`]})]}),(0,S.jsxs)(`p`,{className:`text-xs text-base-content/70`,children:[`🚪 `,n(`binding_matrix.covers`),`: `,o.length,(0,S.jsxs)(`span`,{className:`text-success ml-1`,children:[`(`,f.length,` ✓)`]}),(0,S.jsxs)(`span`,{className:`text-warning ml-1`,children:[`(`,o.length-f.length,` ○)`]})]})]}),(i.length>0||s.length>0)&&(0,S.jsxs)(`div`,{className:`bg-info/5 rounded-xl p-3 border border-info/20 space-y-1`,children:[(0,S.jsx)(`h4`,{className:`text-xs font-bold uppercase tracking-wider text-info/70`,children:n(`binding_matrix.remote`)}),(0,S.jsxs)(`p`,{className:`text-xs text-base-content/70`,children:[`📥 `,n(`binding_matrix.inputs`),`: `,i.length,(0,S.jsxs)(`span`,{className:`text-success ml-1`,children:[`(`,l.length,` ✓)`]}),(0,S.jsxs)(`span`,{className:`text-warning ml-1`,children:[`(`,i.length-l.length,` ○)`]})]}),(0,S.jsxs)(`p`,{className:`text-xs text-base-content/70`,children:[`📡 `,n(`binding_matrix.outputs`),`: `,s.length,(0,S.jsxs)(`span`,{className:`text-success ml-1`,children:[`(`,p.length,` ✓)`]}),(0,S.jsxs)(`span`,{className:`text-warning ml-1`,children:[`(`,s.length-p.length,` ○)`]})]})]}),(0,S.jsxs)(`div`,{className:`bg-primary/5 rounded-xl p-3 border border-primary/20 flex flex-col justify-center`,children:[(0,S.jsx)(`p`,{className:`text-2xl font-extrabold text-primary`,children:m}),(0,S.jsx)(`p`,{className:`text-xs font-medium text-primary/70`,children:n(`binding_matrix.total_bindings`)})]}),(0,S.jsxs)(`div`,{className:`bg-base-200/50 rounded-xl p-3 border border-base-300`,children:[(0,S.jsx)(`h4`,{className:`text-xs font-bold uppercase tracking-wider text-base-content/50 mb-1.5`,children:n(`binding_matrix.legend`)}),(0,S.jsx)(`div`,{className:`grid grid-cols-2 gap-x-3 gap-y-0.5`,children:E.map(e=>(0,S.jsxs)(`span`,{className:`text-xxs text-base-content/60`,children:[(0,S.jsx)(`span`,{className:`font-mono font-bold text-base-content/80`,children:e.icon}),` `,n(e.labelKey)]},e.key))}),(0,S.jsx)(`div`,{className:`border-t border-base-300 mt-1.5 pt-1.5 grid grid-cols-3 gap-x-2 gap-y-0.5`,children:D.map(e=>(0,S.jsxs)(`span`,{className:`text-xxs text-base-content/60`,children:[(0,S.jsx)(`span`,{className:`font-mono font-bold text-base-content/80`,children:n(e.shortKey)}),` `,n(e.labelKey)]},e.shortKey))})]})]})}function F({inputs:e,outputs:t,t:n}){let[r,i]=(0,b.useState)(!0),[o,s]=(0,b.useState)(!0),c=new Set(e.flatMap(e=>e.bindings.map(e=>e.targetId))),l=e.filter(e=>e.type===`local`&&e.bindings.length===0),u=t.filter(e=>e.type===`output`&&!c.has(e.id)),p=t.filter(e=>e.type===`cover`&&!c.has(e.id)),m=e.filter(e=>e.type===`remote`&&e.bindings.length===0),h=t.filter(e=>(e.type===`remote_output`||e.type===`remote_cover`)&&!c.has(e.id)),g=l.length>0||u.length>0||p.length>0,_=m.length>0||h.length>0;return!g&&!_?null:(0,S.jsxs)(`div`,{className:`mt-4 space-y-3`,children:[g&&(0,S.jsxs)(`div`,{className:`border border-warning/20 rounded-xl bg-warning/5 overflow-hidden`,children:[(0,S.jsxs)(`button`,{className:`w-full p-3 flex items-center justify-between text-sm font-semibold text-warning hover:bg-warning/10 transition-colors`,onClick:()=>i(!r),children:[(0,S.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(a,{className:`w-3.5 h-3.5`}),n(`binding_matrix.unconfigured_local`)]}),r?(0,S.jsx)(d,{className:`w-3 h-3`}):(0,S.jsx)(f,{className:`w-3 h-3`})]}),r&&(0,S.jsxs)(`div`,{className:`p-3 pt-0 space-y-2`,children:[l.length>0&&(0,S.jsx)(I,{title:`📥 ${n(`binding_matrix.free_inputs`)} (${l.length})`,items:l.map(e=>({id:e.id,name:e.name,area:e.area}))}),u.length>0&&(0,S.jsx)(I,{title:`💡 ${n(`binding_matrix.free_outputs`)} (${u.length})`,items:u.map(e=>({id:e.id,name:e.name,area:e.area}))}),p.length>0&&(0,S.jsx)(I,{title:`🚪 ${n(`binding_matrix.free_covers`)} (${p.length})`,items:p.map(e=>({id:e.id,name:e.name,area:e.area}))})]})]}),_&&(0,S.jsxs)(`div`,{className:`border border-info/20 rounded-xl bg-info/5 overflow-hidden`,children:[(0,S.jsxs)(`button`,{className:`w-full p-3 flex items-center justify-between text-sm font-semibold text-info hover:bg-info/10 transition-colors`,onClick:()=>s(!o),children:[(0,S.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(a,{className:`w-3.5 h-3.5`}),n(`binding_matrix.unconfigured_remote`)]}),o?(0,S.jsx)(d,{className:`w-3 h-3`}):(0,S.jsx)(f,{className:`w-3 h-3`})]}),o&&(0,S.jsxs)(`div`,{className:`p-3 pt-0 space-y-2`,children:[m.length>0&&(0,S.jsx)(I,{title:`📥 ${n(`binding_matrix.free_remote_inputs`)} (${m.length})`,items:m.map(e=>({id:e.id,name:e.name,area:e.area,badge:e.remoteDevice}))}),h.length>0&&(0,S.jsx)(I,{title:`📡 ${n(`binding_matrix.free_remote_outputs`)} (${h.length})`,items:h.map(e=>({id:e.id,name:e.name,area:e.area,badge:e.remoteDevice}))})]})]})]})}function I({title:e,items:t}){return(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`p`,{className:`text-xs font-semibold text-base-content/60 mb-1`,children:e}),(0,S.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:t.map(e=>(0,S.jsxs)(`span`,{className:`badge badge-sm badge-ghost text-xxs font-mono gap-1`,title:e.id,children:[e.name,e.area&&(0,S.jsxs)(`span`,{className:`text-base-content/40`,children:[`(`,e.area,`)`]}),e.badge&&(0,S.jsxs)(`span`,{className:`text-info/60`,children:[`[`,e.badge,`]`]})]},e.id))})]})}function ee({inputs:e,outputs:t,areaFilter:n,hideEmpty:r,t:i,onEditInput:a,onEditOutput:o}){let[s,c]=(0,b.useState)(null),[l,u]=(0,b.useState)(null),d=(0,b.useRef)(null),f=(0,b.useRef)(!1),p=(0,b.useRef)(!1),h=(0,b.useRef)(0),g=(0,b.useRef)(0),[_,y]=(0,b.useState)(null),x=(0,b.useRef)(null),w=(0,b.useCallback)((e,t,n)=>{n||(e.preventDefault(),y({x:e.clientX,y:e.clientY,row:t}))},[]),T=(0,b.useCallback)((e,t,n)=>{if(n)return;let r=`touches`in e?{x:e.touches[0].clientX,y:e.touches[0].clientY}:{x:e.clientX,y:e.clientY};x.current=setTimeout(()=>{y({...r,row:t}),x.current=null},500)},[]),D=(0,b.useCallback)(()=>{x.current&&=(clearTimeout(x.current),null)},[]);(0,b.useEffect)(()=>{if(!_)return;let e=null,t=requestAnimationFrame(()=>{let t=()=>y(null);window.addEventListener(`click`,t),window.addEventListener(`contextmenu`,t,{capture:!0}),window.addEventListener(`scroll`,t,!0),e=()=>{window.removeEventListener(`click`,t),window.removeEventListener(`contextmenu`,t,{capture:!0}),window.removeEventListener(`scroll`,t,!0)}});return()=>{cancelAnimationFrame(t),e?.()}},[_]);let O=(0,b.useMemo)(()=>{let e=new Map;for(let n of t)e.set(n.id,n.area);return e},[t]),j=(0,b.useMemo)(()=>{let t=e;return n.size>0&&(t=t.filter(e=>{let t=e.area||`__none__`;return n.has(t)?!0:e.bindings.some(e=>{let t=O.get(e.targetId)||`__none__`;return n.has(t)})})),r&&(t=t.filter(e=>e.bindings.length>0)),t},[e,n,r,O]),M=(0,b.useMemo)(()=>new Set(e.flatMap(e=>e.bindings.map(e=>e.targetId))),[e]),N=(0,b.useMemo)(()=>{let t=new Map;for(let n of e){let e=n.area||`__none__`;for(let r of n.bindings)t.has(r.targetId)||t.set(r.targetId,new Set),t.get(r.targetId).add(e)}return t},[e]),P=(0,b.useMemo)(()=>{let e=t;return n.size>0&&(e=e.filter(e=>{let t=e.area||`__none__`;if(n.has(t))return!0;let r=N.get(e.id);if(r){for(let e of r)if(n.has(e))return!0}return!1})),r&&(e=e.filter(e=>M.has(e.id))),e},[t,n,r,M,N]),F=(0,b.useMemo)(()=>{let e=new Map;for(let t of j){let n=new Map;for(let e of t.bindings){let t=n.get(e.targetId)||[];t.push(e),n.set(e.targetId,t)}e.set(t.id,n)}return e},[j]);return j.length===0||P.length===0?(0,S.jsx)(`div`,{className:`text-center py-12 text-base-content/40`,children:(0,S.jsx)(`p`,{className:`text-sm`,children:i(`binding_matrix.no_data`)})}):(0,S.jsxs)(`div`,{ref:d,className:`overflow-x-auto rounded-xl border border-base-300 cursor-grab active:cursor-grabbing select-none`,onMouseDown:e=>{f.current=!0,p.current=!1,h.current=e.clientX,g.current=d.current?.scrollLeft||0},onMouseMove:e=>{if(!f.current||!d.current)return;let t=e.clientX-h.current;!p.current&&Math.abs(t)>5&&(p.current=!0),p.current&&(d.current.scrollLeft=g.current-t)},onMouseUp:()=>{f.current=!1,p.current=!1},onMouseLeave:()=>{f.current=!1,p.current=!1},onClickCapture:e=>{p.current&&(e.stopPropagation(),e.preventDefault())},children:[(0,S.jsxs)(`table`,{className:`table table-xs w-auto`,children:[(0,S.jsx)(`thead`,{children:(0,S.jsxs)(`tr`,{children:[(0,S.jsx)(`th`,{className:`sticky left-0 z-20 bg-base-200 border-r border-base-300 min-w-[120px]`}),P.map(e=>(0,S.jsxs)(`th`,{className:v(`text-center text-xxs font-bold px-2 py-2 min-w-[80px] border-r border-base-300 bg-base-200 cursor-pointer group/col whitespace-nowrap`,l===e.id&&`bg-primary/10`),onMouseEnter:()=>u(e.id),onMouseLeave:()=>u(null),onClick:()=>o(e),title:i(`binding_matrix.click_to_edit`),children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-center gap-1`,children:[(0,S.jsx)(C,{outputType:e.outputType,className:`w-3 h-3 shrink-0`}),(0,S.jsx)(`span`,{className:`whitespace-nowrap`,children:e.name}),(0,S.jsx)(m,{className:`w-2 h-2 opacity-0 group-hover/col:opacity-40 transition-opacity shrink-0`})]}),e.area?(0,S.jsx)(`div`,{className:`text-xxs font-normal text-base-content/40 truncate`,children:e.area}):(0,S.jsx)(`div`,{className:`text-xxs font-normal text-base-content/20`,children:`—`}),e.remoteDevice&&(0,S.jsx)(`div`,{className:`text-xxs font-normal text-info/50 truncate`,children:e.remoteDevice})]},e.id))]})}),(0,S.jsx)(`tbody`,{children:j.map(e=>{let t=F.get(e.id);return(0,S.jsxs)(`tr`,{className:v(`hover:bg-base-200/50`,s===e.id&&`bg-base-200/40`),onMouseEnter:()=>c(e.id),onMouseLeave:()=>c(null),children:[(0,S.jsxs)(`td`,{className:v(`sticky left-0 z-10 bg-base-100 border-r border-base-300 font-medium text-xs cursor-pointer group/row`,s===e.id&&`bg-base-200/60`,e.bindings.length===0&&`text-base-content/30`),onClick:()=>a(e),title:i(`binding_matrix.click_to_edit`),children:[(0,S.jsxs)(`div`,{className:`font-bold truncate max-w-[120px] flex items-center gap-1`,title:e.id,children:[e.name,(0,S.jsx)(m,{className:`w-2.5 h-2.5 opacity-0 group-hover/row:opacity-40 transition-opacity shrink-0`})]}),e.area&&(0,S.jsx)(`div`,{className:`text-xxs text-base-content/40`,children:e.area}),e.remoteDevice&&(0,S.jsx)(`div`,{className:`text-xxs text-info/50`,children:e.remoteDevice})]}),P.map(n=>{let r=t?.get(n.id)||[],o=s===e.id||l===n.id;return(0,S.jsx)(`td`,{className:v(`text-center text-xs border-r border-base-300 px-1 py-1`,r.length>0?`bg-success/15 text-success font-medium`:`text-base-content/30`,o&&r.length>0&&`bg-success/25`,o&&r.length===0&&`bg-base-200/40`),onMouseEnter:()=>u(n.id),onMouseLeave:()=>{u(null),D()},onContextMenu:t=>w(t,e,r.length>0),onMouseDown:t=>{t.button===0&&T(t,e,r.length>0)},onMouseUp:D,onTouchStart:t=>T(t,e,r.length>0),onTouchEnd:D,onTouchMove:D,children:r.length>0&&(0,S.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:r.map((t,n)=>(0,S.jsx)(`button`,{className:`whitespace-nowrap cursor-pointer hover:bg-success/30 rounded px-0.5 transition-colors text-left`,onClick:()=>a(e,t.clickType),title:`${A(t,i)}\n${i(`binding_matrix.click_to_edit`)}`,children:k(t,i)},n))})},n.id)})]},e.id)})})]}),_&&(0,S.jsxs)(`div`,{className:`fixed z-50 bg-base-100 border border-base-300 rounded-lg shadow-xl py-1 min-w-[180px] animate-in fade-in zoom-in-95 duration-100`,style:{left:_.x,top:_.y},onClick:e=>e.stopPropagation(),children:[(0,S.jsx)(`div`,{className:`px-3 py-1.5 text-xxs font-semibold text-base-content/40 uppercase tracking-wider`,children:i(`binding_matrix.add_action`)}),E.filter(e=>_.row.inputKind===`binary_sensor`?e.key===`pressed`||e.key===`released`:e.key!==`pressed`&&e.key!==`released`).map(e=>(0,S.jsxs)(`button`,{className:`w-full text-left px-3 py-1.5 text-sm hover:bg-primary/10 transition-colors flex items-center gap-2`,onClick:()=>{a(_.row,e.key),y(null)},children:[(0,S.jsx)(`span`,{className:`font-mono text-base-content/70`,children:e.icon}),i(`binding_matrix.legend_${e.key}`)]},e.key))]})]})}function te({inputs:e,areaFilter:t,hideEmpty:n,t:r,onEditInput:i}){let[a,o]=(0,b.useState)(null),s=(0,b.useMemo)(()=>{let r=e;return t.size>0&&(r=r.filter(e=>{let n=e.area||`__none__`;return t.has(n)})),n&&(r=r.filter(e=>e.bindings.length>0)),r},[e,t,n]),c=(0,b.useCallback)(e=>{o(t=>t===e?null:e)},[]);return s.length===0?(0,S.jsx)(`div`,{className:`text-center py-12 text-base-content/40`,children:(0,S.jsx)(`p`,{className:`text-sm`,children:r(`binding_matrix.no_data`)})}):(0,S.jsx)(`div`,{className:`space-y-1.5`,children:s.map(e=>{let t=a===e.id,n=e.bindings.length>0,o=new Map;for(let t of e.bindings){let e=o.get(t.targetId)||[];e.push(t),o.set(t.targetId,e)}return(0,S.jsxs)(`div`,{className:v(`rounded-xl border overflow-hidden transition-colors`,n?`border-success/20 bg-success/5`:`border-base-300 bg-base-200/30`),children:[(0,S.jsxs)(`button`,{className:`w-full p-3 flex items-center justify-between text-sm hover:bg-base-200/30 transition-colors`,onClick:()=>n&&c(e.id),disabled:!n,children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[n?(0,S.jsx)(p,{className:`w-3.5 h-3.5 text-success shrink-0`}):(0,S.jsx)(g,{className:`w-3.5 h-3.5 text-base-content/20 shrink-0`}),(0,S.jsxs)(`div`,{className:`min-w-0 text-left`,children:[(0,S.jsx)(`span`,{className:v(`font-semibold truncate block`,!n&&`text-base-content/30`),children:e.name}),e.area&&(0,S.jsx)(`span`,{className:`text-xxs text-base-content/40`,children:e.area})]})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[n&&(0,S.jsx)(`span`,{className:`badge badge-sm badge-success font-bold`,children:e.bindings.length}),e.type===`remote`&&(0,S.jsx)(`span`,{className:`badge badge-xs badge-info font-mono`,children:e.remoteDevice}),n&&(t?(0,S.jsx)(d,{className:`w-3 h-3 text-base-content/30`}):(0,S.jsx)(f,{className:`w-3 h-3 text-base-content/30`}))]})]}),t&&n&&(0,S.jsxs)(`div`,{className:`border-t border-base-300 p-3 space-y-2 bg-base-100/50`,children:[[...o.entries()].map(([e,t])=>(0,S.jsxs)(`div`,{className:`flex items-start gap-2 text-xs`,children:[(0,S.jsx)(`span`,{className:`font-mono font-bold text-base-content/70 shrink-0 mt-0.5`,children:`→`}),(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`span`,{className:`font-semibold`,children:e}),(0,S.jsx)(`div`,{className:`flex flex-wrap gap-1 mt-0.5`,children:t.map((e,t)=>(0,S.jsx)(`span`,{className:`badge badge-xs badge-success font-mono gap-0.5`,children:k(e,r)},t))})]})]},e)),(0,S.jsxs)(`button`,{className:`btn btn-xs btn-primary btn-outline gap-1 mt-1`,onClick:t=>{t.stopPropagation(),i(e)},children:[(0,S.jsx)(m,{className:`w-2.5 h-2.5`}),r(`binding_matrix.edit_input`)]})]})]},e.id)})})}var L=({formData:e,sections:t,onSaveSection:n,onUpdateFormData:a})=>{let{t:o}=_(),[s,c]=(0,b.useState)(new Set),[l,u]=(0,b.useState)(!1),[d,p]=(0,b.useState)(!1),[m,g]=(0,b.useState)(!1),[v,x]=(0,b.useState)(null),[C,w]=(0,b.useState)(``),[T,E]=(0,b.useState)(-1),[D,k]=(0,b.useState)(`basic`),[A,j]=(0,b.useState)(!1),[I,L]=(0,b.useState)(!1),R=(0,b.useRef)(null),[ne,z]=(0,b.useState)(!1),[B,V]=(0,b.useState)(null),[H,re]=(0,b.useState)(``),[U,ie]=(0,b.useState)(-1),[ae,W]=(0,b.useState)(!1),G=(0,b.useRef)(null),K=(0,b.useCallback)((t,n)=>{let r=t.type===`remote`?`remote_inputs`:`local_inputs`,i=e[r]||[],a=i.findIndex((e,n)=>{if(t.type===`remote`){let r=e.boneio_id||e.remote_device||``,i=e.id||e.entity_id||``;return(r?`${r}/${i}`:i||`remote_${n}`)===t.id}return(e.id||e.boneio_input||e.pin||`local_${n}`)===t.id});a<0||(w(r),E(a),x(JSON.parse(JSON.stringify(i[a]))),R.current=JSON.stringify(i[a]),k(n&&O[n]||`basic`),j(!1),g(!0))},[e]),oe=(0,b.useCallback)(async()=>{if(A||T<0||!v)return;let t=[...e[C]||[]];t[T]=v,L(!0);try{a(C,t),await n(C,t),g(!1),x(null)}catch(e){console.error(`Failed to save input:`,e)}finally{L(!1)}},[v,T,C,e,A,n,a]),se=(0,b.useCallback)(()=>{g(!1),x(null)},[]),q=(0,b.useMemo)(()=>M(e),[e]),J=(0,b.useMemo)(()=>N(e),[e]),ce=(0,b.useMemo)(()=>{let e=new Set;return q.forEach(t=>{t.area&&e.add(t.area)}),J.forEach(t=>{t.area&&e.add(t.area)}),[...e].sort()},[q,J]),le=(0,b.useMemo)(()=>q.some(e=>!e.area)||J.some(e=>!e.area),[q,J]),Y=(0,b.useMemo)(()=>e.output||[],[e.output]),X=(0,b.useMemo)(()=>e.cover||[],[e.cover]),Z=(0,b.useMemo)(()=>e.output_group||[],[e.output_group]),ue=(0,b.useMemo)(()=>e.remote_devices||[],[e.remote_devices]),de=(0,b.useMemo)(()=>e.remote_inputs||[],[e.remote_inputs]),Q=(0,b.useMemo)(()=>(e.local_inputs||[]).filter(e=>e._inputType===`binary_sensor`),[e.local_inputs]),fe=(0,b.useMemo)(()=>(e.local_inputs||[]).filter(e=>e._inputType!==`binary_sensor`),[e.local_inputs]),$=(0,b.useMemo)(()=>e.areas||[],[e.areas]),pe=(0,b.useMemo)(()=>{let e=t.find(e=>e.name===`local_inputs`);return e?.schema||e?.normalizedSchema||{}},[t]),me=(0,b.useMemo)(()=>{let e=t.find(e=>e.name===`output`);return e?.schema||e?.normalizedSchema||{}},[t]),he=(0,b.useMemo)(()=>t.find(e=>e.name===`output`)?.uiSchema||{},[t]),ge=(0,b.useMemo)(()=>{let e=t.find(e=>e.name===`cover`);return e?.schema||e?.normalizedSchema||{}},[t]),_e=(0,b.useCallback)(t=>{let n={output:`output`,cover:`cover`,remote_output:`remote_outputs`,remote_cover:`remote_covers`}[t.type]||`output`,r=e[n]||[],i=r.findIndex((e,n)=>{if(t.type===`remote_output`||t.type===`remote_cover`){let r=e.boneio_id||e.remote_device||``,i=e.id||e.output_id||``;return(r?`${r}/${i}`:i||`remote_out_${n}`)===t.id}return(e.id||``)===t.id});i<0||(re(n),ie(i),V(JSON.parse(JSON.stringify(r[i]))),G.current=JSON.stringify(r[i]),z(!0))},[e]),ve=(0,b.useCallback)(async()=>{if(U<0||!B)return;let t=[...e[H]||[]];t[U]=B,W(!0);try{a(H,t),await n(H,t),z(!1),V(null)}catch(e){console.error(`Failed to save output:`,e)}finally{W(!1)}},[B,U,H,e,n,a]),ye=(0,b.useCallback)(()=>{z(!1),V(null)},[]),be=v&&R.current&&JSON.stringify(v)!==R.current,xe=B&&G.current&&JSON.stringify(B)!==G.current;return(0,S.jsxs)(`div`,{className:`p-4 md:p-6 max-w-full`,children:[(0,S.jsxs)(`div`,{className:`mb-4`,children:[(0,S.jsx)(`h2`,{className:`text-xl font-extrabold tracking-tight`,children:o(`binding_matrix.title`)}),(0,S.jsx)(`p`,{className:`text-sm text-base-content/50`,children:o(`binding_matrix.subtitle`)})]}),(0,S.jsx)(P,{inputs:q,outputs:J,t:o}),(0,S.jsxs)(`div`,{className:`flex flex-wrap gap-3 mb-4 items-center`,children:[(0,S.jsxs)(`div`,{className:`relative flex items-center gap-2`,children:[(0,S.jsx)(h,{className:`w-3 h-3 text-base-content/40`}),(0,S.jsxs)(`button`,{className:`btn btn-sm btn-outline gap-1 min-w-[160px] justify-between`,onClick:()=>u(e=>!e),children:[(0,S.jsx)(`span`,{className:`truncate text-xs`,children:s.size===0?o(`binding_matrix.all_areas`):s.size===1?s.has(`__none__`)?o(`binding_matrix.no_area`):[...s][0]:o(`binding_matrix.areas_selected`,{count:s.size})}),(0,S.jsx)(f,{className:`w-2.5 h-2.5 shrink-0`})]}),l&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>u(!1)}),(0,S.jsxs)(`div`,{className:`absolute top-full left-0 mt-1 z-50 bg-base-100 border border-base-300 rounded-lg shadow-xl py-1 min-w-[200px] max-h-[300px] overflow-y-auto`,children:[(0,S.jsxs)(`label`,{className:`flex items-center gap-2 px-3 py-1.5 hover:bg-base-200/60 cursor-pointer transition-colors`,children:[(0,S.jsx)(`input`,{type:`checkbox`,className:`checkbox checkbox-xs checkbox-primary`,checked:s.size===0,onChange:()=>c(new Set)}),(0,S.jsx)(`span`,{className:`text-xs font-semibold`,children:o(`binding_matrix.all_areas`)})]}),(0,S.jsx)(`div`,{className:`border-t border-base-300 my-0.5`}),le&&(0,S.jsxs)(`label`,{className:`flex items-center gap-2 px-3 py-1.5 hover:bg-base-200/60 cursor-pointer transition-colors`,children:[(0,S.jsx)(`input`,{type:`checkbox`,className:`checkbox checkbox-xs checkbox-primary`,checked:s.has(`__none__`),onChange:()=>{let e=new Set(s);e.has(`__none__`)?e.delete(`__none__`):e.add(`__none__`),c(e)}}),(0,S.jsx)(`span`,{className:`text-xs italic text-base-content/50`,children:o(`binding_matrix.no_area`)})]}),ce.map(e=>(0,S.jsxs)(`label`,{className:`flex items-center gap-2 px-3 py-1.5 hover:bg-base-200/60 cursor-pointer transition-colors`,children:[(0,S.jsx)(`input`,{type:`checkbox`,className:`checkbox checkbox-xs checkbox-primary`,checked:s.has(e),onChange:()=>{let t=new Set(s);t.has(e)?t.delete(e):t.add(e),c(t)}}),(0,S.jsx)(`span`,{className:`text-xs`,children:e})]},e))]})]})]}),(0,S.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,S.jsx)(`input`,{type:`checkbox`,className:`checkbox checkbox-sm checkbox-primary`,checked:d,onChange:e=>p(e.target.checked)}),(0,S.jsxs)(`span`,{className:`text-xs font-medium text-base-content/60 flex items-center gap-1`,children:[d?(0,S.jsx)(i,{className:`w-3 h-3`}):(0,S.jsx)(r,{className:`w-3 h-3`}),o(`binding_matrix.hide_empty`)]})]})]}),(0,S.jsx)(`div`,{className:`hidden md:block`,children:(0,S.jsx)(ee,{inputs:q,outputs:J,areaFilter:s,hideEmpty:d,t:o,onEditInput:K,onEditOutput:_e})}),(0,S.jsx)(`div`,{className:`md:hidden`,children:(0,S.jsx)(te,{inputs:q,areaFilter:s,hideEmpty:d,t:o,onEditInput:K})}),(0,S.jsx)(F,{inputs:q,outputs:J,t:o}),(0,S.jsx)(y,{open:m,onOpenChange:g,editingItem:v,editingIndex:T,sectionType:C,schema:C===`remote_inputs`?t.find(e=>e.name===`remote_inputs`)?.schema||t.find(e=>e.name===`remote_inputs`)?.normalizedSchema||{}:pe,allBinarySensors:Q,allEvents:fe,allOutputs:Y,allOutputGroups:Z,allCovers:X,allAreas:$,allRemoteDevices:ue,allRemoteInputs:de,savedOutputs:Y,savedOutputGroups:Z,savedCovers:X,onChange:x,onSave:oe,onCancel:se,onValidationChange:j,saveDisabled:A||!be,isSaving:I,initialTab:D}),(0,S.jsx)(y,{open:ne,onOpenChange:z,editingItem:B,editingIndex:U,sectionType:H,schema:H===`cover`?ge:me,uiSchema:H===`cover`?void 0:he,allOutputs:Y,allCovers:X,allAreas:$,onChange:V,onSave:ve,onCancel:ye,saveDisabled:!xe,isSaving:ae})]})};export{L as default};
@@ -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-IzweXARb.js";import{Yt as l,bt as u,g as d,m as f,xt as p,yt as m}from"./fa-DZjnKSF-.js";import{r as h,t as g}from"./useTranslation-Cu6M9vro.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 l({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}=g(),[r,i]=(0,_.useState)(!1),[a,o]=(0,_.useState)(null),s=async()=>{i(!0);try{let e=await h.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,l]=(0,_.useState)(!1),[g,S]=(0,_.useState)(`waiting`),[w,T]=(0,_.useState)(!0),[E,D]=(0,_.useState)(!1),O=v(),k=async()=>{try{n((await h.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 h.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 h.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 h.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)(f,{}):(0,b.jsx)(d,{})}),(0,b.jsx)(`span`,{className:`text-base-content/70`,children:e.type===`directory`?n?(0,b.jsx)(p,{}):(0,b.jsx)(u,{}):(0,b.jsx)(m,{})}),(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 h.get(`/api/files`),!0}catch{return!1}},L=async()=>{for(l(!0),S(`waiting`),await new Promise(e=>setTimeout(e,2e3)),S(`checking`);;){if(await I()){S(`ready`),await new Promise(e=>setTimeout(e,1e3)),l(!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:[g===`waiting`&&`Restarting Service...`,g===`checking`&&`Waiting for Service...`,g===`ready`&&`Service Restarted!`]}),(0,b.jsxs)(`p`,{className:`text-base-content/70`,children:[g===`waiting`&&`Initiating service restart`,g===`checking`&&`Checking if service is back online`,g===`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 h.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-IzweXARb.js";import{St as l,Xt as u,bt as d,g as f,m as p,xt as m}from"./fa-C9nnJsGR.js";import{r as h,t as g}from"./useTranslation-Dy6J9cmj.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}=g(),[r,i]=(0,_.useState)(!1),[a,o]=(0,_.useState)(null),s=async()=>{i(!0);try{let e=await h.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),[g,S]=(0,_.useState)(`waiting`),[w,T]=(0,_.useState)(!0),[E,D]=(0,_.useState)(!1),O=v(),k=async()=>{try{n((await h.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 h.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 h.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 h.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)(p,{}):(0,b.jsx)(f,{})}),(0,b.jsx)(`span`,{className:`text-base-content/70`,children:e.type===`directory`?n?(0,b.jsx)(l,{}):(0,b.jsx)(m,{}):(0,b.jsx)(d,{})}),(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 h.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:[g===`waiting`&&`Restarting Service...`,g===`checking`&&`Waiting for Service...`,g===`ready`&&`Service Restarted!`]}),(0,b.jsxs)(`p`,{className:`text-base-content/70`,children:[g===`waiting`&&`Initiating service restart`,g===`checking`&&`Checking if service is back online`,g===`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 h.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};