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:
Hieronder voorbeelden van de data die de warmtepomp terugstuurt. Deze zal voornamelijk temperaturen bevatten:
Wie kan deze code breken?
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?