Closed Ierlandfan closed 3 years ago
Thanks for this. Is quite useful but the main issue is what do the fields mean?
Like, if a number needs to be less than 200 (0x00-0xC8, or 0xFE/FF), then it's almost certainly a percentage...
But of what? Fan Speed, Humidity, Other?
Do you have a link to this very exciting VB code?
I decompiled their service tool so if there's no problem with that (try ILspy) you can find it here: https://www.ithodaalderop.nl/nl-NL/professional/servicetool The database passwords are not hard to find
I am sorry - I will need more hints that that.
Some values es are references to one or more databases and subtables. There are more struc references. If you could provide the code for this struct, I will lookup their meaning and add struct code for others, I also have the command stru t and settings structs
If you could provide the code for this struct
I am not 100% sure what you mean - this is what I have so far, incorporating your bit, above:
assert msg.len == 29, f"expected length 29, not {msg.len}" # usu: I CTL-->CTL
assert payload[2:4] in ("00", "EF"), payload[2:4]
assert payload[4:6] in ("00", "40"), payload[4:6]
assert payload[6:10] in ("07D0", "7FFF"), payload[6:10]
assert payload[10:12] == "EF" or int(payload[10:12], 16) <= 100, payload[10:12]
assert payload[12:14] == "EF", payload[12:14]
assert payload[14:18] == "7FFF", payload[14:18]
assert payload[18:22] == "7FFF", payload[18:22]
assert payload[22:26] == "7FFF", payload[22:26]
assert payload[26:30] == "7FFF", payload[26:30]
assert payload[30:34] in ("0002", "F000", "F800", "F808", "7FFF"), payload[30:34]
assert payload[34:36] == "EF", payload[34:36]
assert payload[36:38] == "EF" or int(payload[36:38], 16) <= 200, payload[36:38]
assert payload[38:40] in ("EF", "FF") or int(payload[38:40], 16) <= 200, payload[38:40]
assert payload[40:42] in ("00", "EF", "FF"), payload[40:42]
# assert payload[42:46] == "0000", payload[42:46]
assert payload[46:48] in ("00", "EF"), payload[46:48]
assert payload[48:50] == "EF", payload[48:50]
assert payload[50:54] == "7FFF" , payload[50:54]
assert payload[54:58] == "7FFF", payload[54:58]
return {
"_unknown_00": _percent(payload[2:4]),
"unknown_12c8": _percent(payload[4:6]), # NOTE: 12C8/payload[4:6]
"unknown_1298": _temp(payload[6:10]), # NOTE: 1298/payload[2:6]
"relative_humidity": _percent(payload[10:12], precision=1),
"_unknown_04": _percent(payload[12:14]),
"_unknown_05": _double(payload[14:18]),
"_unknown_06": _double(payload[18:22]),
"_unknown_07": _double(payload[22:26], factor=100),
"_unknown_08": _double(payload[26:30]),
"_unknown_0x": _double(payload[30:34]),
"_unknown_09": _percent(payload[34:36]),
"_unknown_10": payload[36:38], # TODO: & 0x1F ?
FanSwitch.FAN_RATE: _percent(payload[38:40]), # NOTE: 31D9/payload[4:6]
"_unknown_12": _percent(payload[40:42]),
FanSwitch.BOOST_TIMER: _double(payload[42:46]), # NOTE: 22F3/payload[2:6]
"_unknown_14": _percent(payload[46:48]),
"_unknown_15": _percent(payload[48:50]),
"_unknown_16": _double(payload[50:54], factor=100),
"_unknown_17": _double(payload[54:58], factor=100),
}
You can see, I currently have only:
For most values I have ever seen either EF
or 7FFF
- the equivalent of N/A, None or null.
Note the indexes are different; mine = (yours * 2) + 2
Traceback (most recent call last):
File "/home/brakero1/ramses_rf/ramses_rf/message.py", line 402, in is_valid
self._payload = payload_parser(self.raw_payload, self)
File "/home/brakero1/ramses_rf/ramses_rf/parsers.py", line 264, in wrapper
result = func(*args, **kwargs)
File "/home/brakero1/ramses_rf/ramses_rf/parsers.py", line 1629, in parser_31da
"_unknown_00": _percent(payload[2:4]),
File "/home/brakero1/ramses_rf/ramses_rf/parsers.py", line 322, in _percent
assert int(value, 16) <= 200, "max value should be C8"
AssertionError: max value should be C8
Here are the values they represent:
AirQuality (%) AirQbase (...) CO2level (ppm) Indoorhumidity (%) Outdoorhumidity (%) Exhausttemperature (degrees C) SupplyTemperature (degrees C) IndoorTemperature (degrees C) OutdoorTemperature (degrees C) SpeedCap (....) BypassPos (%) FanInfo * ExhFanSpeed (%) InFanSpeed (%) RemainingTime (minutes) PostHeat (%) PreHeat (%) InFlow liter/second ExhaustFlow liter/second
Now trying to figure out what the 31D9 messages are that are sent after an 31DA.
I have pushed to master.
You could look for 22F1, 22F3, 3120, 31D9, 31E0, anything starting 12xx
Hi, can you help me with the following:
I found a structure (Originally it's visual basic) for the 31DA type: In this case it's from Itho Daalderop .
Structure is:
Can we add this to the parser?