FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Fhemschorsch am 12 September 2017, 19:46:36

Titel: Feuchtigkeitswarnung realisieren - Dummy aktualisiert sich nicht
Beitrag von: Fhemschorsch am 12 September 2017, 19:46:36
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
Titel: Antw:Feuchtigkeitswarnung realisieren - Dummy aktualisiert sich nicht
Beitrag von: Amenophis86 am 12 September 2017, 21:32:41
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.
Titel: Antw:Feuchtigkeitswarnung realisieren - Dummy aktualisiert sich nicht
Beitrag von: Otto123 am 12 September 2017, 21:54:36
zur Info: Es gibt das Modul THRESHOLD - das macht genau so etwas  ;)
Titel: Antw:Feuchtigkeitswarnung realisieren - Dummy aktualisiert sich nicht
Beitrag von: Fhemschorsch am 15 September 2017, 09:17:18
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 :-)
Titel: Antw:Feuchtigkeitswarnung realisieren - Dummy aktualisiert sich nicht
Beitrag von: Otto123 am 15 September 2017, 09:44:42
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
Titel: Antw:Feuchtigkeitswarnung realisieren - Dummy aktualisiert sich nicht
Beitrag von: Frank_Huber am 15 September 2017, 09:48:51
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
Titel: Antw:Feuchtigkeitswarnung realisieren - Dummy aktualisiert sich nicht
Beitrag von: Fhemschorsch am 15 September 2017, 21:01:28
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.
Titel: Antw:Feuchtigkeitswarnung realisieren - Dummy aktualisiert sich nicht
Beitrag von: Frank_Huber am 15 September 2017, 21:08:15
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