boneIO 1.3.0__tar.gz → 1.3.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 (535) hide show
  1. {boneio-1.3.0/boneio.egg-info → boneio-1.3.0.dev1}/PKG-INFO +2 -2
  2. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/bonecli.py +17 -82
  3. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/cover/cover.py +17 -33
  4. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/cover/time_based.py +8 -23
  5. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/group/output_group.py +0 -5
  6. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/input/binary_sensor.py +2 -1
  7. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/input/event.py +2 -2
  8. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/output/basic.py +9 -99
  9. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/sensor/virtual_energy.py +80 -101
  10. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/template/alarm_panel.py +7 -7
  11. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/template/gate_cover.py +10 -10
  12. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/template/thermostat.py +6 -6
  13. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/const.py +0 -6
  14. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/registration.py +36 -46
  15. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/config_helper.py +9 -28
  16. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/migrations/__init__.py +5 -16
  17. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/migrations/v1_proxy_port.py +1 -1
  18. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/migrations/v2_transition.py +1 -1
  19. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/schema_converter.py +4 -2
  20. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/yaml_util.py +245 -498
  21. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/discovery.py +71 -99
  22. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/events/bus.py +1 -1
  23. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/__init__.py +0 -2
  24. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/canopen.py +81 -234
  25. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/covers.py +96 -144
  26. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/display.py +4 -87
  27. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/inputs.py +190 -183
  28. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/manager.py +211 -516
  29. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/modbus.py +4 -4
  30. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/outputs.py +9 -90
  31. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/remote.py +267 -245
  32. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/sensors.py +232 -426
  33. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/templates/__init__.py +2 -2
  34. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/templates/alarm.py +3 -3
  35. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/templates/gate_cover.py +2 -2
  36. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/templates/thermostat.py +2 -2
  37. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/templates.py +4 -4
  38. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/manager/update.py +204 -313
  39. boneio-1.3.0.dev1/boneio/core/messaging/__init__.py +13 -0
  40. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/messaging/basic.py +2 -2
  41. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/messaging/local.py +2 -2
  42. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/messaging/mqtt.py +7 -22
  43. boneio-1.3.0.dev1/boneio/core/remote/__init__.py +40 -0
  44. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/remote/base.py +8 -21
  45. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/remote/can.py +6 -39
  46. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/remote/esphome.py +7 -7
  47. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/remote/mqtt.py +2 -14
  48. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/remote/wled.py +2 -2
  49. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/state/manager.py +10 -17
  50. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/system/host_data.py +1 -18
  51. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/async_updater.py +3 -3
  52. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/util.py +2 -2
  53. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/can_master.yaml +0 -1
  54. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/analog/adc.py +4 -29
  55. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/client.py +67 -211
  56. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/interface.py +1 -1
  57. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/node.py +2 -2
  58. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/node_id.py +19 -27
  59. boneio-1.3.0.dev1/boneio/hardware/display/__init__.py +7 -0
  60. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/display/oled.py +95 -95
  61. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/input/base.py +1 -12
  62. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/input/manager.py +11 -11
  63. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/bus.py +5 -5
  64. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/onewire/__init__.py +1 -1
  65. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/integration/homeassistant.py +11 -305
  66. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/cli.py +1 -2
  67. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/client.py +2 -116
  68. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/coordinator.py +3 -25
  69. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/boneio-edge-temp.json +4 -44
  70. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/base.py +3 -11
  71. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/derived/numeric.py +4 -5
  72. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/derived/select.py +2 -21
  73. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/derived/switch.py +2 -18
  74. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/derived/text.py +1 -3
  75. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/sensor/binary.py +1 -0
  76. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/sensor/numeric.py +4 -6
  77. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/sensor/text.py +6 -7
  78. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/writeable/numeric.py +1 -8
  79. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/utils.py +1 -0
  80. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/__init__.py +1 -3
  81. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/actions.py +0 -1
  82. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/events.py +1 -17
  83. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/state.py +0 -6
  84. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/runner.py +83 -183
  85. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/actions.yaml +0 -27
  86. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/remote_devices.yaml +8 -8
  87. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/schema.yaml +13 -481
  88. boneio-1.3.0.dev1/boneio/version.py +2 -0
  89. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/app.py +67 -180
  90. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/abap-CRCWOmpq.js +1 -0
  91. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/apex-DnsZk_dE.js +1 -0
  92. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/azcli-1IWB1ccx.js +1 -0
  93. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/bat-DPkNLes8.js +1 -0
  94. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/bicep-Corcdgou.js +2 -0
  95. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/cameligo-CGrWLZr3.js +1 -0
  96. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/clojure-D9WOWImG.js +1 -0
  97. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/coffee-B7EJu28W.js +1 -0
  98. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/cpp-SEyurbux.js +1 -0
  99. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/csharp-BoL64M5l.js +1 -0
  100. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/csp-C46ZqvIl.js +1 -0
  101. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/css-DQU6DXDx.js +3 -0
  102. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/cssMode-DYzYCxj1.js +4 -0
  103. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/cypher-D84EuPTj.js +1 -0
  104. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/dart-D8lhlL1r.js +1 -0
  105. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/dockerfile-DLk6rpji.js +1 -0
  106. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/ecl-BO6FnfXk.js +1 -0
  107. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/editor.worker-B4pQIWZD.js +12 -0
  108. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/elixir-BRjLKONM.js +1 -0
  109. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/flow9-Cac8vKd7.js +1 -0
  110. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/freemarker2-Bemoup4X.js +3 -0
  111. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/fsharp-fd1GTHhf.js +1 -0
  112. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/go-O9LJTZXk.js +1 -0
  113. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/graphql-LQdxqEYJ.js +1 -0
  114. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/handlebars-3t5vS37H.js +1 -0
  115. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/hcl-DxDQ3s82.js +1 -0
  116. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/html-Cq68Vj92.js +1 -0
  117. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/htmlMode-zRg51dux.js +4 -0
  118. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/index-CedvLek6.js +836 -0
  119. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/index-yfVmKD9N.css +1 -0
  120. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/ini-BvajGCUy.js +1 -0
  121. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/java-SYsfObOQ.js +1 -0
  122. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/javascript-BeqHop1l.js +1 -0
  123. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/json.worker-aFakAbRR.js +44 -0
  124. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/jsonMode-B_TKboJF.js +10 -0
  125. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/julia-DQXNmw_w.js +1 -0
  126. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/kotlin-qQ0MG-9I.js +1 -0
  127. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/less-GGFNNJHn.js +2 -0
  128. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/lexon-Canl7DCW.js +1 -0
  129. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/liquid-BK7PsOyv.js +1 -0
  130. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/lua-D28Ae8-K.js +1 -0
  131. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/m3-DPitgjJI.js +1 -0
  132. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/markdown-B811l8j2.js +1 -0
  133. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/mdx-Ckb8-VUx.js +1 -0
  134. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/mips-CdjsipkG.js +1 -0
  135. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/msdax-CYqgjx_P.js +1 -0
  136. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/mysql-BHd6q0vd.js +1 -0
  137. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/objective-c-B1aVtJYH.js +1 -0
  138. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/pascal-BhNW15KB.js +1 -0
  139. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/pascaligo-5jv8CcQD.js +1 -0
  140. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/perl-DlYyT36c.js +1 -0
  141. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/pgsql-Dy0bjov7.js +1 -0
  142. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/php-120yhfDK.js +1 -0
  143. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/pla-CjnFlu4u.js +1 -0
  144. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/postiats-CQpG440k.js +1 -0
  145. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/powerquery-DdJtto1Z.js +1 -0
  146. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/powershell-Bu_VLpJB.js +1 -0
  147. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/protobuf-IBS6jZEB.js +2 -0
  148. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/pug-kFxLfcjb.js +1 -0
  149. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/python-CO1-gBqF.js +1 -0
  150. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/qsharp-q7JyzKFN.js +1 -0
  151. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/r-BIFz-_sK.js +1 -0
  152. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/razor-Dx6x9ypa.js +1 -0
  153. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/redis-CHOsPHWR.js +1 -0
  154. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/redshift-CBifECDb.js +1 -0
  155. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/restructuredtext-CghPJEOS.js +1 -0
  156. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/ruby-CYWGW-b1.js +1 -0
  157. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/rust-DMDD0SHb.js +1 -0
  158. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/sb-BYAiYHFx.js +1 -0
  159. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/scala-Bqvq8jcR.js +1 -0
  160. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/scheme-Dhb-2j9p.js +1 -0
  161. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/scss-CTwUZ5N7.js +3 -0
  162. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/shell-CsDZo4DB.js +1 -0
  163. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/solidity-CME5AdoB.js +1 -0
  164. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/sophia-RYC1BQQz.js +1 -0
  165. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/sparql-KEyrF7De.js +1 -0
  166. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/sql-BdTr02Mf.js +1 -0
  167. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/st-C7iG7M4S.js +1 -0
  168. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/swift-D7IUmUK8.js +1 -0
  169. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/systemverilog-DgMryOEJ.js +1 -0
  170. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/tcl-PloMZuKG.js +1 -0
  171. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/tsMode-Deid1skj.js +11 -0
  172. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/twig-BfRIq3la.js +1 -0
  173. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/typescript-JSH4I7cf.js +1 -0
  174. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/typespec-CzxlYoT_.js +1 -0
  175. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/vb-BwAE3J76.js +1 -0
  176. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/wgsl-B_1kOXbF.js +298 -0
  177. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-BIl4cyR9.js +2 -0
  178. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/xml-BX_Opm8D.js +1 -0
  179. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/yaml-BRsnPpO3.js +1 -0
  180. boneio-1.3.0.dev1/boneio/webui/frontend-dist/assets/yaml.worker-DBeHcBRc.js +411 -0
  181. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/index.html +2 -8
  182. {boneio-1.3.0/boneio/webui → boneio-1.3.0.dev1/boneio/webui/frontend-dist}/schema/adc.schema.json +1 -11
  183. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -332
  184. {boneio-1.3.0/boneio/webui → boneio-1.3.0.dev1/boneio/webui/frontend-dist}/schema/boneio.schema.json +0 -20
  185. {boneio-1.3.0/boneio/webui → boneio-1.3.0.dev1/boneio/webui/frontend-dist}/schema/config.schema.json +15 -2318
  186. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/event.schema.json +0 -1162
  187. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/ina219.schema.json +3 -3
  188. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -3
  189. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -22
  190. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/output.schema.json +0 -62
  191. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/template.schema.json +11 -299
  192. boneio-1.3.0.dev1/boneio/webui/frontend-dist/sw.js +1 -0
  193. boneio-1.3.0.dev1/boneio/webui/frontend-dist/workbox-226dbdbf.js +1 -0
  194. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/middleware/auth.py +3 -3
  195. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/__init__.py +1 -5
  196. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/caddy.py +14 -14
  197. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/can.py +18 -177
  198. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/config.py +270 -542
  199. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/modbus.py +10 -76
  200. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/outputs.py +0 -62
  201. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/remote_devices.py +3 -3
  202. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/system.py +5 -258
  203. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/update.py +39 -151
  204. {boneio-1.3.0/boneio/webui/frontend-dist → boneio-1.3.0.dev1/boneio/webui}/schema/adc.schema.json +1 -11
  205. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/binary_sensor.schema.json +0 -332
  206. {boneio-1.3.0/boneio/webui/frontend-dist → boneio-1.3.0.dev1/boneio/webui}/schema/boneio.schema.json +0 -20
  207. {boneio-1.3.0/boneio/webui/frontend-dist → boneio-1.3.0.dev1/boneio/webui}/schema/config.schema.json +15 -2318
  208. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/event.schema.json +0 -1162
  209. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/ina219.schema.json +3 -3
  210. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/modbus_devices.schema.json +0 -3
  211. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/mqtt.schema.json +0 -22
  212. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/output.schema.json +0 -62
  213. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/template.schema.json +11 -299
  214. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/web_server.py +9 -90
  215. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/websocket_manager.py +2 -2
  216. {boneio-1.3.0 → boneio-1.3.0.dev1/boneio.egg-info}/PKG-INFO +2 -2
  217. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio.egg-info/SOURCES.txt +92 -71
  218. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio.egg-info/requires.txt +1 -1
  219. {boneio-1.3.0 → boneio-1.3.0.dev1}/pyproject.toml +28 -40
  220. boneio-1.3.0/boneio/boards/0.7/output_48_4.yaml +0 -250
  221. boneio-1.3.0/boneio/boards/0.8/output_48_4.yaml +0 -250
  222. boneio-1.3.0/boneio/components/irrigation/__init__.py +0 -6
  223. boneio-1.3.0/boneio/components/irrigation/controller.py +0 -899
  224. boneio-1.3.0/boneio/components/irrigation/water_source.py +0 -64
  225. boneio-1.3.0/boneio/core/manager/action_conditions.py +0 -351
  226. boneio-1.3.0/boneio/core/manager/irrigation.py +0 -582
  227. boneio-1.3.0/boneio/core/messaging/__init__.py +0 -21
  228. boneio-1.3.0/boneio/core/messaging/composite.py +0 -85
  229. boneio-1.3.0/boneio/core/messaging/lox.py +0 -221
  230. boneio-1.3.0/boneio/core/messaging/loxone.py +0 -181
  231. boneio-1.3.0/boneio/core/remote/__init__.py +0 -9
  232. boneio-1.3.0/boneio/core/utils/conditions.py +0 -310
  233. boneio-1.3.0/boneio/example_config/48x4/binary_sensor.yaml +0 -17
  234. boneio-1.3.0/boneio/example_config/48x4/config.yaml +0 -41
  235. boneio-1.3.0/boneio/example_config/48x4/event.yaml +0 -300
  236. boneio-1.3.0/boneio/example_config/48x4/output48x4A.yaml +0 -192
  237. boneio-1.3.0/boneio/example_config/cover_mix/mqtt.yaml +0 -6
  238. boneio-1.3.0/boneio/example_config/different_configs/adc.yaml +0 -14
  239. boneio-1.3.0/boneio/hardware/can/sudoers.py +0 -199
  240. boneio-1.3.0/boneio/hardware/can/test_od.py +0 -15
  241. boneio-1.3.0/boneio/hardware/display/__init__.py +0 -33
  242. boneio-1.3.0/boneio/hardware/display/early_oled.py +0 -238
  243. boneio-1.3.0/boneio/integration/lox_template.py +0 -243
  244. boneio-1.3.0/boneio/migrations/__init__.py +0 -10
  245. boneio-1.3.0/boneio/migrations/actions.py +0 -230
  246. boneio-1.3.0/boneio/migrations/assets/MANIFEST.sha256 +0 -15
  247. boneio-1.3.0/boneio/migrations/assets/docker/daemon.json +0 -7
  248. boneio-1.3.0/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -30
  249. boneio-1.3.0/boneio/migrations/assets/docker/nodered/nginx/default.conf +0 -50
  250. boneio-1.3.0/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -5
  251. boneio-1.3.0/boneio/migrations/assets/journald/journald.conf +0 -6
  252. boneio-1.3.0/boneio/migrations/assets/mosquitto/boneio.conf +0 -2
  253. boneio-1.3.0/boneio/migrations/assets/sudoers/boneio +0 -15
  254. boneio-1.3.0/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -17
  255. boneio-1.3.0/boneio/migrations/assets/systemd/boneio.service +0 -15
  256. boneio-1.3.0/boneio/migrations/assets/systemd/set-hostname-once.service +0 -12
  257. boneio-1.3.0/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -10
  258. boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -257
  259. boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -18
  260. boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -110
  261. boneio-1.3.0/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -17
  262. boneio-1.3.0/boneio/migrations/bootstrap/boneio-migrate +0 -389
  263. boneio-1.3.0/boneio/migrations/bootstrap/install-helper.sh +0 -43
  264. boneio-1.3.0/boneio/migrations/bootstrap/sudoers-migrate +0 -2
  265. boneio-1.3.0/boneio/migrations/runner.py +0 -489
  266. boneio-1.3.0/boneio/migrations/versions/__init__.py +0 -1
  267. boneio-1.3.0/boneio/migrations/versions/v1_3_0_baseline.py +0 -173
  268. boneio-1.3.0/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -75
  269. boneio-1.3.0/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -172
  270. boneio-1.3.0/boneio/schema/condition.yaml +0 -75
  271. boneio-1.3.0/boneio/version.py +0 -2
  272. boneio-1.3.0/boneio/webui/action_validation.py +0 -205
  273. boneio-1.3.0/boneio/webui/frontend-dist/assets/ConfigEditor-CHKSC9tj.js +0 -1
  274. boneio-1.3.0/boneio/webui/frontend-dist/assets/aiConfig-LL3nlemJ.js +0 -2
  275. boneio-1.3.0/boneio/webui/frontend-dist/assets/aiWizardPrompt-CmumVq54.js +0 -2
  276. boneio-1.3.0/boneio/webui/frontend-dist/assets/editor.worker-BVjSvWeP.js +0 -12
  277. boneio-1.3.0/boneio/webui/frontend-dist/assets/index-C_S5rhz7.css +0 -2
  278. boneio-1.3.0/boneio/webui/frontend-dist/assets/index-DSf-Ci6g.js +0 -44
  279. boneio-1.3.0/boneio/webui/frontend-dist/assets/json.worker-CqOJL4FD.js +0 -51
  280. boneio-1.3.0/boneio/webui/frontend-dist/assets/monaco-B9WiNxkw.css +0 -1
  281. boneio-1.3.0/boneio/webui/frontend-dist/assets/monaco-CAZoGZNF.js +0 -1047
  282. boneio-1.3.0/boneio/webui/frontend-dist/assets/rolldown-runtime-Dw2cE7zH.js +0 -1
  283. boneio-1.3.0/boneio/webui/frontend-dist/assets/useTranslation-C7rZEcwj.js +0 -13
  284. boneio-1.3.0/boneio/webui/frontend-dist/assets/vendor-BD5Ml_Uz.js +0 -55
  285. boneio-1.3.0/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-BJd1pjeW.js +0 -2
  286. boneio-1.3.0/boneio/webui/frontend-dist/assets/yaml.worker-nZQZSRZ7.js +0 -375
  287. boneio-1.3.0/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -352
  288. boneio-1.3.0/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -64
  289. boneio-1.3.0/boneio/webui/frontend-dist/sw.js +0 -1
  290. boneio-1.3.0/boneio/webui/frontend-dist/workbox-4eca85ba.js +0 -1
  291. boneio-1.3.0/boneio/webui/routes/irrigation.py +0 -323
  292. boneio-1.3.0/boneio/webui/routes/migrations.py +0 -187
  293. boneio-1.3.0/boneio/webui/routes/timezone_sudoers.py +0 -202
  294. boneio-1.3.0/boneio/webui/schema/irrigation.schema.json +0 -352
  295. boneio-1.3.0/boneio/webui/schema/lox_udp.schema.json +0 -64
  296. {boneio-1.3.0 → boneio-1.3.0.dev1}/LICENSE +0 -0
  297. {boneio-1.3.0 → boneio-1.3.0.dev1}/MANIFEST.in +0 -0
  298. {boneio-1.3.0 → boneio-1.3.0.dev1}/README.md +0 -0
  299. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/__init__.py +0 -0
  300. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/input.yaml +0 -0
  301. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/output_24_16.yaml +0 -0
  302. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/output_32_10.yaml +0 -0
  303. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/output_32_5.yaml +0 -0
  304. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/output_cover.yaml +0 -0
  305. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  306. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/input.yaml +0 -0
  307. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/output_24_16.yaml +0 -0
  308. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/output_32_10.yaml +0 -0
  309. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/output_32_5.yaml +0 -0
  310. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/output_cover.yaml +0 -0
  311. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  312. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/input.yaml +0 -0
  313. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/output_24_16.yaml +0 -0
  314. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/output_32_10.yaml +0 -0
  315. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/output_32_5.yaml +0 -0
  316. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/output_cover.yaml +0 -0
  317. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  318. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.5/input.yaml +0 -0
  319. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.5/output_24_16.yaml +0 -0
  320. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.5/output_32_10.yaml +0 -0
  321. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.5/output_cover.yaml +0 -0
  322. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  323. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.6/input.yaml +0 -0
  324. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.6/output_24_16.yaml +0 -0
  325. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.6/output_32_10.yaml +0 -0
  326. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.6/output_cover.yaml +0 -0
  327. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  328. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.7/input.yaml +0 -0
  329. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.7/output_24_16.yaml +0 -0
  330. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.7/output_32_10.yaml +0 -0
  331. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.7/output_cover.yaml +0 -0
  332. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  333. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.8/input.yaml +0 -0
  334. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.8/output_24_16.yaml +0 -0
  335. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.8/output_32_10.yaml +0 -0
  336. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.8/output_cover.yaml +0 -0
  337. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  338. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/__init__.py +0 -0
  339. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/cover/__init__.py +0 -0
  340. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/cover/venetian.py +1 -1
  341. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/group/__init__.py +0 -0
  342. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/input/__init__.py +0 -0
  343. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/input/detectors.py +2 -2
  344. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/output/__init__.py +0 -0
  345. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/output/mcp.py +2 -2
  346. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/output/pca.py +1 -1
  347. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/output/pcf.py +0 -0
  348. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/sensor/__init__.py +0 -0
  349. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/components/template/__init__.py +1 -1
  350. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/__init__.py +0 -0
  351. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/__init__.py +0 -0
  352. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/data/__init__.py +0 -0
  353. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
  354. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  355. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  356. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/cloud/secrets.py +0 -0
  357. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/__init__.py +0 -0
  358. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/package-lock.json +0 -0
  359. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/config/package.json +0 -0
  360. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/events/__init__.py +1 -1
  361. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/messaging/basic_mqtt.py +0 -0
  362. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/messaging/queue.py +0 -0
  363. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/sensor/__init__.py +0 -0
  364. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/sensor/base.py +0 -0
  365. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/sensor/system.py +0 -0
  366. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/state/__init__.py +0 -0
  367. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/system/__init__.py +1 -1
  368. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/system/monitor.py +0 -0
  369. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/__init__.py +0 -0
  370. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/filter.py +0 -0
  371. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/font_util.py +0 -0
  372. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/logger.py +0 -0
  373. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/core/utils/timeperiod.py +0 -0
  374. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/adc.yaml +0 -0
  375. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  376. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/config.yaml +0 -0
  377. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/event.yaml +0 -0
  378. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/mqtt.yaml +0 -0
  379. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  380. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/adc.yaml +0 -0
  381. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  382. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/config.yaml +0 -0
  383. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/event.yaml +0 -0
  384. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/mqtt.yaml +0 -0
  385. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  386. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/__init__.py +0 -0
  387. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/can_slave.yaml +0 -0
  388. {boneio-1.3.0/boneio/example_config/48x4 → boneio-1.3.0.dev1/boneio/example_config/cover}/adc.yaml +0 -0
  389. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  390. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover/config.yaml +0 -0
  391. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover/cover.yaml +0 -0
  392. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover/event.yaml +0 -0
  393. {boneio-1.3.0/boneio/example_config/48x4 → boneio-1.3.0.dev1/boneio/example_config/cover}/mqtt.yaml +0 -0
  394. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover/outputCover.yaml +0 -0
  395. {boneio-1.3.0/boneio/example_config/cover → boneio-1.3.0.dev1/boneio/example_config/cover_mix}/adc.yaml +0 -0
  396. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  397. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover_mix/config.yaml +0 -0
  398. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover_mix/cover.yaml +0 -0
  399. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover_mix/event.yaml +0 -0
  400. {boneio-1.3.0/boneio/example_config/cover → boneio-1.3.0.dev1/boneio/example_config/cover_mix}/mqtt.yaml +0 -0
  401. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  402. {boneio-1.3.0/boneio/example_config/cover_mix → boneio-1.3.0.dev1/boneio/example_config/different_configs}/adc.yaml +0 -0
  403. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  404. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  405. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  406. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  407. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/event_all.yaml +0 -0
  408. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  409. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  410. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  411. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  412. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  413. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  414. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/exceptions.py +0 -0
  415. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/__init__.py +0 -0
  416. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/analog/__init__.py +0 -0
  417. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/__init__.py +0 -0
  418. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/can/bridge.py +0 -0
  419. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  420. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/__init__.py +0 -0
  421. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  422. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  423. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  424. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  425. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/gpio/input/__init__.py +0 -0
  426. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/__init__.py +0 -0
  427. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/ina219.py +0 -0
  428. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/ina219_driver.py +0 -0
  429. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/mcp9808.py +0 -0
  430. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/i2c/pct2075.py +0 -0
  431. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/onewire/bus.py +0 -0
  432. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/onewire/dallas.py +0 -0
  433. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/onewire/ds2482.py +0 -0
  434. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/sensor/__init__.py +0 -0
  435. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  436. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/sensor/temperature/base.py +0 -0
  437. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  438. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  439. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/integration/__init__.py +1 -1
  440. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/integration/interlock.py +0 -0
  441. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/__init__.py +0 -0
  442. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/__init__.py +0 -0
  443. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  444. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  445. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  446. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  447. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  448. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  449. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  450. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  451. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  452. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/inverters/sofar.json +0 -0
  453. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/inverters/thessla.json +0 -0
  454. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  455. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  456. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/other/wanas415.json +0 -0
  457. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/cwt.json +0 -0
  458. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/dts1964_3f.json +0 -0
  459. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  460. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  461. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  462. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  463. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/pt100.json +0 -0
  464. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/sht20.json +0 -0
  465. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/devices/sensors/sht30.json +0 -0
  466. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/__init__.py +4 -4
  467. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/derived/__init__.py +0 -0
  468. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/sensor/__init__.py +0 -0
  469. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/writeable/__init__.py +0 -0
  470. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/modbus/entities/writeable/binary.py +0 -0
  471. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/files.py +0 -0
  472. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/logs.py +0 -0
  473. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/models/mqtt.py +0 -0
  474. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/actions_sensor.yaml +0 -0
  475. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/actions_switch.yaml +0 -0
  476. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/filters.yaml +0 -0
  477. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/filters_adc.yaml +0 -0
  478. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/id.yaml +0 -0
  479. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/temp_unit.yaml +0 -0
  480. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/schema/update_interval.yaml +0 -0
  481. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/assets/codicon-DCmgc-ay.ttf +0 -0
  482. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  483. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  484. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/boneio.svg +0 -0
  485. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  486. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  487. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  488. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  489. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  490. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  491. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  492. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  493. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  494. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  495. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  496. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  497. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  498. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  499. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  500. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  501. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  502. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  503. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
  504. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/middleware/__init__.py +0 -0
  505. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/auth.py +0 -0
  506. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/covers.py +0 -0
  507. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/sensors.py +0 -0
  508. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/templates.py +0 -0
  509. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/routes/tools.py +0 -0
  510. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/areas.schema.json +0 -0
  511. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/can.schema.json +0 -0
  512. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/cover.schema.json +0 -0
  513. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/dallas.schema.json +0 -0
  514. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/ds2482.schema.json +0 -0
  515. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/lm75.schema.json +0 -0
  516. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/logger.schema.json +0 -0
  517. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/mcp23017.schema.json +0 -0
  518. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/mcp9808.schema.json +0 -0
  519. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/modbus.schema.json +0 -0
  520. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/oled.schema.json +0 -0
  521. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/output_group.schema.json +0 -0
  522. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/pca9685.schema.json +0 -0
  523. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/pcf8575.schema.json +0 -0
  524. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/remote_devices.schema.json +0 -0
  525. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/sensor.schema.json +0 -0
  526. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  527. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/schema/web.schema.json +0 -0
  528. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/services/__init__.py +2 -2
  529. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio/webui/services/logs.py +0 -0
  530. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio.egg-info/dependency_links.txt +0 -0
  531. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio.egg-info/entry_points.txt +0 -0
  532. {boneio-1.3.0 → boneio-1.3.0.dev1}/boneio.egg-info/top_level.txt +0 -0
  533. {boneio-1.3.0 → boneio-1.3.0.dev1}/setup.cfg +0 -0
  534. {boneio-1.3.0 → boneio-1.3.0.dev1}/setup.py +0 -0
  535. {boneio-1.3.0 → boneio-1.3.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.3.0
3
+ Version: 1.3.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
@@ -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:
@@ -2,10 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import time as _boot_time
6
-
7
- _BOOT_T0 = _boot_time.monotonic()
8
-
9
5
  import logging
10
6
  import os
11
7
 
@@ -15,15 +11,22 @@ import argparse
15
11
  import asyncio
16
12
  import sys
17
13
 
18
- print(f"[BOOT TIMING] stdlib imports: {_boot_time.monotonic() - _BOOT_T0:.2f}s", flush=True)
19
-
20
- # All boneio imports are lazy (inside run/run_modbus_command) to minimize
21
- # startup time. Only version is imported here for --version CLI flag.
22
- _t_ver = _boot_time.monotonic()
14
+ from yaml import MarkedYAMLError
15
+
16
+ from boneio.const import ACTION
17
+ from boneio.core.config import load_config_from_file
18
+ from boneio.core.events import GracefulExit
19
+ from boneio.core.utils.logger import configure_logger, setup_logging
20
+ from boneio.exceptions import (
21
+ ConfigurationException,
22
+ RestartRequestException,
23
+ )
24
+ # Lazy import modbus CLI to save ~0.35s on startup for 'run' command
25
+ # from boneio.modbus.cli import async_run_modbus_get, async_run_modbus_search, async_run_modbus_set
26
+ # from boneio.modbus.client import VALUE_TYPES
27
+ from boneio.runner import async_run
23
28
  from boneio.version import __version__
24
29
 
25
- print(f"[BOOT TIMING] ALL imports: {_boot_time.monotonic() - _BOOT_T0:.2f}s", flush=True)
26
-
27
30
  TASK_CANCELATION_TIMEOUT = 1
28
31
 
29
32
  _LOGGER = logging.getLogger(__name__)
@@ -31,7 +34,6 @@ _LOGGER = logging.getLogger(__name__)
31
34
 
32
35
  def get_arguments() -> argparse.Namespace:
33
36
  """Get parsed passed in arguments."""
34
- from boneio.const import ACTION
35
37
 
36
38
  parser = argparse.ArgumentParser(
37
39
  description="boneIO app for BeagleBone Black.",
@@ -206,73 +208,14 @@ def run(
206
208
  config: str, debug: int, mqttusername: str = "", mqttpassword: str = ""
207
209
  ) -> int:
208
210
  """Run BoneIO."""
209
- import time as _time
210
-
211
- from yaml import MarkedYAMLError
212
-
213
- from boneio.core.config import load_config_from_file
214
- from boneio.core.events import GracefulExit
215
- from boneio.core.utils.logger import configure_logger, setup_logging
216
- from boneio.exceptions import ConfigurationException
217
- _t0 = _time.monotonic()
218
211
  setup_logging(debug_level=debug)
219
212
  _LOGGER.info("BoneIO %s starting.", __version__)
220
- _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
213
  try:
242
- _t1 = _time.monotonic()
243
- _config = load_config_from_file(
244
- config_file=config, progress_callback=draw_status,
245
- )
246
- _LOGGER.debug("[STARTUP TIMING] load_config_from_file: %.2fs", _time.monotonic() - _t1)
214
+ _config = load_config_from_file(config_file=config)
247
215
  if not _config:
248
216
  _LOGGER.error("Config not loaded. Exiting.")
249
- draw_config_error("Config file is empty or missing")
250
217
  return 1
251
218
  configure_logger(log_config=_config.get("logger") or {}, debug=debug)
252
- draw_status("Importing modules...")
253
- # Granular timing of runner sub-imports to find the bottleneck
254
- _t_a = _time.monotonic()
255
- from boneio.const import ACTION
256
- _LOGGER.debug("[RUNNER IMPORT] boneio.const: %.2fs", _time.monotonic() - _t_a)
257
- _t_a = _time.monotonic()
258
- from boneio.core.cloud import CloudRegistration
259
- _LOGGER.debug("[RUNNER IMPORT] boneio.core.cloud: %.2fs", _time.monotonic() - _t_a)
260
- _t_a = _time.monotonic()
261
- from boneio.core.manager import Manager
262
- _LOGGER.debug("[RUNNER IMPORT] boneio.core.manager: %.2fs", _time.monotonic() - _t_a)
263
- _t_a = _time.monotonic()
264
- from boneio.core.messaging import MQTTClient
265
- _LOGGER.debug("[RUNNER IMPORT] boneio.core.messaging: %.2fs", _time.monotonic() - _t_a)
266
- _t_a = _time.monotonic()
267
- from boneio.hardware.gpio.input import get_gpio_manager
268
- _LOGGER.debug("[RUNNER IMPORT] boneio.hardware.gpio.input: %.2fs", _time.monotonic() - _t_a)
269
- _t_a = _time.monotonic()
270
- from boneio.runner import async_run
271
- _LOGGER.debug("[RUNNER IMPORT] boneio.runner (rest): %.2fs", _time.monotonic() - _t_a)
272
- _LOGGER.debug("[STARTUP TIMING] total before async_run: %.2fs", _time.monotonic() - _t0)
273
-
274
- draw_status("Starting...")
275
-
276
219
  ret = asyncio.run(
277
220
  async_run(
278
221
  config=_config,
@@ -291,11 +234,6 @@ def run(
291
234
  return 0
292
235
  except (ConfigurationException, MarkedYAMLError) as err:
293
236
  _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
237
  return 1
300
238
 
301
239
 
@@ -303,16 +241,13 @@ def run_modbus_command(
303
241
  args: argparse.Namespace,
304
242
  ) -> int:
305
243
  """Run BoneIO."""
306
- from yaml import MarkedYAMLError
307
-
308
- from boneio.core.events import GracefulExit
309
- from boneio.core.utils.logger import configure_logger, setup_logging
310
- from boneio.exceptions import ConfigurationException, RestartRequestException
244
+ # Lazy import modbus CLI only when needed
311
245
  from boneio.modbus.cli import (
312
246
  async_run_modbus_get,
313
247
  async_run_modbus_search,
314
248
  async_run_modbus_set,
315
249
  )
250
+
316
251
  setup_logging(debug_level=args.debug)
317
252
  _LOGGER.info("BoneIO %s starting.", __version__)
318
253
  try:
@@ -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."""