DDF-Handbuch / Teil A – Protokoll-DDF

CSV-Struktur & Blöcke

Grundregeln des Parsers

Regel Details
Trenner ;
Kommentar Zeile beginnt mit #
Mehrzeilige Felder in "…" einschließen (typisch für Formeln und SVG)
""" wird zu " (ein literales Anführungszeichen im Feld)
"" wird zu ' (Hochkomma)
Tab, CR, LF werden innerhalb von Feldern zu Leerzeichen. Ein Zeilenumbruch beendet deshalb keine Formelanweisung.
Feldränder ein einzelnes ' am Feldanfang/-ende wird samt Leerraum entfernt
Zeilenlänge max. 10000 Zeichen je logischer Zeile (IODEVICEDB_DESCRIPTION_MAX_LINE)
Erste Spalte in Datenzeilen leer (Zeile beginnt mit ;)

MUSS-Regel

Jede einzelne Formel muss mit ; abgeschlossen sein.

Der Formelinterpreter trennt Anweisungen ausschließlich am ;. Zeilenumbrüche werden beim Laden zu Leerzeichen. Ohne ; verschmelzen zwei Anweisungen zu einer ungültigen Formel. Ausnahmen sind nur die öffnenden Strukturteile IF … THEN, ELSE, ELSE IF … THEN, SWITCH x, CASE n:, DEFAULT: und FOR … DO. ENDIF;, ENDSWITCH; und ENDFOR; tragen wieder ein ;. Details: Formelreferenz.

Konsequenz für Formeln

Weil Zeilenumbrüche zu Leerzeichen werden, kann nur das ; Anweisungen trennen. Formeln stehen deshalb in "…" bzw. """…""". Ein ; innerhalb der Anführungszeichen beendet das CSV-Feld nicht. Alle geprüften Original-DDF (DEMO_DDF, SVG_CHARTS, Keba, Shelly, Elsner, OCPP GENERAL, LEDSTRIP, SEAMLESS SENSOR) schließen jede Anweisung mit ; ab.

Blöcke

Ein Block beginnt mit einer Zeile *NAME;SPALTE1;SPALTE2;…. Die Spaltennamen sind frei anordenbar. Es zählt der Name, nicht die Position. Alle folgenden Zeilen bis zum nächsten * gehören zum Block.

Block Typ intern Zweck
*GENERAL – ;KEY;VALUE[;Optionen] – Metadaten und Parameter
*READ PREPROCESS Lesefunktionen
*PREPROCESS PREPROCESS Synonym zu *READ
*WRITE ONCHANGE Schreibfunktionen
*ONCHANGE ONCHANGE Synonym zu *WRITE
*FUNCTION LISTENER Funktionen/Ereignisse (z. B. OCPP AUTHORIZE)
*LISTENER LISTENER Listener (REST LISTEN, OCPP)
*COMMAND – Kommandos (ID;ALIAS;FORMULA)
*ITEM – Datenpunkte
*GROUP – Gruppen (ID;ALIAS;NAME;SUFFIX;MASK)
*OBJECT – UI-Objekte / SVG
*IO – Ein-/Ausgänge (GROUP;ID;ALIAS;DIR)
*CONFIG – Konfiguration (ALIAS;VALUE;TYPE)
*SIGNATURE – Signatur, muss erste Sektion sein
*ARGS – Kopfzeile für Argumentzeilen (;*ARGS;…)

*INIT wird nicht erkannt

In einigen Beispielen steht ein *INIT-Block. Der Loader verarbeitet ihn nicht (zu klären). Initialisierungen gehören in DEFAULT der Items oder in eine Formel mit Merker-Variable.

Bibliotheken (PROTOCOL;LIBRARY) verwenden zusätzlich *SVGGROUP und *SVG (siehe Bibliotheken).

Argumente (*ARGS)

Argumente hängen an einer Funktion und werden innerhalb des Funktionsblocks definiert:

*READ;ALIAS;METHOD;URL;DATATYPE;POLLING;FORMULA
;*ARGS;METHOD;ALIAS;TYPE;NAME;VALUE;ITEM;FORMAT;
;ARGS;TURN;;url;/light/0;
;ARGS;TURN;;arg;turn;;turn_val;STRING;
;ARGS;STATUS;;header;Authorization;;$TOKEN;
;ARGS;*ALL;;header;Accept;application/json;;

Typischer Gesamtaufbau

*SIGNATURE …            (optional, zuerst)
*GENERAL
;KEY;VALUE
*READ;ALIAS;…;FORMULA
;*ARGS;…                (optional)
*WRITE;ALIAS;…;FORMULA
*FUNCTION / *LISTENER    (optional)
*COMMAND;ID;ALIAS;FORMULA (optional)
*CONFIG;ALIAS;VALUE;TYPE  (optional)
*GROUP;ID;ALIAS;NAME
*ITEM;GROUP;ALIAS;NAME;VISIBILITY;ID;UNIT;TYPE;DIR;DEFAULT;WFORMULA;RFORMULA;POLLING
*IO;GROUP;ID;ALIAS;DIR    (optional)
*OBJECT;GROUP;ID;ALIAS;TYPE;…;SVG;SVGANIMATE;SVGEVENT (optional)