boneIO 1.3.0__tar.gz → 1.3.0.dev3__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 (540) hide show
  1. {boneio-1.3.0/boneio.egg-info → boneio-1.3.0.dev3}/PKG-INFO +2 -2
  2. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/bonecli.py +1 -38
  3. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/cover/cover.py +17 -33
  4. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/cover/time_based.py +8 -23
  5. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/group/output_group.py +0 -5
  6. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/input/binary_sensor.py +2 -1
  7. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/input/event.py +2 -2
  8. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/output/basic.py +9 -99
  9. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/sensor/virtual_energy.py +80 -101
  10. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/template/alarm_panel.py +7 -7
  11. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/template/gate_cover.py +10 -10
  12. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/template/thermostat.py +6 -6
  13. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/const.py +0 -6
  14. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/registration.py +7 -7
  15. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/config_helper.py +9 -28
  16. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/migrations/__init__.py +5 -8
  17. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/migrations/v1_proxy_port.py +1 -1
  18. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/migrations/v2_transition.py +1 -1
  19. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/schema_converter.py +4 -2
  20. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/yaml_util.py +260 -302
  21. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/discovery.py +71 -99
  22. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/events/bus.py +1 -1
  23. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/__init__.py +0 -2
  24. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/canopen.py +4 -11
  25. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/covers.py +96 -144
  26. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/display.py +2 -76
  27. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/inputs.py +190 -183
  28. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/manager.py +244 -466
  29. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/modbus.py +4 -4
  30. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/outputs.py +5 -66
  31. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/remote.py +236 -206
  32. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/sensors.py +246 -296
  33. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/templates/__init__.py +2 -2
  34. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/templates/alarm.py +3 -3
  35. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/templates/gate_cover.py +2 -2
  36. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/templates/thermostat.py +2 -2
  37. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/templates.py +4 -4
  38. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/manager/update.py +204 -313
  39. boneio-1.3.0.dev3/boneio/core/messaging/__init__.py +13 -0
  40. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/messaging/basic.py +2 -2
  41. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/messaging/local.py +2 -2
  42. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/messaging/mqtt.py +7 -22
  43. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/__init__.py +1 -1
  44. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/base.py +8 -21
  45. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/esphome.py +1 -2
  46. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/mqtt.py +2 -14
  47. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/wled.py +2 -2
  48. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/state/manager.py +10 -17
  49. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/system/host_data.py +1 -18
  50. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/async_updater.py +3 -3
  51. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/conditions.py +2 -3
  52. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/util.py +2 -2
  53. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/analog/adc.py +3 -3
  54. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/client.py +6 -21
  55. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/interface.py +1 -1
  56. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/node.py +2 -2
  57. boneio-1.3.0.dev3/boneio/hardware/can/test_od.py +10 -0
  58. boneio-1.3.0.dev3/boneio/hardware/display/__init__.py +7 -0
  59. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/display/oled.py +87 -82
  60. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/input/base.py +1 -12
  61. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/input/manager.py +11 -11
  62. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/bus.py +5 -5
  63. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/onewire/__init__.py +1 -1
  64. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/integration/homeassistant.py +4 -288
  65. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/cli.py +1 -2
  66. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/client.py +2 -116
  67. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/coordinator.py +2 -9
  68. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/derived/numeric.py +1 -0
  69. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/sensor/binary.py +1 -0
  70. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/sensor/text.py +2 -1
  71. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/utils.py +1 -0
  72. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/__init__.py +1 -3
  73. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/actions.py +0 -1
  74. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/events.py +1 -17
  75. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/state.py +0 -6
  76. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/runner.py +113 -116
  77. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/remote_devices.yaml +8 -8
  78. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/schema.yaml +8 -463
  79. boneio-1.3.0.dev3/boneio/version.py +2 -0
  80. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/app.py +8 -32
  81. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/ConfigEditor-DCabX5qK.js +1 -0
  82. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/abap-CRCWOmpq.js +1 -0
  83. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/aiWizardPrompt-B5y1tw6O.js +2 -0
  84. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/apex-DnsZk_dE.js +1 -0
  85. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/azcli-1IWB1ccx.js +1 -0
  86. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/bat-DPkNLes8.js +1 -0
  87. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/bicep-Corcdgou.js +2 -0
  88. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/cameligo-CGrWLZr3.js +1 -0
  89. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/clojure-D9WOWImG.js +1 -0
  90. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/coffee-B7EJu28W.js +1 -0
  91. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/cpp-SEyurbux.js +1 -0
  92. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/csharp-BoL64M5l.js +1 -0
  93. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/csp-C46ZqvIl.js +1 -0
  94. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/css-DQU6DXDx.js +3 -0
  95. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/cssMode-DShylJqh.js +4 -0
  96. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/cypher-D84EuPTj.js +1 -0
  97. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/dart-D8lhlL1r.js +1 -0
  98. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/dockerfile-DLk6rpji.js +1 -0
  99. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/ecl-BO6FnfXk.js +1 -0
  100. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/editor.worker-B4pQIWZD.js +12 -0
  101. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/elixir-BRjLKONM.js +1 -0
  102. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/flow9-Cac8vKd7.js +1 -0
  103. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/freemarker2-CdX7KyE5.js +3 -0
  104. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/fsharp-fd1GTHhf.js +1 -0
  105. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/go-O9LJTZXk.js +1 -0
  106. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/graphql-LQdxqEYJ.js +1 -0
  107. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/handlebars-C3LDizRo.js +1 -0
  108. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/hcl-DxDQ3s82.js +1 -0
  109. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/html-z-YV0Mzh.js +1 -0
  110. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/htmlMode-D7IIR2va.js +4 -0
  111. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/index-CYk12kJk.js +105 -0
  112. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/index-CmBl6pFS.css +1 -0
  113. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/ini-BvajGCUy.js +1 -0
  114. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/java-SYsfObOQ.js +1 -0
  115. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/javascript-CH6jkTQ0.js +1 -0
  116. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/json.worker-aFakAbRR.js +44 -0
  117. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/jsonMode-CLzeI5HJ.js +10 -0
  118. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/julia-DQXNmw_w.js +1 -0
  119. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/kotlin-qQ0MG-9I.js +1 -0
  120. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/less-GGFNNJHn.js +2 -0
  121. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/lexon-Canl7DCW.js +1 -0
  122. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/liquid-DuoI_Tv0.js +1 -0
  123. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/lua-D28Ae8-K.js +1 -0
  124. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/m3-DPitgjJI.js +1 -0
  125. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/markdown-B811l8j2.js +1 -0
  126. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/mdx-C2KSoPE6.js +1 -0
  127. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/mips-CdjsipkG.js +1 -0
  128. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/monaco-DVn9mNSL.js +739 -0
  129. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/monaco-xnhJeWAr.css +1 -0
  130. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/msdax-CYqgjx_P.js +1 -0
  131. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/mysql-BHd6q0vd.js +1 -0
  132. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/objective-c-B1aVtJYH.js +1 -0
  133. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/pascal-BhNW15KB.js +1 -0
  134. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/pascaligo-5jv8CcQD.js +1 -0
  135. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/perl-DlYyT36c.js +1 -0
  136. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/pgsql-Dy0bjov7.js +1 -0
  137. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/php-120yhfDK.js +1 -0
  138. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/pla-CjnFlu4u.js +1 -0
  139. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/postiats-CQpG440k.js +1 -0
  140. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/powerquery-DdJtto1Z.js +1 -0
  141. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/powershell-Bu_VLpJB.js +1 -0
  142. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/protobuf-IBS6jZEB.js +2 -0
  143. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/pug-kFxLfcjb.js +1 -0
  144. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/python-Dh7Kzq6D.js +1 -0
  145. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/qsharp-q7JyzKFN.js +1 -0
  146. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/r-BIFz-_sK.js +1 -0
  147. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/razor-CJwYmOfy.js +1 -0
  148. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/redis-CHOsPHWR.js +1 -0
  149. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/redshift-CBifECDb.js +1 -0
  150. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/restructuredtext-CghPJEOS.js +1 -0
  151. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/ruby-CYWGW-b1.js +1 -0
  152. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/rust-DMDD0SHb.js +1 -0
  153. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/sb-BYAiYHFx.js +1 -0
  154. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/scala-Bqvq8jcR.js +1 -0
  155. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/scheme-Dhb-2j9p.js +1 -0
  156. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/scss-CTwUZ5N7.js +3 -0
  157. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/shell-CsDZo4DB.js +1 -0
  158. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/solidity-CME5AdoB.js +1 -0
  159. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/sophia-RYC1BQQz.js +1 -0
  160. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/sparql-KEyrF7De.js +1 -0
  161. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/sql-BdTr02Mf.js +1 -0
  162. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/st-C7iG7M4S.js +1 -0
  163. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/swift-D7IUmUK8.js +1 -0
  164. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/systemverilog-DgMryOEJ.js +1 -0
  165. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/tcl-PloMZuKG.js +1 -0
  166. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/tsMode-VSMpyycN.js +11 -0
  167. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/twig-BfRIq3la.js +1 -0
  168. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/typescript-C4HjhnfC.js +1 -0
  169. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/typespec-CzxlYoT_.js +1 -0
  170. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/vb-BwAE3J76.js +1 -0
  171. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/vendor-8TE4Uyqi.js +3 -0
  172. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/wgsl-B_1kOXbF.js +298 -0
  173. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-BIl4cyR9.js +2 -0
  174. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/xml-ByUHJiRO.js +1 -0
  175. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/yaml-CTy8Ej0Q.js +1 -0
  176. boneio-1.3.0.dev3/boneio/webui/frontend-dist/assets/yaml.worker-DBeHcBRc.js +411 -0
  177. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/index.html +5 -8
  178. {boneio-1.3.0/boneio/webui → boneio-1.3.0.dev3/boneio/webui/frontend-dist}/schema/boneio.schema.json +0 -14
  179. {boneio-1.3.0/boneio/webui → boneio-1.3.0.dev3/boneio/webui/frontend-dist}/schema/config.schema.json +118 -911
  180. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -3
  181. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -22
  182. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/output.schema.json +0 -62
  183. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/template.schema.json +11 -299
  184. boneio-1.3.0.dev3/boneio/webui/frontend-dist/sw.js +1 -0
  185. boneio-1.3.0.dev3/boneio/webui/frontend-dist/workbox-226dbdbf.js +1 -0
  186. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/middleware/auth.py +3 -3
  187. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/__init__.py +1 -5
  188. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/caddy.py +14 -14
  189. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/can.py +5 -42
  190. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/config.py +265 -410
  191. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/modbus.py +10 -76
  192. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/outputs.py +0 -62
  193. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/remote_devices.py +3 -3
  194. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/system.py +5 -258
  195. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/update.py +38 -70
  196. {boneio-1.3.0/boneio/webui/frontend-dist → boneio-1.3.0.dev3/boneio/webui}/schema/boneio.schema.json +0 -14
  197. {boneio-1.3.0/boneio/webui/frontend-dist → boneio-1.3.0.dev3/boneio/webui}/schema/config.schema.json +118 -911
  198. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/modbus_devices.schema.json +0 -3
  199. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/mqtt.schema.json +0 -22
  200. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/output.schema.json +0 -62
  201. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/template.schema.json +11 -299
  202. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/web_server.py +1 -3
  203. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/websocket_manager.py +2 -2
  204. {boneio-1.3.0 → boneio-1.3.0.dev3/boneio.egg-info}/PKG-INFO +2 -2
  205. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio.egg-info/SOURCES.txt +97 -59
  206. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio.egg-info/requires.txt +1 -1
  207. {boneio-1.3.0 → boneio-1.3.0.dev3}/pyproject.toml +28 -40
  208. boneio-1.3.0/boneio/components/irrigation/__init__.py +0 -6
  209. boneio-1.3.0/boneio/components/irrigation/controller.py +0 -899
  210. boneio-1.3.0/boneio/components/irrigation/water_source.py +0 -64
  211. boneio-1.3.0/boneio/core/manager/action_conditions.py +0 -351
  212. boneio-1.3.0/boneio/core/manager/irrigation.py +0 -582
  213. boneio-1.3.0/boneio/core/messaging/__init__.py +0 -21
  214. boneio-1.3.0/boneio/core/messaging/composite.py +0 -85
  215. boneio-1.3.0/boneio/core/messaging/lox.py +0 -221
  216. boneio-1.3.0/boneio/core/messaging/loxone.py +0 -181
  217. boneio-1.3.0/boneio/hardware/can/sudoers.py +0 -199
  218. boneio-1.3.0/boneio/hardware/can/test_od.py +0 -15
  219. boneio-1.3.0/boneio/hardware/display/__init__.py +0 -33
  220. boneio-1.3.0/boneio/hardware/display/early_oled.py +0 -238
  221. boneio-1.3.0/boneio/integration/lox_template.py +0 -243
  222. boneio-1.3.0/boneio/migrations/__init__.py +0 -10
  223. boneio-1.3.0/boneio/migrations/actions.py +0 -230
  224. boneio-1.3.0/boneio/migrations/assets/MANIFEST.sha256 +0 -15
  225. boneio-1.3.0/boneio/migrations/assets/docker/daemon.json +0 -7
  226. boneio-1.3.0/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -30
  227. boneio-1.3.0/boneio/migrations/assets/docker/nodered/nginx/default.conf +0 -50
  228. boneio-1.3.0/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -5
  229. boneio-1.3.0/boneio/migrations/assets/journald/journald.conf +0 -6
  230. boneio-1.3.0/boneio/migrations/assets/mosquitto/boneio.conf +0 -2
  231. boneio-1.3.0/boneio/migrations/assets/sudoers/boneio +0 -15
  232. boneio-1.3.0/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -17
  233. boneio-1.3.0/boneio/migrations/assets/systemd/boneio.service +0 -15
  234. boneio-1.3.0/boneio/migrations/assets/systemd/set-hostname-once.service +0 -12
  235. boneio-1.3.0/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -10
  236. boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -257
  237. boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -18
  238. boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -110
  239. boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -17
  240. boneio-1.3.0/boneio/migrations/bootstrap/boneio-migrate +0 -389
  241. boneio-1.3.0/boneio/migrations/bootstrap/install-helper.sh +0 -43
  242. boneio-1.3.0/boneio/migrations/bootstrap/sudoers-migrate +0 -2
  243. boneio-1.3.0/boneio/migrations/runner.py +0 -489
  244. boneio-1.3.0/boneio/migrations/versions/__init__.py +0 -1
  245. boneio-1.3.0/boneio/migrations/versions/v1_3_0_baseline.py +0 -173
  246. boneio-1.3.0/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -75
  247. boneio-1.3.0/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -172
  248. boneio-1.3.0/boneio/version.py +0 -2
  249. boneio-1.3.0/boneio/webui/frontend-dist/assets/ConfigEditor-CHKSC9tj.js +0 -1
  250. boneio-1.3.0/boneio/webui/frontend-dist/assets/aiConfig-LL3nlemJ.js +0 -2
  251. boneio-1.3.0/boneio/webui/frontend-dist/assets/aiWizardPrompt-CmumVq54.js +0 -2
  252. boneio-1.3.0/boneio/webui/frontend-dist/assets/editor.worker-BVjSvWeP.js +0 -12
  253. boneio-1.3.0/boneio/webui/frontend-dist/assets/index-C_S5rhz7.css +0 -2
  254. boneio-1.3.0/boneio/webui/frontend-dist/assets/index-DSf-Ci6g.js +0 -44
  255. boneio-1.3.0/boneio/webui/frontend-dist/assets/json.worker-CqOJL4FD.js +0 -51
  256. boneio-1.3.0/boneio/webui/frontend-dist/assets/monaco-B9WiNxkw.css +0 -1
  257. boneio-1.3.0/boneio/webui/frontend-dist/assets/monaco-CAZoGZNF.js +0 -1047
  258. boneio-1.3.0/boneio/webui/frontend-dist/assets/rolldown-runtime-Dw2cE7zH.js +0 -1
  259. boneio-1.3.0/boneio/webui/frontend-dist/assets/useTranslation-C7rZEcwj.js +0 -13
  260. boneio-1.3.0/boneio/webui/frontend-dist/assets/vendor-BD5Ml_Uz.js +0 -55
  261. boneio-1.3.0/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-BJd1pjeW.js +0 -2
  262. boneio-1.3.0/boneio/webui/frontend-dist/assets/yaml.worker-nZQZSRZ7.js +0 -375
  263. boneio-1.3.0/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -352
  264. boneio-1.3.0/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -64
  265. boneio-1.3.0/boneio/webui/frontend-dist/sw.js +0 -1
  266. boneio-1.3.0/boneio/webui/frontend-dist/workbox-4eca85ba.js +0 -1
  267. boneio-1.3.0/boneio/webui/routes/irrigation.py +0 -323
  268. boneio-1.3.0/boneio/webui/routes/migrations.py +0 -187
  269. boneio-1.3.0/boneio/webui/routes/timezone_sudoers.py +0 -202
  270. boneio-1.3.0/boneio/webui/schema/irrigation.schema.json +0 -352
  271. boneio-1.3.0/boneio/webui/schema/lox_udp.schema.json +0 -64
  272. {boneio-1.3.0 → boneio-1.3.0.dev3}/LICENSE +0 -0
  273. {boneio-1.3.0 → boneio-1.3.0.dev3}/MANIFEST.in +0 -0
  274. {boneio-1.3.0 → boneio-1.3.0.dev3}/README.md +0 -0
  275. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/__init__.py +0 -0
  276. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/input.yaml +0 -0
  277. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/output_24_16.yaml +0 -0
  278. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/output_32_10.yaml +0 -0
  279. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/output_32_5.yaml +0 -0
  280. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/output_cover.yaml +0 -0
  281. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  282. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/input.yaml +0 -0
  283. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/output_24_16.yaml +0 -0
  284. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/output_32_10.yaml +0 -0
  285. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/output_32_5.yaml +0 -0
  286. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/output_cover.yaml +0 -0
  287. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  288. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/input.yaml +0 -0
  289. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/output_24_16.yaml +0 -0
  290. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/output_32_10.yaml +0 -0
  291. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/output_32_5.yaml +0 -0
  292. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/output_cover.yaml +0 -0
  293. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  294. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.5/input.yaml +0 -0
  295. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.5/output_24_16.yaml +0 -0
  296. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.5/output_32_10.yaml +0 -0
  297. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.5/output_cover.yaml +0 -0
  298. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  299. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.6/input.yaml +0 -0
  300. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.6/output_24_16.yaml +0 -0
  301. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.6/output_32_10.yaml +0 -0
  302. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.6/output_cover.yaml +0 -0
  303. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  304. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/input.yaml +0 -0
  305. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/output_24_16.yaml +0 -0
  306. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/output_32_10.yaml +0 -0
  307. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/output_48_4.yaml +0 -0
  308. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/output_cover.yaml +0 -0
  309. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  310. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/input.yaml +0 -0
  311. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/output_24_16.yaml +0 -0
  312. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/output_32_10.yaml +0 -0
  313. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/output_48_4.yaml +0 -0
  314. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/output_cover.yaml +0 -0
  315. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  316. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/__init__.py +0 -0
  317. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/cover/__init__.py +0 -0
  318. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/cover/venetian.py +1 -1
  319. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/group/__init__.py +0 -0
  320. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/input/__init__.py +0 -0
  321. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/input/detectors.py +2 -2
  322. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/output/__init__.py +0 -0
  323. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/output/mcp.py +2 -2
  324. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/output/pca.py +1 -1
  325. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/output/pcf.py +0 -0
  326. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/sensor/__init__.py +0 -0
  327. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/components/template/__init__.py +1 -1
  328. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/__init__.py +0 -0
  329. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/__init__.py +0 -0
  330. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/data/__init__.py +0 -0
  331. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
  332. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  333. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  334. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/cloud/secrets.py +0 -0
  335. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/__init__.py +0 -0
  336. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/package-lock.json +0 -0
  337. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/config/package.json +0 -0
  338. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/events/__init__.py +1 -1
  339. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/messaging/basic_mqtt.py +0 -0
  340. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/messaging/queue.py +0 -0
  341. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/remote/can.py +0 -0
  342. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/sensor/__init__.py +0 -0
  343. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/sensor/base.py +0 -0
  344. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/sensor/system.py +0 -0
  345. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/state/__init__.py +0 -0
  346. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/system/__init__.py +1 -1
  347. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/system/monitor.py +0 -0
  348. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/__init__.py +0 -0
  349. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/filter.py +0 -0
  350. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/font_util.py +0 -0
  351. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/logger.py +0 -0
  352. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/core/utils/timeperiod.py +0 -0
  353. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/adc.yaml +0 -0
  354. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  355. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/config.yaml +0 -0
  356. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/event.yaml +0 -0
  357. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/mqtt.yaml +0 -0
  358. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  359. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/adc.yaml +0 -0
  360. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  361. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/config.yaml +0 -0
  362. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/event.yaml +0 -0
  363. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/mqtt.yaml +0 -0
  364. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  365. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/adc.yaml +0 -0
  366. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  367. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/config.yaml +0 -0
  368. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/event.yaml +0 -0
  369. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/mqtt.yaml +0 -0
  370. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  371. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/__init__.py +0 -0
  372. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/can_master.yaml +0 -0
  373. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/can_slave.yaml +0 -0
  374. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/adc.yaml +0 -0
  375. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  376. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/config.yaml +0 -0
  377. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/cover.yaml +0 -0
  378. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/event.yaml +0 -0
  379. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/mqtt.yaml +0 -0
  380. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover/outputCover.yaml +0 -0
  381. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/adc.yaml +0 -0
  382. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  383. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/config.yaml +0 -0
  384. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/cover.yaml +0 -0
  385. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/event.yaml +0 -0
  386. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  387. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  388. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/adc.yaml +0 -0
  389. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  390. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  391. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  392. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  393. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/event_all.yaml +0 -0
  394. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  395. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  396. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  397. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  398. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  399. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  400. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/exceptions.py +0 -0
  401. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/__init__.py +0 -0
  402. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/analog/__init__.py +0 -0
  403. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/__init__.py +0 -0
  404. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/bridge.py +0 -0
  405. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/can/node_id.py +0 -0
  406. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  407. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/__init__.py +0 -0
  408. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  409. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  410. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  411. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  412. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/gpio/input/__init__.py +0 -0
  413. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/__init__.py +0 -0
  414. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/ina219.py +0 -0
  415. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/ina219_driver.py +0 -0
  416. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/mcp9808.py +0 -0
  417. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/i2c/pct2075.py +0 -0
  418. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/onewire/bus.py +0 -0
  419. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/onewire/dallas.py +0 -0
  420. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/onewire/ds2482.py +0 -0
  421. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/sensor/__init__.py +0 -0
  422. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  423. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/sensor/temperature/base.py +0 -0
  424. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  425. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  426. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/integration/__init__.py +1 -1
  427. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/integration/interlock.py +0 -0
  428. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/__init__.py +0 -0
  429. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/__init__.py +0 -0
  430. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  431. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  432. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  433. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  434. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  435. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  436. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  437. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  438. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  439. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/inverters/sofar.json +0 -0
  440. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/inverters/thessla.json +0 -0
  441. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  442. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  443. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/other/wanas415.json +0 -0
  444. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  445. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/cwt.json +0 -0
  446. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/dts1964_3f.json +0 -0
  447. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  448. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  449. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  450. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  451. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/pt100.json +0 -0
  452. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/sht20.json +0 -0
  453. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/devices/sensors/sht30.json +0 -0
  454. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/__init__.py +4 -4
  455. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/base.py +0 -0
  456. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/derived/__init__.py +0 -0
  457. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/derived/select.py +2 -2
  458. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/derived/switch.py +2 -2
  459. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/derived/text.py +1 -1
  460. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/sensor/__init__.py +0 -0
  461. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/sensor/numeric.py +0 -0
  462. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/writeable/__init__.py +0 -0
  463. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/writeable/binary.py +0 -0
  464. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/modbus/entities/writeable/numeric.py +0 -0
  465. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/files.py +0 -0
  466. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/logs.py +0 -0
  467. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/models/mqtt.py +0 -0
  468. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/actions.yaml +0 -0
  469. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/actions_sensor.yaml +0 -0
  470. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/actions_switch.yaml +0 -0
  471. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/condition.yaml +0 -0
  472. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/filters.yaml +0 -0
  473. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/filters_adc.yaml +0 -0
  474. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/id.yaml +0 -0
  475. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/temp_unit.yaml +0 -0
  476. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/schema/update_interval.yaml +0 -0
  477. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/action_validation.py +0 -0
  478. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/assets/codicon-DCmgc-ay.ttf +0 -0
  479. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  480. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  481. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/boneio.svg +0 -0
  482. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  483. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  484. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  485. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  486. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  487. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  488. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  489. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  490. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  491. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  492. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  493. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  494. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  495. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  496. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  497. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  498. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  499. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  500. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  501. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  502. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  503. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  504. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
  505. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/middleware/__init__.py +0 -0
  506. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/auth.py +0 -0
  507. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/covers.py +0 -0
  508. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/sensors.py +0 -0
  509. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/templates.py +0 -0
  510. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/routes/tools.py +0 -0
  511. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/adc.schema.json +0 -0
  512. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/areas.schema.json +0 -0
  513. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  514. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/can.schema.json +0 -0
  515. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/cover.schema.json +0 -0
  516. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/dallas.schema.json +0 -0
  517. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/ds2482.schema.json +0 -0
  518. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/event.schema.json +0 -0
  519. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/ina219.schema.json +0 -0
  520. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/lm75.schema.json +0 -0
  521. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/logger.schema.json +0 -0
  522. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/mcp23017.schema.json +0 -0
  523. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/mcp9808.schema.json +0 -0
  524. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/modbus.schema.json +0 -0
  525. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/oled.schema.json +0 -0
  526. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/output_group.schema.json +0 -0
  527. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/pca9685.schema.json +0 -0
  528. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/pcf8575.schema.json +0 -0
  529. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/remote_devices.schema.json +0 -0
  530. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/sensor.schema.json +0 -0
  531. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  532. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/schema/web.schema.json +0 -0
  533. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/services/__init__.py +2 -2
  534. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio/webui/services/logs.py +0 -0
  535. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio.egg-info/dependency_links.txt +0 -0
  536. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio.egg-info/entry_points.txt +0 -0
  537. {boneio-1.3.0 → boneio-1.3.0.dev3}/boneio.egg-info/top_level.txt +0 -0
  538. {boneio-1.3.0 → boneio-1.3.0.dev3}/setup.cfg +0 -0
  539. {boneio-1.3.0 → boneio-1.3.0.dev3}/setup.py +0 -0
  540. {boneio-1.3.0 → boneio-1.3.0.dev3}/tests/test_py313_compatibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boneio
3
- Version: 1.3.0
3
+ Version: 1.3.0.dev3
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
@@ -35,7 +35,7 @@ Requires-Dist: requests==2.32.5
35
35
  Requires-Dist: packaging==25.0
36
36
  Requires-Dist: aioesphomeapi>=29.0.0
37
37
  Requires-Dist: zeroconf>=0.148.0
38
- Requires-Dist: canopen-asyncio>=2.4.1
38
+ Requires-Dist: canopen-asyncio>=2.3.0
39
39
  Dynamic: license-file
40
40
 
41
41
  Example usage:
@@ -3,7 +3,6 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import time as _boot_time
6
-
7
6
  _BOOT_T0 = _boot_time.monotonic()
8
7
 
9
8
  import logging
@@ -21,7 +20,6 @@ print(f"[BOOT TIMING] stdlib imports: {_boot_time.monotonic() - _BOOT_T0:.2f}s",
21
20
  # startup time. Only version is imported here for --version CLI flag.
22
21
  _t_ver = _boot_time.monotonic()
23
22
  from boneio.version import __version__
24
-
25
23
  print(f"[BOOT TIMING] ALL imports: {_boot_time.monotonic() - _BOOT_T0:.2f}s", flush=True)
26
24
 
27
25
  TASK_CANCELATION_TIMEOUT = 1
@@ -207,9 +205,7 @@ def run(
207
205
  ) -> int:
208
206
  """Run BoneIO."""
209
207
  import time as _time
210
-
211
208
  from yaml import MarkedYAMLError
212
-
213
209
  from boneio.core.config import load_config_from_file
214
210
  from boneio.core.events import GracefulExit
215
211
  from boneio.core.utils.logger import configure_logger, setup_logging
@@ -218,38 +214,14 @@ def run(
218
214
  setup_logging(debug_level=debug)
219
215
  _LOGGER.info("BoneIO %s starting.", __version__)
220
216
  _LOGGER.debug("[STARTUP TIMING] after setup_logging: %.2fs", _time.monotonic() - _t0)
221
-
222
- # --- Initialize OLED before anything else (independent of config) ---
223
- # This is wrapped in try/except so the app always starts even if
224
- # OLED hardware is missing, broken, or display libraries aren't installed.
225
- try:
226
- from boneio.hardware.display.early_oled import (
227
- draw_config_error,
228
- draw_crash,
229
- draw_status,
230
- init_early_oled,
231
- )
232
- init_early_oled()
233
- draw_status("Loading config...")
234
- except Exception:
235
- # OLED is optional — define no-op stubs so rest of the function works
236
- _LOGGER.debug("Early OLED not available, continuing without display")
237
- def draw_status(msg: str) -> None: pass # noqa: E731
238
- def draw_config_error(msg: str) -> None: pass # noqa: E731
239
- def draw_crash(exc: BaseException) -> None: pass # noqa: E731
240
-
241
217
  try:
242
218
  _t1 = _time.monotonic()
243
- _config = load_config_from_file(
244
- config_file=config, progress_callback=draw_status,
245
- )
219
+ _config = load_config_from_file(config_file=config)
246
220
  _LOGGER.debug("[STARTUP TIMING] load_config_from_file: %.2fs", _time.monotonic() - _t1)
247
221
  if not _config:
248
222
  _LOGGER.error("Config not loaded. Exiting.")
249
- draw_config_error("Config file is empty or missing")
250
223
  return 1
251
224
  configure_logger(log_config=_config.get("logger") or {}, debug=debug)
252
- draw_status("Importing modules...")
253
225
  # Granular timing of runner sub-imports to find the bottleneck
254
226
  _t_a = _time.monotonic()
255
227
  from boneio.const import ACTION
@@ -270,9 +242,6 @@ def run(
270
242
  from boneio.runner import async_run
271
243
  _LOGGER.debug("[RUNNER IMPORT] boneio.runner (rest): %.2fs", _time.monotonic() - _t_a)
272
244
  _LOGGER.debug("[STARTUP TIMING] total before async_run: %.2fs", _time.monotonic() - _t0)
273
-
274
- draw_status("Starting...")
275
-
276
245
  ret = asyncio.run(
277
246
  async_run(
278
247
  config=_config,
@@ -291,11 +260,6 @@ def run(
291
260
  return 0
292
261
  except (ConfigurationException, MarkedYAMLError) as err:
293
262
  _LOGGER.error("Failed to load config. %s Exiting.", err)
294
- draw_config_error(str(err)[:100])
295
- return 1
296
- except Exception as err:
297
- _LOGGER.error("Unexpected error during startup: %s", err, exc_info=True)
298
- draw_crash(err)
299
263
  return 1
300
264
 
301
265
 
@@ -304,7 +268,6 @@ def run_modbus_command(
304
268
  ) -> int:
305
269
  """Run BoneIO."""
306
270
  from yaml import MarkedYAMLError
307
-
308
271
  from boneio.core.events import GracefulExit
309
272
  from boneio.core.utils.logger import configure_logger, setup_logging
310
273
  from boneio.exceptions import ConfigurationException, RestartRequestException
@@ -1,14 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
- import json
5
4
  import logging
5
+ import json
6
6
  import threading
7
7
  import time
8
8
  from abc import ABC, abstractmethod
9
9
  from collections.abc import Callable
10
10
 
11
- from boneio.components.output import BasicOutput
12
11
  from boneio.const import (
13
12
  CLOSED,
14
13
  CLOSING,
@@ -21,6 +20,7 @@ from boneio.core.events import EventBus
21
20
  from boneio.core.messaging import BasicMqtt
22
21
  from boneio.core.utils import TimePeriod
23
22
  from boneio.models import CoverState, PositionDict
23
+ from boneio.components.output import BasicOutput
24
24
  from boneio.models.events import CoverEvent
25
25
 
26
26
  _LOGGER = logging.getLogger(__name__)
@@ -187,17 +187,13 @@ class BaseCover(BaseCoverABC, BasicMqtt):
187
187
 
188
188
  self._event_bus.add_sigterm_listener(self.on_exit)
189
189
 
190
- try:
191
- self._loop.call_soon_threadsafe(
192
- self._loop.call_later,
193
- 0.5,
194
- self.send_state,
195
- self.state,
196
- self.json_position
197
- )
198
- except RuntimeError:
199
- # Event loop is closed (e.g. during tests)
200
- pass
190
+ self._loop.call_soon_threadsafe(
191
+ self._loop.call_later,
192
+ 0.5,
193
+ self.send_state,
194
+ self.state,
195
+ self.json_position
196
+ )
201
197
 
202
198
  async def on_exit(self) -> None:
203
199
  """Stop on exit."""
@@ -210,12 +206,8 @@ class BaseCover(BaseCoverABC, BasicMqtt):
210
206
  self._open_relay.turn_off()
211
207
  self._close_relay.turn_off()
212
208
  # Send relay states to WebSocket (not MQTT - that's handled by output_type check)
213
- try:
214
- asyncio.create_task(self._open_relay.async_send_state())
215
- asyncio.create_task(self._close_relay.async_send_state())
216
- except RuntimeError:
217
- # Event loop is closed (e.g. during tests or shutdown)
218
- pass
209
+ asyncio.create_task(self._open_relay.async_send_state())
210
+ asyncio.create_task(self._close_relay.async_send_state())
219
211
  if self._current_operation in (OPENING, CLOSING):
220
212
  self._last_operation = self._current_operation
221
213
  self._current_operation = IDLE
@@ -275,7 +267,9 @@ class BaseCover(BaseCoverABC, BasicMqtt):
275
267
  await self.stop()
276
268
  elif self._position >= 100:
277
269
  await self.close()
278
- elif self._position <= 0 or self._last_operation == CLOSING:
270
+ elif self._position <= 0:
271
+ await self.open()
272
+ elif self._last_operation == CLOSING:
279
273
  await self.open()
280
274
  else:
281
275
  await self.close()
@@ -315,7 +309,9 @@ class BaseCover(BaseCoverABC, BasicMqtt):
315
309
  await self.open()
316
310
  elif self._position >= 100:
317
311
  await self.close()
318
- elif self._position <= 0 or self._last_operation == CLOSING:
312
+ elif self._position <= 0:
313
+ await self.open()
314
+ elif self._last_operation == CLOSING:
319
315
  await self.open()
320
316
  else:
321
317
  await self.close()
@@ -329,18 +325,6 @@ class BaseCover(BaseCoverABC, BasicMqtt):
329
325
  else:
330
326
  return CLOSED if self._position == 0 else OPEN
331
327
 
332
- @property
333
- def is_open(self) -> bool:
334
- """Whether the cover is currently open (position > 0).
335
-
336
- Used by the action conditions system to evaluate ``is_open`` / ``is_closed``
337
- checks for covers.
338
-
339
- Returns:
340
- True if the cover is not fully closed.
341
- """
342
- return self._position > 0
343
-
344
328
  @property
345
329
  def position(self) -> int:
346
330
  return round(self._position, 0)
@@ -6,11 +6,11 @@ import threading
6
6
  import time
7
7
  from collections.abc import Callable
8
8
 
9
- from boneio.components.cover.cover import BaseCover
10
- from boneio.components.output import BasicOutput
11
9
  from boneio.const import CLOSE, CLOSING, IDLE, OPEN, OPENING, STOP
10
+ from boneio.components.cover.cover import BaseCover
12
11
  from boneio.core.events import EventBus
13
12
  from boneio.core.utils import TimePeriod
13
+ from boneio.components.output import BasicOutput
14
14
 
15
15
  _LOGGER = logging.getLogger(__name__)
16
16
  DEFAULT_RESTORED_STATE = {"position": 100}
@@ -43,7 +43,7 @@ class TimeBasedCover(BaseCover):
43
43
 
44
44
  def _move_cover(self, direction: str, duration: float, target_position: int | None = None):
45
45
  """Run in sepearate thread.
46
-
46
+
47
47
  Args:
48
48
  direction: Direction of movement (OPEN or CLOSE)
49
49
  duration: Full time for 0-100% movement in milliseconds
@@ -60,10 +60,7 @@ class TimeBasedCover(BaseCover):
60
60
 
61
61
  if total_steps == 0 or duration == 0:
62
62
  self._current_operation = IDLE
63
- try:
64
- self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
65
- except RuntimeError:
66
- pass
63
+ self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
67
64
  return
68
65
 
69
66
  # Calculate actual duration based on remaining distance
@@ -72,10 +69,7 @@ class TimeBasedCover(BaseCover):
72
69
 
73
70
  relay.turn_on()
74
71
  # Send relay state to WebSocket (not MQTT - that's handled by output_type check)
75
- try:
76
- self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
77
- except RuntimeError:
78
- pass
72
+ self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
79
73
  start_time = time.monotonic()
80
74
 
81
75
  while not self._stop_event.is_set():
@@ -90,10 +84,7 @@ class TimeBasedCover(BaseCover):
90
84
 
91
85
  self._last_timestamp = current_time # Użyj pobranego czasu
92
86
  if current_time - self._last_update_time >= 1:
93
- try:
94
- self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
95
- except RuntimeError:
96
- break
87
+ self._loop.call_soon_threadsafe(lambda: self.send_state(self.state, self.json_position))
97
88
  self._last_update_time = current_time
98
89
 
99
90
  if target_position is not None:
@@ -107,15 +98,9 @@ class TimeBasedCover(BaseCover):
107
98
  time.sleep(0.05) # Małe opóźnienie, aby nie blokować CPU
108
99
  relay.turn_off()
109
100
  # Send relay state to WebSocket (not MQTT - that's handled by output_type check)
110
- try:
111
- self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
112
- except RuntimeError:
113
- pass
101
+ self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
114
102
  self._current_operation = IDLE
115
- try:
116
- self._loop.call_soon_threadsafe(lambda: self.send_state_and_save(self.json_position))
117
- except RuntimeError:
118
- pass
103
+ self._loop.call_soon_threadsafe(lambda: self.send_state_and_save(self.json_position))
119
104
  self._last_update_time = time.monotonic() # Upewnij się, że aktualizacja jest wysłana na końcu ruchu
120
105
 
121
106
  async def run_cover(self, current_operation: str, target_position: int | None = None) -> None:
@@ -112,11 +112,6 @@ class OutputGroup(BasicOutput):
112
112
  """Check if group is active (ON state)."""
113
113
  return self._state == ON
114
114
 
115
- @property
116
- def group_members(self) -> list[BasicOutput]:
117
- """Return list of member outputs."""
118
- return self._group_members
119
-
120
115
  @override
121
116
  async def async_send_state(self, optimized_value: str | None = None) -> None:
122
117
  """Send state to message bus and event bus for WebSocket."""
@@ -3,11 +3,12 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import logging
6
+
6
7
  import time
7
8
  from typing import cast
8
9
 
9
10
  from boneio.components.input.detectors import BinarySensorDetector
10
- from boneio.const import PRESSED, RELEASED, BinaryStateTypes, ClickTypes
11
+ from boneio.const import BinaryStateTypes, ClickTypes, PRESSED, RELEASED
11
12
  from boneio.hardware.gpio.input import GpioBaseClass, get_gpio_manager
12
13
  from boneio.models import InputState
13
14
  from boneio.models.events import InputEvent
@@ -5,10 +5,10 @@ from __future__ import annotations
5
5
  import logging
6
6
  import time
7
7
 
8
- from boneio.components.input.detectors import MultiClickDetector
9
8
  from boneio.const import ClickTypes
10
- from boneio.core.utils import TimePeriod
9
+ from boneio.components.input.detectors import MultiClickDetector
11
10
  from boneio.hardware.gpio.input import GpioBaseClass, get_gpio_manager
11
+ from boneio.core.utils import TimePeriod
12
12
 
13
13
  _LOGGER = logging.getLogger(__name__)
14
14
 
@@ -6,13 +6,12 @@ import logging
6
6
  import time
7
7
 
8
8
  from boneio.const import COVER, LIGHT, NONE, OFF, ON, OUTPUT, STATE, SWITCH
9
- from boneio.core.events import EventBus, async_track_point_in_time, utcnow
10
9
  from boneio.core.messaging import BasicMqtt
11
- from boneio.core.utils import callback
12
- from boneio.core.utils.timeperiod import TimePeriod
10
+ from boneio.models.events import OutputEvent
11
+ from boneio.core.events import EventBus, async_track_point_in_time, utcnow
13
12
  from boneio.integration.interlock import SoftwareInterlockManager
13
+ from boneio.core.utils import callback
14
14
  from boneio.models import OutputState
15
- from boneio.models.events import OutputEvent
16
15
 
17
16
  _LOGGER = logging.getLogger(__name__)
18
17
 
@@ -44,26 +43,6 @@ class BasicOutput(BasicMqtt):
44
43
  """Initialize Basic output."""
45
44
  self._momentary_turn_on = kwargs.pop("momentary_turn_on", None)
46
45
  self._momentary_turn_off = kwargs.pop("momentary_turn_off", None)
47
-
48
- # --- Adjustable duration (editable momentary_turn_on via HA number) ---
49
- self._adjustable_duration_enabled: bool = kwargs.pop("adjustable_duration", False)
50
- _dur_default_raw = kwargs.pop("duration_default", None)
51
- _dur_min_raw = kwargs.pop("duration_min", None)
52
- _dur_max_raw = kwargs.pop("duration_max", None)
53
- self._duration_unit: str = kwargs.pop("duration_unit", "s")
54
- # Pop legacy field in case it still exists in config
55
- kwargs.pop("duration_step", None)
56
-
57
- from boneio.core.utils.timeperiod import parse_time_to_seconds
58
-
59
- self._duration_min: float = max(1.0, parse_time_to_seconds(_dur_min_raw, 1.0))
60
- self._duration_max: float = max(self._duration_min, parse_time_to_seconds(_dur_max_raw, 3600.0))
61
- self._duration_default: float = parse_time_to_seconds(_dur_default_raw, 60.0)
62
- # Current adjustable duration value in seconds (will be overwritten by restored state)
63
- self._adjustable_duration: float = max(
64
- self._duration_min, min(self._duration_max, self._duration_default)
65
- )
66
-
67
46
  super().__init__(id=id, name=name or id, topic_type=topic_type, topic_prefix=topic_prefix, **kwargs)
68
47
  self._output_type: str = output_type
69
48
  self._event_bus: EventBus = event_bus
@@ -72,7 +51,6 @@ class BasicOutput(BasicMqtt):
72
51
  if output_type == COVER:
73
52
  self._momentary_turn_on = None
74
53
  self._momentary_turn_off = None
75
- self._adjustable_duration_enabled = False
76
54
  self._state = ON if restored_state else OFF
77
55
  self._momentary_action = None
78
56
  self._last_timestamp = 0.0
@@ -161,10 +139,6 @@ class BasicOutput(BasicMqtt):
161
139
  expander_id=self.expander_id,
162
140
  area=self.area,
163
141
  interlock_groups=self._interlock_groups,
164
- adjustable_duration=self._adjustable_duration_enabled,
165
- adjustable_duration_value=self._adjustable_duration if self._adjustable_duration_enabled else None,
166
- duration_min=self._duration_min if self._adjustable_duration_enabled else None,
167
- duration_max=self._duration_max if self._adjustable_duration_enabled else None,
168
142
  )
169
143
 
170
144
  output_event = OutputEvent(
@@ -220,26 +194,15 @@ class BasicOutput(BasicMqtt):
220
194
  _LOGGER.warning("set_brightness not supported for %s output type", self.output_type)
221
195
 
222
196
  def _execute_momentary_turn(self, momentary_type: str) -> None:
223
- """Execute momentary action.
224
-
225
- If adjustable_duration is enabled and this is a turn-ON action,
226
- use the dynamic duration instead of the static momentary_turn_on.
227
- """
197
+ """Execute momentary action."""
228
198
  if self._momentary_action:
229
199
  _LOGGER.debug("Cancelling momentary action for %s", self.name)
230
200
  self._momentary_action()
231
-
232
- if momentary_type == ON:
233
- action = self.async_turn_off
234
- if self._adjustable_duration_enabled:
235
- # Use dynamic duration from HA number entity
236
- delayed_action = TimePeriod(seconds=self._adjustable_duration)
237
- else:
238
- delayed_action = self._momentary_turn_on
239
- else:
240
- action = self.async_turn_on
241
- delayed_action = self._momentary_turn_off
242
-
201
+ (action, delayed_action) = (
202
+ (self.async_turn_off, self._momentary_turn_on)
203
+ if momentary_type == ON
204
+ else (self.async_turn_on, self._momentary_turn_off)
205
+ )
243
206
  if delayed_action:
244
207
  _LOGGER.debug("Applying momentary action for %s in %s", self.name, delayed_action.as_timedelta)
245
208
  self._momentary_action = async_track_point_in_time(
@@ -255,59 +218,6 @@ class BasicOutput(BasicMqtt):
255
218
  await action(timestamp=timestamp)
256
219
  self._momentary_action = None
257
220
 
258
- # -- Adjustable duration -------------------------------------------------
259
-
260
- @property
261
- def adjustable_duration_enabled(self) -> bool:
262
- """Whether this output has an adjustable duration (HA number entity)."""
263
- return self._adjustable_duration_enabled
264
-
265
- @property
266
- def adjustable_duration(self) -> float:
267
- """Current adjustable duration value in seconds."""
268
- return self._adjustable_duration
269
-
270
- @property
271
- def duration_min(self) -> float:
272
- """Minimum duration in seconds for HA slider."""
273
- return self._duration_min
274
-
275
- @property
276
- def duration_max(self) -> float:
277
- """Maximum duration in seconds for HA slider."""
278
- return self._duration_max
279
-
280
- @property
281
- def duration_unit(self) -> str:
282
- """Unit of measurement for HA number entity ('s' or 'min')."""
283
- return self._duration_unit
284
-
285
- def set_adjustable_duration(self, seconds: float) -> None:
286
- """Set the adjustable duration value.
287
-
288
- Clamps to [duration_min, duration_max].
289
- OutputManager handles persistence and MQTT publishing.
290
-
291
- Args:
292
- seconds: New duration in seconds.
293
- """
294
- self._adjustable_duration = max(
295
- self._duration_min, min(self._duration_max, float(seconds))
296
- )
297
- _LOGGER.debug(
298
- "Output '%s' adjustable duration set to %.1fs", self.id, self._adjustable_duration
299
- )
300
-
301
- def restore_adjustable_duration(self, seconds: float) -> None:
302
- """Restore persisted duration value (called during init by OutputManager).
303
-
304
- Args:
305
- seconds: Persisted duration value.
306
- """
307
- self._adjustable_duration = max(
308
- self._duration_min, min(self._duration_max, float(seconds))
309
- )
310
-
311
221
  @property
312
222
  def is_active(self) -> bool:
313
223
  """Is active check."""