Feuchtigkeitswarnung realisieren - Dummy aktualisiert sich nicht

Begonnen von Fhemschorsch, 12 September 2017, 19:46:36

Vorheriges Thema - Nächstes Thema

Fhemschorsch

Hallo,

meine FHEM Installation läuft schon - man kann mittlerweile sagen - Jahre superstabil und ich bin ein echt zufriedener User. Jetzt habe ich mich mal an das Thema "Werte auslesen" herangetraut und versuche mich derzeit darin, dass mir per Telegram gemeldet wird, wenn z.B. im Keller eine zu hohe Luftfeuchtigkeit herrscht.

Mein erster Versuch sieht folgendermaßen aus:

define Keller2_zufeucht dummy
attr Keller2_zufeucht room Homekit,Keller2
attr Keller2_zufeucht event-on-change-reading .*
define Keller2_zufeuchtNotify notify 30E392:humidity.* {\
if (ReadingsVal('30E392','humidity','0') > 65) {\
fhem "set Keller2_zufeucht on";;\
};;\
if (ReadingsVal('30E392','humidity','0') < 66) {\
fhem "set Keller2_zufeucht off";;\
};;\
}
define watchdog_keller2_zufeucht watchdog Keller2_zufeucht:on 00:01 Keller2_zufeucht:off set telegram_ted send @12345 Der Keller2 hat über 65% Luftfeuchtigkeit 💦
attr watchdog_keller2_zufeucht room Keller2


Der Watchdog funktioniert auch ganz wunderbar - wenn ich den Dummy manuell auf on stelle, dann löst eine Minute später die Telegram-Nachricht aus. Jedoch leider setzen die IF-Befehle den Dummy nicht automatisch auf on.

Über jede Hilfe freue ich mich!

Viele Grüße

Amenophis86

#1
1. Am besten nicht in der cfg direkt schreiben
2. Der FHEM Befehl in Perl ist falsch. Fhem in Perl muss wie folgt geschrieben werden {fhem("Befehl")} , wobei die {} für Perl stehen.

Das heißt deine Klammern sind falsch.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Otto123

zur Info: Es gibt das Modul THRESHOLD - das macht genau so etwas  ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Fhemschorsch

Hi,

zur cfg-Direkt: Ja, ich weiß  8). Ich habe vor Jahren angefangen alles immer direkt in die cfg zu schreiben, hab mir auch schon vor Monaten vorgenommen, das zu lassen, aber was soll ich sagen - die Macht der Gewohnheit.

Ich habe es jetzt soweit über das Webinterface in der DEF  ;) geändert, aber es will immer noch nicht:

30E392:humidity.* {
if (ReadingsVal('30E392','humidity','0') > 65) {
fhem ("set Keller2_zufeucht on");
};
if (ReadingsVal('30E392','humidity','0') < 66) {
fhem ("set Keller2_zufeucht off");
};
}


Aber es will immer noch nicht. Eigentlich hätte ich gedacht, dass er sich ordnungsgemäß aktualisiert, sobald sich was an dem Humidity-Wert ändert (wg event-change-on-reading). Oder muss ich da dem Notify das Attribut geben?

@Otto123: Ja, ich weiß. Ich hab jetzt erstmal den Weg gewählt, der Fehler scheint bei mir ja eher die Klammerei und die Syntax an sich zu sein. Optimierungen folgen dann :-)

Otto123

#4
Zur Fehlersuche und Optimierung:
Was liefert Dir der Eventmonitor wenn Du dort den Filter auf 30E392:humidity.*setzt?
Was liefert Dir {ReadingsVal('30E392','humidity','0')} wenn Du das oben in die FHEM Kommandozeile wirfst?
Eigentlich sollten Deine Werte im $EVENT stehen, d.h. Du brauchst eigentlich Readingsval nicht.
if ($EVENT > ..)
Da Du nichts weiter machst, brauchst Du auch nicht nach Perl zu switchen, Du könntest den FHEM Befehl IF nehmen: 30E392:humidity.* IF ([30E392:humidity] > 65) (set Keller2_zufeucht on); IF ([30E392:humidity] < 66) (set Keller2_zufeucht off)


Da der Fall < 66 eigentlich der alternative Fall zu > 65 brauchst Du eigentlich kein zweites if (IF) und kannst auch einfach  else (ELSE) nehmen.

Ich habe den Code nicht getestet!

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frank_Huber

Zitat von: Fhemschorsch am 12 September 2017, 19:46:36
define Keller2_zufeucht dummy
attr Keller2_zufeucht room Homekit,Keller2
attr Keller2_zufeucht event-on-change-reading .*
define Keller2_zufeuchtNotify notify 30E392:humidity.* {\
if (ReadingsVal('30E392','humidity','0') > 65) {\
fhem "set Keller2_zufeucht on";;\
};;\
if (ReadingsVal('30E392','humidity','0') < 66) {\
fhem "set Keller2_zufeucht off";;\
};;\
}
define watchdog_keller2_zufeucht watchdog Keller2_zufeucht:on 00:01 Keller2_zufeucht:off set telegram_ted send @12345 Der Keller2 hat über 65% Luftfeuchtigkeit 💦
attr watchdog_keller2_zufeucht room Keller2


Nue ein Verdacht, liefert ReadingsVal nicht die Einheit mit?
versuche es mal mit ReadingsNum

Fhemschorsch

Leute, ich bin sowas von doof!

Also, das mit den Klammern war ein super Tipp, aber dann muss der Threadersteller natürlich auch noch darauf achten, dass er den korrekten Namen des Devices nimmt.
Nachdem ich also 5 Minuten auf den Code gestarrt habe, fiel mir auf, dass die Homematic Devices doch alle im Namen mit HM_xxxxx anfangen. Ich hab aber auf das DEF geschaut, wo das HM_ gefehlt habe.

So funktioniert es jetzt wunderbar:

HM_30E392:humidity.* {
if (ReadingsVal('HM_30E392','humidity','0') > 65) {
fhem ("set Keller2_zufeucht on");
};
if (ReadingsVal('HM_30E392','humidity','0') < 66) {
fhem ("set Keller2_zufeucht off");
};
}


Und {ReadingsVal('HM_30E392','humidity','0')} ergibt z.B. 65. Als ReadingsNum übrigens auch.

Und im Eventmonitor kommt:

2017-09-15 20:55:46 CUL_HM HM_30E392 T: 16.9 H: 65

Wahrscheinlich kann ich mir die ReadingsVal-Arie dann sparen.

Frank_Huber

Hauptsache es ist gefunden! 😉

Ich würde das ganze als doif machen.

So aus dem koof:

Define test DOIF ([HM_30E392:humidity] > 65) (set Keller2_zufeucht on) DOELSEIF (HM_30E392:humidity] < 66) (set Keller2_zufeucht off)

Gesendet von meinem S3_32 mit Tapatalk