Hoe wordt checksum van protocol berekend?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • WackoH
  • Registratie: November 2012
  • Laatst online: 04-07 10:41
Hallo
Ik wil graag achterhalen hoe de checksum van communicatie tussen een warmtepomp en de controle unit wordt berekend.
Doel is om de communicatie aan te passen zodat de warmtepomp beter aan te sturen is terwijl de overige functionaliteit behouden blijft.

Het gaat om de communicatie tussen een Chofu lucht water warmtepomp, en een ‘control box’. Zie hier voor meer info en wat ik tot nu toe heb uitgepluisd. Deze vraag gaat puur over het protocol, en in het bijzonder hoe de checksum in de data communicatie wordt berekend. Vandaar een apart topic zodat hopelijk een bredere groep wordt bereikt.

De opzet van het protocol lijkt op RFC 916: Reliable Asynchronous Transfer Protocol (RATP) wat terug gaat tot tenminste 1984(!). Hierin wordt ook gesproken over 2-byte (octets) 16 bit checksum over de data. De manier waarop de checksum daar wordt bepaald lijkt niet te werken: (The unsigned sum of the 16-bit words of the data portion of the packet is formed. Any overflow is added into the lowest order bit. This sum does not include the header portion of the packet.)

De opbouw van de communicatie is als volgt:
Byte 1: Indentificatie
Byte 2: Berichtnummer
Byte 3: Lengte van het bericht incl. checksum bytes
Laatste 2 bytes zijn vermoedelijk de checksum

De control box stuurt 4 afzonderlijke berichten die steeds met ‘25’ (decimaal) beginnen. Deze worden direct door warmtepomp (ter controle?!) weer teruggestuurd.
Aansluitend stuurt de warmtepomp berichten die met ‘145’ (decimaal) beginnen, tenzij een van de laatste twee bytes van het control box bericht anders is. Vandaar dat ik denk dat deze twee bytes de checksum vormen.

Eenvoudige zaken als de modules 256 van de som en XOR heb ik al bekeken, maar die lijken niet te werken.

Hieronder een overzicht van data (in decimaal) van controle unit naar warmtepomp zoals ik die heb opgevangen. Het 2de byte is het volgnummer en alleen het bericht 2 varieert. Hierin wordt aan/uit en vermogen waarop de warmtepomp moet draaien, doorgegeven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
25  0   8   0   0   0   217 181

25  1   12  0   0   0   0   0   0   0   170 53

25  2   8   0   0   0   157 54
25  2   8   1   1   0   153 55
25  2   8   1   2   0   204 100
25  2   8   1   3   0   255 85
25  2   8   1   4   0   102 194
25  2   8   1   5   0   85  243
25  2   8   1   6   0   0   160
25  2   8   1   7   0   51  145
25  2   8   1   8   0   35  175
25  2   8   1   9   0   16  158
25  2   8   1   10  0   69  205

25  3   8   178 2   0   193 154

Hieronder voorbeelden van de data die de warmtepomp terugstuurt. Deze zal voornamelijk temperaturen bevatten:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
145 1   13  80  0   0   0   0   0   138 63  25  44
145 1   13  80  0   0   0   0   0   138 82  164 39

145 0   12  13  7   4   47  90  206 225 230 223 0

145 2   18  4   1   238 0   80  0   1   0   2   0   0   38  216 176 238
145 2   18  14  1   243 0   75  0   1   0   2   0   0   38  216 24  138
145 2   18  46  1   15  1   39  0   0   16  81  81  46  134 0   70  37
145 2   18  53  1   4   1   75  0   1   0   2   0   0   38  216 147 105
145 2   18  55  1   16  1   39  0   1   0   2   0   0   38  216 80  224
145 2   18  63  1   17  1   40  0   0   18  81  78  52  135 0   120 123
145 2   18  64  1   14  1   38  0   0   19  80  77  59  133 0   75  34
145 2   18  66  1   10  1   75  0   1   0   2   0   0   38  216 107 23
145 2   18  72  1   14  1   75  0   0   18  87  84  60  134 0   252 9
145 2   18  75  1   17  1   73  0   1   0   2   0   0   38  216 108 0
145 2   18  76  1   19  1   75  0   1   0   2   0   0   38  216 192 220
145 2   18  126 1   85  1   75  0   0   22  89  88  59  150 0   131 250
145 2   18  155 1   100 1   74  0   1   0   2   0   0   38  216 138 28
145 2   18  159 1   104 1   73  0   0   23  89  86  60  154 0   49  38
145 2   18  227 0   227 0   84  0   1   0   2   0   0   38  216 12  228

145 3   20  20  53  41  100 45  0   11  6   2   0   24  0   0   0   0   132 59
145 3   20  45  65  93  105 45  0   21  14  2   0   24  0   0   0   0   28  197
145 3   20  57  81  156 75  21  0   27  19  2   0   24  0   0   0   0   136 61
145 3   20  120 81  168 151 21  0   83  53  2   0   24  0   0   0   0   233 241
145 3   20  117 81  167 142 45  0   80  53  2   0   24  0   0   0   0   101 168
145 3   20  74  81  159 87  45  0   39  28  2   0   24  0   0   0   0   185 31
145 3   20  114 82  166 145 21  0   79  51  2   0   24  0   0   0   0   231 228
145 3   20  120 82  168 146 21  0   85  56  2   0   24  0   0   0   0   102 31
145 3   20  120 82  168 151 21  0   83  55  2   0   24  0   0   0   0   235 244
145 3   20  120 82  168 151 21  0   84  54  2   0   24  0   0   0   0   29  140
145 3   20  120 82  168 146 21  0   91  66  2   0   24  0   0   0   0   52  24
145 3   20  110 82  166 140 21  0   81  58  2   0   24  0   0   0   0   78  64
145 3   20  74  82  159 88  21  0   46  32  2   0   24  0   0   0   0   239 33
145 3   20  103 82  164 130 45  0   65  42  2   0   24  0   0   0   0   110 42
145 3   20  92  82  162 113 45  0   51  35  2   0   24  0   0   0   0   233 132
145 3   20  92  83  162 113 45  0   51  35  2   0   24  0   0   0   0   146 229

Wie kan deze code breken?

Alle reacties


Acties:
  • +2 Henk 'm!

  • WackoH
  • Registratie: November 2012
  • Laatst online: 04-07 10:41
Decheckusm blijkt een CRC-CCITT (0xFFFF) te zijn.
Zie hier.
Dank aan @maanlander69 !