[Modul] SML-Counter zur Integration der Infrarotschnittstelle von Haushaltszählern

SML-Counter

Grundsätzliches

Die Bibliothek dient dazu SML (Smart Message Language) basierte Zähler per Infrarot-Lese/Schreibkopf in IP-Symcon einzubinden. Am weitesten verbreitet sind die elektronischen Hausstromzähler.

Typischerweise ist die Infrarot-Schnittstelle vom Netzversorger aus Datenschutzgründen gesperrt. Wer seinen Zähler in den eigenen 4 Wänden hat, oder wen fremde Blicke auf die eigenen Daten nicht stören, kann die Schnittstelle per PIN freischalten. Die PIN gibt es beim Netzversorger.

Für die Datenübertragung vom Zähler zum IP-Symcon-Server wird ein USB-Lese/Schreibkopf eingesetzt.

Konfiguration

Standard

  • In den IO-Instanzen einen Serial-Port erzeugen. Bei der Konfiguration der Baudrate bitte die Angaben des Zähler-Herstellers beachten. Typische Werte sind 300 oder 9600.
  • Im Objektbaum eine SML_Electricity-Instanz erzeugen. Hierdurch wird automatisch eine Cutter-Instanz im Splitter-Bereich angelegt und konfiguriert.
  • In der SML_Electricity-Instanz die gewünsche Updatehäufigkeit einstellen.
  • Im letzten Schritt noch die Cutter-Instanz mit dem Serial-Port verbinden.

SML-Counter über HTTP-Client

  • Im Objektbaum eine SML_Electricity über HTTP-Instanz erzeugen. Hierdurch wird automatisch eine HTTP-Client-Instanz angelegt.
  • HTTP-Client nach Vorgabe der einzubindenden Hardware konfigurieren.

Fertig!

Experten-Einstellungen

  • Einfache Datensatzprüfung
    Ist diese eingeschaltet, so wird der ankommende Datensatz auf grundsätzliche Fehler überprüft.
  • Datensatzprüfung per Prüfsumme
    Ist diese eingeschaltet, so wird anhand der Prüfsumme gecheckt, ob der ankommende Datensatz fehlerfrei ist.

Bei beiden Optionen werden fehlerhaft Datensätze blockiert.

  • Fehlende Variablen anlegen
    Standardmäßig ist die Option eingeschaltet. Das Modul legt für die vom Zähler gesendeten Werte Variablen an.
    Werden unerwünschte Variablen angelegt, wartet man solange, bis alle gewünschten Variablen angelegt sind. Danach die Option ausschalten und die nicht benötigten Variablen löschen.

Unterstützte Werte

Welche Werte zur Verfügung gestellt werden, hängt hauptsächlich vom eigesetzten Haushaltszähler ab. Vom Modul werden folgende Werte unterstützt:

  • Zählerstand Gesamtverbrauch bzw. Gesamtlieferung ins Netz
  • aktuelle Gesamtleistung
  • Netzfrequenz
  • Spannung je Phase
  • Stromstärke je Phase
  • Leistungsfaktor je Phase
  • aktuelle Leistung gesamt und je Phase (negativ bei Lieferung ins Netz)
  • Blindleistung gesamt und je Phase
  • Darstellung der Verbräuche je Tarif
5 „Gefällt mir“

Changelog

V1.00

Basisversion

V1.01

Auswertelogik umgestellt

V1.02

Fix: 0-Werte werden nicht aktualisiert

V1.03

Neu: Decodierung auf SML-Standard optimiert

V1.04

Neu: Checksummen-Test von @mischo22 ergänzt

V1.05

Neu: Basis-Prüfung des Datensatzes
Neu: Experteneinstellung zum Zu- und Abschalten der Prüfungen

V1.06

Fix: Modulo-Fehler bei 32-bit-Systemen

V1.07

Neu: Sende Eröffnungssequenz

V1.08

Fix: 24-bit signed Integer

V1.09

Neu: Unterstützung historischer Werte
Fix: Rundungsfehler

V1.10

Fix: Leistungsprofil für IP-Symcon-Version < 6.1

V1.11

Neu: Option zum Anlegen fehlender Variablen
Fix: Werte werden nicht mehr gerundet

V1.12

Fix: Aktualisierungsinterval bei kurzen Datensätzen.

V1.13

Neu: SML-Counter über HTTP-Client

V1.01 mit neuer Auswertelogik

Ich habe mich heute Abend nochmal durch die Zusammenhänge der SML gequält. Es hat sich gelöhnt. Die meisten Umfänge kann ich jetzt decodieren. Das Modul hat sich dadurch noch einmal grundlegend geändert. Der Vorteil der neuen Version ist, dass jetzt auch eher exotische Werte unterstützt werden.

Sollten Euch Werte fehlen, die Euer EHZ zur Verfügung stellt, bitte Bescheid sagen. Diese sollten sich relativ leicht einpflegen lassen.

Wie immer ist die Version zunächst als Beta im Modul-Store erhältlich. Die Stable ist aber bereits im Review.

Viel Spaß beim Probieren.
Jürgen

Die Stable-Version ist jetzt verfügbar.

Ich freue mich auf Euer Feedback
Jürgen

Hallo Jürgen,

wo soll denn der Lesekopf angeschlossen werden ?
An einen Win PC oder geht dies auch an einen Raspberry Pi 4 wo IP-Symcon drauf läuft.

Gruß Jürgen

Hallo Jürgen,

ich habe ihn an einem Raspi hängen. Läuft wunderbar. Ist wahrscheinlich noch unproblematischer, als an einem Windows-PC. Einfach anstecken und los geht es. Ich nutze den Lesekopf von Weidmann. Wie sich andere Leseköpfe verhalten kann ich nicht sagen. Sollte aber -wenn man den Foren so glaubt- auch kein Problem darstellen.

Grüße
Jürgen

Ich habe einen Zweirichtungszähler wegen PV-Anlage. In dem Modul habe ich festgestellt, wenn die Sonne untergeht und damit die Einspeisung gen 0 geht, dass der letzte Wert <0 dann dauerhaft (über Nacht) stehen bleibt. Eigentlich liefert der Zähler ja dann dauerhaft 0.

ok, das Problem kann ich nachvollziehen. Die Funktion mit dem 0-Filter habe ich reingenommen, da der Zähler gerne mal eine falsche 0 sendet. Da muss ich eine Trennung zwischen Energie und Leistung vornehmen. Werde ich kurzfristig optimieren.

Grüße
Jürgen

@Silberstreifen

Vielen Dank für das tolle Modul, sehr gute Arbeit, ich bin zufrieden, ist man nicht anders von dir gewohnt.

Gruß

1 „Gefällt mir“

V1.02 - Fix: 0-Werte werden nicht aktualisiert

So, der Fehler ist behoben. Das Update steht ab sofort als Beta- und in Kürze als Stable-Version zur Verfügung.

Grüße
Jürgen

1 „Gefällt mir“

Vielen Dank! Ich werde es probieren und gebe dir eine Rückmeldung - nach Sonnenuntergang. :first_quarter_moon_with_face:

Bisher hab ich den SML-Zähler per Cutter und Register-Variable ausgelesen. Das war vor ca. 5 Jahren mein erstes Projekt, als ich mit IPS angefangen habe.
Das Modul erleichtert es natürlich ungemein und ich war erstaunt, dass selbst die Konfiguration der Schnitte automatisch lief. Da musste ich mich vor 5 Jahren ganz schon reinverdenken als Neuling. Auch erstaunt war ich, dass ich das Modul parallel zu meinem Cutter ebenfalls auf den SerialPort hängen kann und beide funktionieren. Damit kann ich beide erstmal parallel laufen lassen. Werde dann auf Kurz oder Lang zu dem Modul wechseln.
Ehrlich gesagt hatte ich aber auch die Hoffnung, meinem Zähler noch ein paar mehr Daten zu entlocken. Liefert er wirklich nur jeweils Leistung und Energie in zwei Richtungen?

Nach dem Tip gestern im Community Chat habe ich das SML Counter Modul mal installiert.
Laut Debug-Log werden bei dem Modul die Werte 1.8.0 und 2.8.0 empfangen.
Die Frage ist nun, wo kommen die Daten hin?
Unter der Instanz werden jedenfalls keine Variablen mit den Zählerständen angelegt.

Was mache ich falsch?

DebugLog:

30.01.2022, 15:22:16 |                1.8.0 | 01 08 00 7F 65 00 04 19 04 01 62 1E 52 03 69 00 00 00 00 00 00 00 00 
30.01.2022, 15:22:16 |                2.8.0 | 02 08 00 7F 01 01 62 1E 52 03 69 00 00 00 00 00 00 00 1D 01 01 01 63 60 0C 00 76 09 00 13 00 00 00 2B 7E 25 62 00 62 00 72 65 00 00 02 01 71 01 63 4C 5B 00 00 1B 1B 1B 1B 1A 01 22 5E 


Beim Sonnenuntergang fiel die Einspeiseleistung auf 0 und bleibt auch dort. Danke nochmal!

gar nichts. Das ist ein Code, den ich noch nicht hatte. Spiele ich bei mir mal ein und es gibt dann einen Fix dazu.
Grüße
Jürgen

Hallo Jürgen.
Ich beschäftige mich gerade auch mit dem Thema, aber du warst mit deinem Modul schneller.
:wink:

Folgendes solltest du auf jeden Fall einbauen:
Auswertung der CRC-Prüfsumme und verwerfen der SML-Nachricht, wenn diese nicht passt.
Die meisten Zähler werden über optische Schnittstellen ausgelesen.
Da passiert es häufiger mal, dass ein Bit umkippt.
Bei Zählerständen würde eine falsche Ziffer das Archivlog der IPS Variable komplett durcheinanderbringen. das habe ich jede paar Wochen mal bei meinen D0-Zählern.
Das ist wirklich wichtig!

Hier hat sich schon mal jemand mit der Prüfziffer beschäftigt und herausgefunden, wie man das macht:

Grüße
Michael

Hallo Michael,

danke für den Hinweis. Die Homepage ist eine Goldgrube für die SML-Auswertung!

Hast Du schon etwas für das Modul geschrieben, z.B. die CRC-Berechnung, was Du weitergeben magst? Dann würde ich das in das Modul integrieren.

Grüße
Jürgen

Ja, bin gerade dabei, was vorzubereiten zum Thema CRC.
Klappt aber gerade noch nicht. Irgendwo ist da noch ein Fehler.

Wenn das funktioniert, kannst du das dann in dein Modul übernehmen.

In dem Link vom letzten Post ist auch genau beschrieben, wie das mit den Listen im SML funktioniert.

Grüße
Michael

ja, sehr gut aufgearbeitet. Das gucke ich gerade durch und wird soweit wie möglich integriert.

Grüße
Jürgen

Hier gibt es noch einige Infos zu Fehlern:
https://shop.weidmann-elektronik.de/media/files_public/84e864a20d9764a714fbddbf0c0a4c7a/BekannteProblememitZhlermodellen.pdf

V1.03 - Optimiertung auf den SML-Standard

Danke für Eure Rückmeldungen zum Modul. Das hat sehr bei der Optimierung geholfen!

Ich habe die Systematik jetzt komplett auf die Beschreibung aus der von @mischo22 geposteten Homepage umgestellt. Dadurch sollte das Modul jetzt deutlich robuster bei jeder Art von Haushaltszähler laufen und ist auch gut vorbereitet auf weitere SML-Zähler-Varianten.

Die neue Version ist jetzt als Beta verfügbar. Wenn keine negativen Rückmeldungen kommen, stelle ich kurzfristig auf Stable um.

Grüße
Jürgen