Stringvergleich bei notify und ReadingsVal klappt nicht

Begonnen von it-place, 12 August 2023, 15:11:15

Vorheriges Thema - Nächstes Thema

it-place

Hallo,

mein Z-Wave Wassersensor soll in Fhem einen Alarm an das Device Wassersensor melden. Ich habe versucht das wie folgt zu realisieren:
define WassersensorAlarm notify ZWave_SENSOR_NOTIFICATION_5:alarm:.* {\
  if (ReadingsVal("ZWave_SENSOR_NOTIFICATION_5", "alarm", "-1") eq "Test") {\
    fhem "set Wassersensor on";;\
    fhem "set pushmsg msg title='Fhem' message='Wassersensor Alarm Küche!' sound='tugboat'";;\
  }\
}

Der oben genannte Code funktioniert auch soweit. Mein Problem ist, dass bei einem echten Alarm des Sensors im Reading 'alarm' folgende Meldung steht:
Zitatalarm: Water: Leak detected - Unknown Location

Ändere ich die Zeile mit der if-Abfrage auf die Meldung aus 'alarm' wie folgt, löst der Alarm nicht mehr aus:
if (ReadingsVal("ZWave_SENSOR_NOTIFICATION_5", "alarm", "-1") eq "alarm: Water: Leak detected - Unknown Location") {\
Wo liegt mein Gedankenfehler?

Danke im voraus und viele Grüße, Olli ;)

betateilchen

Warum packst Du das nicht direkt in das define Deines notify?

define WassersensorAlarm notify ZWave_SENSOR_NOTIFICATION_5:alarm:alarm.* {\
    fhem "set Wassersensor on";;\
    fhem "set pushmsg msg title='Fhem' message='Wassersensor Alarm Küche!' sound='tugboat'";;\
}

Dadurch sparst Du Dir die zusätzlich Abfrage und könntest sogar die Übergabe an fhem "..." weglassen, da nur zwei FHEM Befehle übrigbleiben, die Du direkt in den Ausführungsteil schreiben kannst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

it-place

Ah, vielen Dank! Das ist natürlich einfacher... :)
Allerdings hatte ich zusätzlich noch einen Fehler gemacht: im Reading von 'alarm' steht nur "Water: Leak detected - Unknown Location" ohne das "alarm:". Das hatte ich mir aus dem Logfile falsch kopiert.
Meine Zeile lautet nun also:
define WassersensorAlarm notify ZWave_SENSOR_NOTIFICATION_5:alarm:.* {\
Du sagst, dass ich auch die Einleitung mit 'fhem...' weglassen könnte. Darf man dass dann vereinfacht so schreiben?
... { (set Wassersensor on) (set pushmsg msg title='Fhem' message='Wassersensor Alarm Küche!' sound='tugboat') }

betateilchen

#3
Zitat von: it-place am 12 August 2023, 16:24:27... { (set Wassersensor on) (set pushmsg msg title='Fhem' message='Wassersensor Alarm Küche!' sound='tugboat') }

Lass die Klammern weg und trenne die zwei Befehle mit Semikolon.
So, wie es in der commandref beschrieben steht.

https://commandref.fhem.de/#notify



Zitat von: it-place am 12 August 2023, 16:24:27Ah, vielen Dank! Das ist natürlich einfacher... :)
Allerdings hatte ich zusätzlich noch einen Fehler gemacht: im Reading von 'alarm' Meine Zeile lautet nun also:
define WassersensorAlarm notify ZWave_SENSOR_NOTIFICATION_5:alarm:.* {\

Das kannst Du zwar so machen, Dir sollte aber dabei bewusst sein, dass damit jeder Inhalt in dem reading die Benachrichtigung auslöst.

Ich würde das so konkretisierenm

define WassersensorAlarm notify ZWave_SENSOR_NOTIFICATION_5:alarm:Wasser.*
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!