Loxone Config – JSON Parser

JSON Dateien in Loxone auswerten

Hin und wieder kommt man in die Verlegenheit in Loxone Strukturdaten in JSON auslesen zu müssen. Sofern die Schlüssel eindeutig identifizierbar sind ist das über die virtuellen HTTP Eingänge mittels Regex auch gut möglich. Stößt man hier aber an die Grenzen und hat, kann oder will keinen separaten Loxberry oder RaspPi einsetzen, kann man nun auch direkt in Loxone JSON-Daten abfragen und auswerten. Erläuterungen und Sourcen zum Downloaden (v01) gibts in diesem Artikel.

Beim Stöbern durch das Loxforum bin ich auf einen Thread gestoßen, der mich auf die Idee gebracht hat einen JSON Parser für Loxone umzusetzen. Diese verrückte Idee kann man nur haben, wenn man keinen Loxberry im Einsatz hat. Ich gratuliere mir an dieser Stelle zu diesem Defizit: zu diesem Personenkreis zähle ich mich. 🙂

Als Grundlage habe ich einen bestehenden JSON-Parser für embedded Projekte (jsmn) verwendet und diesen zunächst nach picoC portiert. Die Probleme und Learnings hierbei könnten einen eigenen Artikel füllen, aber betrachten wir mal hier nur das Ergebnis…

Mit ein paar Erweiterungen ist ein allgemeiner JSON Parser für Loxone entstanden, der recht gut funktioniert. Natürlich bleibt picoC picoC und ein Miniserver ein Miniserver. Wer also JSON Dateien mit 2000 Zeilen hat, kann diese zwar verarbeiten, darf aber keine Performancewunder erwarten. Für die üblichen Fälle sollte es denke ich ganz gut funktionieren. Um eine Vorstellung zu bekommen: Auf meinem Miniserver Go Gen2 kann ich JSON Dateien mit 80 key/values in ca. 5 Sekunden ohne große Zusatzbelastung verarbeiten.

Neben dem eigentlichen Parsen muss man natürlich auch die auszulesenden Werte spezifizieren können. Also kann man natürlich nun auch eine kleine Konfiguration mit Kommentarzeilen angeben. Kommen wir aber gleich dazu…

Die Limitierung besteht darin, dass man mit picoC Bordmitteln leider keine https-Verbindungen nutzen kann, nur http. Sollte das also notwendig sein, bleibt nur der Einsatz eines Proxy für https-Terminierung oder eben dann doch die Loxberry/RaspPi Variante.

Aber genug von dem, was der Parser nicht kann…

Was kann der JSON-Parser?

Geparsed werden kann alles gemäß JSON Spezifikation. Im Detail kann man das auf der Seite von jsmn nachlesen. Ergänzen musste ich dann noch die Abfrage der JSON Werte. Nachstehend ein Beispiel. Das kann natürlich beliebige Tiefen haben.

Dabei fällt folgendes auf: Um in Loxone die Werte richtig zu interpretieren, muss man noch den Datentypen des ausgelesenen Wertes angeben. Zu Beginn einer jeden Konfigurationszeile steht also einer der folgenden Bezeichner:

  • i für int
  • f für float
  • b für bool
  • s für string

Damit die maximal 13 numerischen und maximal 2 String-Werte auch später noch zugeordnet werden können, kann man in der Konfiguration noch Kommentarzeilen angeben. Diese beginnen immer mit einem Hash (#).

Das erwartete JSON ist ein Objekt und muss mit einer geschweiften Klammer { beginnen. Das trifft auf die meisten Fälle zu.

Die Konfiguration die ich nachstehend zeige, liest beispielhaft einen Shelly-Controller aus (Klick auf das Bild macht es groß).

Zum Lesen der JSON Daten werden im Textgenerator-Baustein (Tr-Eingangskanal einschalten!) vier Informationen hinterlegt, dann an einen Programm-Baustein angeschlossen und auf dem Miniserver gespeichert. Und schon gehts los…

  1. IP-Adresse oder Name des abzufragenden Servers
  2. Seite, die abgefragt werden soll. Der finale Request, der im Bild konfiguriert ist lautet: http://192.168.13.69/rpc/Shelly.GetStatus
  3. Im Texteditor wird die komplette Konfiguration wie oben beschrieben hinterlegt. Daran denken: Es können maximal 2 Textausgänge und 13 numerische Ausgänge genutzt werden.
  4. Wartezeit in Sekunden (im Bild also 60 Sekunden) bis zum nächsten Check.

Folgende Phasen werden dabei durchlaufen und zur Information auch ausgegeben:

  1. Abfrage –
  2. Parsen –
  3. Statusinfo –
  4. Warten –

Wer mag – die Sourcen

Hier der Parser zur Verwendung.



Feedback ist natürlich jederzeit willkommen. Nachmachen wird nicht empfohlen…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert