Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Vraag


  • BramdeBruin
  • Registratie: December 2017
  • Laatst online: 26-11 16:20
Hallo allemaal,
Sinds een tijdje ben ik bezig met het uitlezen van data van onze smart-meter.. Ik heb alleen wel opgemerkt dat er vaak fouten zitten in de data dus wil ik met de checksum, die ook in het telegram zit nagaan, of het hele bericht foutloos is.

Ik gebruik Python op mijn Raspberry PI samen met PySerial en heb ook crcmod gevonden wat ik uiteindelijk wil gebruiken om de checksum te checken.

Mijn smart-meter is de AM550 van Liander. Ik heb gevonden dat ik daarvoor CRC16 moet gebruiken met polynoom 0x8005 (bron:https://www.netbeheernede...e_meter_15_a727fce1f1.pdf). Ook heb ik op een ander topic op tweakers gevonden dat de checksum van '/' tot '!' gedaan moet worden inclusief de '\r\n' die in het telegram staan. Dit was alleen wel voor DSMR 4.x dus ik weet niet zeker dat dit ook geldig is voor mijn versie (ESMR 5.0). Het is mij nog niet gelukt om de checksum van een bestand zelf te maken, om het makkelijker te maken voor mezelf doe ik dit eerst allemaal via tools op internet checken. Hieronder staat een telegram wat ik van internet af heb gehaald voor de AM-550 dus dit zou zonder fouten moeten zijn. Kan iemand met meer ervaring mij vertellen hoe ik nou uit dit telegram de goede checksum kan halen, 1F28 dus? De checksum komt trouwens door in hex. Alvast bedankt voor de hulp!

ASP: telegram_voorbeeld
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
38
/ISK5\\2M550T-1011\r\n
\r\n
1-3:0.2.8(50)\r\n
0-0:1.0.0(181106140429W)\r\n
0-0:96.1.1(4530303334303036383130353136343136)\r\n
1-0:1.8.1(003808.351*kWh)\r\n
1-0:1.8.2(002948.827*kWh)\r\n
1-0:2.8.1(001285.951*kWh)\r\n
1-0:2.8.2(002876.514*kWh)\r\n
0-0:96.14.0(0002)\r\n
1-0:1.7.0(00.000*kW)\r\n
1-0:2.7.0(00.498*kW)\r\n
0-0:96.7.21(00006)\r\n
0-0:96.7.9(00003)\r\n
1-0:99.97.0(1)(0-0:96.7.19)(180529135630S)(0000002451*s)\r\n
1-0:32.32.0(00003)\r\n
1-0:52.32.0(00002)\r\n
1-0:72.32.0(00002)\r\n
1-0:32.36.0(00001)\r\n
1-0:52.36.0(00001)\r\n
1-0:72.36.0(00001)\r\n
0-0:96.13.0()\r\n
1-0:32.7.0(236.0*V)\r\n
1-0:52.7.0(232.6*V)\r\n
1-0:72.7.0(235.1*V)\r\n
1-0:31.7.0(002*A)\r\n
1-0:51.7.0(000*A)\r\n
1-0:71.7.0(000*A)\r\n
1-0:21.7.0(00.000*kW)\r\n
1-0:41.7.0(00.033*kW)\r\n
1-0:61.7.0(00.132*kW)\r\n
1-0:22.7.0(00.676*kW)\r\n
1-0:42.7.0(00.000*kW)\r\n
1-0:62.7.0(00.000*kW)\r\n
0-1:24.1.0(003)\r\n
0-1:96.1.0(4730303339303031373030343630313137)\r\n
0-1:24.2.1(181106140010W)(01569.646*m3)\r\n
!1F28\r\n

...

Beste antwoord (via BramdeBruin op 21-10-2019 21:33)


  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 15:50
/ISK5\\2M550T-1011\r\n

Let erop dat dit (unescaped) neerkomt op /ISK5\2M550T-1011.

Over de polynoom uit een ander topic:
CodeIT schreef op donderdag 4 augustus 2016 @ 12:13:
Het algoritme wat gebruikt wordt wordt door je gequote: "polynomial: x16+x15+x2+1". Deze staat ook bekend als: CRC-16-IBM. Wel is deze geinverteerd. Dus 0xA001 gebruiken ipv 0x8005.
Een CRC16-implementatie in C#:
C#:
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
public static class Crc16
{
  const ushort polynomial = 0xA001;

  public static ushort ComputeChecksum(IEnumerable<byte> bytes)
  {
    ushort crc = 0;
    foreach (var b in bytes)
    {
      crc ^= b;
      for (var i = 8; i != 0; i--)
      {
        if ((crc & 0x0001) != 0)
        {
          crc >>= 1;
          crc ^= polynomial;
        }
        else
        {
          crc >>= 1;
        }
      }
    }
    return crc;
  }
}


Resultaat:

Afbeeldingslocatie: https://lh3.googleusercontent.com/SxdYl4YvUxES0ZUMLqW2pFGirzygslfDRoG00OSvjwOr14M7cGPi-5ibXzcVNb5Zj7ZfQs3P_z8kTjsbSsI24DmzeKq0Hh3kADZ1HWq_mEF2ROEOMgUW9Tlvp8GvAEZyD9H_CD0h9EkZz8dr3MiMSdKviamnSAA7eR1BSM7obIhwXGJnrSCENXHSMGLBlsgq2yDKarKoOWPZGKwf4xkHPM5xcPb0lYN07o07QpbgXUUcZQFXxjeAuaxeM_vRe129oU-O9HEYKiaIUCUY42oGQDSAJclYuoexjvklyHHZZjFeXNW17uJOk9uLeGsWG2eCy6PVFCuY-YS17brcAGRXgzaddlgZLnBLwUsPsXbXHJQSOnXMHOZZbKFmsP2zAkAR_IiICZqoRNBdt4Mib-Yqy8wayvcSZyEbIh7tgeBerug38WeT9jVKtYLQK_1-KCwtuh0nPlz-a-3p07SJhkczdh9ThNiPgtIpeRgKYg9xfXPlBJojRdSv-UBt1a-2nsA77-9DiUY3_brWRJvCVUHzjMJKtE4wmcw7YTh1_na4l-a_2nnghId6yF0S_ErpIM1IxFjx0rnkNP1WEWyCncn9dQg4sL_E1ejQZNvjPn1PqXnaDijm4_dr58kPHJUfRBvnFrydRhnVEzlppVsLvGns1ZsxVQucNLmoeinGuQ3-Wp0UDzPhq9_rNRSs2hIfVPqfX37EAy_2l8R_hDB7WLSo1wRtNuh87iEbX-rwS-lIkLit1wNP=w545-h885-no

Code (LINQPad):

http://share.linqpad.net/7ftd66.linq

[ Voor 37% gewijzigd door nescafe op 21-10-2019 21:31 ]

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans

Alle reacties


Acties:
  • Beste antwoord

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 15:50
/ISK5\\2M550T-1011\r\n

Let erop dat dit (unescaped) neerkomt op /ISK5\2M550T-1011.

Over de polynoom uit een ander topic:
CodeIT schreef op donderdag 4 augustus 2016 @ 12:13:
Het algoritme wat gebruikt wordt wordt door je gequote: "polynomial: x16+x15+x2+1". Deze staat ook bekend als: CRC-16-IBM. Wel is deze geinverteerd. Dus 0xA001 gebruiken ipv 0x8005.
Een CRC16-implementatie in C#:
C#:
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
public static class Crc16
{
  const ushort polynomial = 0xA001;

  public static ushort ComputeChecksum(IEnumerable<byte> bytes)
  {
    ushort crc = 0;
    foreach (var b in bytes)
    {
      crc ^= b;
      for (var i = 8; i != 0; i--)
      {
        if ((crc & 0x0001) != 0)
        {
          crc >>= 1;
          crc ^= polynomial;
        }
        else
        {
          crc >>= 1;
        }
      }
    }
    return crc;
  }
}


Resultaat:

Afbeeldingslocatie: https://lh3.googleusercontent.com/SxdYl4YvUxES0ZUMLqW2pFGirzygslfDRoG00OSvjwOr14M7cGPi-5ibXzcVNb5Zj7ZfQs3P_z8kTjsbSsI24DmzeKq0Hh3kADZ1HWq_mEF2ROEOMgUW9Tlvp8GvAEZyD9H_CD0h9EkZz8dr3MiMSdKviamnSAA7eR1BSM7obIhwXGJnrSCENXHSMGLBlsgq2yDKarKoOWPZGKwf4xkHPM5xcPb0lYN07o07QpbgXUUcZQFXxjeAuaxeM_vRe129oU-O9HEYKiaIUCUY42oGQDSAJclYuoexjvklyHHZZjFeXNW17uJOk9uLeGsWG2eCy6PVFCuY-YS17brcAGRXgzaddlgZLnBLwUsPsXbXHJQSOnXMHOZZbKFmsP2zAkAR_IiICZqoRNBdt4Mib-Yqy8wayvcSZyEbIh7tgeBerug38WeT9jVKtYLQK_1-KCwtuh0nPlz-a-3p07SJhkczdh9ThNiPgtIpeRgKYg9xfXPlBJojRdSv-UBt1a-2nsA77-9DiUY3_brWRJvCVUHzjMJKtE4wmcw7YTh1_na4l-a_2nnghId6yF0S_ErpIM1IxFjx0rnkNP1WEWyCncn9dQg4sL_E1ejQZNvjPn1PqXnaDijm4_dr58kPHJUfRBvnFrydRhnVEzlppVsLvGns1ZsxVQucNLmoeinGuQ3-Wp0UDzPhq9_rNRSs2hIfVPqfX37EAy_2l8R_hDB7WLSo1wRtNuh87iEbX-rwS-lIkLit1wNP=w545-h885-no

Code (LINQPad):

http://share.linqpad.net/7ftd66.linq

[ Voor 37% gewijzigd door nescafe op 21-10-2019 21:31 ]

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans