boneIO 0.8.0.dev3__tar.gz → 0.8.0.dev5__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.
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/PKG-INFO +1 -1
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/bonecli.py +6 -6
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/const.py +1 -2
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/cwt.json +4 -1
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/modbuscli.py +14 -6
- boneIO-0.8.0.dev5/boneio/modbus/r4dcb08.json +91 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/oled.py +18 -6
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/schema/schema.yaml +1 -0
- boneIO-0.8.0.dev5/boneio/version.py +2 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/pyproject.toml +1 -1
- boneIO-0.8.0.dev3/boneio/modbus/r4dcb08.json +0 -76
- boneIO-0.8.0.dev3/boneio/version.py +0 -2
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/LICENSE +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/README.md +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/__init__.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/cover.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/example_config/__init__.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/example_config/adc.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/example_config/binary_sensor.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/example_config/config.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/example_config/cover.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/example_config/event.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/example_config/event_all.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/example_config/led32x4A.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/example_config/output24x16A.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/example_config/output24x16A_v0.3.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/example_config/output32x5A.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/fonts/danube__.ttf +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/group/__init__.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/group/output.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/__init__.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/async_updater.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/click_timer.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/config.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/events.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/exceptions.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/filter.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/gpio.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/ha_discovery.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/loader.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/logger.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/mqtt.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/oled.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/onewire/W1ThermSensor.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/onewire/__init__.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/onewire/ds2482.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/onewire/onewire.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/pcf8575.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/queue.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/sensor/ina_219_smbus.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/state_manager.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/stats.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/timeperiod.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/util.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/helper/yaml_util.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/input/__init__.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/input/gpio.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/input/gpio_new.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/manager.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/__init__.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/client.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/dts1964_3f.json +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/orno-or-we-517.json +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/pt100.json +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/sdm120.json +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/sdm630.json +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/sensor.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/socomec_e23.json +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/sofar.json +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/modbus/utils.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/mqtt_client.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/relay/__init__.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/relay/basic.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/relay/gpio.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/relay/mcp.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/relay/pca.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/relay/pcf.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/runner.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/schema/actions.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/schema/actions_sensor.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/schema/actions_switch.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/schema/filters.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/schema/filters_adc.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/schema/id.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/schema/temp_unit.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/schema/update_interval.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/sensor/__init__.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/sensor/adc.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/sensor/gpio.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/sensor/gpio_new.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/sensor/ina219.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/sensor/temp/__init__.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/sensor/temp/dallas.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/sensor/temp/lm75.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/boneio/sensor/temp/mcp9808.py +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/tests/32_5_config.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/tests/bandit.yaml +0 -0
- {boneIO-0.8.0.dev3 → boneIO-0.8.0.dev5}/tests/relay_32_5.py +0 -0
|
@@ -113,7 +113,7 @@ def get_arguments() -> argparse.Namespace:
|
|
|
113
113
|
modbus_parser.add_argument(
|
|
114
114
|
"--bytesize",
|
|
115
115
|
type=int,
|
|
116
|
-
required=
|
|
116
|
+
required=False,
|
|
117
117
|
default=8,
|
|
118
118
|
help="Bytesize",
|
|
119
119
|
)
|
|
@@ -121,7 +121,7 @@ def get_arguments() -> argparse.Namespace:
|
|
|
121
121
|
modbus_parser.add_argument(
|
|
122
122
|
"--stopbits",
|
|
123
123
|
type=int,
|
|
124
|
-
required=
|
|
124
|
+
required=False,
|
|
125
125
|
default=1,
|
|
126
126
|
help="stopbits",
|
|
127
127
|
)
|
|
@@ -131,7 +131,7 @@ def get_arguments() -> argparse.Namespace:
|
|
|
131
131
|
type=str,
|
|
132
132
|
choices=["P", "E", "N"],
|
|
133
133
|
default="N",
|
|
134
|
-
required=
|
|
134
|
+
required=False,
|
|
135
135
|
help="Parity",
|
|
136
136
|
)
|
|
137
137
|
|
|
@@ -142,7 +142,7 @@ def get_arguments() -> argparse.Namespace:
|
|
|
142
142
|
set_modbus_parser.add_argument(
|
|
143
143
|
"--device",
|
|
144
144
|
type=str,
|
|
145
|
-
choices=["cwt"],
|
|
145
|
+
choices=["cwt", "r4dcb08"],
|
|
146
146
|
help="Choose device to set modbus address/baudrate",
|
|
147
147
|
required=True,
|
|
148
148
|
)
|
|
@@ -156,8 +156,8 @@ def get_arguments() -> argparse.Namespace:
|
|
|
156
156
|
set_modbus_parser_group.add_argument(
|
|
157
157
|
"--new-baudrate",
|
|
158
158
|
type=int,
|
|
159
|
-
choices=[2400, 4800, 9600, 19200],
|
|
160
|
-
help="Choose new baudrate to set",
|
|
159
|
+
choices=[1200, 2400, 4800, 9600, 19200],
|
|
160
|
+
help="Choose new baudrate to set. CWT doesn't work on 1200.",
|
|
161
161
|
)
|
|
162
162
|
|
|
163
163
|
get_modbus_parser = modbus_sub_parser.add_parser("get")
|
|
@@ -9,7 +9,7 @@ from .utils import REGISTERS_BASE, allowed_operations
|
|
|
9
9
|
_LOGGER = logging.getLogger(__name__)
|
|
10
10
|
SET_BASE = "set_base"
|
|
11
11
|
SET_ADDRESS = "set_address_address"
|
|
12
|
-
SET_BAUDRATE = "
|
|
12
|
+
SET_BAUDRATE = "set_baudrate"
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class ModbusHelper:
|
|
@@ -76,20 +76,23 @@ class ModbusHelper:
|
|
|
76
76
|
return False
|
|
77
77
|
return True
|
|
78
78
|
|
|
79
|
-
def set_connection_speed(self, new_baudrate: int):
|
|
80
|
-
|
|
79
|
+
def set_connection_speed(self, new_baudrate: int) -> int:
|
|
80
|
+
baudrate_model = self._model[SET_BAUDRATE]
|
|
81
|
+
ind = baudrate_model["possible_baudrates"].index(new_baudrate)
|
|
81
82
|
if ind:
|
|
82
83
|
result = self._modbus.client.write_register(
|
|
83
|
-
address=
|
|
84
|
+
address=baudrate_model["address"],
|
|
84
85
|
value=ind,
|
|
85
86
|
unit=self._device_address,
|
|
86
87
|
)
|
|
87
88
|
if result.isError():
|
|
88
89
|
_LOGGER.error("Operation failed.")
|
|
90
|
+
return 1
|
|
89
91
|
else:
|
|
90
92
|
_LOGGER.info(
|
|
91
93
|
"Operation succeeded. Now restart device by disconnecting it."
|
|
92
94
|
)
|
|
95
|
+
return 0
|
|
93
96
|
|
|
94
97
|
def set_new_address(self, new_address: int):
|
|
95
98
|
if 0 < new_address < 253:
|
|
@@ -128,6 +131,9 @@ async def async_run_modbus_set(
|
|
|
128
131
|
if not first_reg_base:
|
|
129
132
|
return False
|
|
130
133
|
first_record = first_reg_base.get(REGISTERS, [])[0]
|
|
134
|
+
_LOGGER.debug(
|
|
135
|
+
f"Connecting with params uart: {uart}, baudrate: {baudrate}, stopbits: {stopbits}, bytesize: {bytesize}, parity: {parity}."
|
|
136
|
+
)
|
|
131
137
|
modbus_helper = ModbusHelper(
|
|
132
138
|
device=device,
|
|
133
139
|
uart=uart,
|
|
@@ -144,8 +150,7 @@ async def async_run_modbus_set(
|
|
|
144
150
|
_LOGGER.error("Can't connect with sensor. Exiting")
|
|
145
151
|
return 1
|
|
146
152
|
if new_baudrate:
|
|
147
|
-
modbus_helper.set_connection_speed(new_baudrate=new_baudrate)
|
|
148
|
-
return 0
|
|
153
|
+
return modbus_helper.set_connection_speed(new_baudrate=new_baudrate)
|
|
149
154
|
if new_address:
|
|
150
155
|
modbus_helper.set_new_address(new_address=new_address)
|
|
151
156
|
return 0
|
|
@@ -164,6 +169,9 @@ async def async_run_modbus_get(
|
|
|
164
169
|
parity: str = "N",
|
|
165
170
|
):
|
|
166
171
|
"""Run Modbus Get Function."""
|
|
172
|
+
_LOGGER.debug(
|
|
173
|
+
f"Connecting with params uart: {uart}, baudrate: {baudrate}, stopbits: {stopbits}, bytesize: {bytesize}, parity: {parity}."
|
|
174
|
+
)
|
|
167
175
|
_modbus = Modbus(
|
|
168
176
|
uart=UARTS[uart],
|
|
169
177
|
baudrate=baudrate,
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"model": "R4DCB08",
|
|
3
|
+
"set_base": {
|
|
4
|
+
"set_address_address": 254,
|
|
5
|
+
"set_baudrate": {
|
|
6
|
+
"address": 255,
|
|
7
|
+
"possible_baudrates": [1200, 2400, 4800, 9600, 19200]
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
"registers_base": [
|
|
11
|
+
{
|
|
12
|
+
"base": 0,
|
|
13
|
+
"length": 16,
|
|
14
|
+
"register_type": "holding",
|
|
15
|
+
"registers": [
|
|
16
|
+
{
|
|
17
|
+
"name": "Temperature 1",
|
|
18
|
+
"address": 0,
|
|
19
|
+
"unit_of_measurement": "°C",
|
|
20
|
+
"state_class": "measurement",
|
|
21
|
+
"device_class": "temperature",
|
|
22
|
+
"value_type": "S_WORD",
|
|
23
|
+
"filters": [{ "multiply": 0.1 }]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "Temperature 2",
|
|
27
|
+
"address": 1,
|
|
28
|
+
"unit_of_measurement": "°C",
|
|
29
|
+
"state_class": "measurement",
|
|
30
|
+
"device_class": "temperature",
|
|
31
|
+
"value_type": "S_WORD",
|
|
32
|
+
"filters": [{ "multiply": 0.1 }]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "Temperature 3",
|
|
36
|
+
"address": 2,
|
|
37
|
+
"unit_of_measurement": "°C",
|
|
38
|
+
"state_class": "measurement",
|
|
39
|
+
"device_class": "temperature",
|
|
40
|
+
"value_type": "S_WORD",
|
|
41
|
+
"filters": [{ "multiply": 0.1 }]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "Temperature 4",
|
|
45
|
+
"address": 3,
|
|
46
|
+
"unit_of_measurement": "°C",
|
|
47
|
+
"state_class": "measurement",
|
|
48
|
+
"device_class": "temperature",
|
|
49
|
+
"value_type": "S_WORD",
|
|
50
|
+
"filters": [{ "multiply": 0.1 }]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "Temperature 5",
|
|
54
|
+
"address": 4,
|
|
55
|
+
"unit_of_measurement": "°C",
|
|
56
|
+
"state_class": "measurement",
|
|
57
|
+
"device_class": "temperature",
|
|
58
|
+
"value_type": "S_WORD",
|
|
59
|
+
"filters": [{ "multiply": 0.1 }]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "Temperature 6",
|
|
63
|
+
"address": 5,
|
|
64
|
+
"unit_of_measurement": "°C",
|
|
65
|
+
"state_class": "measurement",
|
|
66
|
+
"device_class": "temperature",
|
|
67
|
+
"value_type": "S_WORD",
|
|
68
|
+
"filters": [{ "multiply": 0.1 }]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "Temperature 7",
|
|
72
|
+
"address": 6,
|
|
73
|
+
"unit_of_measurement": "°C",
|
|
74
|
+
"state_class": "measurement",
|
|
75
|
+
"device_class": "temperature",
|
|
76
|
+
"value_type": "S_WORD",
|
|
77
|
+
"filters": [{ "multiply": 0.1 }]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "Temperature 8",
|
|
81
|
+
"address": 7,
|
|
82
|
+
"unit_of_measurement": "°C",
|
|
83
|
+
"state_class": "measurement",
|
|
84
|
+
"device_class": "temperature",
|
|
85
|
+
"value_type": "S_WORD",
|
|
86
|
+
"filters": [{ "multiply": 0.1 }]
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
@@ -26,8 +26,7 @@ fonts = {
|
|
|
26
26
|
"big": make_font("DejaVuSans.ttf", 12),
|
|
27
27
|
"small": make_font("DejaVuSans.ttf", 9),
|
|
28
28
|
"extraSmall": make_font("DejaVuSans.ttf", 7),
|
|
29
|
-
"danube": make_font("danube__.ttf", 15, local=True)
|
|
30
|
-
|
|
29
|
+
"danube": make_font("danube__.ttf", 15, local=True),
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
# screen_order = [UPTIME, NETWORK, CPU, DISK, MEMORY, SWAP]
|
|
@@ -96,7 +95,9 @@ class Oled:
|
|
|
96
95
|
|
|
97
96
|
def _sleeptime(self):
|
|
98
97
|
with canvas(self._device) as draw:
|
|
99
|
-
draw.rectangle(
|
|
98
|
+
draw.rectangle(
|
|
99
|
+
self._device.bounding_box, outline="black", fill="black"
|
|
100
|
+
)
|
|
100
101
|
self._sleep = True
|
|
101
102
|
|
|
102
103
|
def _draw_uptime(self, data: dict, draw: ImageDraw) -> None:
|
|
@@ -116,7 +117,12 @@ class Oled:
|
|
|
116
117
|
def _draw_output(self, data: dict, draw: ImageDraw) -> None:
|
|
117
118
|
"Draw outputs of GPIO/MCP relays."
|
|
118
119
|
cols = cycle(OUTPUT_COLS)
|
|
119
|
-
draw.text(
|
|
120
|
+
draw.text(
|
|
121
|
+
(1, 1),
|
|
122
|
+
f"Relay {self._current_screen}",
|
|
123
|
+
font=fonts["small"],
|
|
124
|
+
fill=WHITE,
|
|
125
|
+
)
|
|
120
126
|
i = 0
|
|
121
127
|
j = next(cols)
|
|
122
128
|
for k in data:
|
|
@@ -124,7 +130,10 @@ class Oled:
|
|
|
124
130
|
j = next(cols)
|
|
125
131
|
i = 0
|
|
126
132
|
draw.text(
|
|
127
|
-
(j, OUTPUT_ROWS[i]),
|
|
133
|
+
(j, OUTPUT_ROWS[i]),
|
|
134
|
+
f"{shorten_name(k)} {data[k]}",
|
|
135
|
+
font=fonts["extraSmall"],
|
|
136
|
+
fill=WHITE,
|
|
128
137
|
)
|
|
129
138
|
i += 1
|
|
130
139
|
|
|
@@ -133,7 +142,10 @@ class Oled:
|
|
|
133
142
|
data = self._host_data.get(self._current_screen)
|
|
134
143
|
if data:
|
|
135
144
|
with canvas(self._device) as draw:
|
|
136
|
-
if
|
|
145
|
+
if (
|
|
146
|
+
self._output_groups
|
|
147
|
+
and self._current_screen in self._output_groups
|
|
148
|
+
):
|
|
137
149
|
self._draw_output(data, draw)
|
|
138
150
|
elif self._current_screen == UPTIME:
|
|
139
151
|
self._draw_uptime(data, draw)
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"model": "R4DCB08",
|
|
3
|
-
"registers_base": [
|
|
4
|
-
{
|
|
5
|
-
"base": 0,
|
|
6
|
-
"length": 16,
|
|
7
|
-
"register_type": "holding",
|
|
8
|
-
"registers": [
|
|
9
|
-
{
|
|
10
|
-
"name": "Temperature 1",
|
|
11
|
-
"address": 0,
|
|
12
|
-
"unit_of_measurement": "°C",
|
|
13
|
-
"state_class": "measurement",
|
|
14
|
-
"device_class": "temperature",
|
|
15
|
-
"return_type": "multiply0_1"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"name": "Temperature 2",
|
|
19
|
-
"address": 1,
|
|
20
|
-
"unit_of_measurement": "°C",
|
|
21
|
-
"state_class": "measurement",
|
|
22
|
-
"device_class": "temperature",
|
|
23
|
-
"return_type": "multiply0_1"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"name": "Temperature 3",
|
|
27
|
-
"address": 2,
|
|
28
|
-
"unit_of_measurement": "°C",
|
|
29
|
-
"state_class": "measurement",
|
|
30
|
-
"device_class": "temperature",
|
|
31
|
-
"return_type": "multiply0_1"
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"name": "Temperature 4",
|
|
35
|
-
"address": 3,
|
|
36
|
-
"unit_of_measurement": "°C",
|
|
37
|
-
"state_class": "measurement",
|
|
38
|
-
"device_class": "temperature",
|
|
39
|
-
"return_type": "multiply0_1"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"name": "Temperature 5",
|
|
43
|
-
"address": 4,
|
|
44
|
-
"unit_of_measurement": "°C",
|
|
45
|
-
"state_class": "measurement",
|
|
46
|
-
"device_class": "temperature",
|
|
47
|
-
"return_type": "multiply0_1"
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
"name": "Temperature 6",
|
|
51
|
-
"address": 5,
|
|
52
|
-
"unit_of_measurement": "°C",
|
|
53
|
-
"state_class": "measurement",
|
|
54
|
-
"device_class": "temperature",
|
|
55
|
-
"return_type": "multiply0_1"
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"name": "Temperature 7",
|
|
59
|
-
"address": 6,
|
|
60
|
-
"unit_of_measurement": "°C",
|
|
61
|
-
"state_class": "measurement",
|
|
62
|
-
"device_class": "temperature",
|
|
63
|
-
"return_type": "multiply0_1"
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
"name": "Temperature 8",
|
|
67
|
-
"address": 7,
|
|
68
|
-
"unit_of_measurement": "°C",
|
|
69
|
-
"state_class": "measurement",
|
|
70
|
-
"device_class": "temperature",
|
|
71
|
-
"return_type": "multiply0_1"
|
|
72
|
-
}
|
|
73
|
-
]
|
|
74
|
-
}
|
|
75
|
-
]
|
|
76
|
-
}
|
|
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
|
|
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
|