Auslesen der Easymeter Q3M D0-Schnittstelle

Hallo zusammen,

aktuell bin ich dabei den Stromzähler (Easymeter Q3M v1.02 (v6.03)) des Hauses in dem ich wohne auszulesen.
Hierfür möchte ich die D0-Schnittstelle mittels eines Phototransistors auslesen.
Die Schaltung habe ich von der Volkszähler.org Seite übernommen (hardware:controllers:ir-schreib-lesekopf-ttl-ausgang [wiki.volkszaehler.org]). Ich verwende einen Phototransistor und einen Transistor als Treiber. Ich greife dann das empfangene Signal am Collector des Treiber-Transistors ab.
Bei Bedarf kann ich auch gerne die Schaltung auf meinem Steckbrett fotografieren und hier anhängen.
Das empfangene Signal gebe ich dann direkt auf den RX Pin meines Arduino Unos.

Der Sketch für meinen Arduino sieht wie folgt aus:

void setup() {
  Serial.begin(9600);
}

byte incomingByte;

String sMessage = "";

void loop() {
  while (Serial.available() > 0) {
    incomingByte = Serial.read();
    if (incomingByte < 0x10)
      sMessage += "0";

    sMessage += String(incomingByte, HEX);
    sMessage += " ";
  }

  if(sMessage != ""){
    Serial.println(sMessage);
    sMessage = "";
  }
}

Das ganze ist nur sehr simpel gehalten und soll eigentlich erstmal nur die empfangenen Zeichen in einem String puffern und sobald nichts mehr kommt, die Zeichen seriell ausgeben, damit ich sie mir in dem seriellen Monitor anschauen kann. Dies ist nur eine Testapplikation, um überhaupt einen Start zu haben und die richtigen Stellen zu finden, welche ich später auswerten möchte.
Nachdem ich mehrere Tage eine fehlerhafte oder gar keine Nachricht empfangen habe, habe ich es endlich geschafft, den richtigen Start der Nachricht zu empfangen.
Die Nachrichten sollen laut dem SML-Protokoll immer mit “1b 1b 1b 1b 01 01 01 01” anfangen, dies ist auch der Fall, siehe folgende Nachricht die ich erhalte:

1b 
1b 
1b 
1b 
01 
01 
01 
01 
76 
0b 
45 
53 59 
4d d9 ce 00 35 97 82 62 00 62 
00 72 63 01 01 76 01 04 45 53 59 08 45 53 59 de 9a 97 82 0b 09 01 45 53 59 11 03 a1 d9 ce 01 01 63 39 fe 00 76 0b 45 53 59 4d d9 ce 00 35 97 83 62 00 62 00 72 63 07 01 77 01 0b 09 01 45 53 59 11 03 a1 d9 ce 07 01 00 62 0a ff ff 72 62 01 65 00 11 de 9a f1 01 77 07 81 81 c7 82 03 ff 01 01 01 01 04 00 00 00 00 3a 47 bc 02 01 77 07 01 00 02 08 00 ff 64 01 01 80 01 62 1e 52 fc 59 00 00 00 00 7a e6 00 f8 01 77 07 01 00 01 08 01 ff 01 01 62 1e 52 fc 59 00 00 00 00 3a 47 bc 02 01 77 07 01 00 02 08 01 ff 4c 07 00 ff 01 01 62 1b 52 fe 59 00 00 00 00 00 00 62 6e 01 77 07 81 81 c7 82 05 ff 01 01 01 01 83 02 66 b7 60 bd ec 9f 88 0b 2c 31 ae ac 76 29 72 52 36 7f 9d 41 29 38 e6 7c a1 49 4c c8 5a 4a 57 f0 5b 25

Nun komme ich endlich zu meinem Problem:
Ich finde leider nicht die Stellen, welche ich eigentlich empfangen will.
Eigentlich sollte eine Nachricht wie folgt im Klartext aussehen:

/ESY5Q3DA1004 V3.04
1-0:0.0.0255(1ESY1160007140)
1-0:1.8.0
255(00000001.4000401kWh)
1-0:21.7.0
255(000000.00W)
1-0:41.7.0
255(000000.00W)
1-0:61.7.0
255(000000.00W)
1-0:1.7.0
255(000000.00W)
1-0:96.5.5
255(30)
0-0:96.1.255*255(1ESY1160007140)

Für mich interessant ist vor allem die Stelle “1.8.0”, da ich die danach folgenden kWh auslesen und auswerten möchte. Leider finde ich keine “01 08 00” in meiner empfangenen Hex-Nachricht.
Dazu habe ich auch das Problem, dass ich solche empfangenen Nachrichten nur von anderen Geräten finde oder Geräten, die eine veraltete Version des SML-Protokolls verwenden.

Somit meine Frage:

  1. Hat jemand bereits Erfahrung mit dem Easymeter Q3M EDL V1.02 (v6.03) gemacht und die D0-Schnittstelle ausgelesen? Falls ja, würde ich mich sehr freuen, falls Sie mir die von Ihnen empfangene Nachricht zusenden könnten, sodass ich dies mit meiner abgleichen kann.
  2. Gibt es zwischen den Versionen Unterschiede, sodass ich bei meiner Variante nicht nach dem “01 08 00” suchen sollte, sondern nach einer anderen Kennung?
  3. Scheinbar sind die meisten Anleitungen oder Fragestellungen von Nutzern im Internet, von Nutzern die leider andere Easymeter oder andere SML-Versionen verwenden. Kennt sich jemand mit dem SML v1.04 aus und kann mir eine Quelle geben wo ich mich über diese Version informieren kann? Denn ich finde leider keine anständigen Ort, um mich zu der Version schlau zu lesen.
  4. Normalerweise sind die Nachrichten des SML-Protokolls als ACSII-Zeichen verschickt worden. Leider empfange ich ein ziemliches Chaos, sobald ich die empfangenen Zeichen als “char” in den seriellen Monitor schreiben will. Weiß jemand wieso?

Ich hoffe sehr das mir jemand helfen kann, langsam gehen mir wirklich die Ideen aus.

Mit freundlichen Grüßen,
Heenne

Hi

Wenn die Nachricht als lesbare Zeichen gesendet werden (wovon ich ausgehe), ist eine
0 0x30
1 0x31
...
9 0x39

Du müsstest also nach 31 ?? 38 ?? 30 suchen (bin gerade zu faul, welchen Code der Punkt hätte).

Ein ähnlicher Test steht bei mir auch noch aus - müsste 'nur' mit dem Laptop und angeflanschtem Arduino mal am Zähler 'vorbei schauen' ...

MfG

Moin,

danke für die Antwort postmaster-ino.
Ich habe die Hex-Wurst mal nach "31 38 30" durchsucht, bin jedoch leider zu keinem Ergebnis gekommen...
Wäre super, wenn du den Easymeter bei dir mal auslesen und die Nachricht hier reinschreiben könntest.

Vielen Dank im Voraus.

Hi

Immer dieser Druck ... muß Mal schauen, ob ich Das 'die Tage' zwischen schieben kann ...

Achja: Du suchst nach 31 xx 38 xx 30 !!! Die xx sind die Dezimal-Punkte.
Bei Dir sollte sich also zwei hinter einer 31 eine 38 finden lassen und noch zwei weiter eine 30.

MfG

Hey, wie schauts aus? Hast du es geschafft die Schnittstelle auszulesen?
Ich habe die Nachricht auch nach 31 xx 38 xx 00 (keine Sorge, ich habe bei xx nach dem ASCII-Code für einen Punkt gesucht :wink: ) durchsucht, bin aber leider nicht fündig geworden...
Ich habe die kommenden Tage vermutlich wieder etwas Zeit, um mir das Ganze nochmal anzuschauen.

Hallo Heenne, hallo Leser,

habe fast den gleichen Zähler und leider auch die gleichen Erfahrungen gemacht.
Mein Zähler ist ein Easymeter Q3MA1200 V6.02. Baujahr 2017,
der mir vor wenigen Wochen von den Stadtwerken eingebaut wurde.
Die MSB-Schnittstelle, oben auf dem Gerät, ist durch ein Easymeter-Siegel abgeklebt, da kommt nix durch. Also bleibt nur die Info-Schnittstelle vorne. Wenn diese mir den aktuellen Zählerstand und evtl. die Leistung ausgeben würde, wäre ich zufrieden.

Als Schaltung habe ich eine noch einfachere übernommen. Den linken Teil der Schaltung EasyMeter-WLAN-Lesekopf
Widerstände sind beides 10k statt 13k. Transistor ein BC546 und als IR-Transistor ein SFH309FA-5 OSRAM

Der Programmcode ist exakt wie bei Dir.
Die Serielle Schnittstelle habe ich auf 9600 bit/s 8N1 eingesellt.

Hier mal ein Beispiel:
Zeilen 1-3, drei Messungen direkt hintereinander, LC-Display des Easymeter zeigt 163 kWh
Zeilen 4-6, drei Messungen direkt hintereinander, LC-Display des Easymeter zeigt 164 kWh ca. 45 Minuten später
Was meine serielle Schnittstelle empfangen hat:

1B 1B 1B 1B 01 01 01 01 76 0B 45 53 59 4D 7E 7E 00 38 61 69 62 00 62 00 72 63 01 01 76 01 04 45 53 59 08 45 53 59 77 3D 61 69 0B 09 01 45 53 59 11 03 1D 7E 7E 01 01 63 21 43 00 76 0B 45 53 59 4D 7E 7E 00 38 61 6A 62 00 62 00 72 63 07 01 77 01 0B 09 01 45 53 59 11 03 1D 7E 7E 08 01 00 62 0A 7F 7F 00 72 62 01 65 00 12 77 3D 76 77 07 01 01 47 02 03 7F 01 01 01 01 04 45 53 59 01 77 07 01 00 00 00 09 7F 01 01 01 01 0B 09 01 45 53 59 11 03 1D 7E 7E 01 77 07 01 00 01 08 00 7F 64 00 02 00 01 62 1E 52 03 59 00 00 00 00 00 00 00 23 01 77 07 01 00 01 08 01 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 00 01 77 07 01 00 01 08 02 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 23 01 77 07 01 01 47 02 05 7F 01 01 01 01 03 02 64 6C 32 68 0D 7D 55 45 74 52 7B 2E 7D 71 16 30 46 41 37 78 77 4D 42 1D 45 0F 3D 2E 5D 45 50 44 1D 1F 76 28 19 47 73 04 37 47 33 40 59 53 15 35 01 01 01 63 3E 1D 00 76 0B 45 53 59 4D 7E 7E 00 38 61 6B 62 00 62 00 72 63 02 01 71 01 63 50 77 00 1B 1B 1B 1B 1A 00 48 58 
1B 1B 1B 1B 01 01 01 01 76 0B 45 53 59 4D 7E 7E 00 38 61 6C 62 00 62 00 72 63 01 01 76 01 04 45 53 59 08 45 53 59 77 3E 61 6C 0B 09 01 45 53 59 11 03 1D 7E 7E 01 01 63 02 59 00 76 0B 45 53 59 4D 7E 7E 00 38 61 6D 62 00 62 00 72 63 07 01 77 01 0B 09 01 45 53 59 11 03 1D 7E 7E 08 01 00 62 0A 7F 7F 00 72 62 01 65 00 12 77 3E 76 77 07 01 01 47 02 03 7F 01 01 01 01 04 45 53 59 01 77 07 01 00 00 00 09 7F 01 01 01 01 0B 09 01 45 53 59 11 03 1D 7E 7E 01 77 07 01 00 01 08 00 7F 64 00 02 00 01 62 1E 52 03 59 00 00 00 00 00 00 00 23 01 77 07 01 00 01 08 01 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 00 01 77 07 01 00 01 08 02 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 23 01 77 07 01 01 47 02 05 7F 01 01 01 01 03 02 64 6C 32 68 0D 7D 55 45 74 52 7B 2E 7D 71 16 30 46 41 37 78 77 4D 42 1D 45 0F 3D 2E 5D 45 50 44 1D 1F 76 28 19 47 73 04 37 47 33 40 59 53 15 35 01 01 01 63 0D 20 00 76 0B 45 53 59 4D 7E 7E 00 38 61 6E 62 00 62 00 72 63 02 01 71 01 63 14 7C 00 1B 1B 1B 1B 1A 00 77 64 
1B 1B 1B 1B 01 01 01 01 76 0B 45 53 59 4D 7E 7E 00 38 61 6F 62 00 62 00 72 63 01 01 76 01 04 45 53 59 08 45 53 59 77 3F 61 6F 0B 09 01 45 53 59 11 03 1D 7E 7E 01 01 63 6C 28 00 76 0B 45 53 59 4D 7E 7E 00 38 61 70 62 00 62 00 72 63 07 01 77 01 0B 09 01 45 53 59 11 03 1D 7E 7E 08 01 00 62 0A 7F 7F 00 72 62 01 65 00 12 77 3F 76 77 07 01 01 47 02 03 7F 01 01 01 01 04 45 53 59 01 77 07 01 00 00 00 09 7F 01 01 01 01 0B 09 01 45 53 59 11 03 1D 7E 7E 01 77 07 01 00 01 08 00 7F 64 00 02 00 01 62 1E 52 03 59 00 00 00 00 00 00 00 23 01 77 07 01 00 01 08 01 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 00 01 77 07 01 00 01 08 02 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 23 01 77 07 01 01 47 02 05 7F 01 01 01 01 03 02 64 6C 32 68 0D 7D 55 45 74 52 7B 2E 7D 71 16 30 46 41 37 78 77 4D 42 1D 45 0F 3D 2E 5D 45 50 44 1D 1F 76 28 19 47 73 04 37 47 33 40 59 53 15 35 01 01 01 63 3B 78 00 76 0B 45 53 59 4D 7E 7E 00 38 61 71 62 00 62 00 72 63 02 01 71 01 63 1D 11 00 1B 1B 1B 1B 1A 00 0D 74  

1B 1B 1B 1B 01 01 01 01 76 0B 45 53 59 4D 7E 7E 00 39 01 64 62 00 62 00 72 63 01 01 76 01 04 45 53 59 08 45 53 59 01 66 01 64 0B 09 01 45 53 59 11 03 1D 7E 7E 01 01 63 7B 2C 00 76 0B 45 53 59 4D 7E 7E 00 39 01 65 62 00 62 00 72 63 07 01 77 01 0B 09 01 45 53 59 11 03 1D 7E 7E 08 01 00 62 0A 7F 7F 00 72 62 01 65 00 13 01 66 76 77 07 01 01 47 02 03 7F 01 01 01 01 04 45 53 59 01 77 07 01 00 00 00 09 7F 01 01 01 01 0B 09 01 45 53 59 11 03 1D 7E 7E 01 77 07 01 00 01 08 00 7F 64 00 02 00 01 62 1E 52 03 59 00 00 00 00 00 00 00 24 01 77 07 01 00 01 08 01 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 00 01 77 07 01 00 01 08 02 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 23 01 77 07 01 01 47 02 05 7F 01 01 01 01 03 02 64 6C 32 68 0D 7D 55 45 74 52 7B 2E 7D 71 16 30 46 41 37 78 77 4D 42 1D 45 0F 3D 2E 5D 45 50 44 1D 1F 76 28 19 47 73 04 37 47 33 40 59 53 15 35 01 01 01 63 45 66 00 76 0B 45 53 59 4D 7E 7E 00 39 01 66 62 00 62 00 72 63 02 01 71 01 63 03 17 00 1B 1B 1B 1B 1A 00 2F 4A 
1B 1B 1B 1B 01 01 01 01 76 0B 45 53 59 4D 7E 7E 00 39 01 67 62 00 62 00 72 63 01 01 76 01 04 45 53 59 08 45 53 59 01 67 01 67 0B 09 01 45 53 59 11 03 1D 7E 7E 01 01 63 15 5D 00 76 0B 45 53 59 4D 7E 7E 00 39 01 68 62 00 62 00 72 63 07 01 77 01 0B 09 01 45 53 59 11 03 1D 7E 7E 08 01 00 62 0A 7F 7F 00 72 62 01 65 00 13 01 67 76 77 07 01 01 47 02 03 7F 01 01 01 01 04 45 53 59 01 77 07 01 00 00 00 09 7F 01 01 01 01 0B 09 01 45 53 59 11 03 1D 7E 7E 01 77 07 01 00 01 08 00 7F 64 00 02 00 01 62 1E 52 03 59 00 00 00 00 00 00 00 24 01 77 07 01 00 01 08 01 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 00 01 77 07 01 00 01 08 02 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 23 01 77 07 01 01 47 02 05 7F 01 01 01 01 03 02 64 6C 32 68 0D 7D 55 45 74 52 7B 2E 7D 71 16 30 46 41 37 78 77 4D 42 1D 45 0F 3D 2E 5D 45 50 44 1D 1F 76 28 19 47 73 04 37 47 33 40 59 53 15 35 01 01 01 63 4F 50 00 76 0B 45 53 59 4D 7E 7E 00 39 01 69 62 00 62 00 72 63 02 01 71 01 63 4F 0B 00 1B 1B 1B 1B 1A 00 60 00 
1B 1B 1B 1B 01 01 01 01 76 0B 45 53 59 4D 7E 7E 00 39 01 6A 62 00 62 00 72 63 01 01 76 01 04 45 53 59 08 45 53 59 01 68 01 6A 0B 09 01 45 53 59 11 03 1D 7E 7E 01 01 63 5E 1A 00 76 0B 45 53 59 4D 7E 7E 00 39 01 6B 62 00 62 00 72 63 07 01 77 01 0B 09 01 45 53 59 11 03 1D 7E 7E 08 01 00 62 0A 7F 7F 00 72 62 01 65 00 13 01 68 76 77 07 01 01 47 02 03 7F 01 01 01 01 04 45 53 59 01 77 07 01 00 00 00 09 7F 01 01 01 01 0B 09 01 45 53 59 11 03 1D 7E 7E 01 77 07 01 00 01 08 00 7F 64 00 02 00 01 62 1E 52 03 59 00 00 00 00 00 00 00 24 01 77 07 01 00 01 08 01 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 00 01 77 07 01 00 01 08 02 7F 01 01 62 1E 52 03 59 00 00 00 00 00 00 00 23 01 77 07 01 01 47 02 05 7F 01 01 01 01 03 02 64 6C 32 68 0D 7D 55 45 74 52 7B 2E 7D 71 16 30 46 41 37 78 77 4D 42 1D 45 0F 3D 2E 5D 45 50 44 1D 1F 76 28 19 47 73 04 37 47 33 40 59 53 15 35 01 01 01 63 52 00 00 76 0B 45 53 59 4D 7E 7E 00 39 01 6C 62 00 62 00 72 63 02 01 71 01 63 0B 00 00 1B 1B 1B 1B 1A 00 02 17

Viele Spalten immer gleich.
An einer Stelle finde ich auch die Server-ID, die auf dem Zähler aufgedruckt ist.
Die Folgen 01 08 00, 01 08 01 und 01 08 02 sind auch zu finden. Nur keine sinnvollen kWh Werte, egal wie ich die Werte dahinter von Hex nach Dec umrechne?
Was mache ich falsch?

Das sieht sehr ähnlich aus wie bei Dir, Heenne. Bist du schon weiter gekommen?

Grüße
Schittlewiller