Skip to content

Instantly share code, notes, and snippets.

@laz-
Created August 16, 2022 04:34
Show Gist options
  • Save laz-/a507af756e13e64ed3aaceb236b5ad49 to your computer and use it in GitHub Desktop.
Save laz-/a507af756e13e64ed3aaceb236b5ad49 to your computer and use it in GitHub Desktop.
bestin rs485 comms checksum function
#!/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