Seite 2 von 2

Re: MQTT Topic in Rule auswerten ?

Verfasst: 17. Apr 2023 20:16
von Homiehabbie
So, jetzt hat es geklappt. Vielen Dank noch einmal an Udo!

Schritt 1:

MQTT Explorer empfängt Topic "zigbee2mqtt/LeckageSensorWK":

{"battery":100,"battery_low":false,"device_temperature":27,"linkquality":135,"power_outage_count":41,"tamper":false,"voltage":3005,"water_leak":false}

Schritt 2:

mqtt.things

Code: Alles auswählen

Thing topic LeckageSensorWK "LeckageSensorWK" {
    Channels:
      Type trigger : click "click" [ stateTopic = "zigbee2mqtt/LeckageSensorWK" ]
}
Schritt 3:

event.log

Code: Alles auswählen

2023-04-17 20:09:00.298 [INFO ] [openhab.event.ChannelTriggeredEvent ] - mqtt:topic:Mosquitto:LeckageSensorWK:click triggered {"battery":100,"battery_low":false,"device_temperature":27,"linkquality":135,"power_outage_count":41,"tamper":false,"voltage":3005,"water_leak":true}
Schritt 4:

mqtt.rules

Code: Alles auswählen

rule "NotifyOnLeakage"
when 
  Channel 'mqtt:topic:Mosquitto:LeckageSensorWK:click' triggered 
then
  logDebug("Timmernabben", "Leakage sensor triggered")
  var waterLeak = transform("JSONPATH","$.water_leak", receivedEvent)
  logDebug("Timmernabben", waterLeak)
end
Wo finde ich eigentlich die Meldungen, die ich mit logDebug wegschreibe? Weder steht etwas im events.log noch im openhab.log. Meldungen, die ich mit logInfo wegschreibe, sehe ich jedoch.

Re: MQTT Topic in Rule auswerten ?

Verfasst: 17. Apr 2023 21:44
von udo1toni
Oh. Ja, das ist jetzt natürlich etwas ungünstig...
Das, was Du da bekommst, ist ja ein komplettes JSON Objekt...
Aber Du hast da ja schon perfekt gelöst.

Was das Logging betrifft: es gibt als Log-Befehle logDebug(), logInfo(), logWarn() und logError().
Die Befehle arbeiten jeweils identisch, geben aber einen unterschiedlichen LogLevel weiter.

Der verwendete Logger (Ich spreche hier jetzt mal von LoggerServer) log4j2 (Jepp, der mit dem Sicherheitsproblem... ist gefixt) wertet den LogLevel aus. Dabei wird nicht nur die Logzeile entsprechend verändert (also [DEBUG], [INFO], [WARN] oder [ERROR] ausgegeben), sondern der LoggerServer kann sich für jeden verwendeten Logger (eben nicht Server, sondern der Loggername, der mit angegeben wird) individuell merken, ab welchem LogLevel er überhaupt loggen soll.
Dabei ist der Default LogLevel INFO. DEBUG-Meldungen werden also gar nicht erfasst. Möchtest Du das ändern, so musst Du in die Karaf Konsole wechseln und dort den Befehl

Code: Alles auswählen

log:set DEBUG org.openhab.core.module.script.Timmernabben
eingeben. Ab diesem Zeitpunkt werden unmittelbar alle Meldungen mit protokolliert, welche mit logDebug("Timmernabben",...) erzeugt werden. Der erste String ist also der letzte Teil des Loggernamens, der vordere Teil des Loggernamens ergibt sich aus der Hierarchie.
Gespeichert werden die logX() Meldungen in openhab.log (es sei denn, man definiert eigene Dateien dafür...)
Ist man von Info-Meldungen genervt, kann man diese mit log:set WARN ... unterdrücken, oder gar mit log:set ERROR ... alles bis auf schwere Fehler ausblenden. log:set OFF ... wird den entsprechenden Logger komplett deaktivieren, log:set TRACE ... ist nur im Zusammenhang mit Addons oder dem Core interessant, diese Stufe gibt es bei Rules nicht. log:set DEFAULT ... wird den Logger auf den Wert des Elters setzen. log:list zeigt Dir alle definierten LogLevel an.