boneIO 0.5.0dev2__tar.gz → 0.5.0dev3__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.
Potentially problematic release.
This version of boneIO might be problematic. Click here for more details.
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/PKG-INFO +1 -1
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/stats.py +19 -3
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/manager.py +4 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/oled.py +19 -6
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/schema/schema.yaml +12 -0
- boneIO-0.5.0.dev3/boneio/version.py +2 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/pyproject.toml +1 -1
- boneIO-0.5.0.dev2/boneio/version.py +0 -2
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/LICENSE +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/README.md +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/__init__.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/bonecli.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/const.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/cover.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/example_config/__init__.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/example_config/adc.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/example_config/config.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/example_config/cover.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/example_config/input.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/example_config/output24x16A.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/example_config/output32x5A.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/fonts/danube__.ttf +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/__init__.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/async_updater.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/config.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/events.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/exceptions.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/filter.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/gpio.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/ha_discovery.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/loader.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/logger.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/mqtt.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/oled.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/onewire/W1ThermSensor.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/onewire/__init__.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/onewire/ds2482.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/onewire/onewire.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/queue.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/state_manager.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/timeperiod.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/util.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/helper/yaml_util.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/input/__init__.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/input/gpio.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/modbus.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/mqtt_client.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/relay/__init__.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/relay/basic.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/relay/gpio.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/relay/mcp.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/runner.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/schema/actions.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/schema/actions_sensor.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/schema/actions_switch.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/schema/filters.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/schema/filters_adc.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/schema/update_interval.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/sensor/__init__.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/sensor/adc.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/sensor/gpio.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/sensor/modbus/__init__.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/sensor/modbus/sdm120.json +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/sensor/modbus/sdm630.json +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/sensor/modbus/sofar.json +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/sensor/temp/__init__.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/sensor/temp/dallas.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/sensor/temp/lm75.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/boneio/sensor/temp/mcp9808.py +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/tests/32_5_config.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/tests/bandit.yaml +0 -0
- {boneIO-0.5.0.dev2 → boneIO-0.5.0.dev3}/tests/relay_32_5.py +0 -0
|
@@ -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,
|
|
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,
|
|
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,
|
|
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.
|
|
48
|
-
|
|
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=
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|