boneIO 0.5.0.dev2__tar.gz → 0.5.0.dev4__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 (72) hide show
  1. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/PKG-INFO +1 -1
  2. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/loader.py +1 -0
  3. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/stats.py +19 -3
  4. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/manager.py +4 -0
  5. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/oled.py +19 -6
  6. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/schema/schema.yaml +12 -0
  7. boneIO-0.5.0.dev4/boneio/version.py +2 -0
  8. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/pyproject.toml +1 -1
  9. boneIO-0.5.0.dev2/boneio/version.py +0 -2
  10. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/LICENSE +0 -0
  11. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/README.md +0 -0
  12. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/__init__.py +0 -0
  13. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/bonecli.py +0 -0
  14. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/const.py +0 -0
  15. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/cover.py +0 -0
  16. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/example_config/__init__.py +0 -0
  17. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/example_config/adc.yaml +0 -0
  18. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/example_config/config.yaml +0 -0
  19. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/example_config/cover.yaml +0 -0
  20. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/example_config/input.yaml +0 -0
  21. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/example_config/output24x16A.yaml +0 -0
  22. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/example_config/output32x5A.yaml +0 -0
  23. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/fonts/danube__.ttf +0 -0
  24. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/__init__.py +0 -0
  25. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/async_updater.py +0 -0
  26. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/config.py +0 -0
  27. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/events.py +0 -0
  28. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/exceptions.py +0 -0
  29. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/filter.py +0 -0
  30. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/gpio.py +0 -0
  31. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/ha_discovery.py +0 -0
  32. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/logger.py +0 -0
  33. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/mqtt.py +0 -0
  34. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/oled.py +0 -0
  35. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/onewire/W1ThermSensor.py +0 -0
  36. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/onewire/__init__.py +0 -0
  37. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/onewire/ds2482.py +0 -0
  38. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/onewire/onewire.py +0 -0
  39. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/queue.py +0 -0
  40. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/state_manager.py +0 -0
  41. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/timeperiod.py +0 -0
  42. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/util.py +0 -0
  43. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/helper/yaml_util.py +0 -0
  44. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/input/__init__.py +0 -0
  45. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/input/gpio.py +0 -0
  46. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/modbus.py +0 -0
  47. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/mqtt_client.py +0 -0
  48. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/relay/__init__.py +0 -0
  49. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/relay/basic.py +0 -0
  50. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/relay/gpio.py +0 -0
  51. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/relay/mcp.py +0 -0
  52. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/runner.py +0 -0
  53. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/schema/actions.yaml +0 -0
  54. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/schema/actions_sensor.yaml +0 -0
  55. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/schema/actions_switch.yaml +0 -0
  56. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/schema/filters.yaml +0 -0
  57. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/schema/filters_adc.yaml +0 -0
  58. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/schema/update_interval.yaml +0 -0
  59. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/sensor/__init__.py +0 -0
  60. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/sensor/adc.py +0 -0
  61. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/sensor/gpio.py +0 -0
  62. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/sensor/modbus/__init__.py +0 -0
  63. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/sensor/modbus/sdm120.json +0 -0
  64. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/sensor/modbus/sdm630.json +0 -0
  65. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/sensor/modbus/sofar.json +0 -0
  66. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/sensor/temp/__init__.py +0 -0
  67. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/sensor/temp/dallas.py +0 -0
  68. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/sensor/temp/lm75.py +0 -0
  69. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/boneio/sensor/temp/mcp9808.py +0 -0
  70. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/tests/32_5_config.yaml +0 -0
  71. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/tests/bandit.yaml +0 -0
  72. {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev4}/tests/relay_32_5.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: boneIO
3
- Version: 0.5.0dev2
3
+ Version: 0.5.0dev4
4
4
  Summary: Python App for BoneIO
5
5
  License: GNU General Public License v3.0
6
6
  Author-email: Paweł Szafer <pszafer@gmail.com>
@@ -125,6 +125,7 @@ def create_temp_sensor(
125
125
  name=name,
126
126
  i2c=i2cbusio,
127
127
  address=config[ADDRESS],
128
+ manager=manager,
128
129
  send_message=manager.send_message,
129
130
  topic_prefix=topic_prefix,
130
131
  update_interval=config.get(UPDATE_INTERVAL, TimePeriod(seconds=60)),
@@ -4,7 +4,8 @@ from datetime import datetime
4
4
  import socket
5
5
  import time
6
6
  from math import floor
7
- from typing import Callable
7
+ from typing import Callable, List
8
+ from functools import partial
8
9
 
9
10
  import psutil
10
11
 
@@ -118,21 +119,31 @@ class HostSensor(AsyncUpdater):
118
119
  """Host sensor."""
119
120
 
120
121
  def __init__(
121
- self, update_function: Callable, static_data: dict, id: str, **kwargs
122
+ self,
123
+ update_function: Callable,
124
+ manager_callback: Callable,
125
+ static_data: dict,
126
+ id: str,
127
+ type: str,
128
+ **kwargs,
122
129
  ) -> None:
123
130
  self._update_function = update_function
124
131
  self._static_data = static_data
125
132
  self._state = None
133
+ self._type = type
134
+ self._manager_callback = manager_callback
135
+ self._loop = asyncio.get_event_loop()
126
136
  self.id = id
127
137
  super().__init__(**kwargs)
128
138
 
129
139
  async def async_update(self, time: datetime) -> None:
130
140
  self._state = self._update_function()
141
+ self._loop.call_soon_threadsafe(partial(self._manager_callback, self._type))
131
142
 
132
143
  @property
133
144
  def state(self) -> dict:
134
145
  if self._static_data:
135
- return {**self._static_data, **self._state}
146
+ return {**self._static_data, self._type: self._state}
136
147
  return self._state
137
148
 
138
149
 
@@ -147,6 +158,7 @@ class HostData:
147
158
  callback: Callable,
148
159
  temp_sensor: Callable[[LM75Sensor, MCP9808Sensor], None],
149
160
  manager: Manager,
161
+ enabled_screens: List[str],
150
162
  ) -> None:
151
163
  """Initialize HostData."""
152
164
  self._hostname = socket.gethostname()
@@ -163,11 +175,15 @@ class HostData:
163
175
  },
164
176
  }
165
177
  for k, _v in host_stats.items():
178
+ if k not in enabled_screens:
179
+ continue
166
180
  self.data[k] = HostSensor(
167
181
  update_function=_v["f"],
168
182
  static_data=_v.get("static"),
169
183
  manager=manager,
184
+ manager_callback=callback,
170
185
  id=f"{k}_hoststats",
186
+ type=k,
171
187
  update_interval=_v["update_interval"],
172
188
  )
173
189
  self._temp_sensor = temp_sensor
@@ -204,8 +204,11 @@ class Manager:
204
204
  if oled.get("enabled", False):
205
205
  from boneio.oled import Oled
206
206
 
207
+ screens = oled.get("screens")
208
+
207
209
  self._host_data = HostData(
208
210
  manager=self,
211
+ enabled_screens=screens,
209
212
  output=self.grouped_outputs,
210
213
  temp_sensor=self._temp_sensors[0] if self._temp_sensors else None,
211
214
  callback=self._host_data_callback,
@@ -213,6 +216,7 @@ class Manager:
213
216
  try:
214
217
  self._oled = Oled(
215
218
  host_data=self._host_data,
219
+ screen_order=screens,
216
220
  output_groups=list(self.grouped_outputs),
217
221
  sleep_timeout=oled.get("screensaver_timeout", 60),
218
222
  )
@@ -28,7 +28,7 @@ fontSmall = make_font("DejaVuSans.ttf", 9)
28
28
  fontExtraSmall = make_font("DejaVuSans.ttf", 7)
29
29
  danube = make_font("danube__.ttf", 15, local=True)
30
30
 
31
- screen_order = [UPTIME, NETWORK, CPU, DISK, MEMORY, SWAP]
31
+ # screen_order = [UPTIME, NETWORK, CPU, DISK, MEMORY, SWAP]
32
32
 
33
33
  STANDARD_ROWS = [17, 32, 47]
34
34
  UPTIME_ROWS = list(range(22, 60, 10))
@@ -40,19 +40,32 @@ class Oled:
40
40
  """Oled display class."""
41
41
 
42
42
  def __init__(
43
- self, host_data: HostData, output_groups: List[str], sleep_timeout: TimePeriod
43
+ self,
44
+ host_data: HostData,
45
+ output_groups: List[str],
46
+ sleep_timeout: TimePeriod,
47
+ screen_order: List[str],
44
48
  ) -> None:
45
49
  """Initialize OLED screen."""
46
50
  self._loop = asyncio.get_running_loop()
47
- self._screen_order = cycle(screen_order + output_groups)
48
- self._output_groups = output_groups
51
+ self._output_groups = None
52
+ try:
53
+ _ind_screen = screen_order.index("outputs")
54
+ if not output_groups:
55
+ _LOGGER.debug("No outputs configured. Omitting in screen.")
56
+ screen_order.pop(_ind_screen)
57
+ screen_order[_ind_screen:_ind_screen] = output_groups
58
+ self._output_groups = output_groups
59
+ except ValueError:
60
+ pass
61
+ self._screen_order = cycle(screen_order)
49
62
  self._current_screen = next(self._screen_order)
50
63
  self._host_data = host_data
51
64
  self._sleep = False
52
65
  self._sleep_handle = None
53
66
  self._sleep_timeout = sleep_timeout
54
67
  setup_input(pin=OLED_PIN, pull_mode="gpio_pu")
55
- edge_detect(pin=OLED_PIN, callback=self._handle_press, bounce=120)
68
+ edge_detect(pin=OLED_PIN, callback=self._handle_press, bounce=240)
56
69
  try:
57
70
  serial = i2c(port=2, address=0x3C)
58
71
  self._device = sh1106(serial)
@@ -112,7 +125,7 @@ class Oled:
112
125
  data = self._host_data.get(self._current_screen)
113
126
  if data:
114
127
  with canvas(self._device) as draw:
115
- if self._current_screen in self._output_groups:
128
+ if self._output_groups and self._current_screen in self._output_groups:
116
129
  self._draw_output(data, draw)
117
130
  elif self._current_screen == UPTIME:
118
131
  self._draw_uptime(data, draw)
@@ -75,6 +75,18 @@ oled:
75
75
  default: False
76
76
  meta:
77
77
  label: Disable builtin screen.
78
+ screens:
79
+ type: list
80
+ required: True
81
+ allowed: ["uptime", "network", "cpu", "disk", "memory", "swap", "outputs"]
82
+ default:
83
+ - uptime
84
+ - network
85
+ - cpu
86
+ - disk
87
+ - memory
88
+ - swap
89
+ - outputs
78
90
  screensaver_timeout:
79
91
  type:
80
92
  - string
@@ -0,0 +1,2 @@
1
+ # flake8: noqa
2
+ __version__ = "0.5.0dev4"
@@ -27,7 +27,7 @@ dependencies = [
27
27
  "w1thermsensor[async]>=2.0.0",
28
28
  ]
29
29
  requires-python = ">=3.7"
30
- version = "0.5.0dev2"
30
+ version = "0.5.0dev4"
31
31
 
32
32
  [project.license]
33
33
  text = "GNU General Public License v3.0"
@@ -1,2 +0,0 @@
1
- # flake8: noqa
2
- __version__ = "0.5.0dev2"
File without changes
File without changes
File without changes
File without changes