If Anweisung im Notfiy mag nicht

Begonnen von netdom, 28 Mai 2015, 12:42:15

Vorheriges Thema - Nächstes Thema

netdom

Hallo,

ich habe mir ein Notify gebaut das mich bei hohen Feuchtigkeitswerten auf meiner Dreambox daran erinnert mal zu lüften. Nun habe ich zusätzliche Sensoren in Keller und draussen, das also auch mal höhere Werte sein können ohne das dies ein Problem ist.
Nun möchte ich also hergehen und z.B. wenn der Wohnzimmersensor einen Wert liefert, diesen auf die Feuchtigkeit prüfen. Beim Aussensensor soll einfach nichts passieren.

Leider funktioniert meine Definition nicht:

.*humidity:.* 
     
     {
     if ($NAME eq "Sensor_Wohnzimmer")
         {
         if ($EVTPART1 > 40.0)
            {
            (set wz.dm800se msg info 5 Luftfeuchtigkeit $NAME zu hoch, bitte lüften)
            Log 3, "$NAME : Luftfeuchtewarnung $EVENT";
          } 
          }
      }


Im Logfile steht:
2015.05.28 12:41:55 3: Luftfeuchte.ntfy return value: Unknown command {
, try help.
Unknown command }, try help.


Ohne die 2. if Bedingung, also die reine Auswertung der Feuchtewerte funktioniert problemlos. Sobald aber das 2. if (in dem Fall die Erkennung welcher Sensor die Meldung schickt)dazu kommt, geht es nicht mehr. Was mache ich falsch ?

marvin78

Einen Befehl kannst du im Perl Bereich so nicht absetzen. Warum prüfst du dann nicht im notify auf das konkrete Device?

Sensor_Wohnzimmer.*humidity.* {
   if ($EVTPART1 > 40.0) {
       fhem("set wz.dm800se msg info 5 Luftfeuchtigkeit $NAME zu hoch, bitte lüften");
       Log 3, "$NAME : Luftfeuchtewarnung $EVENT";
   } 
}

netdom

Das sieht schon mal gut aus, ich will natürlich nicht für jeden auszulesenden Sensor ein eigenes Notify bauen, daher habe ich:

Sensor_.*zimmer.*humidity.*

definiert.

Mit Meldung erfassen:
Sensor_Arbeitszimmer
Sensor_Schlafzimmer
Sensor_Wohnzimmer

Extra behandeln:
Sensor_Technikkeller
Aussensensor_Nord

Das funktioniert schon mal, prima, danke :-) Wie so oft zu kompliziert gedacht.


Jetzt gehts ins Bonuslevel. Nun möchte ich gerne noch den Humidty Wert des Aussensensors mit einbeziehen und wenn dieser höher als der Innenwert ist, soll die Meldung nicht angezeigt werden.

Gesamt sieht mein (funktionierendes) Werk dann so aus:


Sensor_.*zimmer.*humidity:.*  {
if (ReadingsVal('Aussensensor_Nord','humidity','') < $EVTPART1 && $EVTPART1 > 60.0) {
  fhem("set wz.dm800se msg info 5 Luftfeuchtigkeit $NAME zu hoch, bitte lüften");
Log 3, "$NAME : Luftfeuchtewarnung $EVENT";
}
}



Vllt. hilft das ja irgendwann bei einer Suche mal jemandem.

moes

Hallo netdom,

ich bin seit ein paar Tagen dabei mir deine Funktion zu erarbeiten. Wäre es möglich mal Deine Gesamte Funktion zu sehen? In Perl mache ich gerade meine ersten Gehversuche. Bis ich da das laufen gelernt habe wird sicher noch ein wenig dauern.

VG Moe