Created
August 16, 2022 04:34
-
-
Save laz-/a507af756e13e64ed3aaceb236b5ad49 to your computer and use it in GitHub Desktop.
bestin rs485 comms checksum function
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
TESTDATA = [ | |
# https://cafe.naver.com/stsmarthome?iframe_url_utf8=%2FArticleRead.nhn%253Fclubid%3D29087792%2526page%3D5%2526inCafeSearch%3Dtrue%2526searchBy%3D0%2526query%3Dbestin%2526includeAll%3D%2526exclude%3D%2526include%3D%2526exact%3D%2526searchdate%3Dall%2526media%3D0%2526sortBy%3Ddate%2526articleid%3D11475%2526referrerAllArticles%3Dtrue | |
"02 11 00 5F 00 00 00 00 00 50", | |
"02 11 00 5F 00 00 00 00 00 50", | |
"02 11 80 5F 80 C0 00 00 00 90", | |
"02 31 00 60 00 00 00 00 00 5B", | |
"02 31 80 60 80 01 00 00 00 5A", | |
"02 41 00 61 00 00 00 00 00 2A", | |
"02 41 80 61 80 00 EE 00 00 CC", | |
"02 61 00 62 00 00 00 00 00 0D", | |
"02 61 80 62 80 00 01 00 00 0E", | |
"02 B2 00 64 00 00 00 00 00 DC", | |
"02 11 00 65 00 00 00 00 00 76", | |
"02 11 80 65 80 C0 00 00 00 B6", | |
"02 31 00 66 00 00 00 00 00 59", | |
"02 31 80 66 80 01 00 00 00 58", | |
"02 41 00 67 00 00 00 00 00 28", | |
"02 41 80 67 80 00 EE 00 00 CE", | |
"02 61 00 68 00 00 00 00 00 13", | |
"02 61 80 68 80 00 01 00 00 14", | |
"02 B3 00 6A 00 00 00 00 00 DF", | |
"02 11 00 6B 00 00 00 00 00 84", | |
"02 11 80 6B 80 C0 00 00 00 44", | |
"02 31 00 6C 00 00 00 00 00 5F", | |
"02 31 80 6C 80 01 00 00 00 5E", | |
"02 41 00 6D 00 00 00 00 00 2E", | |
"02 41 80 6D 80 00 EE 00 00 C8", | |
"02 61 00 6E 00 00 00 00 00 11", | |
"02 61 80 6E 80 00 01 00 00 12", | |
"02 B4 00 70 00 00 00 00 00 CE", | |
"02 11 00 71 00 00 00 00 00 6A", | |
"02 11 80 71 80 C0 00 00 00 AA", | |
"02 31 00 72 00 00 00 00 00 4D", | |
"02 31 80 72 80 01 00 00 00 4C", | |
"02 41 00 73 00 00 00 00 00 3C", | |
# from https://cafe.naver.com/stsmarthome?iframe_url_utf8=%2FArticleRead.nhn%253Fclubid%3D29087792%2526page%3D3%2526inCafeSearch%3Dtrue%2526searchBy%3D0%2526query%3Dbestin%2526includeAll%3D%2526exclude%3D%2526include%3D%2526exact%3D%2526searchdate%3Dall%2526media%3D0%2526sortBy%3Ddate%2526articleid%3D30641%2526referrerAllArticles%3Dtrue | |
"02 61 06 11 A4 D8", | |
"02 61 23 91 A4 81 0A 64 12 DB FF FF 00 F6 FF 00 00 F5 0B B0 08 E1 FF FF FF FF FF FF FF FF FF FF FF FF F6", | |
"02 61 06 11 A7 D5", | |
"02 61 23 91 A7 81 0A 64 12 DB FF FF 00 F6 FF 00 00 F5 0B AF 08 E0 FF FF FF FF FF FF FF FF FF FF FF FF 0F", | |
"02 61 06 11 AA DA", | |
"02 61 23 91 AA 81 0A 64 12 DB FF FF 00 F6 FF 00 00 F5 0B B0 08 E0 FF FF FF FF FF FF FF FF FF FF FF FF FF", | |
"02 60 1E 21 AD 01 50 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 18", | |
"02 60 1E 21 AE 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 31", | |
"02 60 1E 21 AF 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 2A", | |
"02 60 1E 21 B0 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 2F", | |
"02 60 1E 21 B1 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 28", | |
"02 60 1E 21 B2 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1D", | |
"02 60 1E 21 B3 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 56", | |
"02 60 1E 21 B4 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 5B", | |
"02 60 1E 21 B5 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 24", | |
"02 60 1E 21 B6 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 29", | |
"02 60 1E 21 B7 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 22", | |
"02 60 1E 21 B8 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 27", | |
"02 60 1E 21 B9 01 5A 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1A", | |
"02 60 1E 21 BA 01 5A 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0B", | |
"02 60 1E 21 BB 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0E", | |
"02 60 1E 21 BC 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 13", | |
"02 60 1E 21 BD 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1C", | |
"02 60 1E 21 BE 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 21", | |
"02 60 1E 21 BF 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 1A", | |
"02 60 1E 21 C0 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 5F", | |
"02 60 1E 21 C1 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 58", | |
"02 60 1E 21 C2 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 4D", | |
"02 60 1E 21 C3 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 46", | |
"02 60 1E 21 C4 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 4B", | |
"02 60 1E 21 C5 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 54", | |
"02 60 1E 21 C6 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 59", | |
"02 60 1E 21 C7 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 52", | |
"02 60 1E 21 C8 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 57", | |
"02 60 1E 21 C9 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 50", | |
"02 60 1E 21 CA 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 45", | |
"02 60 1E 21 CB 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 3E", | |
"02 60 1E 21 CC 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 43", | |
"02 60 1E 21 CD 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 4C", | |
"02 60 1E 21 CE 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 51", | |
"02 60 1E 21 CF 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 4A", | |
"02 60 1E 21 D0 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 4F", | |
"02 60 1E 21 D1 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 48", | |
"02 60 1E 21 D2 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 3D", | |
"02 60 1E 21 D3 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 76", | |
"02 60 1E 21 D4 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 7B", | |
"02 60 1E 21 D5 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 44", | |
"02 60 1E 21 D6 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 49", | |
"02 60 1E 21 D7 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 42", | |
"02 60 1E 21 D8 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 47", | |
"02 60 1E 21 D9 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 40", | |
"02 60 1E 21 DA 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 75", | |
"02 60 1E 21 DB 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 2E", | |
"02 60 1E 21 DC 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 33", | |
"02 60 1E 21 DD 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 3C", | |
"02 60 1E 21 DE 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 41", | |
"02 60 1E 21 DF 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 3A", | |
"02 60 1E 21 E0 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 7F", | |
"02 60 1E 21 E1 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 78", | |
"02 60 1E 21 E2 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 6D", | |
"02 60 1E 21 E3 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 66", | |
"02 60 1E 21 E4 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 6B", | |
"02 60 1E 21 E5 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 74", | |
"02 60 1E 21 E6 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 79", | |
"02 60 1E 21 E7 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 72", | |
"02 60 1E 21 E8 01 5A 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 49", | |
"02 60 1E 21 E9 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 70", | |
"02 60 1E 21 EA 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 65", | |
"02 60 1E 21 EB 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 5E", | |
"02 60 1E 21 EC 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 63", | |
"02 60 1E 21 ED 01 5A 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 3E", | |
"02 60 1E 21 EE 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 71", | |
"02 60 1E 21 EF 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 6A", | |
"02 60 1E 21 F0 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 6F", | |
"02 60 1E 21 F1 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 68", | |
"02 60 1E 21 F2 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 5D", | |
"02 60 1E 21 F3 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 96", | |
"02 60 1E 21 F4 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 9B", | |
"02 60 1E 21 F5 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 64", | |
"02 60 1E 21 F6 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 69", | |
"02 60 1E 21 F7 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 62", | |
"02 60 1E 21 F8 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 67", | |
"02 60 1E 21 F9 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 60", | |
"02 60 1E 21 FA 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 95", | |
"02 60 1E 21 FB 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 4E", | |
"02 60 1E 21 FC 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 53", | |
"02 60 1E 21 FD 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 5C", | |
"02 60 1E 21 FE 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 61", | |
"02 60 1E 21 FF 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 5A", | |
"02 60 1E 21 00 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 9F", | |
"02 60 1E 21 01 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 98", | |
"02 60 1E 21 02 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 8D", | |
"02 60 1E 21 03 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 86", | |
"02 60 1E 21 04 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 8B", | |
"02 60 1E 21 05 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 94", | |
"02 60 1E 21 06 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 99", | |
"02 60 1E 21 07 01 64 64 02 64 64 02 64 64 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92", | |
# random | |
"02 31 0D 01 4A 02 8F 00 00 00 00 04 FB", | |
] | |
def bestin_sum(array): | |
sum = 3 | |
for b in array: | |
sum = ((b ^ sum) + 1) & 0xff | |
return sum | |
for teststr in TESTDATA: | |
testbytes = bytes.fromhex(teststr) | |
expected = testbytes[-1] | |
calculated = bestin_sum(testbytes[:-1]) | |
# print(f"{expected:x} {calculated:x}") | |
assert(expected == calculated) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment