HowTo - SML-Stromzähler mit IPS Auslesen

Nach dem Update auf 5.4 gab es offensichtlich Änderungen in php, sodass mein oben stehendes Skript keine plausiblen Werte mehr liefert. Es kommen sowohl bei Einspeisung als auch bei Bezug immer Werte und jedesmal andere.
Der Datenfluss hat sich ja nicht geändert, als tippe ich auf eine Änderung im php. Hat da jemand einen Tipp für mich?

Es gab keine nennenswerte Änderungen was PHP angeht. Somit muss die Ursache woanders liegen und du müsstest ein wenig mehr Recherche machen :slight_smile:

paresy

Ich habe den Fehler im Cutter gefunden. Da stande nach dem Update plötzlich als linkes Trennzeichen „ÿb‚bRÿi“ und als rechtes Trennzeichen „wa`ÿ“.
Ich habe wieder auf feste Schnitte mit Eingabelänge 324 und Sync-Zeichen 1B 1B 1B 1B 01 01 01 01 hex eingestellt, aber trotzdem wackeln die Werte noch sehr durcheinander. Ich meine, einmal auch wieder die richtigen Werte gesehen zu haben.

Ein anderes USB-Gerät hatte den gleichen Port wie der D0-USB-Lesekopf, deshalb hat es so gewackelt. Jetzt funktioniert alles wieder.
Hat also nichts mit 5.4 zu tun, was gut so ist.

Ich komme einfach nicht weiter.
Bis vor kurzem hatte ich einen EHZ Zähler und konnte mit IP Symcon dessen Daten auslesen.
Nun wurde mien Zähler gegen einen ISKRA SBZ17 und ich komme mit den neuen Daten einfach nicht weiter…
Findet hier jemand in den SML zufällig die richtigen Daten?

Für Bezug müsste irgendwo 900 (kWh) stehen
für Einspeisung 4044 (kWh)

SML(1B1B1B1B01010101760504749402620062007263010176010105017C31560B0A0149534B00045B0FF072620165017C2F306201633DD900760504749403620062007263070177010B0A0149534B00045B0FF0070100620AFFFF72620165017C2F30747707010060320101010101010449534B0177070100600100FF010101010B0A0149534B00045B0FF00177070100010800FF65001C510401621E52036303840177070100020800FF0101621E5203630FCC0101016331E90076050474940462006200726302017101630C91000000001B1B1B1B1A036BD1)

schönen Gruß,
Stefan

Hallo Stefan,

was funktioniert denn nicht…Umstellung von EHZ auf ISKRA…geht nicht.

Was nutzt Du zur Auswertung? Script/Modul…

Ich bin das leider ein bisschen down, weil das ganze hin und her immer noch nicht geklärt ist. Ich hab da keinen Bock mehr drauf!

Ansonsten orientiere dich auf die Ausgabe.

Hey Rainer,
zum auslesen nutze ich einen Optischen Lesekopf und ein com-1 Netzwerkmodul.
In IP Symcon habe ich dann einen Client Socket zu dem Com1 Modul geöffnet. Aus dessen Demut habe ich das SML.

Die Werte übergebe ich an einen Cutter

Dann habe ich eine Registervariable und Variablen angelegt

und habe dann folgendes script mit folgendem Inhalt hinterlegt.

SetValueFloat(56865,hexdec(substr($IPS_VALUE, 284, 10)) / 10000);
SetValueFloat(46631,hexdec(substr($IPS_VALUE, 498, 8)) / 10);

Der Aufbau funktioniert und das Script wird jedes mal wenn Daten vom Zähler ankommen aktualisiert.
Mein Problem ist, dass sich die Positionen der Werte im SML verändert haben und ich die einfach nicht finden kann.

Ich habe eben dein SML2018 Script gefunden und testweise eingebaut. Die Registervariable aktualisiert es auch alle 2 Sekunden, aber es werden leider keine Variablen angelegt.

Hallo Stefan,

ich persönlich, finde es unhöflich einen Thread einfach so abzuschließen.

Ein Forum bietet diverse Möglichkeiten…auch wenn es schnell gehen soll.“Signatur“

Ist nicht böse gemeint…der Respekt regelt den Rest.:slight_smile:

Daher, was ging bei dir bisher, mit welcher Konfiguration(Script…Hardware).
Was funktioniert nicht mehr…mit welcher …siehe oben.

Ansonsten…Ausgabe Logdatei in Hex und Ttx, im Livestream am Comport…oder wo die Daten auch immer ankommen.

Guten Morgen Reiner,
vielen Dank für deine Schnelle Antwort und du hast natürlich recht, ich werde in Zukunft mehr darauf achten :slight_smile:

Wie beschrieben hatte ich bisher einen EHZ Zähler, welcher durch einen Zwei-Richtungs-Zäher, den ISKRA SBZ17 getauscht wurde.
Der Aufbau ist ansonsten gleich. Ein Optischer Lesekopf welcher an einem Com1-Ethernet Modul hängt und die Daten im Netzwerk bereitstellt. Darauf greife ich dann in IPS mit einem Client-Socket auf Port 5000 zu. Anbei der Dump.

dump-4.txt (21.1 KB)

Diese Daten übergebe ich an einen Cutter den ich wie folgt eingestellt habe:

Mit einer Registervariable greife ich dann auf den Cutter zu und führe bei ankommenden Daten folgendes Script aus:

Die entsprechenden Float Variablen sind natürlich angelegt.

Mein Problem ist, dass ich die Werte die vom neuen Zähler kommen im Dump nicht finden kann und dementsprechend nicht weiss, 1. ob mein Cutter richtig eingestellt ist und 2. welche werte in das Script müssen. Super wären die werte: Bezug, Akt Leistung, Einspeisung und evtl. aktuelle Leistung der Einspeisung.

Ich Hatte nun gehofft, dass wenn ich stattdessen dein SML2018 Script mit der Registervariable verknüpfe, der die werte dann automatisch findet und passende Variablen anlegt.

Schöne Grüße und eine schönen Tag der Deutschen Einheit wünsche ich dir.
Stefan

Hallo Rainer,

schön wieder von Dir zu hören.

Bekomme seit IPS Update auf Version 5.5 den nachfolgenden Fehler.
Dadurch wird auch nichts mehr eingelesen.
Im Debug vom Com Port kommen die Daten kontinuierlich an.

Könntest Du helfen :slight_smile:

PC WIN 10

03.10.2020, 12:37:59 | FlowHandler          | Kann Daten nicht zur Instanz #40049 weiterleiten: Abort Processing during Fatal-Error: Invalid characters passed for attempted conversion, these have been ignored   Error in Script C:\ProgramData\Symcon\modules\EHZ\Haushaltzaehler\module.php on Line 152

Schau mal meinen Post #60 in diesem Beitrag an. Du musst in deinem Datensatz nach 03 84 für Bezug und 0F CC für Einspeisung suchen. Die Zählerstände findest du dann bestimmt auch noch. Dann nur noch die Zeichen auszählen und den Cutter darauf einstellen, dann sollte es funktionieren.

Guten Morgen Stefan,

ich würde fast sagen, Du benötigst einen Code zum freischalten der Daten…da steht nix drinnen.
Beim Energieversorger nachfragen oder auf der Herstellerseite mal nachsehen.

Hallo Stefan,

da sind die Zählerwerte. Zählen musst Du bitte selber.

Grüße
Frank

Vielen Dank für die Antworten. Ich werde mich nach der Arbeit gleich mal ran setzen :slight_smile:

schöne Grüße, Stefan

Ich frage mich echt was ich falsch mache…
Im Debug vom Cutter kommt folgendes an:

1B1B1B1B01010101760504749402620062007263010176 010105017C31560B0A0149534B00045B0FF072620165017C2F 306201633DD900760504749403620062007263070177010B0A 0149534B00045B0FF0070100620AFFFF72620165017C2F3074 7707010060320101010101010449534B0177070100600100FF 010101010B0A0149534B00045B0FF00177070100010800FF65 001C510401621E52036303840177070100020800FF0101621E5203630FCC0101016331E90076050474940462006200726302017101630C 91000000001B1B1B1B1A036BD1

  • also genau die SML Daten die ich brauche.

Wenn ich dann die Zeichen zähle bräuchte ich für „0FCC“ beispielsweite folgendes Script:

SetValue(56865,hexdec(substr($IPS_VALUE, 358, -77)));

Die Variable 56865 wird auch aktualisiert, bleibt aber auf 0

Wenn ich den SML Inhalt - also alles was der Cutter im Debug zeigt manuell in eine String Variable schreibe und das Script darauf anwende, bekomme ich als Ergebnis 4044 - also genau den Wert, den der Zähler anzeigt.

Was mache ich falsch?

schöne Grüße, Stefan

Ich habe es hinbekommen!
Ich musste zwar das Script erst einmal auseinander nehmen um mir die Zwischenwerte ansehen zu können, aber so geht es.
Jetzt nur noch alles wieder zusammensetzen :wink:

$test = $_IPS[‚VALUE‘];
$test2 = hexdec(substr($test, 352, -76));
SetValue(43514,$test2);

Hallo
ich komme einfach nicht weiter…

Ich habe einen eBZD W2E8 Zweirichtungszähler, die optische Diode ist installiert Serieller Port, Cutter, Registervariable, Script, alles installiert. Es kommen auch Daten im Debug Modus an.

Trotz lesen des Threads, Recherche über das SML Protokoll benötige ich Eure Hilfe, ich sitze schon Stunden daran…

Woher weiß ich wie groß mein SML Frame ist, wo greif ich diese Info ab, ich denke an der seriellen Schnittstelle?
Dort kommt zwar die Eröffnungssequenz 1B 1B 1B 1B 01 01 01 01 ,
aber diese kommt immer wieder mit unterschiedlicher Länge im Debug Modus, müsste diese nicht immer gleich sein?

Wenn ich nicht sicher weiß wie groß mein Frame ist macht alles Weitere ja keinen Sinn, der Cutter liefert mir ja
die Datensätze aufgrund der eingestellten Größe und so wie ich das im Thread lese gibt es trotz SML Protokoll
unterschiedliche Längen…

Also erste Schlüsselfrage für mich, wo greife ich den Frame korrekt ab wo fängt er an… und wo hört er auf? Und wie lange ist er? Gibt es ein Tool um die Bytes zu zählen?

Ich möchte es gerne verstehen, aber irgendwie sitze ich auf dem Schlauch…

Wäre super wenn mir jemand Anschubhilfe leisten könnte.

Gruß Jürgen

Hallo Jürgen,
aus dem Debug kannst du erkennen, dass es von der Eröffnungssequenz bis zur nächsten immer in Summe 260 Bytes sind. Im Cutter also feste Schnitte auswählen und in der entsprechenden Konfiguration Länge 260 und als Sync-Zeichen die 1b1b1b1b01010101 angeben und den Schalter für HEX setzen.
Dann kannst du im Debug der Register-Variablen die Datensätze sehen.
Hast du weitere Fragen, können wir das schrittweise lösen.
Gruß, Peter

Hallo Peter,
vielen Dank ich zähl das gleich mal durch, ich habe mich nur über die Längenangaben auf der rechten Seite des Debug Fensters gestört, dachte da muss immer der gleiche Wert auftauchen…

Du hast recht! wenn ich die Zahlen rechts ab der Eröffnung bis zur nächsten addiere komme ich immer auf 260 oh je… das ist mir nicht in den Sinn gekommen.
Vielen Dank, klasse…jetzt bastele ich mal an dem Extrahieren der Werte denk ich komme nun weiter

Gruß
Jürgen