Auslesen der Easymeter Q3M D0-Schnittstelle

Moderator: Mod-Team

 

0.00 (0 Bewertungen)

Auslesen der Easymeter Q3M D0-Schnittstelle

Beitragvon Heenne » 10.10.2018, 13:52

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 (https://wiki.volkszaehler.org/hardware/ ... tl-ausgang). 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:
Code: Alles auswählen
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:

Code: Alles auswählen
1b 1b 1b 1b 01 01 01 01 76 0b 45 53 59 4d d9 ce 00 68 d8 08 62 00 62 00 72 63 01 01 76 01 04 45 53 59 08 45 53 59 f4 1c d8 08 0b 09 01 45 53 59 11 03 a1 d9 ce 01 01 63 f1 32 00 76 0b 45 53 59 4d d9 ce 00 68 d8 09 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 22 f4 1c f1 01
77 07 81 81 c7 82 03 ff 01 01 01 01 04 00 00 00 00 74 a9 39 6d 01
77 07 01 00 02 08 00 ff 64 01 01 80 01 62 1e 52 fc 59 00 00 00 00 e9 13 d2 3c 01
77 07 01 00 01 08 01 ff 01 01 62 1e 52 fc 59 00 00 00 00 74 a9 39 6d 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 60 5d 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


Die Zeilenumbrüche, um die Nachricht besser lesen zu können, habe ich so gesetzt, da ich gelesen habe, eine Zeile startet immer mit 77 07 laut SML Protokoll.

Nun meine Frage. Wie kann ich meine oben stehende Nachricht auswerten?
Denn die Nachricht sollte ja ungefähr so aussehen (das folgende habe ich auch von der Volkszählerseite kopiert):
Code: Alles auswählen
/ESY5Q3DA1004 V3.04
1-0:0.0.0*255(1ESY1160007140)
1-0:1.8.0*255(00000001.4000401*kWh)
1-0:21.7.0*255(000000.00*W)
1-0:41.7.0*255(000000.00*W)
1-0:61.7.0*255(000000.00*W)
1-0:1.7.0*255(000000.00*W)
1-0:96.5.5*255(30)
0-0:96.1.255*255(1ESY1160007140)


Eigentlich dachte ich die ganze Zeit, ich müsste nach "01 08 00" suchen um den Zählerstand des Wirkleistungsbezugs Gesamt zu erhalten. Leider könnt ihr in meiner Nachricht oben sehen, dass ich nur "01 08 01", "02 08 00" und "02 08 01" empfange.
Zudem standen gestern die Zahlen "196kWh" und "364kWh" (bin mir nicht mehr 100% sicher mit der letzten Stelle) auf dem Zähler. Diese beiden Werte waren laut Display für "1.8.0" und "2.8.0", weshalb es mich wundert, dass ich keine "01 08 00" empfange. Zudem sind die Werte für die kWh in der Nachricht deutlich größer als die eben genannten 196kWh und 364kWh vom Display (Nachricht wurde ca. zeitgleich mit dem Ablesen empfangen).

Ich glaube ich empfange mittlerweile die richtigen Zeichen von der D0 Schnittstelle des Easymeters Q3M.
Jetzt hoffe ich, dass mir jemand dabei helfen kann zu verstehen was ich empfange.
Wie genau kann ich die einzelnen Zeichen für mich übersetzen, sodass ich zu Testzwecken mir die Nachricht im "Klartext" anzeigen lassen kann?
Muss ich am Easymeter noch etwas einstellen um die "01 08 00" zu empfangen oder wieso empfange ich diese nicht?

Bei fehlenden Informationen gerne melden.
Vielen Dank im Voraus.

Viele Grüße
Heenne
Heenne
Neu hier
Neu hier
 
- Threadstarter -
 
Beiträge: 5
Registriert: 10.10.2018, 13:29
Info: Betreiber

Re: Auslesen der Easymeter Q3M D0-Schnittstelle

Beitragvon JAU » 10.10.2018, 14:58

Dein erster Fehler ist das du D0 erwartest, aber SML erhältst. Das Codebeispiel das du da hast ist von einem Q3D, nicht von einem Q3M.

Eine grobe Übersicht über SML: https://wiki.volkszaehler.org/software/sml
Im vzlogger nutzen wir eine C-Library fürs dekodieren der Nachrichten: https://github.com/volkszaehler/libsml

Zweiter Punkt ist das du den gelieferten OBIS-Code 1.8.1 nicht als solchen erkannt hast.
Wobei Teil des Problems ist das du bestimmt mehr Daten bekommst wenn du die oberen Schnittstelle des Zählers anzapfst (siehe Link oben).


mfg JAU
No Shift - No Service
Benutzeravatar
JAU
Forumsinventar
Forumsinventar
 
Beiträge: 1609
Registriert: 01.12.2012, 11:04
Wohnort: 74632
PV-Anlage [kWp]: 12,8
Info: Betreiber

Re: Auslesen der Easymeter Q3M D0-Schnittstelle

Beitragvon Heenne » 10.10.2018, 15:25

Vielen Dank für deine Antwort JAU.

Das ist wirklich ein Fehler, ich habe immer D0 im Zusammenhang mit SML gesehen und nicht als zwei getrennte Dinge, danke für die Klarstellung.
Wie kommst du drauf, dass mein Codebeispiel für das Q3D ist und nicht Q3M? Ich habe eine Serielle-Verbindung mit 9600 Baud und beim Arduino ist standardmäßig "SERIAL_8N1" für 8N1 eingestellt.

Wie genau meinst du, dass ich den gelieferten OBIS-Code 1.8.1 nicht als solchen erkenne?
Ich verwende bereits die Schnittstelle, welche sich oben auf dem Easymeter befindet. Von dort aus habe ich die Nachricht, welche ich in meinem ursprünglichen Post eingefügt habe, empfangen.

Grüße
Heenne
Heenne
Neu hier
Neu hier
 
- Threadstarter -
 
Beiträge: 5
Registriert: 10.10.2018, 13:29
Info: Betreiber

Re: Auslesen der Easymeter Q3M D0-Schnittstelle

Beitragvon JAU » 11.10.2018, 12:41

Heenne hat geschrieben:Wie kommst du drauf, dass mein Codebeispiel für das Q3D ist und nicht Q3M?

Weil es drin steht:
/ESY5Q3DA1004 V3.04

Außerdem ist das D0, kein SML. :wink:


Heenne hat geschrieben:Wie genau meinst du, dass ich den gelieferten OBIS-Code 1.8.1 nicht als solchen erkenne?

Hier ist er versteckt:
77 07 01 00 01 08 01 ff 01 01 62 1e 52 fc 59 00 00 00 00 74 a9 39 6d 01

In der Regel wird nur ein Tarif erfasst, dann ist das Ergebnis von 1.8.0 und 1.8.1 identisch.


mfg JAU
No Shift - No Service
Benutzeravatar
JAU
Forumsinventar
Forumsinventar
 
Beiträge: 1609
Registriert: 01.12.2012, 11:04
Wohnort: 74632
PV-Anlage [kWp]: 12,8
Info: Betreiber

Re: Auslesen der Easymeter Q3M D0-Schnittstelle

Beitragvon Heenne » 11.10.2018, 12:53

Ach, auf das Codebeispiel beziehst du dich. Ja, das habe ich nur von dort kopiert, weil ich solch eine Nachricht nicht vom Q3M im Internet gefunden habe.

Alles klar, das erklärt es mit 1.8.1 und 1.8.0. Danke.

Ich habe jetzt auch verstanden, wie man die kWh Werte ausrechnet. Eine Frage dazu, bei uns ist die 2.8.1 die Menge, die wir gerade beziehen oder verkaufen (falls die Solaranlage mehr Strom produziert als wir hier im Haus verbrauchen.). Also falls wir beziehen, ist der Wert positiv, falls wir verkaufen negativ. Soll dies so sein? Weil laut dem OBIS Code würde ich bei 2.8.1 nicht sowas erwarten.
Heenne
Neu hier
Neu hier
 
- Threadstarter -
 
Beiträge: 5
Registriert: 10.10.2018, 13:29
Info: Betreiber

Re: Auslesen der Easymeter Q3M D0-Schnittstelle

Beitragvon frank-83 » 11.10.2018, 13:43

Das kann eigentlich nicht sein. 2.8.x ist ein Zählerstand für Lieferung an den Netzbetreiber, da sollte kein negativer Wert auftauchen.

Grüße
Frank
frank-83
Forumsinventar
Forumsinventar
 
Beiträge: 831
Registriert: 26.05.2015, 11:27
Info: Betreiber

Re: Auslesen der Easymeter Q3M D0-Schnittstelle

Beitragvon Heenne » 11.10.2018, 14:18

Ja, das dachte ich auch. Aber folgende hex Zeichen habe ich ausgelesen.

Zuerst von gestern Abend, wo keine Sonne mehr geschienen hat:
Code: Alles auswählen
1b 1b 1b 1b 01 01 01 01 76 0b 45 53 59 4d d9 ce 00 68 d8 08 62 00 62 00 72 63 01 01 76 01 04 45 53 59 08 45 53 59 f4 1c d8 08 0b 09 01 45 53 59 11 03 a1 d9 ce 01 01 63 f1 32 00 76 0b 45 53 59 4d d9 ce 00 68 d8 09 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 22 f4 1c f1 01
77 07 81 81 c7 82 03 ff 01 01 01 01 04 00 00 00 00 74 a9 39 6d 01
77 07 01 00 02 08 00 ff 64 01 01 80 01 62 1e 52 fc 59 00 00 00 00 e9 13 d2 3c 01
77 07 01 00 01 08 01 ff 01 01 62 1e 52 fc 59 00 00 00 00 74 a9 39 6d 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 60 5d 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


Hier steht folgendes zur 2.8.1:
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 60 5d 01

Dieser Wert hat sich mit jedem Mal auslesen verändert.

Heute Morgen habe ich das ganze dann nochmal bei Sonne ausprobiert und bin auf folgendes Ergebnis gekommen:

Code: Alles auswählen
1b 1b 1b 1b 01 01 01 01 76 0b 45 53 59 4d d9 ce 00 6e db ef 62 00 62 00 72 63 01 01 76 01 04 45 53 59 08 45 53 59 f5 69 db ef 0b 09 01 45 53 59 11 03 a1 d9 ce 01 01 63 26 ae 00 76 0b 45 53 59 4d d9 ce 00 6e db f0 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 24 f5 69 f1 01 77 07 81 81 c7 82 03 ff 01 01 01 01 04 00 00 00 00 7b bf 6d 54 01 77 07 01 00 02 08 00 ff 64 01 01 a0 01 62 1e 52 fc 59 00 00 00 00 f4 e5 5d 78 01 77 07 01 00 01 08 01 ff 01 01 62 1e 52 fc 59 00 00 00 00 7b bf 6d 54 01 77 07 01 00 02 08 01 ff 4c 07 00 ff 01 01 62 1b 52 fe 59 ff ff ff ff ff ff 0d df 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


Und hier steht folgendes in 2.8.1:
77 07 01 00 02 08 01 ff 4c 07 00 ff 01 01 62 1b 52 fe 59 ff ff ff ff ff ff 0d df 01


Als Nebenfrage: Das ist die vollständige Nachricht die ich auslese. Fehlt da nicht "1b 1b 1b 1b" am Ende? Oder ist das schon das richtige Ende der Nachricht, nicht das ich hier einen Informationsverlust habe...
Heenne
Neu hier
Neu hier
 
- Threadstarter -
 
Beiträge: 5
Registriert: 10.10.2018, 13:29
Info: Betreiber

Re: Auslesen der Easymeter Q3M D0-Schnittstelle

Beitragvon Udo » 11.10.2018, 22:11

Heenne hat geschrieben:Als Nebenfrage: Das ist die vollständige Nachricht die ich auslese. Fehlt da nicht "1b 1b 1b 1b" am Ende? Oder ist das schon das richtige Ende der Nachricht, nicht das ich hier einen Informationsverlust habe...


Moin,
da fehlt was. Sollte am Ende so aussehen:

Code: Alles auswählen
77 
            07 81 81 c7 82 05 ff                         objName 129-129:199.130.5*255
                                                        Public Key des Zählers
            01                                           status (leer)
            01                                          valTime (leer)
            01                                          unit(leer)
            01                                          scaler (leer)
            83 xx xx xx xx x    x xx xx
               xx xx xx xx x    x xx xx
               xx xx xx xx x    x xx xx
               xx xx xx xx x    x xx xx                   
               xx xx xx xx x    x xx xx
               xx xx xx xx x    x xx xx
               xx xx xx xx x    x xx xx
               xx xx xx xx x    x xx xx
               xx xx xx xx x    x xx xx
               xx xx xx xx x    x xx xx
               x    x xx

        63 a2 59                                         CRC
        00                                                         
        00                                                     
        00                                                SMLEndOfMessage       
1b 1b 1b 1b                                             Escape
1a 02 19 49                                             EndeMessage + CRC


Aber Gott und Easymeter machen es evtl. anders.

Gruß
Udo
Udo
Forumsinventar
Forumsinventar
 
Beiträge: 800
Registriert: 23.06.2005, 20:28

Re: Auslesen der Easymeter Q3M D0-Schnittstelle

Beitragvon Heenne » 11.10.2018, 22:17

Hast du zufällig auch eine Idee wieso die Nachricht bei mir dort endet?
Sie endet nämlich jedes Mal an der Stelle.
Ich hatte auch gelesen, dass das Easymeter normalerweise nur alle 2 Sekunden was schickt, bei mir würde ich sagen ist das deutlich häufiger. Kann das etwas damit zu tun haben? Und was kann der Grund dafür sein?
Heenne
Neu hier
Neu hier
 
- Threadstarter -
 
Beiträge: 5
Registriert: 10.10.2018, 13:29
Info: Betreiber

Re: Auslesen der Easymeter Q3M D0-Schnittstelle

Beitragvon JAU » 12.10.2018, 08:40

Puffer im Arduino voll?

Ich spreche normal von einer Nachricht alle 1-2 Sekunden.
Manche Zähler geben die Daten auch Lastabhängig aus. Hohe Last - kürzere Abstände.


mfg JAU
No Shift - No Service
Benutzeravatar
JAU
Forumsinventar
Forumsinventar
 
Beiträge: 1609
Registriert: 01.12.2012, 11:04
Wohnort: 74632
PV-Anlage [kWp]: 12,8
Info: Betreiber


Zurück zu volkszaehler.org



Ähnliche Beiträge


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast