Wenn eine Regel in openHAB 3 nicht richtig funktioniert, kann es helfen, zusätzliche Debugging Statements in der Regel zu setzen und das Loglevel zu erhöhen, um einen detaillierteren Einblick in den Fehler zu bekommen.
Schreiben von Logging Statements in Regeln (DSL)
Wenn ihr die DSL Sprache (der Standard in openHAB 2, auch in openHAB 3 noch immer viel genutzt) zum Schreiben von Regeln verwendet, könnt ihr die folgenden Befehle in der Regel nutzen, um Logausgaben zu erzeugen:
logError("<scriptname>", "<logtext>")
logWarn("<scriptname>", "<logtext>")
logInfo("<scriptname>", "<logtext>")
logDebug("<scriptname>", "<logtext>")
Hierbei ersetzt ihr <scriptname>
durch einen Wert eurer Wahl. Dieser Wert ist gleich wichtig, denn ihr könnt das zu protokollierende Loglevel je Eintrag hier verändern.
In der Standardeinstellung wird alles bis „Info“ geloggt, also „Error“, „Warn“ und „Info“.
Beispiel
So könnte eine Regel mit Logging Statements aussehen:
rule "Lüftung - Items synchronisieren - Küche/Wohnen" when Item EG_Wohnen_Lueftung_Automatik changed or Item EG_Kueche_Lueftung_Automatik changed then logDebug("sync", "Synchronisiere Status von EG_Wohnen_Lueftung_Automatik und EG_Kueche_Lueftung_Automatik: " + newState) if(EG_Wohnen_Lueftung_Automatik.state != newState) { logDebug("sync", "Setze EG_Wohnen_Lueftung_Automatik auf " + newState) EG_Wohnen_Lueftung_Automatik.sendCommand(newState.toString) } if(EG_Kueche_Lueftung_Automatik.state != newState) { logDebug("sync", "Setze EG_Kueche_Lueftung_Automatik auf " + newState) EG_Kueche_Lueftung_Automatik.sendCommand(newState.toString) } end
Setzen des Loglevels
Wenn ihr das Level nun verändern möchtet (z.B. auch „Debug“ loggen), verbindet ihr euch mit der openHAB Karaf Konsole und führt das Kommando
log:set <LEVEL> org.openhab.core.model.script.<scriptname>
aus. Beispielsweise also:
log:set DEBUG org.openhab.core.model.script.helloworld
Mögliche Werte für <LEVEL> sind dabei (in steigender Reigenfolge, entsprechend des Loglevels das maximal protokolliert werden soll):
- OFF
- ERROR
- WARN
- INFO
- DEBUG
Zurücksetzen des Loglevels
Wenn alle Untersuchungen abgeschlossen sind, kann das Level mit
log:set DEFAULT org.openhab.core.model.script.<scriptname>
auf den Standard (Loggen bis INFO) zurückgesetzt werden oder z.B. mit
log:set OFF org.openhab.core.model.script.<scriptname>
komplett deaktiviert werden.
Anzeigen des aktuellen Loglevels
Alle aktuell eingestellten Level zeigt der Befehl
log:list
Schlusswort
Ich freue mich über eure Kommentare, ob euch der Beitrag weitergeholfen hat. Schreibt auch gerne, wenn ihr Fragen habt oder doch etwas unklar geblieben ist. Oder wenn ihr aufbauend darauf spannende weitere Automatisierungs-Projekte umsetzen konntet 🙂
Freiberuflicher IT Berater, Open Source Entwickler und begeisterter Smarthome Nutzer. Das hier ist mein Braindump für Technikthemen, die mich beschäftigen.