FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: denny am 07 Oktober 2015, 11:51:59

Titel: DOIF -> Kühlschrank mit HM-Sec-SC-2 und Notification
Beitrag von: denny am 07 Oktober 2015, 11:51:59
Hallo,

da unser Kühlschrank die Eigenschaft hat, nicht immer richtig zu schließen, habe ich einen Fensterkontakt von Homatic HM-Sec-SC-2 angebracht. Ziel ist es eine Notification zu erhalten, wenn der Kühlschrank nach einer Minute nicht geschlossen wurde.

Das wurde bisher so gelöst (Code von einem Freund):


define Dach_Kueche_Kuehlschrank_watch watchdog Dach_Kueche_Kuehlschrank:open 00:01 Dach_Kueche_Kuehlschrank:closed set MyTTS tts Der Kühlschrank ist noch auf.
define Dach_Kueche_Kuehlschrank_reset notify Dach_Kueche_Kuehlschrank:closed {fhem("trigger Dach_Kueche_Kuehlschrank_watch .")}


Das funktioniert auch wie gewünscht. Der nächste Wunsch war nun aber auch noch, dass jede Minute eine Wiederholung erfolgt, solang der Kühlschrank noch nicht geschlossen wurde.

Mein Freund (der DOIF noch nicht so gut kennt), hat mir dann folgende Zeilen vorgeschlagen:


define Dach_Kueche_Kuehlschrank_alarm DOIF ([Dach_Kueche_Kuehlschrank:state] eq "open" ) (set MyTTS tts "Der Kühlschrank ist noch auf.",trigger Dach_Kueche_Kuehlschrank)
attr Dach_Kueche_Kuehlschrank_alarm wait 59
attr Dach_Kueche_Kuehlschrank_alarm cmdpause 60
attr Dach_Kueche_Kuehlschrank_alarm do resetwait


Das funktioniert leider noch nicht so recht, da auch eine Notification erfolgt, wenn der Kühlschrank längst geschlossen wurde (also innerhalb von 60 Sekunden).

An welcher Stelle läuft etwas falsch? Kann es sein, dass das "wait" an dieser Stelle nicht korrekt ist?

cu denny
Titel: Antw:DOIF -> Kühlschrank mit HM-Sec-SC-2 und Notification
Beitrag von: MarioS1969 am 08 Oktober 2015, 22:56:05
Hallo,
ich denke mein Problem ist ähnlich:

http://forum.fhem.de/index.php/topic,41702.msg339663.html#msg339663
(http://forum.fhem.de/index.php/topic,41702.msg339663.html#msg339663)

Leider habe ich auch keine Lösung dafür.

Bitte poste, wenn du eine Lösung gefunden hast.

Titel: Antw:DOIF -> Kühlschrank mit HM-Sec-SC-2 und Notification
Beitrag von: Bennemannc am 08 Oktober 2015, 23:26:23
Hallo,

- mal ein anderer Ansatz
auf das öffnen und schließen kannst Du mir einem notify reagieren.
Dann baust du einen watchdog, der in 1 Minuten Rhythmus prüft, ob closed ist - wenn nicht Meldung.
Die notifys nimmst Du, um den watchdog auf disable 0 (ein) oder disable 1 (aus) zu setzen.
Also der Kühlschrank wird geöffnet und der watchdog fängt an zu laufen - bis der Kühlschrank geschlossen wird und der watchdog auf disabled gesetzt wird.

Gruß Christoph
Titel: Antw:DOIF -> Kühlschrank mit HM-Sec-SC-2 und Notification
Beitrag von: denny am 12 Oktober 2015, 18:29:15
hi,

@Bennemannc

ich stecke in Fhem zwar nicht wirklich tief drin, aber ich habe versucht deine Idee soweit umzusetzen, sodass es nun für mich klappt. Also beim öffnen/schließen innerhalb einer Minute passiert nichts und bei längeren Phasen kommt wiederholt eine Meldung aus dem Lautsprecher.
Doch ich muss sagen, dass beim Betrachten des Codes mich die Ahnung beschleicht, überflüssigen Code zu verwenden:


# Dummy definieren
define Dach_Kueche_Kuehlschrank_dummy dummy
attr Dach_Kueche_Kuehlschrank_dummy setList on off

# Wenn HM-SC-2 den state Open hat, Dummy darüber informieren und Timer starten
define Dach_Kueche_Kuehlschrank_alarm DOIF  ([Dach_Kueche_Kuehlschrank:state] eq "open" ) ( set Dach_Kueche_Kuehlschrank_dummy on ) \
DOELSE ( set Dach_Kueche_Kuehlschrank_dummy off )
attr Dach_Kueche_Kuehlschrank_alarm wait 59
attr Dach_Kueche_Kuehlschrank_alarm do resetwait

# Wenn timer abgelaufen, dann Meldung absenden
define Dach_Kueche_Kuehlschrank_notify DOIF ([Dach_Kueche_Kuehlschrank_dummy:state] eq "on" ) (set MyTTS tts "Der Kühlschrank ist noch auf",trigger Dach_Kueche_Kuehlschrank)
attr Dach_Kueche_Kuehlschrank_notify do resetwait


Wie gesagt, so klappt es, aber "korrekt" erscheint mir das nicht so. Allein das doppelte "resetwait" in den beiden DOIFs sieht mir seltsam aus. Auch habe ich noch nicht so ganz verstanden, weshalb das Konstrukt bricht, sobald ich den trigger auf z.B. Dach_Kueche_Kuehlschrank_dummy setze, wie ich es eigentlich erwarten würde.

Etwas Klarheit würde mir da gut tun :-)

Vielen Dank schonmal für das Aufzeigen des Weges :-)
Titel: Antw:DOIF -> Kühlschrank mit HM-Sec-SC-2 und Notification
Beitrag von: Bennemannc am 12 Oktober 2015, 19:14:29
Hallo,

also ich hätte
define Kuehlschr_wd watchdog .....
define Kuehlschr_open notify ... set Kuehlschr_wd diasble 0
define Kuehlschr_close notify ... set Kuehlschr_wd disable 1
das ganze also ohne DOIF. Der Watchdag wird eingeschaltet wenn der Kühlschrank aufgeht und meckert jede Minute. Wenn der Kühlschrank zu geht, wird der Watchdog einfach disabled - dann ist der ruhig.
Einen Nachteil hat das Ganze. Du hast nach einer Änderung (disable) immer oben bei Save Config ein Fragezeichen, da das für fhem eine Konfigurationsänderung ist. Mich stört das nicht - ich mache das an anderer Stelle auch so.

Gruß Christoph
Titel: Antw:DOIF -> Kühlschrank mit HM-Sec-SC-2 und Notification
Beitrag von: denny am 13 Oktober 2015, 10:22:19
hi Bennemannc,

soweit O.K. allerdings fehlt der spannende Teil der Wiederholung, wenn der Kühlschrank noch auf ist. So wie ich das nun lesen würde, gibt er die Meldung genau nur einmal aus, aber es erfolgt keine wiederholte Nachricht, wenn der Kühlschrank _immernoch_ auf ist :-)
Titel: Antw:DOIF -> Kühlschrank mit HM-Sec-SC-2 und Notification
Beitrag von: Bennemannc am 13 Oktober 2015, 11:22:24
Hi Denny,

in der Commandref sind doch Beispiele:
Zitat# Frage Daten vom FHT80 jedes Mal ab, wenn keine Nachricht für
# 15 Minuten emfpangen wurde, d.h. reaktiviere den Watchdog nachdem er getriggert wurde.
# Kann gefährlich sein, da er so in einer Schleife getriggert werden kann.
define w watchdog FHT80 00:15:00 SAME set FHT80 date;; trigger w .
Das wäre doch eine Schleife für Deine Anwendung - muss nur noch angepasst werden.

Gruß Christoph
Titel: Antw:DOIF -> Kühlschrank mit HM-Sec-SC-2 und Notification
Beitrag von: MarioS1969 am 18 Oktober 2015, 23:00:50
Hallo,
ich habe es jetzt wie folgt umgesetzt:


define di_Bad DOIF ( [07:00-23:00] and ([+1200]) and ([Fenster_Bad] eq "offen") and ([Aussen:temperature] < 15)) (set Sonos_Wohnzimmer Speak 40 de |bell|   Fenster im Bad offen) \
DOELSEIF ([Fenster_Bad] eq "zu") (set di_Bad initialize)
attr di_Bad repeatsame 3