Smart Message Language
# 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:
* SyM$^2$ 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 SyM$^2$-Entwicklung im selben Konsortium statt. Stand November 2023 aktuell war die Version 1.04 vom 18. März 2013, herausgegeben vom Bundesamt für Sicherheit in der Informationstechnik.

## Grundlegender Aufbau

Jede 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.
SML-Datei Version 1 :
| 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 SyM$^2$-Zähler wird Ethernet verwendet, beim eHZ eine Infrarot-Schnittstelle nach DIN EN 62056-21.
Nachrichten sind in der Norm fest definiert; 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.