Hallo zusammen,
nachdem ich von FHEM noch nicht wirklich viel Ahnung habe und mir nach vielen Stunden weder vorhandene Einträge noch die Hilfe eines Freundes bei o.g. Thema weiter bringen konnte, schreibe ich es mal auf, in der Hoffnung auf Eure Hilfe, auch wenn ich dabei Gefahr laufe, dass es vielleicht doch irgendwo in den Untiefen des Forums schon einmal thematisiert wurde:
Ich möchte, dass meine Rollos herunter fahren, wenn ein Fenster geöffnet wird, das funktioniert auch soweit mit:
define Fensterkontakt_EGoffen notify Fensterkontakt_EG:open set Rollos_EG off
Jetzt möchte ich gerne einen Dummy Schalter haben, womit ich diese Funktion ein-/ausschalten kann. Der Dummy sieht so aus:
define Fensterkontakt_EG_Funktion dummy
attr Fensterkontakt_EG_Funktion devStateIcon an:general_an aus:general_aus
attr Fensterkontakt_EG_Funktion eventMap on:an off:aus
attr Fensterkontakt_EG_Funktion room Fensterkontakte
attr Fensterkontakt_EG_Funktion setList off on
Soweit auch kein Problem.
Dieses beginnt mit der Frage wie das Notify Fensterkontakt_EGoffen dann aussehen muss. Hier ein paar Versuche, welche leider nicht erfolgreich waren:
define Fensterkontakt_EGoffen notify Fensterkontakt_EG:open {if (Value("%") eq "open" && Value("Fensterkontakt_EG_Funktion") eq "on") {fhem("set Rollos_EG off")}}
define Fensterkontakt_EGoffen notify Fensterkontakt_EG_Funktion { if ("%" eq "on" and "Fensterkontakt_EG" eq "open") { fhem("set Rollos_EG off") } }
define Fensterkontakt_EGoffen notify { if ("Fensterkontakt_EG" eq "open" and "Fensterkontakt_EG_Funktion" eq "on") { fhem("set Rollos_EG off") } }
Ich hoffe Ihr könnt mir helfen und vielleicht auch erklären, was ich falsch gemacht habe.
Vielen lieben Dank, Sebastian.
Hier die Lösung:
define Fensterkontakt_EGoffen notify Fensterkontakt_EG:open {if (Value("Fensterkontakt_EG_Funktion") eq "an") {fhem("set Rollos_EG off")}}
Zitat von: FHEM_Seb am 11 Februar 2015, 17:42:28
define Fensterkontakt_EGoffen notify Fensterkontakt_EG:open {if (Value("%") eq "open" && Value("Fensterkontakt_EG_Funktion") eq "on") {fhem("set Rollos_EG off")}}
% enthält das Event, nicht das Device. Du prüfst hier
Value("open") eq "open". Das ist niemals war, und provoziert wahrscheinlich auch eine Fehlermeldung im Log.
Zitatdefine Fensterkontakt_EGoffen notify Fensterkontakt_EG_Funktion { if ("%" eq "on" and "Fensterkontakt_EG" eq "open") { fhem("set Rollos_EG off") } }
Das notify wird ausgelöst, wenn dein Dummy umgeschaltet wird. Du prüfst ob der Shutter open ist und fährst in dem Fall das Rollo runter. Das ist nicht was du möchtest, sondern ein zu komplizierter Schalter um das Rollo runter zu fahren.
Zitatdefine Fensterkontakt_EGoffen notify { if ("Fensterkontakt_EG" eq "open" and "Fensterkontakt_EG_Funktion" eq "on") { fhem("set Rollos_EG off") } }[/i]
Ich hab mal in uraltem Code von mir eine Stelle gefunden in der folgendes Stand:
$a = 0;
if($a == 1) { [...]
Deine Bedingung
"Fensterkontakt_EG_Funktion" eq "on" ist das gleiche, die beiden Strings werden niemals gleich sein.
Dein erster Ansatz war fast richtig, lass die Prüfung auf das Device oder das Event weg und das sollte funktionieren. Warum? Das Event hast du bereits durch notify
Fensterkontakt_EG:open festgelegt, d.h. du weisst innerhalb der Anweisung sowieso schon, dass "open" ausgelöst wurde. Es gibt also keinen Grund darauf zu prüfen. Eine Prüfung auf
Value("Fensterkontakt_EG") ist demnach ebenso überflüssig.
Und sieh dir mal das Modul IF an (http://fhem.de/commandref.html#IF).
Hallo nesges,
vielen Dank für Deine ausführlichen Erläuterungen, das hilft mir zu verstehen, was ich falsch mache bzw. wie ich es demnächst hoffentlich selbst richtig machen kann.
Vor Deinem Beitrag hatte ich basierend auf dem IF-Modul aus dem commandref noch folgendes (erfolglos) versucht:
define Fensterkontakt_EGoffen notify Fensterkontakt_EG IF ([Fensterkontakt_EG] eq "open") IF ([Fensterkontakt_EG_Funktion] eq "on") (set Rollos_EG off)
Nach Deinem Beitrag dann diese Beiden, aber leider auch ohne Erfolg. Irgendwo ist noch der Wurm drin. :-(
define Fensterkontakt_EGoffen notify Fensterkontakt_EG:open {if (Value("Fensterkontakt_EG_Funktion") eq "on") {fhem("set Rollos_EG off")}}
define Fensterkontakt_EGoffen notify Fensterkontakt_EG:open IF ([Fensterkontakt_EG_Funktion] eq "on") (set Rollos_EG off)
Hast Du (oder jemand anderes) noch einen Tip für mich, was hier schief läuft?!
Vielen Dank!
Zitat von: FHEM_Seb am 13 Februar 2015, 09:44:03
define Fensterkontakt_EGoffen notify Fensterkontakt_EG:open {if (Value("Fensterkontakt_EG_Funktion") eq "on") {fhem("set Rollos_EG off")}}
"on" mit "an" ersetzen:
define Fensterkontakt_EGoffen notify Fensterkontakt_EG:open {if (Value("Fensterkontakt_EG_Funktion") eq "an") {fhem("set Rollos_EG off")}}
Gruss
flurin
Hallo flurin,
guter Tipp!!! :) :) :) :) :)
So funktioniert es!
define Fensterkontakt_EGoffen notify Fensterkontakt_EG:open {if (Value("Fensterkontakt_EG_Funktion") eq "an") {fhem("set Rollos_EG off")}}
Warum das nur so funktioniert weiß ich allerdings nicht.
Ich habe den Dummy mal testweise benutzt um einfach nur eine Lampe einzuschalten, da war es egal ob "on" oder "an".
Jedenfalls vielen Dank an alle Beteiligten zu dieser Lösung meines Problems.
Gruß Sebastian
Zitat von: FHEM_Seb am 14 Februar 2015, 14:10:26
Warum das nur so funktioniert weiß ich allerdings nicht.
Ich habe den Dummy mal testweise benutzt um einfach nur eine Lampe einzuschalten, da war es egal ob "on" oder "an".
Das kommt daher:
attr Fensterkontakt_EG_Funktion eventMap on:an off:aus
Wenn Du das Attribut "eventMap" löschen würdest, dann geht es mit "on" bzw. "off".
Gruss
flurin
Hallo,
Hmm ich hätte einen anderen Weg eingeschlagen. Ein Notifv hat ein Attribut "disabled" das hätte ich einfach mit den Dummy umgestellt und damit das ganze Notify abgeschaltet.
Gruß Christoph
Hätte nichts geändert da
ZitatEin Notifv hat ein Attribut "disabled" das hätte ich einfach mit den Dummy umgestellt und damit das ganze Notify abgeschaltet.
du dann ein notify auf den Dummy triggern müsstest der das andere notify auf disabled stellt.
eventMap muss dennoch berücksichtig werden da - on != an.
Aber der EventMonitor wird ja nicht umsonst in meinem angepinnten Beitrag erwähnt und hilft hier mittlerweile auch in mehreren Beiträgen - auch wenn mein Beitrag immer noch geflissentlich ignoriert wird.
@Bennemannc
Ich bin der gleicher Meinung wie Puschel74. Für einen Software-Entwickler hat es ev. Vorteile (schnellere Ausführung?) aber aus der Sicht eines Anwenders ist es schwer zu verstehen. Disable auf 0 setzen, damit der Notify funktioniert. Das ist eine doppelte Negation [Wenn schon, wäre mir "Enable" sympathischer :)].
Übrigens verwende ich bei solchen Fällen DOIF.
Gruss
flurin
Egal ob Entwickler oder Anwender - eventMap müssen beide berücksichtigen.