boneIO 1.1.0__tar.gz → 1.1.0.dev1__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 (418) hide show
  1. {boneio-1.1.0/boneio.egg-info → boneio-1.1.0.dev1}/PKG-INFO +1 -2
  2. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/input/detectors.py +5 -70
  3. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/config/config_helper.py +0 -8
  4. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/manager/inputs.py +2 -51
  5. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/manager/manager.py +22 -144
  6. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/manager/remote.py +5 -157
  7. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/remote/__init__.py +0 -9
  8. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/remote/base.py +0 -2
  9. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/integration/homeassistant.py +5 -57
  10. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/runner.py +2 -3
  11. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/schema/actions.yaml +0 -18
  12. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/schema/remote_devices.yaml +3 -106
  13. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/schema/schema.yaml +0 -15
  14. boneio-1.1.0.dev1/boneio/version.py +2 -0
  15. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/app.py +0 -2
  16. boneio-1.1.0/boneio/webui/frontend-dist/assets/cssMode-SLqjH3qK.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/cssMode-jm8BgQUG.js +1 -1
  17. boneio-1.1.0/boneio/webui/frontend-dist/assets/freemarker2-DXMvZO7c.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/freemarker2-Dp0Xzx1I.js +1 -1
  18. boneio-1.1.0/boneio/webui/frontend-dist/assets/handlebars-DldmTvGn.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/handlebars-DI4hd1VE.js +1 -1
  19. boneio-1.1.0/boneio/webui/frontend-dist/assets/html-BeFUXNc_.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/html-CqpC7ec2.js +1 -1
  20. boneio-1.1.0/boneio/webui/frontend-dist/assets/htmlMode-D4OnYTmf.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/htmlMode-Cgw0dxSz.js +1 -1
  21. boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/index-Dxd5huyV.css +1 -0
  22. boneio-1.1.0/boneio/webui/frontend-dist/assets/index-AE1j15fF.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/index-fvCxV9EK.js +232 -232
  23. boneio-1.1.0/boneio/webui/frontend-dist/assets/javascript-tD5AV0w8.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/javascript-BW9tlink.js +1 -1
  24. boneio-1.1.0/boneio/webui/frontend-dist/assets/jsonMode-D8KZNSNi.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/jsonMode-BEG4tw2F.js +1 -1
  25. boneio-1.1.0/boneio/webui/frontend-dist/assets/liquid-B4w537sW.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/liquid-xHiYCVBL.js +1 -1
  26. boneio-1.1.0/boneio/webui/frontend-dist/assets/mdx-DB1izvJl.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/mdx-DBRAmEVg.js +1 -1
  27. boneio-1.1.0/boneio/webui/frontend-dist/assets/python-CG6dl7EF.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/python-DdjAUqQp.js +1 -1
  28. boneio-1.1.0/boneio/webui/frontend-dist/assets/razor-BqVac-Wv.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/razor-CVHTFNOs.js +1 -1
  29. boneio-1.1.0/boneio/webui/frontend-dist/assets/tsMode-CvBEEAxI.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/tsMode-DR-WSiIu.js +1 -1
  30. boneio-1.1.0/boneio/webui/frontend-dist/assets/typescript-BIvQiQJr.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/typescript-ljc143Ju.js +1 -1
  31. boneio-1.1.0/boneio/webui/frontend-dist/assets/xml-BtFDS-MH.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/xml-B6zOV41n.js +1 -1
  32. boneio-1.1.0/boneio/webui/frontend-dist/assets/yaml-D0Bwrhp9.js → boneio-1.1.0.dev1/boneio/webui/frontend-dist/assets/yaml-C4f2eVhb.js +1 -1
  33. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/index.html +2 -2
  34. {boneio-1.1.0/boneio/webui/schema → boneio-1.1.0.dev1/boneio/webui/frontend-dist/schem}/adc.schema.json +4 -4
  35. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/areas.schema.json +2 -2
  36. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/binary_sensor.schema.json +6 -38
  37. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/config.schema.json +93 -437
  38. {boneio-1.1.0/boneio/webui/schema → boneio-1.1.0.dev1/boneio/webui/frontend-dist/schem}/cover.schema.json +2 -2
  39. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/ds2482.schema.json +2 -2
  40. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/event.schema.json +16 -128
  41. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/ina219.schema.json +6 -6
  42. {boneio-1.1.0/boneio/webui/schema → boneio-1.1.0.dev1/boneio/webui/frontend-dist/schem}/lm75.schema.json +4 -4
  43. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/mcp23017.schema.json +2 -2
  44. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/mcp9808.schema.json +4 -4
  45. {boneio-1.1.0/boneio/webui/schema → boneio-1.1.0.dev1/boneio/webui/frontend-dist/schem}/modbus_devices.schema.json +10 -19
  46. {boneio-1.1.0/boneio/webui/schema → boneio-1.1.0.dev1/boneio/webui/frontend-dist/schem}/mqtt.schema.json +0 -13
  47. {boneio-1.1.0/boneio/webui/schema → boneio-1.1.0.dev1/boneio/webui/frontend-dist/schem}/oled.schema.json +4 -4
  48. {boneio-1.1.0/boneio/webui/schema → boneio-1.1.0.dev1/boneio/webui/frontend-dist/schem}/output.schema.json +4 -4
  49. {boneio-1.1.0/boneio/webui/schema → boneio-1.1.0.dev1/boneio/webui/frontend-dist/schem}/output_group.schema.json +4 -4
  50. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/pca9685.schema.json +2 -2
  51. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/pcf8575.schema.json +2 -2
  52. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/remote_devices.schema.json +13 -191
  53. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/sensor.schema.json +4 -4
  54. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/virtual_energy_sensor.schema.json +2 -2
  55. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/routes/config.py +0 -3
  56. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/routes/remote_devices.py +0 -118
  57. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/routes/update.py +1 -42
  58. {boneio-1.1.0/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev1/boneio/webui/schema}/adc.schema.json +4 -4
  59. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/areas.schema.json +2 -2
  60. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/binary_sensor.schema.json +6 -38
  61. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/config.schema.json +93 -437
  62. {boneio-1.1.0/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev1/boneio/webui/schema}/cover.schema.json +2 -2
  63. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/ds2482.schema.json +2 -2
  64. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/event.schema.json +16 -128
  65. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/ina219.schema.json +6 -6
  66. {boneio-1.1.0/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev1/boneio/webui/schema}/lm75.schema.json +4 -4
  67. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/mcp23017.schema.json +2 -2
  68. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/mcp9808.schema.json +4 -4
  69. {boneio-1.1.0/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev1/boneio/webui/schema}/modbus_devices.schema.json +10 -19
  70. {boneio-1.1.0/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev1/boneio/webui/schema}/mqtt.schema.json +0 -13
  71. {boneio-1.1.0/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev1/boneio/webui/schema}/oled.schema.json +4 -4
  72. {boneio-1.1.0/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev1/boneio/webui/schema}/output.schema.json +4 -4
  73. {boneio-1.1.0/boneio/webui/frontend-dist/schem → boneio-1.1.0.dev1/boneio/webui/schema}/output_group.schema.json +4 -4
  74. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/pca9685.schema.json +2 -2
  75. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/pcf8575.schema.json +2 -2
  76. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/remote_devices.schema.json +13 -191
  77. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/sensor.schema.json +4 -4
  78. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/virtual_energy_sensor.schema.json +2 -2
  79. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/web_server.py +29 -34
  80. {boneio-1.1.0 → boneio-1.1.0.dev1/boneio.egg-info}/PKG-INFO +1 -2
  81. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio.egg-info/SOURCES.txt +17 -22
  82. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio.egg-info/requires.txt +0 -1
  83. {boneio-1.1.0 → boneio-1.1.0.dev1}/pyproject.toml +0 -1
  84. boneio-1.1.0/boneio/core/manager/update.py +0 -341
  85. boneio-1.1.0/boneio/core/remote/wled.py +0 -572
  86. boneio-1.1.0/boneio/modbus/devices/energy_meters/le-03mw.json +0 -365
  87. boneio-1.1.0/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -365
  88. boneio-1.1.0/boneio/modbus/devices/other/n4dsc08.json +0 -132
  89. boneio-1.1.0/boneio/version.py +0 -2
  90. boneio-1.1.0/boneio/webui/frontend-dist/assets/index-D0XGmf2O.css +0 -1
  91. {boneio-1.1.0 → boneio-1.1.0.dev1}/LICENSE +0 -0
  92. {boneio-1.1.0 → boneio-1.1.0.dev1}/MANIFEST.in +0 -0
  93. {boneio-1.1.0 → boneio-1.1.0.dev1}/README.md +0 -0
  94. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/__init__.py +0 -0
  95. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.2/input.yaml +0 -0
  96. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.2/output_24_16.yaml +0 -0
  97. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.2/output_32_10.yaml +0 -0
  98. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.2/output_32_5.yaml +0 -0
  99. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.2/output_cover.yaml +0 -0
  100. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  101. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.3/input.yaml +0 -0
  102. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.3/output_24_16.yaml +0 -0
  103. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.3/output_32_10.yaml +0 -0
  104. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.3/output_32_5.yaml +0 -0
  105. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.3/output_cover.yaml +0 -0
  106. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  107. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.4/input.yaml +0 -0
  108. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.4/output_24_16.yaml +0 -0
  109. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.4/output_32_10.yaml +0 -0
  110. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.4/output_32_5.yaml +0 -0
  111. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.4/output_cover.yaml +0 -0
  112. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  113. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.5/input.yaml +0 -0
  114. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.5/output_24_16.yaml +0 -0
  115. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.5/output_32_10.yaml +0 -0
  116. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.5/output_cover.yaml +0 -0
  117. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  118. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.6/input.yaml +0 -0
  119. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.6/output_24_16.yaml +0 -0
  120. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.6/output_32_10.yaml +0 -0
  121. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.6/output_cover.yaml +0 -0
  122. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  123. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.7/input.yaml +0 -0
  124. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.7/output_24_16.yaml +0 -0
  125. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.7/output_32_10.yaml +0 -0
  126. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.7/output_cover.yaml +0 -0
  127. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  128. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.8/input.yaml +0 -0
  129. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.8/output_24_16.yaml +0 -0
  130. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.8/output_32_10.yaml +0 -0
  131. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.8/output_cover.yaml +0 -0
  132. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  133. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/bonecli.py +0 -0
  134. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/__init__.py +0 -0
  135. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/cover/__init__.py +0 -0
  136. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/cover/cover.py +0 -0
  137. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/cover/previous.py +0 -0
  138. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/cover/time_based.py +0 -0
  139. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/cover/venetian.py +0 -0
  140. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/group/__init__.py +0 -0
  141. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/group/output_group.py +0 -0
  142. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/input/__init__.py +0 -0
  143. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/input/binary_sensor.py +0 -0
  144. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/input/event.py +0 -0
  145. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/output/__init__.py +0 -0
  146. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/output/basic.py +0 -0
  147. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/output/mcp.py +0 -0
  148. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/output/pca.py +0 -0
  149. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/output/pcf.py +0 -0
  150. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/sensor/__init__.py +0 -0
  151. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/components/sensor/virtual_energy.py +0 -0
  152. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/const.py +0 -0
  153. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/__init__.py +0 -0
  154. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/config/__init__.py +0 -0
  155. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/config/package-lock.json +0 -0
  156. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/config/package.json +0 -0
  157. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/config/schema_converter.py +0 -0
  158. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/config/yaml_util.py +0 -0
  159. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/discovery.py +0 -0
  160. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/events/__init__.py +0 -0
  161. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/events/bus.py +0 -0
  162. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/manager/__init__.py +0 -0
  163. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/manager/covers.py +0 -0
  164. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/manager/display.py +0 -0
  165. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/manager/modbus.py +0 -0
  166. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/manager/outputs.py +0 -0
  167. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/manager/sensors.py +0 -0
  168. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/messaging/__init__.py +0 -0
  169. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/messaging/basic.py +0 -0
  170. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/messaging/basic_mqtt.py +0 -0
  171. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/messaging/local.py +0 -0
  172. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/messaging/mqtt.py +0 -0
  173. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/messaging/queue.py +0 -0
  174. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/remote/esphome.py +0 -0
  175. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/remote/mqtt.py +0 -0
  176. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/sensor/__init__.py +0 -0
  177. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/sensor/base.py +0 -0
  178. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/sensor/system.py +0 -0
  179. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/state/__init__.py +0 -0
  180. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/state/manager.py +0 -0
  181. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/system/__init__.py +0 -0
  182. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/system/host_data.py +0 -0
  183. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/system/monitor.py +0 -0
  184. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/utils/__init__.py +0 -0
  185. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/utils/async_updater.py +0 -0
  186. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/utils/filter.py +0 -0
  187. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/utils/font_util.py +0 -0
  188. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/utils/logger.py +0 -0
  189. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/utils/timeperiod.py +0 -0
  190. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/core/utils/util.py +0 -0
  191. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/24x16/adc.yaml +0 -0
  192. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  193. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/24x16/config.yaml +0 -0
  194. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/24x16/event.yaml +0 -0
  195. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/24x16/mqtt.yaml +0 -0
  196. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  197. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/32x10/adc.yaml +0 -0
  198. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  199. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/32x10/config.yaml +0 -0
  200. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/32x10/event.yaml +0 -0
  201. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/32x10/mqtt.yaml +0 -0
  202. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  203. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/__init__.py +0 -0
  204. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover/adc.yaml +0 -0
  205. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  206. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover/config.yaml +0 -0
  207. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover/cover.yaml +0 -0
  208. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover/event.yaml +0 -0
  209. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover/mqtt.yaml +0 -0
  210. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover/outputCover.yaml +0 -0
  211. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover_mix/adc.yaml +0 -0
  212. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  213. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover_mix/config.yaml +0 -0
  214. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover_mix/cover.yaml +0 -0
  215. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover_mix/event.yaml +0 -0
  216. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  217. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  218. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/adc.yaml +0 -0
  219. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  220. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  221. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  222. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  223. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/event_all.yaml +0 -0
  224. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  225. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  226. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  227. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  228. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  229. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  230. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/exceptions.py +0 -0
  231. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/__init__.py +0 -0
  232. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/analog/__init__.py +0 -0
  233. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/analog/adc.py +0 -0
  234. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/display/__init__.py +0 -0
  235. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  236. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/display/oled.py +0 -0
  237. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/gpio/__init__.py +0 -0
  238. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  239. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  240. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  241. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  242. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/gpio/input/__init__.py +0 -0
  243. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/gpio/input/base.py +0 -0
  244. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/gpio/input/manager.py +0 -0
  245. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/i2c/__init__.py +0 -0
  246. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/i2c/bus.py +0 -0
  247. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/i2c/ina219.py +0 -0
  248. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/i2c/ina219_driver.py +0 -0
  249. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/i2c/mcp9808.py +0 -0
  250. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/i2c/pct2075.py +0 -0
  251. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/onewire/__init__.py +0 -0
  252. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/onewire/bus.py +0 -0
  253. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/onewire/dallas.py +0 -0
  254. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/onewire/ds2482.py +0 -0
  255. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/sensor/__init__.py +0 -0
  256. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  257. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/sensor/temperature/base.py +0 -0
  258. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  259. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  260. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/integration/__init__.py +0 -0
  261. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/integration/interlock.py +0 -0
  262. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/__init__.py +0 -0
  263. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/cli.py +0 -0
  264. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/client.py +0 -0
  265. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/coordinator.py +0 -0
  266. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/__init__.py +0 -0
  267. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  268. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  269. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  270. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  271. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  272. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  273. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  274. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/inverters/sofar.json +0 -0
  275. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/inverters/thessla.json +0 -0
  276. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  277. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/other/wanas415.json +0 -0
  278. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/sensors/cwt.json +0 -0
  279. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/sensors/dts1964_3f.json +0 -0
  280. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  281. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  282. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/sensors/pt100.json +0 -0
  283. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/sensors/sht20.json +0 -0
  284. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/devices/sensors/sht30.json +0 -0
  285. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/__init__.py +0 -0
  286. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/base.py +0 -0
  287. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/derived/__init__.py +0 -0
  288. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/derived/numeric.py +0 -0
  289. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/derived/select.py +0 -0
  290. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/derived/switch.py +0 -0
  291. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/derived/text.py +0 -0
  292. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/sensor/__init__.py +0 -0
  293. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/sensor/binary.py +0 -0
  294. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/sensor/numeric.py +0 -0
  295. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/sensor/text.py +0 -0
  296. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/writeable/__init__.py +0 -0
  297. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/writeable/binary.py +0 -0
  298. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/entities/writeable/numeric.py +0 -0
  299. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/modbus/utils.py +0 -0
  300. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/models/__init__.py +0 -0
  301. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/models/actions.py +0 -0
  302. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/models/events.py +0 -0
  303. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/models/files.py +0 -0
  304. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/models/logs.py +0 -0
  305. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/models/mqtt.py +0 -0
  306. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/models/state.py +0 -0
  307. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/schema/actions_sensor.yaml +0 -0
  308. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/schema/actions_switch.yaml +0 -0
  309. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/schema/filters.yaml +0 -0
  310. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/schema/filters_adc.yaml +0 -0
  311. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/schema/id.yaml +0 -0
  312. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/schema/temp_unit.yaml +0 -0
  313. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/schema/update_interval.yaml +0 -0
  314. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/abap-CRCWOmpq.js +0 -0
  315. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/apex-DnsZk_dE.js +0 -0
  316. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/azcli-1IWB1ccx.js +0 -0
  317. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/bat-DPkNLes8.js +0 -0
  318. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/bicep-Corcdgou.js +0 -0
  319. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/cameligo-CGrWLZr3.js +0 -0
  320. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/clojure-D9WOWImG.js +0 -0
  321. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/codicon-DCmgc-ay.ttf +0 -0
  322. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/coffee-B7EJu28W.js +0 -0
  323. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/cpp-SEyurbux.js +0 -0
  324. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/csharp-BoL64M5l.js +0 -0
  325. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/csp-C46ZqvIl.js +0 -0
  326. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/css-DQU6DXDx.js +0 -0
  327. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/cypher-D84EuPTj.js +0 -0
  328. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/dart-D8lhlL1r.js +0 -0
  329. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/dockerfile-DLk6rpji.js +0 -0
  330. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/ecl-BO6FnfXk.js +0 -0
  331. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/editor.worker-DsAeyiJ5.js +0 -0
  332. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/elixir-BRjLKONM.js +0 -0
  333. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/flow9-Cac8vKd7.js +0 -0
  334. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/fsharp-fd1GTHhf.js +0 -0
  335. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/go-O9LJTZXk.js +0 -0
  336. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/graphql-LQdxqEYJ.js +0 -0
  337. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/hcl-DxDQ3s82.js +0 -0
  338. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/ini-BvajGCUy.js +0 -0
  339. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/java-SYsfObOQ.js +0 -0
  340. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/json.worker-DaRII17c.js +0 -0
  341. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/julia-DQXNmw_w.js +0 -0
  342. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/kotlin-qQ0MG-9I.js +0 -0
  343. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/less-GGFNNJHn.js +0 -0
  344. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/lexon-Canl7DCW.js +0 -0
  345. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/lua-D28Ae8-K.js +0 -0
  346. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/m3-DPitgjJI.js +0 -0
  347. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/markdown-B811l8j2.js +0 -0
  348. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/mips-CdjsipkG.js +0 -0
  349. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/msdax-CYqgjx_P.js +0 -0
  350. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/mysql-BHd6q0vd.js +0 -0
  351. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/objective-c-B1aVtJYH.js +0 -0
  352. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/pascal-BhNW15KB.js +0 -0
  353. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/pascaligo-5jv8CcQD.js +0 -0
  354. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/perl-DlYyT36c.js +0 -0
  355. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/pgsql-Dy0bjov7.js +0 -0
  356. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/php-120yhfDK.js +0 -0
  357. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/pla-CjnFlu4u.js +0 -0
  358. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/postiats-CQpG440k.js +0 -0
  359. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/powerquery-DdJtto1Z.js +0 -0
  360. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/powershell-Bu_VLpJB.js +0 -0
  361. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/protobuf-IBS6jZEB.js +0 -0
  362. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/pug-kFxLfcjb.js +0 -0
  363. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/qsharp-q7JyzKFN.js +0 -0
  364. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/r-BIFz-_sK.js +0 -0
  365. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/redis-CHOsPHWR.js +0 -0
  366. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/redshift-CBifECDb.js +0 -0
  367. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/restructuredtext-CghPJEOS.js +0 -0
  368. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/ruby-CYWGW-b1.js +0 -0
  369. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/rust-DMDD0SHb.js +0 -0
  370. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/sb-BYAiYHFx.js +0 -0
  371. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/scala-Bqvq8jcR.js +0 -0
  372. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/scheme-Dhb-2j9p.js +0 -0
  373. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/scss-CTwUZ5N7.js +0 -0
  374. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/shell-CsDZo4DB.js +0 -0
  375. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/solidity-CME5AdoB.js +0 -0
  376. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/sophia-RYC1BQQz.js +0 -0
  377. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/sparql-KEyrF7De.js +0 -0
  378. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/sql-BdTr02Mf.js +0 -0
  379. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/st-C7iG7M4S.js +0 -0
  380. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/swift-D7IUmUK8.js +0 -0
  381. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/systemverilog-DgMryOEJ.js +0 -0
  382. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/tcl-PloMZuKG.js +0 -0
  383. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/twig-BfRIq3la.js +0 -0
  384. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/typespec-CzxlYoT_.js +0 -0
  385. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/vb-BwAE3J76.js +0 -0
  386. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/wgsl-B_1kOXbF.js +0 -0
  387. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/assets/yaml.worker-BTE-_K6g.js +0 -0
  388. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/boneio.svg +0 -0
  389. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  390. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/boneio.schema.json +0 -0
  391. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/dallas.schema.json +0 -0
  392. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/logger.schema.json +0 -0
  393. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/modbus.schema.json +0 -0
  394. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/frontend-dist/schem/web.schema.json +0 -0
  395. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/middleware/__init__.py +0 -0
  396. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/middleware/auth.py +0 -0
  397. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/routes/__init__.py +0 -0
  398. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/routes/auth.py +0 -0
  399. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/routes/caddy.py +0 -0
  400. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/routes/covers.py +0 -0
  401. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/routes/modbus.py +0 -0
  402. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/routes/outputs.py +0 -0
  403. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/routes/sensors.py +0 -0
  404. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/routes/system.py +0 -0
  405. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/boneio.schema.json +0 -0
  406. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/dallas.schema.json +0 -0
  407. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/logger.schema.json +0 -0
  408. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/modbus.schema.json +0 -0
  409. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/schema/web.schema.json +0 -0
  410. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/services/__init__.py +0 -0
  411. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/services/logs.py +0 -0
  412. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio/webui/websocket_manager.py +0 -0
  413. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio.egg-info/dependency_links.txt +0 -0
  414. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio.egg-info/entry_points.txt +0 -0
  415. {boneio-1.1.0 → boneio-1.1.0.dev1}/boneio.egg-info/top_level.txt +0 -0
  416. {boneio-1.1.0 → boneio-1.1.0.dev1}/setup.cfg +0 -0
  417. {boneio-1.1.0 → boneio-1.1.0.dev1}/setup.py +0 -0
  418. {boneio-1.1.0 → boneio-1.1.0.dev1}/tests/test_py313_compatibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boneio
3
- Version: 1.1.0
3
+ Version: 1.1.0.dev1
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
@@ -13,7 +13,6 @@ Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
14
  Requires-Dist: smbus2==0.4.3
15
15
  Requires-Dist: aiomqtt==2.4.0
16
- Requires-Dist: aiohttp==3.13.3
17
16
  Requires-Dist: Cerberus==1.3.7
18
17
  Requires-Dist: colorlog==6.9.0
19
18
  Requires-Dist: luma-core==2.5.1
@@ -5,7 +5,7 @@ from __future__ import annotations
5
5
  import asyncio
6
6
  import logging
7
7
  from collections.abc import Callable
8
- from dataclasses import dataclass, field
8
+ from dataclasses import dataclass
9
9
  from typing import cast
10
10
 
11
11
  import gpiod
@@ -43,9 +43,6 @@ class ClickState:
43
43
  pending_click_type: str | None = None
44
44
  pending_click_duration: float | None = None
45
45
  pending_click_timer: asyncio.TimerHandle | None = None
46
- # Long hold periodic events
47
- long_hold_periodic_timer: asyncio.TimerHandle | None = None
48
- executed_long_actions: set[int] = field(default_factory=set) # Track which long actions already executed
49
46
 
50
47
 
51
48
  @dataclass
@@ -355,14 +352,10 @@ class MultiClickDetector:
355
352
  return None
356
353
 
357
354
  def _detect_long_press(self) -> None:
358
- """Detect and report a long press and start periodic updates."""
359
- if not self._state.last_press_ts:
360
- return
361
-
362
- # Reset executed actions for new long press
363
- self._state.executed_long_actions = set()
364
-
365
- duration = self._loop.time() - self._state.last_press_ts
355
+ """Detect and report a long press."""
356
+ duration = None
357
+ if self._state.last_press_ts and self._state.last_release_ts:
358
+ duration = self._state.last_release_ts - self._state.last_press_ts
366
359
 
367
360
  _LOGGER.info("Detected LONG press on %s (%s)", self._name, self._pin)
368
361
 
@@ -372,36 +365,6 @@ class MultiClickDetector:
372
365
 
373
366
  # Emit the long press (may also trigger sequence)
374
367
  self._emit_click(LONG, duration)
375
-
376
- # Start periodic timer for subsequent long events
377
- self._state.long_hold_periodic_timer = self._loop.call_later(
378
- 0.2, # 200ms
379
- self._send_periodic_long_event
380
- )
381
-
382
- def _send_periodic_long_event(self) -> None:
383
- """Send periodic 'long' event with updated duration."""
384
- if not self._state.last_press_ts or self._state.last_release_ts:
385
- # Button released or invalid state
386
- return
387
-
388
- duration = self._loop.time() - self._state.last_press_ts
389
-
390
- _LOGGER.debug(
391
- "Periodic long event on %s (%s), duration=%.3fs",
392
- self._name,
393
- self._pin,
394
- duration
395
- )
396
-
397
- # Emit 'long' event with updated duration
398
- self._emit_click(LONG, duration)
399
-
400
- # Schedule next update
401
- self._state.long_hold_periodic_timer = self._loop.call_later(
402
- 0.2,
403
- self._send_periodic_long_event
404
- )
405
368
 
406
369
  def handle_event(self, event: gpiod.EdgeEvent) -> None:
407
370
  """Process a GPIO edge event and update click state.
@@ -433,7 +396,6 @@ class MultiClickDetector:
433
396
 
434
397
  _LOGGER.debug("PRESSED: %s (%s)", self._name, self._pin)
435
398
  self._state.last_press_ts = timestamp_s
436
- self._state.last_release_ts = None # Reset release timestamp for new press
437
399
 
438
400
  # Cancel any pending finalizer for a multi-click sequence
439
401
  if self._state.finalizer:
@@ -487,33 +449,6 @@ class MultiClickDetector:
487
449
  "EXISTS" if self._state.long_press_timer else "None",
488
450
  )
489
451
 
490
- # Cancel periodic timer if running
491
- if self._state.long_hold_periodic_timer:
492
- self._state.long_hold_periodic_timer.cancel()
493
- self._state.long_hold_periodic_timer = None
494
-
495
- # Send final 'long' event with final duration
496
- # Note: The callback creates an async task, so we need to delay
497
- # the reset of executed_actions to allow the async handler to
498
- # read the current state before it's cleared
499
- if self._state.last_press_ts:
500
- duration = timestamp_s - self._state.last_press_ts
501
- _LOGGER.debug(
502
- "Sending final long event on release for %s, duration=%.3fs, executed_actions=%s",
503
- self._name,
504
- duration,
505
- self._state.executed_long_actions
506
- )
507
- self._emit_click(LONG, duration)
508
-
509
- # Reset executed actions with a small delay to allow async handler
510
- # to read the current state. The handler uses create_task() so we
511
- # need to give it time to start and read executed_long_actions.
512
- def reset_executed_actions():
513
- self._state.executed_long_actions = set()
514
- _LOGGER.debug("Reset executed_long_actions for %s", self._name)
515
- self._loop.call_later(0.05, reset_executed_actions)
516
-
517
452
  # If a long press timer exists, it means it hasn't fired yet.
518
453
  # This is a short click.
519
454
  if self._state.long_press_timer:
@@ -45,7 +45,6 @@ class ConfigHelper:
45
45
  config_file_path: str | None = None,
46
46
  send_boneio_autodiscovery: bool = True,
47
47
  receive_boneio_autodiscovery: bool = True,
48
- update_channel: str = "stable",
49
48
  ):
50
49
  self._name = name
51
50
 
@@ -64,7 +63,6 @@ class ConfigHelper:
64
63
  self._ha_discovery_prefix = ha_discovery_prefix
65
64
  self._send_boneio_autodiscovery = send_boneio_autodiscovery
66
65
  self._receive_boneio_autodiscovery = receive_boneio_autodiscovery
67
- self._update_channel = update_channel
68
66
  self._device_type = device_type
69
67
  self._web_port = web_port
70
68
  self._proxy_port = proxy_port
@@ -81,7 +79,6 @@ class ConfigHelper:
81
79
  TEXT_SENSOR: {},
82
80
  SELECT: {},
83
81
  NUMERIC: {},
84
- "update": {}
85
82
  }
86
83
  self.manager_ready: bool = False
87
84
  self._network_info = network_info
@@ -184,11 +181,6 @@ class ConfigHelper:
184
181
  """Check if BoneIO autodiscovery receiving is enabled."""
185
182
  return self._receive_boneio_autodiscovery
186
183
 
187
- @property
188
- def update_channel(self) -> str:
189
- """Get update channel (stable or dev)."""
190
- return self._update_channel
191
-
192
184
  @property
193
185
  def device_type(self) -> str:
194
186
  return self._device_type
@@ -22,7 +22,6 @@ from boneio.const import (
22
22
  ID,
23
23
  INPUT,
24
24
  INPUT_SENSOR,
25
- LONG,
26
25
  PIN,
27
26
  PRESSED,
28
27
  RELEASED,
@@ -687,56 +686,8 @@ class InputManager:
687
686
  # Send event to MQTT for Home Assistant
688
687
  self._publish_input_event_to_mqtt(input_instance, event)
689
688
 
690
- # If publish_only is set, skip action execution (used for initial state sync)
691
- if event.publish_only:
692
- _LOGGER.debug(
693
- "Skipping action execution for %s (publish_only=True)",
694
- event.entity_id
695
- )
696
- return
697
-
698
- # Execute actions with duration threshold support
699
- if actions and event.click_type == LONG:
700
- # Get executed_actions from detector state
701
- detector = getattr(input_instance, '_detector', None)
702
- executed_actions = getattr(detector._state, 'executed_long_actions', set()) if detector else set()
703
-
704
- # Lazy evaluation: Check if there are any actions with duration thresholds
705
- # or any actions without thresholds that haven't been executed yet
706
- has_pending_actions = False
707
- for idx, action in enumerate(actions):
708
- if idx in executed_actions:
709
- continue # Already executed
710
- min_dur = action.get("min_duration")
711
- max_dur = action.get("max_duration")
712
- if min_dur is not None or max_dur is not None:
713
- # Has duration thresholds - might need to execute
714
- has_pending_actions = True
715
- break
716
- elif not executed_actions:
717
- # No thresholds and nothing executed yet - first event
718
- has_pending_actions = True
719
- break
720
-
721
- # Skip execute_actions if no pending actions (optimization for periodic events)
722
- if not has_pending_actions:
723
- _LOGGER.debug(
724
- "Skipping execute_actions for %s - no pending actions (executed=%s)",
725
- event.entity_id, executed_actions
726
- )
727
- else:
728
- # Execute actions with duration checking
729
- new_executed = await self._manager.execute_actions(
730
- actions=actions,
731
- duration=event.duration,
732
- executed_actions=executed_actions,
733
- )
734
-
735
- # Update detector state
736
- if detector:
737
- detector._state.executed_long_actions = new_executed
738
- elif actions:
739
- # Non-long events - execute all actions normally
689
+ # Execute actions for this input event (skip if publish_only)
690
+ if actions and not event.publish_only:
740
691
  await self._manager.execute_actions(actions=actions)
741
692
 
742
693
  async def send_ha_autodiscovery(self) -> None:
@@ -26,7 +26,6 @@ from boneio.const import (
26
26
  REMOTE_OUTPUT,
27
27
  SET_BRIGHTNESS,
28
28
  STATE,
29
- TOGGLE,
30
29
  cover_actions,
31
30
  output_actions,
32
31
  )
@@ -39,7 +38,6 @@ from boneio.core.manager.modbus import ModbusManager
39
38
  from boneio.core.manager.outputs import OutputManager
40
39
  from boneio.core.manager.sensors import SensorManager
41
40
  from boneio.core.manager.remote import RemoteDeviceManager
42
- from boneio.core.manager.update import UpdateManager
43
41
  from boneio.core.discovery import BlackDiscoveryPublisher
44
42
  from boneio.core.messaging import MessageBus
45
43
  from boneio.core.state import StateManager
@@ -205,11 +203,6 @@ class Manager:
205
203
  message_bus=message_bus,
206
204
  )
207
205
 
208
- # 9. UpdateManager (checks for software updates and publishes to HA)
209
- self.update_manager = UpdateManager(
210
- manager=self,
211
- )
212
-
213
206
  # Configure virtual energy sensors (must be after outputs are initialized)
214
207
  self.sensors.configure_virtual_energy_sensors()
215
208
 
@@ -329,7 +322,6 @@ class Manager:
329
322
  await self.sensors.send_ha_autodiscovery()
330
323
  await self.modbus.send_ha_autodiscovery()
331
324
  await self.display.send_ha_autodiscovery()
332
- await self.update_manager.send_ha_autodiscovery()
333
325
 
334
326
  def send_ha_autodiscovery(
335
327
  self,
@@ -387,9 +379,6 @@ class Manager:
387
379
  availability_msg_func = ha_cover_availabilty_message
388
380
  elif ha_type == BUTTON:
389
381
  availability_msg_func = ha_button_availabilty_message
390
- elif ha_type == "update":
391
- from boneio.integration.homeassistant import ha_update_availability_message
392
- availability_msg_func = ha_update_availability_message
393
382
 
394
383
  # Use availability_msg_func from kwargs if provided (for sensors)
395
384
  if 'availability_msg_func' in kwargs:
@@ -410,16 +399,6 @@ class Manager:
410
399
  )
411
400
  self.send_message(topic=topic, payload=payload, retain=True)
412
401
 
413
- async def _handle_update_install_command(self, topic: str, payload: str) -> None:
414
- """Handle update install command from Home Assistant.
415
-
416
- Args:
417
- topic: MQTT topic
418
- payload: MQTT payload (should be "INSTALL")
419
- """
420
- _LOGGER.info("Received update install command: %s", payload)
421
- await self.update_manager.handle_install_command(payload)
422
-
423
402
  def parse_actions(self, pin: str, actions: dict) -> dict:
424
403
  """Parse actions configuration.
425
404
 
@@ -444,28 +423,17 @@ class Manager:
444
423
  # Support both new 'boneio_output' and legacy 'pin' for backward compatibility
445
424
  entity_id = action_definition.get("boneio_output") or action_definition.get("pin")
446
425
  stripped_entity_id = strip_accents(entity_id)
447
- action_output = action_definition.get("action_output", TOGGLE)
426
+ action_output = action_definition.get("action_output")
448
427
  output = self.outputs.get_output(stripped_entity_id) or self.outputs.get_output_group(stripped_entity_id)
449
428
  action_to_execute = output_actions.get(action_output)
450
429
  if output and action_to_execute:
451
430
  _f = getattr(output, action_to_execute, None)
452
431
  if _f:
453
- parsed_action = {
432
+ parsed_actions[click_type].append({
454
433
  "action": action,
455
434
  "pin": stripped_entity_id,
456
435
  "action_to_execute": action_to_execute,
457
- }
458
- # Copy duration thresholds for long press actions
459
- if action_definition.get("min_duration") is not None:
460
- parsed_action["min_duration"] = action_definition["min_duration"]
461
- if action_definition.get("max_duration") is not None:
462
- parsed_action["max_duration"] = action_definition["max_duration"]
463
- _LOGGER.debug(
464
- "Parsed OUTPUT action for %s: output=%s, action=%s, min_dur=%s, max_dur=%s",
465
- pin, stripped_entity_id, action_to_execute,
466
- parsed_action.get("min_duration"), parsed_action.get("max_duration")
467
- )
468
- parsed_actions[click_type].append(parsed_action)
436
+ })
469
437
  continue
470
438
  _LOGGER.warning("Device %s for action in %s not found. Omitting.", entity_id, pin)
471
439
 
@@ -473,25 +441,19 @@ class Manager:
473
441
  # Support both new 'boneio_cover' and legacy 'pin' for backward compatibility
474
442
  entity_id = action_definition.get("boneio_cover") or action_definition.get("pin")
475
443
  stripped_entity_id = strip_accents(entity_id)
476
- action_cover = action_definition.get("action_cover", TOGGLE)
444
+ action_cover = action_definition.get("action_cover")
477
445
  extra_data = action_definition.get("data", {})
478
446
  cover = self.covers.get_cover(stripped_entity_id)
479
447
  action_to_execute = cover_actions.get(action_cover)
480
448
  if cover and action_to_execute:
481
449
  _f = getattr(cover, action_to_execute, None)
482
450
  if _f:
483
- parsed_action = {
451
+ parsed_actions[click_type].append({
484
452
  "action": action,
485
453
  "pin": stripped_entity_id,
486
454
  "action_to_execute": action_to_execute,
487
455
  "extra_data": extra_data,
488
- }
489
- # Copy duration thresholds for long press actions
490
- if action_definition.get("min_duration") is not None:
491
- parsed_action["min_duration"] = action_definition["min_duration"]
492
- if action_definition.get("max_duration") is not None:
493
- parsed_action["max_duration"] = action_definition["max_duration"]
494
- parsed_actions[click_type].append(parsed_action)
456
+ })
495
457
  continue
496
458
  _LOGGER.warning("Device %s for action not found. Omitting.", entity_id)
497
459
 
@@ -499,17 +461,11 @@ class Manager:
499
461
  action_mqtt_msg = action_definition.get("action_mqtt_msg")
500
462
  action_topic = action_definition.get(TOPIC)
501
463
  if action_topic and action_mqtt_msg:
502
- parsed_action = {
464
+ parsed_actions[click_type].append({
503
465
  "action": action,
504
466
  "action_mqtt_msg": action_mqtt_msg,
505
467
  "action_topic": action_topic,
506
- }
507
- # Copy duration thresholds for long press actions
508
- if action_definition.get("min_duration") is not None:
509
- parsed_action["min_duration"] = action_definition["min_duration"]
510
- if action_definition.get("max_duration") is not None:
511
- parsed_action["max_duration"] = action_definition["max_duration"]
512
- parsed_actions[click_type].append(parsed_action)
468
+ })
513
469
  continue
514
470
  _LOGGER.warning("MQTT action missing topic or message for %s", pin)
515
471
 
@@ -518,17 +474,11 @@ class Manager:
518
474
  action_output = action_definition.get("action_output")
519
475
  action_to_execute = output_actions.get(action_output.upper())
520
476
  if boneio_id and action_to_execute:
521
- parsed_action = {
477
+ parsed_actions[click_type].append({
522
478
  "action": action,
523
479
  "boneio_id": boneio_id,
524
480
  "action_output": action_output,
525
- }
526
- # Copy duration thresholds for long press actions
527
- if action_definition.get("min_duration") is not None:
528
- parsed_action["min_duration"] = action_definition["min_duration"]
529
- if action_definition.get("max_duration") is not None:
530
- parsed_action["max_duration"] = action_definition["max_duration"]
531
- parsed_actions[click_type].append(parsed_action)
481
+ })
532
482
  continue
533
483
  _LOGGER.warning("OUTPUT_OVER_MQTT action missing data for %s", pin)
534
484
 
@@ -537,17 +487,11 @@ class Manager:
537
487
  action_cover = action_definition.get("action_cover")
538
488
  action_to_execute = cover_actions.get(action_cover.upper())
539
489
  if boneio_id and action_to_execute:
540
- parsed_action = {
490
+ parsed_actions[click_type].append({
541
491
  "action": action,
542
492
  "boneio_id": boneio_id,
543
493
  "action_cover": action_cover,
544
- }
545
- # Copy duration thresholds for long press actions
546
- if action_definition.get("min_duration") is not None:
547
- parsed_action["min_duration"] = action_definition["min_duration"]
548
- if action_definition.get("max_duration") is not None:
549
- parsed_action["max_duration"] = action_definition["max_duration"]
550
- parsed_actions[click_type].append(parsed_action)
494
+ })
551
495
  continue
552
496
  _LOGGER.warning("COVER_OVER_MQTT action missing data for %s", pin)
553
497
 
@@ -557,18 +501,12 @@ class Manager:
557
501
  output_id = action_definition.get("output_id")
558
502
  action_output = action_definition.get("action_output", "TOGGLE")
559
503
  if remote_device and output_id:
560
- parsed_action = {
504
+ parsed_actions[click_type].append({
561
505
  "action": action,
562
506
  "remote_device": remote_device,
563
507
  "output_id": output_id,
564
508
  "action_output": action_output,
565
- }
566
- # Copy duration thresholds for long press actions
567
- if action_definition.get("min_duration") is not None:
568
- parsed_action["min_duration"] = action_definition["min_duration"]
569
- if action_definition.get("max_duration") is not None:
570
- parsed_action["max_duration"] = action_definition["max_duration"]
571
- parsed_actions[click_type].append(parsed_action)
509
+ })
572
510
  continue
573
511
  _LOGGER.warning("REMOTE_OUTPUT action missing remote_device or output_id for %s", pin)
574
512
 
@@ -579,19 +517,13 @@ class Manager:
579
517
  action_cover = action_definition.get("action_cover", "TOGGLE")
580
518
  extra_data = action_definition.get("data", {})
581
519
  if remote_device and cover_id:
582
- parsed_action = {
520
+ parsed_actions[click_type].append({
583
521
  "action": action,
584
522
  "remote_device": remote_device,
585
523
  "cover_id": cover_id,
586
524
  "action_cover": action_cover,
587
525
  "extra_data": extra_data,
588
- }
589
- # Copy duration thresholds for long press actions
590
- if action_definition.get("min_duration") is not None:
591
- parsed_action["min_duration"] = action_definition["min_duration"]
592
- if action_definition.get("max_duration") is not None:
593
- parsed_action["max_duration"] = action_definition["max_duration"]
594
- parsed_actions[click_type].append(parsed_action)
526
+ })
595
527
  continue
596
528
  _LOGGER.warning("REMOTE_COVER action missing remote_device or cover_id for %s", pin)
597
529
 
@@ -599,58 +531,18 @@ class Manager:
599
531
 
600
532
  async def execute_actions(
601
533
  self,
602
- actions: list,
603
- duration: float | None = None,
604
- executed_actions: set[int] | None = None,
605
- ) -> set[int]:
534
+ actions: list
535
+ ) -> None:
606
536
  """Execute list of actions.
607
537
 
608
538
  Args:
609
539
  actions: List of actions to execute
610
- duration: Current duration in seconds (for long press threshold checking)
611
- executed_actions: Set of action indices already executed (for long press)
612
-
613
- Returns:
614
- Set of action indices that were executed
615
540
  """
616
- if executed_actions is None:
617
- executed_actions = set()
618
541
 
619
- duration_ms = (duration or 0) * 1000 # Convert to ms
620
542
 
621
543
  start_time = time.time()
622
544
 
623
- for idx, action_definition in enumerate(actions):
624
- # Skip if already executed
625
- if idx in executed_actions:
626
- _LOGGER.debug("Action %d already executed, skipping", idx)
627
- continue
628
-
629
- # Check duration thresholds
630
- min_dur = action_definition.get("min_duration") # ms
631
- max_dur = action_definition.get("max_duration") # ms
632
-
633
- _LOGGER.debug(
634
- "Checking action %d: min_dur=%s, max_dur=%s, duration_ms=%.1f, executed=%s",
635
- idx, min_dur, max_dur, duration_ms, executed_actions
636
- )
637
-
638
- if min_dur is not None or max_dur is not None:
639
- # Action has duration thresholds
640
- if min_dur is not None and duration_ms < min_dur:
641
- _LOGGER.debug("Action %d: duration %.1fms < min_dur %dms, skipping", idx, duration_ms, min_dur)
642
- continue # Duration too short
643
- if max_dur is not None and duration_ms >= max_dur:
644
- _LOGGER.debug("Action %d: duration %.1fms >= max_dur %dms, skipping", idx, duration_ms, max_dur)
645
- continue # Duration too long
646
- _LOGGER.debug("Action %d: duration %.1fms in range [%s, %s), executing", idx, duration_ms, min_dur, max_dur)
647
- else:
648
- # Action without thresholds - execute only once (on first long event)
649
- # Check if THIS specific action was already executed, not just any action
650
- if idx in executed_actions:
651
- _LOGGER.debug("Action %d: no thresholds, already executed, skipping", idx)
652
- continue
653
- _LOGGER.debug("Action %d: no thresholds, not yet executed, executing", idx)
545
+ for action_definition in actions:
654
546
  action = action_definition.get("action")
655
547
 
656
548
  if action == MQTT:
@@ -718,7 +610,7 @@ class Manager:
718
610
  )
719
611
 
720
612
  elif action == REMOTE_OUTPUT:
721
- # Control output on remote device (supports ESPHome lights with brightness/color and WLED effects)
613
+ # Control output on remote device
722
614
  remote_device_id = action_definition.get("remote_device")
723
615
  output_id = action_definition.get("output_id")
724
616
  action_output = action_definition.get("action_output", "TOGGLE")
@@ -726,14 +618,6 @@ class Manager:
726
618
  device_id=remote_device_id,
727
619
  output_id=output_id,
728
620
  action=action_output,
729
- brightness=action_definition.get("brightness"),
730
- color_temp=action_definition.get("color_temp"),
731
- rgb=action_definition.get("rgb"),
732
- transition=action_definition.get("transition"),
733
- effect=action_definition.get("effect"),
734
- palette=action_definition.get("palette"),
735
- effect_speed=action_definition.get("effect_speed"),
736
- effect_intensity=action_definition.get("effect_intensity"),
737
621
  )
738
622
 
739
623
  elif action == REMOTE_COVER:
@@ -748,11 +632,6 @@ class Manager:
748
632
  action=action_cover,
749
633
  **extra_data,
750
634
  )
751
-
752
- # Mark action as executed
753
- executed_actions.add(idx)
754
-
755
- return executed_actions
756
635
 
757
636
  def _reload_logger(self) -> None:
758
637
  """Reload logger configuration from config file.
@@ -768,17 +647,16 @@ class Manager:
768
647
  configure_logger(log_config, debug=0)
769
648
  _LOGGER.info("Logger configuration reloaded successfully")
770
649
 
771
- async def _reload_remote_devices(self) -> None:
650
+ def _reload_remote_devices(self) -> None:
772
651
  """Reload remote devices configuration from config file.
773
652
 
774
653
  This allows hot-reloading of remote devices without restarting the application.
775
- Handles ESPHome connections properly (stops old, starts new).
776
654
  """
777
655
  config = self._config_helper.get_config()
778
656
  remote_devices_config = config.get("remote_devices", [])
779
657
 
780
658
  _LOGGER.info("Reloading remote devices configuration")
781
- await self.remote_devices.reload(remote_devices_config)
659
+ self.remote_devices.reload(remote_devices_config)
782
660
  _LOGGER.info("Remote devices configuration reloaded successfully")
783
661
 
784
662
  async def publish_discovery(self) -> None: