Smart Message Language
Smart Message Language (SML) ist ein Kommunikationsprotokoll für Stromzähler, das unter anderem für Messdatenaustausch, aber auch für Firmwareupgrades entwickelt wurde.
Dieses Protokoll wird in folgenden Zählern genutzt:
- SyM2 taktsynchroner Lastgangzähler
- eHZ, elektronischer Haushaltszähler im Entwurf Version 2.01 vom 10. November 2008
- EDL Zähler, aufbauend auf der Hardware des eHZ.
- Beispiel: EMH-ED300L
- Beispiel: Easymeter Q3-Reihe
- FNN Basiszähler, auf der LMN Schnittstelle zum Smart Meter Gateway
Die Entwicklung findet parallel zur SyM2-Entwicklung im selben Konsortium statt. Stand November 2023 aktuell[1] war die Version 1.04 vom 18. März 2013, herausgegeben vom Bundesamt für Sicherheit in der Informationstechnik.[2]
Grundlegender Aufbau
BearbeitenJede Informationseinheit wird als SML-Datei bezeichnet. Sie kann einen SML-Auftrag, eine SML-Antwort oder eine Kombination aus beiden enthalten. Eine SML-Datei wird aus SML-Nachrichten zusammengesetzt und von einer Start- und Endsequenz umfasst. Eine SML-Nachricht ist entweder ein Auftrag oder eine Antwort.
Escape-Sequence | 1B 1B 1B 1B |
Beginn der SML-Datei (Version 1) |
01 01 01 01 |
Open-Nachricht | SML_PublicOpen.Req |
Nachricht(en) | zu transportierende Nachricht(en) |
Close-Nachricht | SML_PublicClose.Req |
Füllbytes (um eine durch 4 teilbare Dateilänge zu erhalten) |
00 (<xx>-mal) |
Escape-Sequence | 1B 1B 1B 1B |
Ende der SML-Datei <xx> : Anzahl der Füllbytes <yy> <zz> : Prüfsumme über die Datei |
1A <xx> <yy> <zz> |
Die Prüfsumme wird nach dem CCITT-CRC16 (Polynom: 0x1021, Init: 0xFFFF, RefIn: True, RefOut: True, XOrOut: 0xFFFF) über alle Bytes des Datenstroms im SML-Transportprotokoll mit Ausnahme der letzten beiden Bytes (und damit ohne die Bytes der Prüfsumme selber) berechnet.
Sollte in dem Nutzdatenstrom die Escape-Sequence (1B 1B 1B 1B) selbst enthalten sein, wird diese um eine zweite Escape-Sequence ergänzt.
Es gibt eine Textform und ein komprimiertes Binärformat, die ineinander überführt werden können. Das Übertragungsmedium ist nicht festgelegt. Beim SyM2-Zähler wird Ethernet verwendet, beim eHZ eine Infrarot-Schnittstelle nach DIN EN 62056-21.
Nachrichten sind in der Norm fest definiert[1]; eine Nachricht ist immer eine Struktur (SEQUENCE) bestehend aus (optionalen) einfachen Datentypen (Boolean, Integer, Unsigned, String,), Strukturen (SEQUENCE), Auswahl von Strukturen (CHOICE), und/oder Arrays von Strukturen (SEQUENCE OF). Datentypen werden im Datenstrom mit einem Typ-Längen-Feld eingeleitet, in dem der Datentyp und die Länge der Dateninformation abgelegt ist. Das Wort 0x1234 wird zum Beispiel als folgende Bytesequenz übertragen: 0x63 0x12 0x34.
In den Nachrichten können Messdaten wie momentaner oder saldierter Stromverbrauch übertragen werden. Dabei werden zur Kategorisierung der Daten OBIS-Kennzahlen verwendet.
Weblinks
Bearbeiten- vde.com/… – Offizielle Webseite des FNN zum Sym2
- vde.com/… – SML-Spezifikation Version 1.03 vom SyM2-Konsortium
- bsi.bund.de/... – SML-Spezifikation Version 1.04 vom Bundesamt für Sicherheit in der Informationstechnik
- jSML, Java-Bibliothek für SML (LGPL)
- libsml, C-Bibliothek für SML, offizielles, aktiv gepflegtes Repository als Nachfolger des Dailab Repositories
- smldump, Perl-Skript zur Ausgabe der Struktur und der Daten einer SML-Datei
- sml-easy.pl, Perl-Skript zum einfachen Auslesen von SML basierenden Zählern
- SmartMeter.py, Python-Beispiel-Skript zum Auslesen eines SML basierenden Zählers
- ED300L.pdf, Beispiel einer vollständigen SML Parameterbeschreibung
- smartmeter-obis, NodeJs basiertes Parser Library
- vzlogger, Datenlogger mit SML-Unterstützung