-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Protocol Information / Decoding of Bus info #11
Comments
Hi, Thanks for your confirmation on the OEM branding! Information on these things is really scarce. So the protocol effectively timeshares between the controller and the sensors/fans. Strictly seen this it not necessary, since the fan will remember its speed until it is powered off. There is a known issue in my code with multiple sensors in one zone. Unfortunately I broke my second sensor so I can't really investigate & solve. I never fully reverse engineered the checksum protocol. It is a super simple sum, but there is a weird thing when there is a zero byte (since the checksum would not change if you only have I might do more posts, since it's been a while since I did the original reverse engineering. (And update the README with more info) If you go back more in history, you'll find more of the scripts that I used to check my understanding of the protocol while reverse engineering. This test contains my understanding of the protocol on a packet level. |
Thanks a lot. I'll take a look at the code and do some more analysis on the data. |
I didn't have too much time yet to work more on it. But here's some packet data from my getair system. I think these are the controller packets: Fan Level = 25% Fan Level = 50% Fan Level = 75% Fan Level = 100% I've omitted any response packets in between. But you can clearly see the looping over 4 zones. It's very weird that i only see this high values (in the sensor responses as wel). So my guess is that they apply some transformation to their packet data. Probably to make the different oem partners devices incompatible to each other (They don't want you to use a Kermi controller in a Viesmann system). |
Thanks for the dump! |
ok... you were right. i was fooled by seeing the 0x55 being the correct preamble when inverting the polarity produces the same result :D |
def calculate_checksum(packet): this checksum seems to work for me for every packet i've seen so far. the rest of the protocol seems fairly identical. i'll still have to try switching the various settings on the controller but most looks good. with the 0x96 & 0x97 commands (i can see both with identical payload) i assume those are maybe an older hardware revision / protocol version? i can also see different packets on the bus that loop just like the other controller packets. no idea what those are. those look like they are polling over some devices as well, but not really as straight forward as the others. maybe device/setting states to display on other controllers on the bus? |
Interesting! I had offset 0x57 (I don't remember why I chose that value). The rest of the calculation is pretty much the same. |
i think the difference is the bitwise NOT (~total) that i don't see in your checksum. this might be what made you see the weird behaviour around some 0's in the sum. i can see & read the sensor values just fine. they match the protocol you implemented :) Do you know why the fans speeds for one zone always differ? Like 25% is one fan 25 and the othe 27, For 50% it's 44 & 47, 75% is 60 & 78 and 100% 93 & 99. Maybe the fans transport less volume running in one direction than the other and they compensate a bit for that? |
When I have time, I'll update the checksumming code. (PRs are welcome if you would have time too ;) ) That's good news! My guess is as good as yours, but I'm convinced that's the reason indeed. They probably ran some tests in a lab and hardcoded the values afterwards. I don't think I've implemented this actually. |
Hi,
first of all thanks very much for sharing your work on this. I own some getair smartfans and this was pretty much the only reference i could find that gives some details into the protocol used.
I agree that the getair smartfan seems to be the oem vendor used by all the mentioned ones (i ordered pollen filters from getair and got kermi x-well branded ones :D ).
But I'm not sure if they are all based on the same hardware revision since mine seem to not match the protocol you decoded.
Can you share some more information on how you worked it out?
I've sniffed some data on my rs485 bus and see a different preamble (0x00, 0x55, 0x59) and then what seems to be different packet types or a mix of packet type & identifier next (either 0x69, 0x67, 0x6b, 0xd1, 0xd3). these packets usually have a static fixed length but i cannot find any field / or part of it that would indicate this length.
So looking at the packet data i'm guessing in my case it's more like "$PREAMBLE $TYPE/$IDENT $DATA $XOR/CHECKSUM".
Also there's quite a bit of traffic on the bus (no big packets, but consistent small ones - like heartbeats?) which i did not expect.
So i thought i would ask if you could elaborate a bit more on your understading of the protocol you reverse engineered. Even if the details changed between hardware or oem partner i don't think they will be totally different
The text was updated successfully, but these errors were encountered: