Skip to content

Commit ba7a850

Browse files
Merge pull request #596 from jmccrohan/new_parser
Add new raw parser
2 parents 8ffb55f + 344fa15 commit ba7a850

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

custom_components/solarman/inverter_definitions/solis_hybrid.yaml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# https://www.scss.tcd.ie/Brian.Coghlan/Elios4you/RS485_MODBUS-Hybrid-BACoghlan-201811228-1854.pdf
55

66
requests:
7-
- start: 33029
7+
- start: 33022
88
end: 33095
99
mb_functioncode: 0x04
1010
- start: 33116
@@ -320,6 +320,15 @@ parameters:
320320
registers: [33093]
321321
icon: 'mdi:thermometer'
322322

323+
- name: "Inverter Datetime Array"
324+
class: ""
325+
state_class: ""
326+
uom: ""
327+
scale: 1
328+
rule: 10
329+
registers: [33022,33023,33024,33025,33026,33027]
330+
icon: 'mdi:calendar-clock'
331+
323332
# Sensors below are outside of modbus request ranges.
324333
# If enabling, ensure to amend the request start register.
325334
#

custom_components/solarman/parser.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ def try_parse_field (self, rawData, definition, start, length):
3636
self.try_parse_datetime(rawData,definition, start, length)
3737
elif rule == 9:
3838
self.try_parse_time(rawData,definition, start, length)
39+
elif rule == 10:
40+
self.try_parse_raw(rawData,definition, start, length)
3941
return
4042

4143
def do_validate(self, title, value, rule):
@@ -172,6 +174,22 @@ def try_parse_bits (self, rawData, definition, start, length):
172174
if found:
173175
self.result[title] = value
174176
return
177+
178+
def try_parse_raw (self, rawData, definition, start, length):
179+
title = definition['name']
180+
found = True
181+
value = []
182+
for r in definition['registers']:
183+
index = r - start # get the decimal value of the register'
184+
if (index >= 0) and (index < length):
185+
temp = rawData[index]
186+
value.append((temp))
187+
else:
188+
found = False
189+
190+
if found:
191+
self.result[title] = value
192+
return
175193

176194
def try_parse_version (self, rawData, definition, start, length):
177195
title = definition['name']

customization.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,5 @@ The `rule` field specifies how to interpret the binary data contained in the reg
124124
| 7 | Version | |
125125
| 8 | Date Time | |
126126
| 9 | Time | Time value as string<ul><li>Example 1: Register Value 2200 => Time Value: 22:00</li><li>Example 2: Register value: 400 => 04:00</li></ul>|
127+
| 10 | Raw | Similar to Bit field without hex conversion. Useful where you need to read multiple registers atomically |
127128

0 commit comments

Comments
 (0)