Easymeter/eHZ/Stromzähler Skript

Moin moin,

ich weiß das es schon eine Menge Skripte hier gibt, die das Easymeter Protokoll erkennen und entsprechend aufzeichnen. Aber wie das so ist, entsprach das nicht ganz dem, was ich mir so vorgestellt hatte.
Deswegen nun mein Skript für Euch (als Dank zurück).

Was kann es besonderes? Nun es legt alle Variablen automatisch zu dem im Datenstrom enthaltenen Informationen an und kann auch aufsummieren. Konfigurieren brauch man für den ersten Schuss eigentlich gar nichts. Keine VariablenIDs usw. Ich habe versucht die gebräuchlichen Daten schon von vornherein einzubauen.
Das einzige was getan werden muss, ist IO/Cutter und Register Variable anzulegen. Wie bei allen anderen Skripten auch.

Das Skript summiert die Phase 1-3+Summe pro Minute auf, und schmeisst dann das Ergebnis / Anzahl gelesener Werte in die Zielvariable. (Die man dann letztendlich auch loggen sollte!)
Zusätzlich wird nur jede Minute der Zählerstand übernommen.

Eigentlich wollte ich es noch bei nem Freund testen lassen, aber der meldet sich gerade nicht, und ich wills nun raus hauen.

Viel Spass beim testen…

Gruß
Kevin

eHZ-Skript.php.zip (2.83 KB)

Hallo Kevin,

ich habe mir in der Bucht einen Lesekopf gekauft und habe ihn tatsächlich ans Laufen gebracht.
Memo für mich :slight_smile: --> RX vom Lesenkopf auf TX vom DB9 Stecker und umgekehrt und DTR muss aktiviert sein:

COMPort_SetDTR(/*Instance ID*/ , true);

Anschließend hab ich direkt dein Script verwendet, um den Easymeter Q3DA, Zweirichtungszähler auszulesen. Das klappt auch prima, die Variablen wurden angelegt.

Ich bekomme allerdings ein paar Fehler:

Line 86: Error: Notice: Undefined Offset: 3
Line 104: Error: Notice: Undefined Offset: 4
Line 211: Cannot auto-convert to String from Variant. Error: Could not convert variant of type (NULL) into type (String)

Das ist nicht weiter kritisch, das Script scheint auch so zu funktionieren. Falls du allerdings noch eine neuere Version hast (> ver 1.0), wäre ich sehr daran interessiert.

Vielen Dank und Gruß,
Kai

Da benutzt doch tatsächlich jemand mein Skript. :smiley:

Kannst Du mir mal einen Ausschnitt aus deinem Datenstream schicken? Jeder hat anscheinend unterschiedliche Werte im Stream.

Und ich sehe gerade… da hat sich noch ein Hahn im Code versteckt. :stuck_out_tongue:

Werde es mir mal anschauen. Da es seit der Veröffentlichung ohne Probleme läuft.

Es läuft! Ich hatte im Cutter die Trennzeichen /ESY und !zwar eingegeben, die Checkbox aber auf HEX stehen lassen. Das klappt natürlich nicht - muss man die Häckchen rausnehmen.

Jetzt arbeitet der Cutter auch wie er soll, die Counter Werte zählen alle synchron hoch, ich habe gleichmässig alle 2 Sekunden einen Werteupdate und auch die Zählerbezeichung und die Eigentumsnummer werden angezeigt.

Super Script, tolle Arbeit!!!

Gruß,
Kai

Werden auch alle Werte aus dem Stream übernommen, so wie du das willst? Meiner zählt nur in eine Richtung!

So, nachdem ich fast den ganzen Tag negative Werte bekomen habe (negativer Stromverbrauch == Stromerzeugung) :slight_smile: habe ich jetzt auch positive Werte bekommen. Alles klappt wie gewünscht - ich sehe Werte für Bezug und Lieferung und die Zahlen scheinen mir sehr plausibel, ich wüsste nichts zu verbessern.

Besten Dank für die Mühe,

Gruss,
Kai

Hallo
Ich wollte dein Script unter IPS 4.0 ausführen bekomme aber folgenden Fehler…

Notice:  Undefined index: VALUE in /mnt/data/symcon/scripts/23326.ips.php on line 68

Eine Notice ist ja erstmal noch kein schlimmer Fehler, sondern nur ein Hinweis. Weil ich sicher da be Variable habe, die ich vorher nicht initialisiert habe. Generell dürfte das aber nicht zu schwierigkeiten führen. Die Abarbeitung bricht doch nicht ab… oder doch??

Hallo
Ich habe heute euch einen neuen Zähler bekommen und will den über den USB Lesekopf auslesen,
halt so wie den alten vorher.
Leider hänge ich fest, ich erhalte auch die Scriptausgabe „Notice: Undefined index: VALUE in /var/lib/symcon/scripts/57627.ips.php on line 68“
Es werden leider keine WerteVariablen angelegt.

Wie komme ich weiter, scripten ist nicht soo mein Ding.

Bernd

Diese Fehlermeldung kommt sehr wahrscheinlich dann wenn man versucht das Skript direkt auszuführen. Das kommt daher, dass das ältere Skript durch eine Registervariable aufgerufen werden muss, sonst ist dort auch kein Wert vorhanden.

Zunächst mal wie im Skript beschrieben die notwenigen Instanzen anlegen und das Skript in der Registervariable angeben. Die Werte werden dann angelegt wenn auch wirklich Daten ankommen.

Bist Du dem Vorgehen wie im Skript beschrieben gefolgt?

Vorgehensweise:

-Kategorie

|- Skript

|- Register Variable

  1. Dieses Skript in eine Kategorie legen.

  2. Eine IO Instanz für die entsprechende Datenquelle (z.B. Serial Port) anlegen

  3. Einen Cutter anlegen mit „Linkes Trennzeichen → /ESY“ und „Rechtes Trennzeichen → !“. Übergeordnete Instanz natürlich die IO Datenquelle

  4. Eine Register Variable anlegen mit dem Cutter als übergeordneten Instanz, und diesem Skript als Ziel ID

Nun werden alle erkannten Variablen automatisch in dieser Kategorie angelegt.

Abhängig vom Datenstrom kann dies ein wenig dauern.

Konntest Du Schritt 1 - 4 erfolgreich durchführen oder gab es da vielleicht schon Probleme?

Wenn Du die IO Instanz öffnest und dort auf den Käfer (Debug) klickst, siehst Du dann irgendwelche Daten ankommen?

HAllo
Habe die Struktur so wie geschrieben angelegt.
Script liegt in der Kategorie, Eine Register Variable hat das Script als Ziel.
Das Gateway zeigt auf den Cutter der links /ESY und rechts ! hat.
Die Cutter Schnittstelle zeigt auf den SerialPort .
Der Debug vom Port zeigt auch Daten an, der Dump im Anhang.
Sobald ich den SerilaPort aktiv mit dem Cuter verbinde erhalte ich im Log diese Meldungen
28.04.2021, 20:52:21 | Cutter | Begrenze Puffer auf die letzten 64kb

dump.txt (602,7 KB)

Moin!

Der dump zeigt ja nicht mal ansatzweise den erwartet Inhalt an. Vllt falsche Baudrate?
Du weißt, dass die Dinger mit 9600 / 7(!) / N1 laufen?

Gruß
Kevin

Guten Morgen
Das habe ich nicht gewusst, ist geändert.
jetzt sehen die Daten etwas anders aus.
dump.txt (1,9 MB)

dump(serialport).txt (11,0 KB)

Log meldet
29.04.2021, 10:07:18 | Cutter | Begrenze Puffer auf die letzten 64kb
29.04.2021, 10:07:18 | Cutter | Puffer > 8kb

Okay, das ist auch völlig daneben. Es müsste eigentlich eher so aussehen

5Q1AB1234 V3.04<CR><LF><CR><LF>
1-0:0.0.0*255(0273030412782)<CR><LF>
1-0:1.8.0*255(00042046.7191201*kWh)<CR><LF>
1-0:21.7.0*255(000033.16*W)<CR><LF>
1-0:41.7.0*255(000474.49*W)<CR><LF>
1-0:61.7.0*255(000009.17*W)<CR><LF>
1-0:1.7.0*255(000516.82*W)<CR><LF>
1-0:96.5.5*255(80)<CR><LF>
0-0:96.1.255*255(1ESY12345678)<CR><LF>

Hier kann man schön die Leistungsdaten einsehen. Soviel ich weiß, schmeissen die Zähler aber auch
unterschiedliche Werte raus. Da ist dann wohl ein wenig individuell.

ABER… bei dir ist ja gar nix richtig lesbar.

Ich muss dazu sagen, dass ich meinen Zähler über die Infrarot Schnittstelle abgreife.
Keine Ahnung ob ein USB Lesekopf anders funktioniert? Ist der Zähler denn gleich geblieben?
Was ist denn das für ein Kopf - wo kommt der denn her? Vllt. wird der ja ganz anders abgefragt. Z.B. Modbus oder so?

Auslesen über den Volkszähler Lesekopf am Raspi, vorher hatte ich einen AS1440 den ich ausgelesen habe.
https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-usb-ausgang
Wenn ich die Ausgabe „cat /dev/ttyUSB0 | od -tx1“ laufen lasse kommen auch die Daten wie im Wiki beschrieben.dump.txt (4,1 KB)
Im Wiko steht auch „In vzlogger ist für das Protokoll „sml“ 8N1 und für „d0“ 7E1 der Defaultwert und braucht nicht extra eingestellt werden.“
Den AS1440 habe ich mit 8N1 ausgelesen. Über ein C progi das ich hier für den Zähler gefunden hatte.
as1440.c.txt (13,1 KB)

Ich kann mich mit meinem alten Login nicht mehr einloggen, das war der Thread dazu

Tut mir leid. Da bin ich dann raus. Aber das scheint was komplett anderes zu sein.
Das ganze Protokoll basiert auf lesbare Zeichen, aber du hast im Dump (und dort im Wiki) auch gern mal (01 00 usw.) das gehört da nicht rein.

Zumindest nicht in mein Script.

Dann probiere doch eher mal den Weg

bzw. suche mal nach Volkszähler in der Forensuche.

Ich habenoch etwas anderes gefunden im Forum

Das Modul hat sofort funktioniert.
Jetzt noch schauen ob die Werte stimmen…