boneIO 1.3.1__tar.gz → 1.3.1.dev2__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 (439) hide show
  1. {boneio-1.3.1/boneio.egg-info → boneio-1.3.1.dev2}/PKG-INFO +1 -1
  2. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/cover/cover.py +11 -16
  3. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/cover/time_based.py +2 -2
  4. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/cover/venetian.py +72 -65
  5. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/covers.py +1 -1
  6. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/display/early_oled.py +16 -22
  7. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/gpio/input/base.py +2 -4
  8. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/models/__init__.py +0 -2
  9. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/models/state.py +1 -8
  10. boneio-1.3.1.dev2/boneio/version.py +2 -0
  11. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/can.py +16 -15
  12. {boneio-1.3.1 → boneio-1.3.1.dev2/boneio.egg-info}/PKG-INFO +1 -1
  13. boneio-1.3.1/boneio/version.py +0 -2
  14. {boneio-1.3.1 → boneio-1.3.1.dev2}/LICENSE +0 -0
  15. {boneio-1.3.1 → boneio-1.3.1.dev2}/MANIFEST.in +0 -0
  16. {boneio-1.3.1 → boneio-1.3.1.dev2}/README.md +0 -0
  17. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/__init__.py +0 -0
  18. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.2/input.yaml +0 -0
  19. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.2/output_24_16.yaml +0 -0
  20. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.2/output_32_10.yaml +0 -0
  21. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.2/output_32_5.yaml +0 -0
  22. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.2/output_cover.yaml +0 -0
  23. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.2/output_cover_mix.yaml +0 -0
  24. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.3/input.yaml +0 -0
  25. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.3/output_24_16.yaml +0 -0
  26. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.3/output_32_10.yaml +0 -0
  27. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.3/output_32_5.yaml +0 -0
  28. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.3/output_cover.yaml +0 -0
  29. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.3/output_cover_mix.yaml +0 -0
  30. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.4/input.yaml +0 -0
  31. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.4/output_24_16.yaml +0 -0
  32. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.4/output_32_10.yaml +0 -0
  33. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.4/output_32_5.yaml +0 -0
  34. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.4/output_cover.yaml +0 -0
  35. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.4/output_cover_mix.yaml +0 -0
  36. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.5/input.yaml +0 -0
  37. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.5/output_24_16.yaml +0 -0
  38. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.5/output_32_10.yaml +0 -0
  39. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.5/output_cover.yaml +0 -0
  40. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.5/output_cover_mix.yaml +0 -0
  41. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.6/input.yaml +0 -0
  42. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.6/output_24_16.yaml +0 -0
  43. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.6/output_32_10.yaml +0 -0
  44. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.6/output_cover.yaml +0 -0
  45. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.6/output_cover_mix.yaml +0 -0
  46. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.7/input.yaml +0 -0
  47. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.7/output_24_16.yaml +0 -0
  48. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.7/output_32_10.yaml +0 -0
  49. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.7/output_48_4.yaml +0 -0
  50. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.7/output_cover.yaml +0 -0
  51. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.7/output_cover_mix.yaml +0 -0
  52. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.8/input.yaml +0 -0
  53. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.8/output_24_16.yaml +0 -0
  54. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.8/output_32_10.yaml +0 -0
  55. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.8/output_48_4.yaml +0 -0
  56. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.8/output_cover.yaml +0 -0
  57. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/boards/0.8/output_cover_mix.yaml +0 -0
  58. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/bonecli.py +0 -0
  59. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/__init__.py +0 -0
  60. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/cover/__init__.py +0 -0
  61. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/group/__init__.py +0 -0
  62. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/group/output_group.py +0 -0
  63. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/input/__init__.py +0 -0
  64. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/input/binary_sensor.py +0 -0
  65. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/input/detectors.py +0 -0
  66. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/input/event.py +0 -0
  67. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/irrigation/__init__.py +0 -0
  68. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/irrigation/controller.py +0 -0
  69. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/irrigation/water_source.py +0 -0
  70. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/output/__init__.py +0 -0
  71. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/output/basic.py +0 -0
  72. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/output/mcp.py +0 -0
  73. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/output/pca.py +0 -0
  74. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/output/pcf.py +0 -0
  75. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/sensor/__init__.py +0 -0
  76. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/sensor/virtual_energy.py +0 -0
  77. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/template/__init__.py +0 -0
  78. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/template/alarm_panel.py +0 -0
  79. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/template/gate_cover.py +0 -0
  80. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/components/template/thermostat.py +0 -0
  81. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/const.py +0 -0
  82. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/__init__.py +0 -0
  83. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/cloud/__init__.py +0 -0
  84. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/cloud/data/__init__.py +0 -0
  85. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/cloud/data/docker-compose-cloud.yaml +0 -0
  86. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/cloud/data/docker-compose.yaml +0 -0
  87. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/cloud/data/init-certs-cloud.sh +0 -0
  88. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/cloud/registration.py +0 -0
  89. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/cloud/secrets.py +0 -0
  90. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/config/__init__.py +0 -0
  91. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/config/config_helper.py +0 -0
  92. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/config/migrations/__init__.py +0 -0
  93. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/config/migrations/v1_proxy_port.py +0 -0
  94. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/config/migrations/v2_transition.py +0 -0
  95. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/config/package-lock.json +0 -0
  96. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/config/package.json +0 -0
  97. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/config/schema_converter.py +0 -0
  98. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/config/yaml_util.py +0 -0
  99. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/discovery.py +0 -0
  100. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/events/__init__.py +0 -0
  101. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/events/bus.py +0 -0
  102. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/__init__.py +0 -0
  103. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/action_conditions.py +0 -0
  104. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/canopen.py +0 -0
  105. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/display.py +0 -0
  106. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/inputs.py +0 -0
  107. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/irrigation.py +0 -0
  108. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/manager.py +0 -0
  109. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/modbus.py +0 -0
  110. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/outputs.py +0 -0
  111. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/remote.py +0 -0
  112. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/sensors.py +0 -0
  113. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/templates/__init__.py +0 -0
  114. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/templates/alarm.py +0 -0
  115. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/templates/gate_cover.py +0 -0
  116. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/templates/thermostat.py +0 -0
  117. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/templates.py +0 -0
  118. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/manager/update.py +0 -0
  119. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/messaging/__init__.py +0 -0
  120. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/messaging/basic.py +0 -0
  121. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/messaging/basic_mqtt.py +0 -0
  122. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/messaging/composite.py +0 -0
  123. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/messaging/local.py +0 -0
  124. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/messaging/lox.py +0 -0
  125. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/messaging/loxone.py +0 -0
  126. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/messaging/mqtt.py +0 -0
  127. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/messaging/queue.py +0 -0
  128. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/remote/__init__.py +0 -0
  129. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/remote/base.py +0 -0
  130. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/remote/can.py +0 -0
  131. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/remote/esphome.py +0 -0
  132. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/remote/mqtt.py +0 -0
  133. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/remote/wled.py +0 -0
  134. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/sensor/__init__.py +0 -0
  135. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/sensor/base.py +0 -0
  136. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/sensor/system.py +0 -0
  137. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/state/__init__.py +0 -0
  138. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/state/manager.py +0 -0
  139. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/system/__init__.py +0 -0
  140. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/system/host_data.py +0 -0
  141. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/system/monitor.py +0 -0
  142. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/utils/__init__.py +0 -0
  143. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/utils/async_updater.py +0 -0
  144. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/utils/conditions.py +0 -0
  145. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/utils/filter.py +0 -0
  146. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/utils/font_util.py +0 -0
  147. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/utils/logger.py +0 -0
  148. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/utils/timeperiod.py +0 -0
  149. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/core/utils/util.py +0 -0
  150. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/24x16/adc.yaml +0 -0
  151. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/24x16/binary_sensor.yaml +0 -0
  152. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/24x16/config.yaml +0 -0
  153. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/24x16/event.yaml +0 -0
  154. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/24x16/mqtt.yaml +0 -0
  155. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/24x16/output24x16A.yaml +0 -0
  156. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/32x10/adc.yaml +0 -0
  157. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/32x10/binary_sensor.yaml +0 -0
  158. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/32x10/config.yaml +0 -0
  159. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/32x10/event.yaml +0 -0
  160. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/32x10/mqtt.yaml +0 -0
  161. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/32x10/output32x10A.yaml +0 -0
  162. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/48x4/adc.yaml +0 -0
  163. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/48x4/binary_sensor.yaml +0 -0
  164. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/48x4/config.yaml +0 -0
  165. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/48x4/event.yaml +0 -0
  166. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/48x4/mqtt.yaml +0 -0
  167. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/48x4/output48x4A.yaml +0 -0
  168. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/__init__.py +0 -0
  169. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/can_master.yaml +0 -0
  170. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/can_slave.yaml +0 -0
  171. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover/adc.yaml +0 -0
  172. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover/binary_sensor.yaml +0 -0
  173. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover/config.yaml +0 -0
  174. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover/cover.yaml +0 -0
  175. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover/event.yaml +0 -0
  176. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover/mqtt.yaml +0 -0
  177. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover/outputCover.yaml +0 -0
  178. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover_mix/adc.yaml +0 -0
  179. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover_mix/binary_sensor.yaml +0 -0
  180. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover_mix/config.yaml +0 -0
  181. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover_mix/cover.yaml +0 -0
  182. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover_mix/event.yaml +0 -0
  183. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover_mix/mqtt.yaml +0 -0
  184. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/cover_mix/outputCoverMix.yaml +0 -0
  185. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/adc.yaml +0 -0
  186. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/all_binary_sensor.yaml +0 -0
  187. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/binary_sensor.yaml +0 -0
  188. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/binary_sensor_v_0_7.yaml +0 -0
  189. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/config_24_16.yaml +0 -0
  190. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/event_all.yaml +0 -0
  191. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/event_v_0_7.yaml +0 -0
  192. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/led32x4A.yaml +0 -0
  193. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/output24x16A.yaml +0 -0
  194. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/output24x16A_v0.3.yaml +0 -0
  195. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/output32x10A.yaml +0 -0
  196. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/example_config/different_configs/output32x5A.yaml +0 -0
  197. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/exceptions.py +0 -0
  198. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/__init__.py +0 -0
  199. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/analog/__init__.py +0 -0
  200. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/analog/adc.py +0 -0
  201. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/can/__init__.py +0 -0
  202. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/can/bridge.py +0 -0
  203. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/can/client.py +0 -0
  204. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/can/interface.py +0 -0
  205. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/can/node.py +0 -0
  206. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/can/node_id.py +0 -0
  207. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/can/test_od.py +0 -0
  208. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/display/__init__.py +0 -0
  209. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/display/fonts/danube__.ttf +0 -0
  210. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/display/oled.py +0 -0
  211. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/gpio/__init__.py +0 -0
  212. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/gpio/expanders/__init__.py +0 -0
  213. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/gpio/expanders/mcp23017.py +0 -0
  214. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/gpio/expanders/pca9685.py +0 -0
  215. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/gpio/expanders/pcf8575.py +0 -0
  216. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/gpio/input/__init__.py +0 -0
  217. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/gpio/input/manager.py +0 -0
  218. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/i2c/__init__.py +0 -0
  219. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/i2c/bus.py +0 -0
  220. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/i2c/ina219.py +0 -0
  221. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/i2c/ina219_driver.py +0 -0
  222. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/i2c/mcp9808.py +0 -0
  223. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/i2c/pct2075.py +0 -0
  224. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/onewire/__init__.py +0 -0
  225. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/onewire/bus.py +0 -0
  226. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/onewire/dallas.py +0 -0
  227. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/onewire/ds2482.py +0 -0
  228. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/sensor/__init__.py +0 -0
  229. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/sensor/temperature/__init__.py +0 -0
  230. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/sensor/temperature/base.py +0 -0
  231. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/sensor/temperature/mcp9808.py +0 -0
  232. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/hardware/sensor/temperature/pct2075.py +0 -0
  233. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/integration/__init__.py +0 -0
  234. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/integration/homeassistant.py +0 -0
  235. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/integration/interlock.py +0 -0
  236. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/integration/lox_template.py +0 -0
  237. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/__init__.py +0 -0
  238. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/actions.py +0 -0
  239. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/MANIFEST.sha256 +0 -0
  240. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/docker/daemon.json +0 -0
  241. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/docker/nodered/docker-compose.yaml +0 -0
  242. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/docker/nodered/nginx/default.conf +0 -0
  243. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/docker/nodered/node-red/settings.js +0 -0
  244. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/journald/journald.conf +0 -0
  245. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/mosquitto/boneio.conf +0 -0
  246. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/sudoers/boneio +0 -0
  247. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/systemd/boneio-oled-boot.service +0 -0
  248. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/systemd/boneio.service +0 -0
  249. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/systemd/set-hostname-once.service +0 -0
  250. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/usr-local-bin/set-hostname-once.sh +0 -0
  251. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/usr-sbin/oled_boot_splash.py +0 -0
  252. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/usr-sbin/oled_boot_splash.sh +0 -0
  253. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/usr-sbin/oled_msg.py +0 -0
  254. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/assets/usr-sbin/oled_msg.sh +0 -0
  255. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/bootstrap/boneio-migrate +0 -0
  256. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/bootstrap/install-helper.sh +0 -0
  257. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/bootstrap/sudoers-migrate +0 -0
  258. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/runner.py +0 -0
  259. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/versions/__init__.py +0 -0
  260. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/versions/v1_3_0_baseline.py +0 -0
  261. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/versions/v1_3_1_fix_oled_boot.py +0 -0
  262. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/migrations/versions/v1_3_2_cleanup_can_sudoers.py +0 -0
  263. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/__init__.py +0 -0
  264. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/cli.py +0 -0
  265. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/client.py +0 -0
  266. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/coordinator.py +0 -0
  267. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/__init__.py +0 -0
  268. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/energy_meters/le-03mw.json +0 -0
  269. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/energy_meters/le-03mwct.json +0 -0
  270. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/energy_meters/orno-or-we-517.json +0 -0
  271. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/energy_meters/sdm120.json +0 -0
  272. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/energy_meters/sdm630.json +0 -0
  273. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/energy_meters/socomec_e03.json +0 -0
  274. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/energy_meters/socomec_e23.json +0 -0
  275. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/hvac/fujitsu-ac.json +0 -0
  276. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/hvac/ventclear.json +0 -0
  277. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/inverters/sofar.json +0 -0
  278. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/inverters/thessla.json +0 -0
  279. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/other/esp32_relay_x4_modbus.json +0 -0
  280. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/other/n4dsc08.json +0 -0
  281. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/other/r4dcb08.json +0 -0
  282. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/other/wanas415.json +0 -0
  283. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/sensors/boneio-edge-temp.json +0 -0
  284. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/sensors/cwt.json +0 -0
  285. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/sensors/dts1964_3f.json +0 -0
  286. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/sensors/dyp-a12-ultrasonic.json +0 -0
  287. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/sensors/gdfs.json +0 -0
  288. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/sensors/gdfx.json +0 -0
  289. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/sensors/liquid-sensor.json +0 -0
  290. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/sensors/pt100.json +0 -0
  291. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/sensors/sht20.json +0 -0
  292. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/devices/sensors/sht30.json +0 -0
  293. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/__init__.py +0 -0
  294. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/base.py +0 -0
  295. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/derived/__init__.py +0 -0
  296. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/derived/numeric.py +0 -0
  297. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/derived/select.py +0 -0
  298. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/derived/switch.py +0 -0
  299. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/derived/text.py +0 -0
  300. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/sensor/__init__.py +0 -0
  301. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/sensor/binary.py +0 -0
  302. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/sensor/numeric.py +0 -0
  303. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/sensor/text.py +0 -0
  304. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/writeable/__init__.py +0 -0
  305. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/writeable/binary.py +0 -0
  306. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/entities/writeable/numeric.py +0 -0
  307. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/modbus/utils.py +0 -0
  308. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/models/actions.py +0 -0
  309. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/models/events.py +0 -0
  310. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/models/files.py +0 -0
  311. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/models/logs.py +0 -0
  312. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/models/mqtt.py +0 -0
  313. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/runner.py +0 -0
  314. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/schema/actions.yaml +0 -0
  315. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/schema/actions_sensor.yaml +0 -0
  316. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/schema/actions_switch.yaml +0 -0
  317. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/schema/condition.yaml +0 -0
  318. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/schema/filters.yaml +0 -0
  319. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/schema/filters_adc.yaml +0 -0
  320. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/schema/id.yaml +0 -0
  321. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/schema/remote_devices.yaml +0 -0
  322. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/schema/schema.yaml +0 -0
  323. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/schema/temp_unit.yaml +0 -0
  324. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/schema/update_interval.yaml +0 -0
  325. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/action_validation.py +0 -0
  326. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/app.py +0 -0
  327. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/ConfigEditor-wi_Mieo6.js +0 -0
  328. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/aiConfig-LL3nlemJ.js +0 -0
  329. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/aiWizardPrompt-CmumVq54.js +0 -0
  330. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/codicon-DCmgc-ay.ttf +0 -0
  331. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/editor.worker-BVjSvWeP.js +0 -0
  332. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/index-C_7FDXG5.js +0 -0
  333. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/index-C_S5rhz7.css +0 -0
  334. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/json.worker-CqOJL4FD.js +0 -0
  335. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/monaco-B9WiNxkw.css +0 -0
  336. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/monaco-CAZoGZNF.js +0 -0
  337. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/rolldown-runtime-Dw2cE7zH.js +0 -0
  338. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/useTranslation-BsWm27qn.js +0 -0
  339. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/vendor-BD5Ml_Uz.js +0 -0
  340. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/workbox-window.prod.es5-BJd1pjeW.js +0 -0
  341. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/assets/yaml.worker-nZQZSRZ7.js +0 -0
  342. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/boneio-192.png +0 -0
  343. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/boneio-512.png +0 -0
  344. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/boneio.svg +0 -0
  345. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/boneio_fav.svg +0 -0
  346. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/index.html +0 -0
  347. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/adc.schema.json +0 -0
  348. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/areas.schema.json +0 -0
  349. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/binary_sensor.schema.json +0 -0
  350. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/boneio.schema.json +0 -0
  351. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/can.schema.json +0 -0
  352. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/config.schema.json +0 -0
  353. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/cover.schema.json +0 -0
  354. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/dallas.schema.json +0 -0
  355. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/ds2482.schema.json +0 -0
  356. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/event.schema.json +0 -0
  357. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/ina219.schema.json +0 -0
  358. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/irrigation.schema.json +0 -0
  359. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/lm75.schema.json +0 -0
  360. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/logger.schema.json +0 -0
  361. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/lox_udp.schema.json +0 -0
  362. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/mcp23017.schema.json +0 -0
  363. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/mcp9808.schema.json +0 -0
  364. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/modbus.schema.json +0 -0
  365. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/modbus_devices.schema.json +0 -0
  366. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/mqtt.schema.json +0 -0
  367. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/oled.schema.json +0 -0
  368. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/output.schema.json +0 -0
  369. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/output_group.schema.json +0 -0
  370. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/pca9685.schema.json +0 -0
  371. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/pcf8575.schema.json +0 -0
  372. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/remote_devices.schema.json +0 -0
  373. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/sensor.schema.json +0 -0
  374. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/template.schema.json +0 -0
  375. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/virtual_energy_sensor.schema.json +0 -0
  376. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/schema/web.schema.json +0 -0
  377. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/sw.js +0 -0
  378. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/frontend-dist/workbox-4eca85ba.js +0 -0
  379. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/middleware/__init__.py +0 -0
  380. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/middleware/auth.py +0 -0
  381. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/__init__.py +0 -0
  382. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/auth.py +0 -0
  383. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/caddy.py +0 -0
  384. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/config.py +0 -0
  385. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/covers.py +0 -0
  386. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/irrigation.py +0 -0
  387. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/migrations.py +0 -0
  388. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/modbus.py +0 -0
  389. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/outputs.py +0 -0
  390. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/remote_devices.py +0 -0
  391. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/sensors.py +0 -0
  392. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/system.py +0 -0
  393. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/templates.py +0 -0
  394. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/timezone_sudoers.py +0 -0
  395. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/tools.py +0 -0
  396. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/routes/update.py +0 -0
  397. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/adc.schema.json +0 -0
  398. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/areas.schema.json +0 -0
  399. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/binary_sensor.schema.json +0 -0
  400. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/boneio.schema.json +0 -0
  401. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/can.schema.json +0 -0
  402. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/config.schema.json +0 -0
  403. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/cover.schema.json +0 -0
  404. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/dallas.schema.json +0 -0
  405. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/ds2482.schema.json +0 -0
  406. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/event.schema.json +0 -0
  407. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/ina219.schema.json +0 -0
  408. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/irrigation.schema.json +0 -0
  409. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/lm75.schema.json +0 -0
  410. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/logger.schema.json +0 -0
  411. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/lox_udp.schema.json +0 -0
  412. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/mcp23017.schema.json +0 -0
  413. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/mcp9808.schema.json +0 -0
  414. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/modbus.schema.json +0 -0
  415. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/modbus_devices.schema.json +0 -0
  416. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/mqtt.schema.json +0 -0
  417. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/oled.schema.json +0 -0
  418. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/output.schema.json +0 -0
  419. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/output_group.schema.json +0 -0
  420. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/pca9685.schema.json +0 -0
  421. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/pcf8575.schema.json +0 -0
  422. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/remote_devices.schema.json +0 -0
  423. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/sensor.schema.json +0 -0
  424. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/template.schema.json +0 -0
  425. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/virtual_energy_sensor.schema.json +0 -0
  426. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/schema/web.schema.json +0 -0
  427. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/services/__init__.py +0 -0
  428. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/services/logs.py +0 -0
  429. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/web_server.py +0 -0
  430. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio/webui/websocket_manager.py +0 -0
  431. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio.egg-info/SOURCES.txt +0 -0
  432. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio.egg-info/dependency_links.txt +0 -0
  433. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio.egg-info/entry_points.txt +0 -0
  434. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio.egg-info/requires.txt +0 -0
  435. {boneio-1.3.1 → boneio-1.3.1.dev2}/boneio.egg-info/top_level.txt +0 -0
  436. {boneio-1.3.1 → boneio-1.3.1.dev2}/pyproject.toml +0 -0
  437. {boneio-1.3.1 → boneio-1.3.1.dev2}/setup.cfg +0 -0
  438. {boneio-1.3.1 → boneio-1.3.1.dev2}/setup.py +0 -0
  439. {boneio-1.3.1 → boneio-1.3.1.dev2}/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.1
3
+ Version: 1.3.1.dev2
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
@@ -21,7 +21,7 @@ from boneio.const import (
21
21
  from boneio.core.events import EventBus
22
22
  from boneio.core.messaging import BasicMqtt
23
23
  from boneio.core.utils import TimePeriod
24
- from boneio.models import CoverState, PositionDict, SavedPositionDict
24
+ from boneio.models import CoverState, PositionDict
25
25
  from boneio.models.events import CoverEvent
26
26
 
27
27
  _LOGGER = logging.getLogger(__name__)
@@ -40,7 +40,7 @@ class BaseCoverABC(ABC):
40
40
  open_time: TimePeriod,
41
41
  close_time: TimePeriod,
42
42
  event_bus: EventBus,
43
- position: float = 100.0,
43
+ position: int = 100,
44
44
  **kwargs,
45
45
  ) -> None:
46
46
  pass
@@ -106,12 +106,14 @@ class BaseCoverABC(ABC):
106
106
  pass
107
107
 
108
108
  @abstractmethod
109
- async def run_cover(self, current_operation: str, target_position: int | None = None, **kwargs) -> None:
109
+ async def run_cover(
110
+ self, current_operation: str, target_position: float | None = None, target_tilt: float | None = None
111
+ ) -> None:
110
112
  """This function is called to run cover after calling open, close, toggle, toggle_open, toggle_close, set_cover_position"""
111
113
  pass
112
114
 
113
115
  @abstractmethod
114
- def send_state(self, state: str, json_position: PositionDict) -> None:
116
+ async def send_state(self, state: str, position: float) -> None:
115
117
  pass
116
118
 
117
119
 
@@ -157,7 +159,7 @@ class BaseCover(BaseCoverABC, BasicMqtt):
157
159
  open_time: TimePeriod,
158
160
  close_time: TimePeriod,
159
161
  event_bus: EventBus,
160
- position: float = 100.0,
162
+ position: int = 100,
161
163
  name: str | None = None,
162
164
  **kwargs,
163
165
  ) -> None:
@@ -173,7 +175,7 @@ class BaseCover(BaseCoverABC, BasicMqtt):
173
175
  self._open_time = open_time.total_milliseconds
174
176
  self._close_time = close_time.total_milliseconds
175
177
  self._position = position
176
- self._initial_position: float = position
178
+ self._initial_position = None
177
179
  self._current_operation = IDLE
178
180
  self._last_operation = CLOSING
179
181
  _LOGGER.debug(
@@ -186,7 +188,7 @@ class BaseCover(BaseCoverABC, BasicMqtt):
186
188
 
187
189
  self._last_timestamp = time.time()
188
190
 
189
- self._last_update_time = 0.0
191
+ self._last_update_time = 0
190
192
  self._closed = position <= 0
191
193
 
192
194
  self._movement_thread = None
@@ -354,8 +356,7 @@ class BaseCover(BaseCoverABC, BasicMqtt):
354
356
 
355
357
  @property
356
358
  def position(self) -> int:
357
- """Return current cover position as integer (0-100)."""
358
- return round(self._position)
359
+ return round(self._position, 0)
359
360
 
360
361
  @property
361
362
  def json_position(self) -> PositionDict:
@@ -383,12 +384,6 @@ class BaseCover(BaseCoverABC, BasicMqtt):
383
384
  self._message_bus.send_message(topic=f"{self._send_topic}/state", payload=state)
384
385
  self._message_bus.send_message(topic=f"{self._send_topic}/pos", payload=json.dumps(json_position))
385
386
 
386
- @property
387
- def saved_position(self) -> SavedPositionDict:
388
- """Raw float position for disk persistence."""
389
- return {"position": self._position}
390
-
391
387
  def send_state_and_save(self, json_position: PositionDict):
392
- """Send state to MQTT/WebSocket and save raw float position to disk."""
393
388
  self.send_state(self.state, json_position)
394
- self._state_save(self.saved_position)
389
+ self._state_save(json_position)
@@ -31,7 +31,7 @@ class TimeBasedCover(BaseCover):
31
31
  restored_state: dict = DEFAULT_RESTORED_STATE,
32
32
  **kwargs,
33
33
  ) -> None:
34
- position = float(restored_state.get("position", DEFAULT_RESTORED_STATE["position"]))
34
+ position = int(restored_state.get("position", DEFAULT_RESTORED_STATE["position"]))
35
35
  super().__init__(
36
36
  open_relay=open_relay,
37
37
  close_relay=close_relay,
@@ -113,7 +113,7 @@ class TimeBasedCover(BaseCover):
113
113
  self._loop.call_soon_threadsafe(lambda: self.send_state_and_save(self.json_position))
114
114
  self._last_update_time = time.monotonic() # Upewnij się, że aktualizacja jest wysłana na końcu ruchu
115
115
 
116
- async def run_cover(self, current_operation: str, target_position: int | None = None, **kwargs) -> None:
116
+ async def run_cover(self, current_operation: str, target_position: int | None = None) -> None:
117
117
  if self._movement_thread and self._movement_thread.is_alive():
118
118
  _LOGGER.warning("Cover movement already in progress. Stopping first.")
119
119
  await self.stop()
@@ -8,7 +8,7 @@ import time
8
8
  from boneio.components.cover.cover import BaseCover, BaseVenetianCoverABC
9
9
  from boneio.const import CLOSE, CLOSING, IDLE, OPEN, OPENING, STOP
10
10
  from boneio.core.utils import TimePeriod
11
- from boneio.models import PositionDict, SavedPositionDict
11
+ from boneio.models import PositionDict
12
12
 
13
13
  _LOGGER = logging.getLogger(__name__)
14
14
  COVER_MOVE_UPDATE_INTERVAL = 50 # ms
@@ -27,12 +27,20 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
27
27
  restored_state: dict = DEFAULT_RESTORED_STATE,
28
28
  **kwargs,
29
29
  ) -> None:
30
- self._tilt_duration = tilt_duration.total_milliseconds # Czas trwania ruchu lameli
31
- self._initial_tilt_position = float(restored_state.get("tilt", DEFAULT_RESTORED_STATE["tilt"]))
30
+ self._tilt_duration = (
31
+ tilt_duration.total_milliseconds
32
+ ) # Czas trwania ruchu lameli
33
+ self._initial_tilt_position = int(
34
+ restored_state.get("tilt", DEFAULT_RESTORED_STATE["tilt"])
35
+ )
32
36
 
33
- position = float(restored_state.get("position", DEFAULT_RESTORED_STATE["position"]))
37
+ position = int(
38
+ restored_state.get("position", DEFAULT_RESTORED_STATE["position"])
39
+ )
34
40
  # --- TILT ---
35
- self._tilt_position = float(restored_state.get("tilt", DEFAULT_RESTORED_STATE["tilt"]))
41
+ self._tilt_position = int(
42
+ restored_state.get("tilt", DEFAULT_RESTORED_STATE["tilt"])
43
+ )
36
44
 
37
45
  # self._actuator_activation_duration = (
38
46
  # actuator_activation_duration.total_milliseconds
@@ -45,12 +53,7 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
45
53
  )
46
54
  _LOGGER.debug(
47
55
  "VenetianCover %s initialized: open_time=%dms, close_time=%dms, tilt_duration=%dms, position=%d%%, tilt=%d%%",
48
- self._id,
49
- self._open_time,
50
- self._close_time,
51
- self._tilt_duration,
52
- position,
53
- self._tilt_position,
56
+ self._id, self._open_time, self._close_time, self._tilt_duration, position, self._tilt_position
54
57
  )
55
58
 
56
59
  def _move_cover(
@@ -66,12 +69,20 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
66
69
  if direction == OPEN:
67
70
  relay = self._open_relay
68
71
  total_steps = 100 - self._position
69
- total_tilt_step = tilt_delta if target_tilt_position is not None else 100 - self._initial_tilt_position
72
+ total_tilt_step = (
73
+ tilt_delta
74
+ if target_tilt_position is not None
75
+ else 100 - self._initial_tilt_position
76
+ )
70
77
 
71
78
  elif direction == CLOSE:
72
79
  relay = self._close_relay
73
80
  total_steps = self._position
74
- total_tilt_step = tilt_delta if target_tilt_position is not None else self._initial_tilt_position
81
+ total_tilt_step = (
82
+ tilt_delta
83
+ if target_tilt_position is not None
84
+ else self._initial_tilt_position
85
+ )
75
86
  else:
76
87
  return
77
88
  if target_tilt_position is not None:
@@ -82,7 +93,9 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
82
93
 
83
94
  if total_steps == 0 or duration == 0:
84
95
  self._current_operation = IDLE
85
- self._loop.call_soon_threadsafe(self.send_state, self.state, self.json_position)
96
+ self._loop.call_soon_threadsafe(
97
+ self.send_state, self.state, self.json_position
98
+ )
86
99
  return
87
100
 
88
101
  # Calculate actual duration based on remaining distance
@@ -98,11 +111,17 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
98
111
  needed_tilt_duration = tilt_duration * (total_tilt_step / 100)
99
112
  if target_tilt_position is None:
100
113
  tilt_delta = 1.0
114
+
101
115
 
102
116
  while not self._stop_event.is_set():
103
- current_time = time.monotonic() # Pobierz aktualny czas tylko raz na iterację
104
- elapsed_time = (current_time - start_time) * 1000 # Konwersja na milisekundy
105
-
117
+ current_time = (
118
+ time.monotonic()
119
+ ) # Pobierz aktualny czas tylko raz na iterację
120
+ elapsed_time = (
121
+ current_time - start_time
122
+ ) * 1000 # Konwersja na milisekundy
123
+
124
+
106
125
  if elapsed_time < needed_tilt_duration:
107
126
  tilt_progress = elapsed_time / needed_tilt_duration if needed_tilt_duration > 0 else 1.0
108
127
  progress = 0.0
@@ -116,10 +135,8 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
116
135
 
117
136
  # Obliczanie _tilt_position dla kierunku OPEN
118
137
  if target_tilt_position is not None:
119
- self._tilt_position = min(
120
- target_tilt_position, self._initial_tilt_position + tilt_progress * tilt_delta
121
- )
122
- else: # Fallback jeśli nie ma target_tilt_position
138
+ self._tilt_position = min(target_tilt_position, self._initial_tilt_position + tilt_progress * tilt_delta)
139
+ else: # Fallback jeśli nie ma target_tilt_position
123
140
  self._tilt_position = min(
124
141
  100.0, self._initial_tilt_position + tilt_progress * (100 - self._initial_tilt_position)
125
142
  )
@@ -129,23 +146,24 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
129
146
 
130
147
  # Obliczanie _tilt_position dla kierunku CLOSE
131
148
  if target_tilt_position is not None:
132
- self._tilt_position = max(
133
- target_tilt_position, self._initial_tilt_position - tilt_progress * tilt_delta
134
- )
135
- else: # Fallback jeśli nie ma target_tilt_position
149
+ self._tilt_position = max(target_tilt_position, self._initial_tilt_position - tilt_progress * tilt_delta)
150
+ else: # Fallback jeśli nie ma target_tilt_position
136
151
  self._tilt_position = max(
137
152
  0.0, self._initial_tilt_position - tilt_progress * self._initial_tilt_position
138
153
  )
139
154
 
140
155
  self._last_timestamp = time.time() # Wall clock for display
141
156
  if current_time - self._last_update_time >= 1:
142
- self._loop.call_soon_threadsafe(self.send_state, self.state, self.json_position)
157
+ self._loop.call_soon_threadsafe(
158
+ self.send_state, self.state, self.json_position
159
+ )
143
160
  self._last_update_time = current_time
144
161
 
145
- if target_tilt_position is not None and (
146
- (direction == OPEN and self._tilt_position >= target_tilt_position)
147
- or (direction == CLOSE and self._tilt_position <= target_tilt_position)
148
- ):
162
+ if target_tilt_position is not None and ((
163
+ direction == OPEN and self._tilt_position >= target_tilt_position
164
+ ) or (
165
+ direction == CLOSE and self._tilt_position <= target_tilt_position
166
+ )):
149
167
  break
150
168
 
151
169
  if target_position is not None and (
@@ -165,8 +183,12 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
165
183
  # Send relay state to WebSocket (not MQTT - that's handled by output_type check)
166
184
  self._loop.call_soon_threadsafe(lambda r=relay: asyncio.ensure_future(r.async_send_state()))
167
185
  self._current_operation = IDLE
168
- self._loop.call_soon_threadsafe(self.send_state_and_save, self.json_position)
169
- self._last_update_time = time.monotonic() # Upewnij się, że aktualizacja jest wysłana na końcu ruchu
186
+ self._loop.call_soon_threadsafe(
187
+ self.send_state_and_save, self.json_position
188
+ )
189
+ self._last_update_time = (
190
+ time.monotonic()
191
+ ) # Upewnij się, że aktualizacja jest wysłana na końcu ruchu
170
192
 
171
193
  async def set_tilt(self, tilt_position: int) -> None:
172
194
  """Setting tilt position."""
@@ -178,36 +200,31 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
178
200
 
179
201
  tilt_diff = abs(self._tilt_position - tilt_position)
180
202
  estimated_time_s = tilt_diff / 100 * self._tilt_duration / 1000
181
-
203
+
182
204
  if tilt_position > self._tilt_position:
183
205
  _LOGGER.info(
184
206
  "Setting tilt %s from %d%% to %d%% (OPENING). Estimated time: %.2fs (tilt_duration=%dms)",
185
- self._id,
186
- self._tilt_position,
187
- tilt_position,
188
- estimated_time_s,
189
- self._tilt_duration,
207
+ self._id, self._tilt_position, tilt_position, estimated_time_s, self._tilt_duration
208
+ )
209
+ await self.run_cover(
210
+ current_operation=OPENING, target_tilt_position=tilt_position
190
211
  )
191
- await self.run_cover(current_operation=OPENING, target_tilt_position=tilt_position)
192
212
  elif tilt_position < self._tilt_position:
193
213
  _LOGGER.info(
194
214
  "Setting tilt %s from %d%% to %d%% (CLOSING). Estimated time: %.2fs (tilt_duration=%dms)",
195
- self._id,
196
- self._tilt_position,
197
- tilt_position,
198
- estimated_time_s,
199
- self._tilt_duration,
215
+ self._id, self._tilt_position, tilt_position, estimated_time_s, self._tilt_duration
216
+ )
217
+ await self.run_cover(
218
+ current_operation=CLOSING, target_tilt_position=tilt_position
200
219
  )
201
- await self.run_cover(current_operation=CLOSING, target_tilt_position=tilt_position)
202
220
 
203
221
  @property
204
222
  def json_position(self) -> PositionDict:
205
- """Return position dict with int values for API/MQTT/WebUI."""
206
- return {"position": self.position, "tilt": self.tilt}
223
+ return {"position": round(self.position, 0), "tilt": self.tilt}
207
224
 
208
225
  @property
209
226
  def tilt(self) -> int:
210
- return round(self._tilt_position)
227
+ return int(round(self._tilt_position, 0))
211
228
 
212
229
  @property
213
230
  def tilt_position(self) -> int:
@@ -228,11 +245,6 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
228
245
  def kind(self) -> str:
229
246
  return "venetian"
230
247
 
231
- @property
232
- def saved_position(self) -> SavedPositionDict:
233
- """Raw float position for disk persistence (includes tilt)."""
234
- return {"position": self._position, "tilt": self._tilt_position}
235
-
236
248
  async def set_cover_tilt_position(self, position: int) -> None:
237
249
  """Set cover tilt position (required by BaseVenetianCoverABC)."""
238
250
  await self.set_tilt(position)
@@ -242,10 +254,7 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
242
254
  estimated_time_s = (100 - self._tilt_position) / 100 * self._tilt_duration / 1000
243
255
  _LOGGER.info(
244
256
  "Opening tilt cover %s from %d%%. Estimated time: %.2fs (tilt_duration=%dms)",
245
- self._id,
246
- self._tilt_position,
247
- estimated_time_s,
248
- self._tilt_duration,
257
+ self._id, self._tilt_position, estimated_time_s, self._tilt_duration
249
258
  )
250
259
  await self.set_tilt(tilt_position=100)
251
260
 
@@ -254,16 +263,13 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
254
263
  estimated_time_s = self._tilt_position / 100 * self._tilt_duration / 1000
255
264
  _LOGGER.info(
256
265
  "Closing tilt cover %s from %d%%. Estimated time: %.2fs (tilt_duration=%dms)",
257
- self._id,
258
- self._tilt_position,
259
- estimated_time_s,
260
- self._tilt_duration,
266
+ self._id, self._tilt_position, estimated_time_s, self._tilt_duration
261
267
  )
262
268
  await self.set_tilt(tilt_position=0)
263
269
 
264
270
  def update_config_times(self, config: dict) -> None:
265
271
  """Update cover timing configuration.
266
-
272
+
267
273
  Args:
268
274
  config: Dictionary with timing values as TimePeriod objects.
269
275
  Keys: open_time, close_time, tilt_duration
@@ -280,12 +286,11 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
280
286
  current_operation: str,
281
287
  target_position: int | None = None,
282
288
  target_tilt_position: int | None = None,
283
- **kwargs,
284
289
  ) -> None:
285
290
  if self._movement_thread and self._movement_thread.is_alive():
286
291
  _LOGGER.warning("Cover movement is already in progress. Stopping first.")
287
292
  await self.stop()
288
-
293
+
289
294
  # If STOP was requested, don't start new movement
290
295
  if current_operation == STOP:
291
296
  await self.stop()
@@ -295,7 +300,9 @@ class VenetianCover(BaseCover, BaseVenetianCoverABC):
295
300
  self._initial_position = self._position
296
301
  self._initial_tilt_position = self._tilt_position
297
302
  self._stop_event.clear()
298
- self._last_update_time = time.monotonic() # Inicjalizacja czasu ostatniej aktualizacji
303
+ self._last_update_time = (
304
+ time.monotonic()
305
+ ) # Inicjalizacja czasu ostatniej aktualizacji
299
306
 
300
307
  if current_operation == OPENING:
301
308
  self._movement_thread = threading.Thread(
@@ -230,7 +230,7 @@ class CoverManager:
230
230
 
231
231
  platform = config.get("platform", "time_based")
232
232
 
233
- def state_save(value: dict[str, float]):
233
+ def state_save(value: dict[str, int]):
234
234
  if config[RESTORE_STATE]:
235
235
  self._manager._state_manager.save_attribute(
236
236
  attr_type=COVER,
@@ -28,7 +28,7 @@ _taken_over: bool = False # Set True when DisplayManager takes control
28
28
 
29
29
  def _get_fonts() -> dict[str, Any] | None:
30
30
  """Lazily load fonts for OLED display.
31
-
31
+
32
32
  Returns:
33
33
  Dictionary with font objects keyed by size name, or None if
34
34
  no font libraries are available (PIL/Pillow not installed).
@@ -39,7 +39,6 @@ def _get_fonts() -> dict[str, Any] | None:
39
39
 
40
40
  try:
41
41
  from boneio.core.utils.font_util import make_font
42
-
43
42
  _fonts = {
44
43
  "big": make_font("DejaVuSans.ttf", 12),
45
44
  "small": make_font("DejaVuSans.ttf", 9),
@@ -49,7 +48,6 @@ def _get_fonts() -> dict[str, Any] | None:
49
48
  except (OSError, ImportError):
50
49
  try:
51
50
  from PIL import ImageFont
52
-
53
51
  _LOGGER.debug("TTF fonts not found, using default PIL fonts")
54
52
  _fonts = {
55
53
  "big": ImageFont.load_default(),
@@ -65,13 +63,13 @@ def _get_fonts() -> dict[str, Any] | None:
65
63
 
66
64
  def init_early_oled() -> Any | None:
67
65
  """Initialize bare OLED device for startup status messages.
68
-
66
+
69
67
  Creates the I2C connection and SH1106 device early, before the Manager
70
68
  or even config validation. This allows displaying boot progress,
71
69
  config errors, and crash info on the OLED screen.
72
-
70
+
73
71
  Call this once at the very start of the application.
74
-
72
+
75
73
  Returns:
76
74
  sh1106 device instance or None if OLED hardware is not available.
77
75
  """
@@ -82,7 +80,6 @@ def init_early_oled() -> Any | None:
82
80
  try:
83
81
  from luma.core.interface.serial import i2c
84
82
  from luma.oled.device import sh1106
85
-
86
83
  serial = i2c(port=2, address=0x3C)
87
84
  _early_device = sh1106(serial)
88
85
  _LOGGER.debug("Early OLED device initialized for startup messages")
@@ -94,7 +91,7 @@ def init_early_oled() -> Any | None:
94
91
 
95
92
  def get_early_device() -> Any | None:
96
93
  """Get the early-initialized OLED device singleton.
97
-
94
+
98
95
  Returns:
99
96
  sh1106 device instance or None if not initialized.
100
97
  """
@@ -103,7 +100,7 @@ def get_early_device() -> Any | None:
103
100
 
104
101
  def handoff() -> None:
105
102
  """Signal that DisplayManager has taken over the OLED.
106
-
103
+
107
104
  After this call, draw_status/draw_error/draw_config_error become no-ops.
108
105
  Only draw_crash still works (safety — must always show fatal errors).
109
106
  """
@@ -119,9 +116,9 @@ def is_taken_over() -> bool:
119
116
 
120
117
  def draw_status(message: str, device: Any | None = None) -> None:
121
118
  """Draw a startup/status message on the OLED display.
122
-
119
+
123
120
  Shows the boneIO logo at the top and a status line below.
124
-
121
+
125
122
  Args:
126
123
  message: Status message to display (max ~20 chars for good readability).
127
124
  device: Optional device override; uses singleton if not provided.
@@ -131,7 +128,6 @@ def draw_status(message: str, device: Any | None = None) -> None:
131
128
  return
132
129
  try:
133
130
  from luma.core.render import canvas
134
-
135
131
  fonts = _get_fonts()
136
132
  if fonts is None:
137
133
  return
@@ -145,10 +141,10 @@ def draw_status(message: str, device: Any | None = None) -> None:
145
141
 
146
142
  def draw_error(title: str, detail: str, device: Any | None = None) -> None:
147
143
  """Draw an error message on the OLED display.
148
-
144
+
149
145
  Shows a warning icon, error title, and up to 4 lines of wrapped detail.
150
146
  The screen stays visible until manually cleared or the app restarts.
151
-
147
+
152
148
  Args:
153
149
  title: Short error title (e.g., "Config Error", "Runtime Error").
154
150
  detail: Detailed error description (will be word-wrapped).
@@ -159,7 +155,6 @@ def draw_error(title: str, detail: str, device: Any | None = None) -> None:
159
155
  return
160
156
  try:
161
157
  from luma.core.render import canvas
162
-
163
158
  fonts = _get_fonts()
164
159
  if fonts is None:
165
160
  return
@@ -187,26 +182,26 @@ def draw_error(title: str, detail: str, device: Any | None = None) -> None:
187
182
 
188
183
  def draw_config_error(error_message: str, device: Any | None = None) -> None:
189
184
  """Draw a configuration error on the OLED display.
190
-
185
+
191
186
  Specialized version of draw_error for config validation failures.
192
-
187
+
193
188
  Args:
194
189
  error_message: The configuration error description.
195
190
  device: Optional device override; uses singleton if not provided.
196
191
  """
197
192
  draw_error(
198
193
  title="Config Error",
199
- detail=error_message,
194
+ detail=str(error_message),
200
195
  device=device,
201
196
  )
202
197
 
203
198
 
204
199
  def draw_crash(exception: BaseException, device: Any | None = None) -> None:
205
200
  """Draw a crash/runtime error on the OLED display.
206
-
201
+
207
202
  This function ALWAYS works, even after handoff() — crashes must be
208
203
  visible to the user regardless of which component owns the screen.
209
-
204
+
210
205
  Args:
211
206
  exception: The exception that caused the crash.
212
207
  device: Optional device override; uses singleton if not provided.
@@ -228,7 +223,7 @@ def draw_crash(exception: BaseException, device: Any | None = None) -> None:
228
223
 
229
224
  def clear_display(device: Any | None = None) -> None:
230
225
  """Clear the OLED display (turn all pixels off).
231
-
226
+
232
227
  Args:
233
228
  device: Optional device override; uses singleton if not provided.
234
229
  """
@@ -237,7 +232,6 @@ def clear_display(device: Any | None = None) -> None:
237
232
  return
238
233
  try:
239
234
  from luma.core.render import canvas
240
-
241
235
  with canvas(dev) as draw:
242
236
  draw.rectangle([0, 0, 127, 63], outline=0, fill=0)
243
237
  except Exception as err:
@@ -277,15 +277,13 @@ class GpioBaseClass:
277
277
  """
278
278
  return self._sequence_mode
279
279
 
280
- def should_publish_sequence_to_mqtt(self, sequence_type: ClickTypes | None) -> bool:
280
+ def should_publish_sequence_to_mqtt(self, sequence_type: str) -> bool:
281
281
  """Check if a sequence type should be published to MQTT.
282
282
 
283
283
  Args:
284
- sequence_type: Type of sequence (e.g., 'double_then_long'), or None
284
+ sequence_type: Type of sequence (e.g., 'double_then_long')
285
285
 
286
286
  Returns:
287
287
  True if the sequence should be published to MQTT
288
288
  """
289
- if sequence_type is None:
290
- return False
291
289
  return self._mqtt_sequences.get(sequence_type, False)
@@ -25,7 +25,6 @@ from boneio.models.state import (
25
25
  OutputsResponse,
26
26
  OutputState,
27
27
  PositionDict,
28
- SavedPositionDict,
29
28
  SensorState,
30
29
  )
31
30
 
@@ -53,5 +52,4 @@ __all__ = [
53
52
  "StateUpdate",
54
53
  # Utility
55
54
  "PositionDict",
56
- "SavedPositionDict",
57
55
  ]
@@ -116,17 +116,11 @@ class CoverResponse(BaseModel):
116
116
 
117
117
  # Utility types
118
118
  class PositionDict(TypedDict, total=False):
119
- """Position dictionary for covers — used for API/MQTT/WebUI (rounded int values)."""
119
+ """Position dictionary for covers."""
120
120
  position: int
121
121
  tilt: int
122
122
 
123
123
 
124
- class SavedPositionDict(TypedDict, total=False):
125
- """Position dictionary for covers — used for disk persistence (full float precision)."""
126
- position: float
127
- tilt: float
128
-
129
-
130
124
  __all__ = [
131
125
  # State models
132
126
  "InputState",
@@ -141,7 +135,6 @@ __all__ = [
141
135
  "CoverResponse",
142
136
  # Utility
143
137
  "PositionDict",
144
- "SavedPositionDict",
145
138
  "ModbusDeviceState",
146
139
  ]
147
140
 
@@ -0,0 +1,2 @@
1
+ # flake8: noqa
2
+ __version__ = "1.3.1dev2"