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;;
;*ARGS;…definiert die Spaltennamen der Argumentzeilen.;ARGS;<FunktionsALIAS>;…hängt ein Argument an die Funktion<FunktionsALIAS>.*ALLhängt es an alle Funktionen.- Die Spalte direkt nach
ARGSist immer der Funktions-Alias. In den Originaldateien (Shelly, SEAMLESS SENSOR) heißt sie im KopfMETHOD, danach folgt eine leere SpalteALIAS, dannTYPE;NAME;VALUE;ITEM;FORMAT. Übernehmen Sie diesen Kopf unverändert. Ob der Loader die Spalten über die Kopfnamen oder über ihre Position zuordnet, ist zu klären. - Die ersten beiden Zeilen stammen aus der Shelly-DDF, die letzten beiden sind schematisch.
- Spalten:
ALIAS,TYPE,NAME,VALUE,ITEM,FORMAT. Die Bedeutung hängt vom Protokoll ab (siehe REST, MQTT, SERCOM).
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)