HowTo - SML-Stromzähler mit IPS Auslesen

Zu 1)
Eine neue Variable anlegen, dass sollte doch klappen :wink: Ich habs als FLOAT mit ~Electricity Profil gemacht. Den Aggregationstyp auf Zähler festlegen

zu 2)
Mit folgendem Programm lese ich die Live geloggte Variable alle 60 Sekunden aus und schreibe den Wert in die unter 1) angelegte Variable

<?
$Aktuell1 = GetValueFloat(13245 /*[Hardware\eHZ\Haushaltsstrom\Aktueller_Verbrauch]*/ );
$Aktuell2 = GetValueFloat(13254 /*[Hardware\eHZ\Heizungsstrom\Aktueller Verbrauch]*/ );

SetValueFloat(12345 /*[Hardware\eHZ\Haushaltsstrom\LOG_Aktueller_Verbrauch]*/ , $Aktuell1);
SetValueFloat(12354 /*[Hardware\eHZ\Heizungsstrom\LOG_Aktueller_Verbauch]*/ , $Aktuell2);

?>

zu 3)
Auf dieses Skript dann ein Tägliches Ereignis, alle xx Minuten anlegen. XX steht hierbei für die gewünschte LOG Genauigkeit.

Denke dass sollte ausführlich genug sein :slight_smile:

Ich versuche nun schon seit Tagen meinen Stromzähler in IP Symcon zu integrieren.
Es kommen auch Daten im Cutter an und das PHP Scrip anzupassen sollte auch kein Problem sein.
Nur scheitere ich leider an den Einstellungen für den Cutter. Habe bestimmt schon alle Variationen hier aus dem Forum ausprobiert und das tolle PDF Howto versucht. Leider habe ich absolut keinen Plan von Hexcode und bekomme ich nicht hin :frowning: Kann mir vielleicht einer von euch weiterhelfen?

Mein aktueller Zählerstand vom Dump war 4095,79 kw/h

Es handelt sich um einen eHz-HW8E2A5L0EQ2P

schöne Grüße und ein hoffentlich tolles Weihnachtsfest!

dump.txt (47.3 KB)

HI,

du hast doch in einem anderen Artikel auch einen debug SML Ausschnitt angehängt… da war was mit 1B1B1B1B01010…zu lesen. So siehts bei mir auch aus, wie ist dein Cutter eingestellt? bei mir siehts so aus wie im Bild. Der Hacken bei HEX nicht vergessen…

Danach sollte das Debug vom Cutter wie im Anhang

In der Registervariable sollte dann das Debug so aussehen:

das 1b1b… immer ganz vorne. Kommst du soweit?

Die Registervariable kann dann etsprechend ausgewertet werden…

Grüße Helmut

Hallo Helmut,
danke für den Tip! Hab deine Einstellungen mal übernommen. Leider kommt damit nichts mehr in der Register Variable an.
Dachte dann erst ich hätte an hand deiner Bilder verstanden wie man die richtigen Einstellungen rausfindet, war aber leider noch nicht so. Im Angang liegt nochmal ein Dump vom Cutter mit deinen Einstellungen

Vielen Dank nochmal :slight_smile:

dump4.txt (2.61 KB)

OK, ich glaube dein Datensatz ist kürzer als bei mir (Ich habe einen Zweirichtungszähler). Lt. deinem Cutter dump ist die Datenlänge 712 Zeichen. Das durch 2 geteilt ist 356. Trage mal beim Cutter bei der Eingabelänge 356 statt 400 ein. Ggf. mal einen noch kleineren Wert testen. Ob dann Daten in der Registervariable ankommen.

@ssternheim
Um die richtigen Stellen für Leistung (W) und Zählerstand (kWh) zu finden solltest Du einen vorher/nachher Dump anlegen und diese dann mit einem Tool vergleichen. Die Dumps sollten schon mehrere Minuten zeitversetzt gemacht werden und es sollte während dieser Zeit natürlich auch ein Engergieverbrauch (bzw. Einspeisung) stattfinden. Wenn sich die Werte nicht oder fast nicht ändern ist es auch schwer diese später zu identifizieren. Bei einem Zähler für die PV Anlage ist es auch empfehlsenswert den Zählerstand zu notieren um später schneller den Faktor zu ermittlen und zu verifizieren.
Wichtig ist auch zu prüfen ob die Daten tatsächlich in Hex empfangen werden oder als Hex-Wert im ASCII Format ankommen. Einige LAN-Logger liefern die Hex-Werte im ASCII Format wobei die Daten von COM-Port Loggern meistens im reinen Hex gesendet werden.

Hat den IR-Lesekopf für das SML Protokoll von Udo auch schon jemand auf der IPS-Linux Version auf dem RasPi am laufen ?. Oder ist der evtl. noch gar nicht unter Linux implementiert ?

Gruß Jörg

Nachdem ich vor lauter Verzweiflung den ganzen kram erstmal liegen gelassen habe, werde ich nun versuchen das ganze wirklich zum laufen zu kriegen. Meine Durch den Tip die Haken bei „HEX“ mal weg zu lassen bin ich nun auf folgende Einstellungen gekommen.

Eingabelänge 179 (Zeichen da kein HEX)
Sync Zeichen SML(1B1B1B1B01010101

Nun kommen in der Register Variable auch daten an. Diese fangen an mit SML(1B1B… usw und haben eine Länge von 719 Zeichen.

Ich habe auch mehrere Dumps per Hand miteinander verglichen und die Unterschiede farbig markiert. Allerdings finde ich trotzdem keine Werte. Ist denn soweit alles richtig oder sind meine Einstellungen noch falsch?

SML Dump:

SML(1B1B1B1B010101017607001404A76CB762006200726301017601010700140334243D0904039FC8DE5762160101636471007607001404A720062007263070177010904039FC8DE5762160172620165033402E67977078181C78203FF0101010104454D480177070100000009FF010101010904039FC8DE5762160177070100010800FF63018201621E52FF560002B3ACB10177070100020800FF63018201621E52FF56000000006B0177070100010801FF0101621E52FF560002B3ACB10177070100020801FF0101621E52FF56000000006B0177070100010802FF0101621E52FF56000000000001770701000F0700FF0101621B52FF5500000C900177078181C78205FF01010101830290AFB29408ED11A8D1DB6041E5E93C0B1F6F833BBCFD42C7F68703721241BD16D6651353E6EB68C83A42F00FDDC17115010101637B02007607001404A76CBB6200620072630201710163543C000000001B1B1B1B1A03EAE2)

Bildschirmfoto 2015-02-10 um 11.06.13.png

schöne Grüße,
Stefan

Hi, das sieht schon mal sehr gut aus, den Rest schaffen wir auch noch. Also bei mir ist der Zählerstand immer 16 Zeichen lang. Da mein Zählerstand recht niedrig ist sind die ersten 8 Zeichen nuller. Davor steht immer FF59. Danach kommt immer 017707. Dieses Muster taucht bei dir auch auf, allerdings beginnt es mit FF56… und bis 017707 kommt sind es nur 10 Zeichen.
Also vermute ich bei dir das folgende Bereiche Intressant sein könnten:

1B1B1B1B010101017607001404A76CB762006200726301017601010700140334243D0904039FC8DE5762160101636471007607001404A720062007263070177010904039FC8DE5762160172620165033402E67977078181C78203FF0101010104454D480177070100000009FF010101010904039FC8DE5762160177070100010800FF63018201621E52FF560002B3ACB10177070100020800FF63018201621E52FF56000000006B0177070100010801FF0101621E52FF560002B3ACB10177070100020801FF0101621E52FF56000000006B0177070100010802FF0101621E52FF56000000000001770701000F0700FF0101621B52FF5500000C900177078181C78205FF…

Der Aktuelle Verbrauch hat weniger zeichen und könnte die Blau markierte Stelle sein. Also beobachte mal diese Stellen über einen Längeren Zeitraum damit sich die Zählerstände entsprechend erhöht haben, Zähle deine Zeichen, und werte diese aus. Mit deinen Markierungen warst du gar nicht so weit weg eben nur mehr Zeichen.
Hier noch mal meine Formel… ich mußte dann am ende noch durch 10000 teilen. Du müßtest dann die Zeichen noch mal genau zählen und die Werte für den substr Befehl anpassen…

$wert1 = (hexdec(substr(bin2hex($_IPS['VALUE']), 300, -484)))/10000;

Gruß Helmut

Hallo Helmut,
es hat geklappt! -danke den Tip!

Ich war gestern noch bei einem befreundeten Pogrammierer und der hat meine SML Ausgabe nach dieser Anleitung auseinander genommen.

Die Werte selbst werden bei SML anscheinend immer mit FF56 eingeleitet und mit 01 abgeschlossen. Alles dazwischen ist dann ein Wert.
Dieser ist in Hex und kann mit einem einfachen Hex Taschenrechner in Zahlen umgewandelt werden. Bei mir beispielsweise der Beriech 0002B3ACB1 der umgewandelt 45329585 ergibt. Das geteilt durch 10.000 und man hat den Wert. 00000C90 ist mein Aktueller Verbrauch und ergibt im Heurechner 3216. Das geteilt durch 10 und man hat den aktuellen Verbrauch.

Für alle die noch Probleme mit dem Cutter haben:
Es geht ja darum die Werte zwischen SML( und ) zu bekommen. Ich habe also ins linke Trennzeichen „SML(“ und ins rechte „)“ geschrieben -natürlich ohne Haken bei HEX

Erst im Script nehme ich die Werte mit folgendem Script auseinander:

SetValueFloat(11921 /[eHz\kwh erwirtsch.]/,hexdec(substr($IPS_VALUE, 284, 10)) / 10000);
SetValueFloat(26387 /[eHz\Leist. Aktuell]/,hexdec(substr($IPS_VALUE, 498, 8)) / 10);

Endlich hab ich es verstanden :slight_smile: Vielen Dank an alle.

Als nächstes werde ich mich mal an die Auswertung der Daten machen und diese ordentlich visualisieren. Gibt es da schon vorlagen?

Guten Morgen zusammen,

nach dem ich mir gestern Nachmittag, Abend und dreiviertel der Nacht „um die Ohren geschlagen“ habe, versuche ich jetzt hier mit einem Beitrag mein Glück.

Ich habe im Rahmen der Installation einer PV-Anlage einen neuen Zähler bekommen:
ISKRA Zweirichtungszähler eHZ-EDL Model MT681-D4A52 (Im Anhang auch ein Bild).

Um die Daten des Zählers in IP-Symcon zu übernehmen, habe ich mir den RS232-IR-Schreib-Lesekopf vom Udo besorgt, http://wiki.volkszaehler.org. (kleines Lob an ihm für die schnelle Lieferung!)

Auf den Zähler auf gesetzt, im Internet recherchiert, Serial Port eingerichtet (COM5, 9600,8,n,1), Cutter eingestellt, DTR aktiviert, und gefühlte 20 Scripte ausprobiert.

Mein Problem: Es funktioniert nicht. RegisterVariable bekommt keine Daten.

In den meisten Cutter-Beispielen, ist von einer Start Sequenz „1B 1B 1B 1B“ die Rede.
Ich habe ca. 5 Min. die INFO-Schnittstelle mit geloggt. Aber ich kann keine entsprechende HEX-Folge finden.
Stattdessen 3F 3F 3F 3F und 01 01 01 01 (siehe Anhang).
Kann es sein, dass mein Zähler (…-D4A52) einen anderen SML Header hat, als die „alten“ …-D4A51?

Oder mache ich etwas anderes grundsätzlich falsch?

Viele Grüße aus’m Rheinland
Jörg

zaehler_hex_dump_9600-8-n-1.txt (118 KB)

Hallo Superfunk.

Mach bitte deine ID und Key auf dem Foto unkenntlich !

Gruß
lueralba

@ Superfunk:

  1. In der IPS Debug Konsole ist die Hex-Ansicht aktiviert (Haken für „HEX-Ansicht“ gesetzt) wenn Du die Dir die Daten anzeigen lässt? Wir sollten erstmal ausschließen daß die Daten nicht in einem anderen Format (z.B. ASCII) übertragen werden.
  2. Wenn Du als Start „3F 3F 3F 3F 01 01 01 01“ annimmst. Kommen dann plausible Daten heraus?
  3. Für mich sieht es so aus als hast Du ein Sync Problem. Im Log kommen die Daten mal alle 2s dann wieder 4s. Zudem sind die Frames unterschiedlich lang. Im Normalfall kommen die Frames immer genau im 2s Takt. ===> Com-Einstellungen prüfen, evtl. mal mit den Einstellungen „spielen“. Auch nochmals den richtigen Sitz des Ablesekopfes prüfen (Wichtig!) … wenn der nicht genau sitzt kann es zu Lesefehlern kommen.

Alle SML Protokolle welche ich bis jetzt gesehen habe beginnen mit „1B 1B 1B 1B 01 01 01 01“.
Entweder die Daten werden in einem anderen Format gesendet oder es gibt eine Veränderung im SML Protokoll.

Hallo,

ich komme an keine Daten. Der Cutter scheint nicht zu funktionieren.
Ich habe im Anhang mal 2 Dump Dateien von der Seriellen Schnittstelle (per USB Adapter angeschlossen an IPS)

Kann vielleicht einer von euch mir sagen welche Cutter Einstellungen ich brauche und wie ich an meine Werte kommen
kann? Ich verzweifel hier noch an meinem EMH Zähler.

Schönen Gruß

dump.txt (78.1 KB)

dump2.txt (43.8 KB)

Hi, beim Cutter kann ich ggf. helfen. Versuche mal folgende Einstellungen, bei mir sehen die Daten ähnlich aus… aber bei dir scheinen diese kürzer zu sein. Deshalb mußt du anstatt 400 nur 332 im Feld „Eingabelänge“ eintragen. Das ist die Anzahl der zweistelligen Blöcke.

Wenn du dann Daten im Cutter hast, kannst dann mehrere Datensätze (Dump) miteinander vergleichen und so die Stellen finden welche die Daten enthalten.

Viel Spaß noch und immer Geduld, das klappt schon noch.

cutter.JPG

Auf den ersten Blick kannst Du hier sehen wie der Datenstrom aufgebaut ist:
http://wiki.volkszaehler.org/hardware/channels/meters/power/edl-ehz/emh-ehz-h1

Habe Deinen dump.txt gerade mal „auseinander“ genommen … passt fast alles genau.

dump.txt (75.1 KB)

Besten Dank an m schrade & helhau
es funktioniert soweit mit eurer Hilfe.

Das einzige was nicht angezeigt wird ist die Leistung & der gesamt Zählerstand, der Zähler für Bezugs Tarif 1 geht und zeigt die richtigen Werte an. Da muss ich wohl nochmal genauer bei schauen.

Vielen Dank

Als Neueinsteiger in IPS bzw. Umsteiger vom Powerdog möchte ich gern die Funktionen des Powerdog in IPS weiter verwenden. Neben 1-wire Sensoren habe ich mich an den D0-Lesekopf gewagt und gemerkt, dass das gleich eine harte Nuss ist. (zumindest als Newbie)
Ich habe das How-To von mr_cg gelesen und konnte es nachvollziehen, jedoch scheitere ich noch an den Hex-Berechnungen für Cutter-Einstellungen und das Script. Ich hoffe, ihr könnt mir da weiterhelfen?
Der Zähler ist ein Zweirichtungszähler EMH eHZ-GW8E2A500AQ1. Mit dem Linktipp software:sml [wiki.volkszaehler.org] würde ich meinen, dass es sich um den Zähler wie in Beispiel 3 handelt.
Ich habe aus dem USB-Port ein Dump mitgeschnitten (siehe Anhang). Die Zählerstände zu der Zeit waren 1.8.1 016368 und 2.8.1 038300
dump.txt (178 KB)

Könnte mir jemand behilflich sein bei der Cuttereinstellung und bei den Skripten für jeweils Leistung und Zählerstand für 1.8.1 und 2.8.1?

Die Cuttereinstellung denke ich jetzt gefunden zu haben, die wäre 248.
Könnte mir jemand einen Tipp geben, wie ich jetzt die Positionen der Leistungen und Zählerstände des Zweirichtungszählers ermitteln kann?

Danke, Steffen

Moin ,

Ich bin umgestiegen auf emlog, das Programm kostet 69€ und ist Mega. Das kannst du auf Windows oder dem pi installieren und dann läuft es .

Gesendet von iPhone mit Tapatalk