FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: FHEM_Seb am 11 Februar 2015, 17:42:28

Titel: Notify mit 2 Bedingungen (Fensterkontakt open und Dummyschalter an) ---> gelöst
Beitrag von: FHEM_Seb am 11 Februar 2015, 17:42:28
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")}}
Titel: Antw:Notify mit 2 Bedingungen (Fensterkontakt open und Dummyschalter an)
Beitrag von: nesges am 12 Februar 2015, 10:51:20
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).
Titel: Antw:Notify mit 2 Bedingungen (Fensterkontakt open und Dummyschalter an)
Beitrag von: FHEM_Seb am 13 Februar 2015, 09:44:03
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!
Titel: Antw:Notify mit 2 Bedingungen (Fensterkontakt open und Dummyschalter an)
Beitrag von: flurin am 13 Februar 2015, 11:10:13
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
Titel: Antw:Notify mit 2 Bedingungen (Fensterkontakt open und Dummyschalter an)
Beitrag von: FHEM_Seb am 14 Februar 2015, 14:10:26
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
Titel: Antw:Notify mit 2 Bedingungen (Fensterkontakt open und Dummyschalter an)
Beitrag von: flurin am 14 Februar 2015, 16:17:52
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
Titel: Antw:Notify mit 2 Bedingungen (Fensterkontakt open und Dummyschalter an) ---> gelöst
Beitrag von: Bennemannc am 14 Februar 2015, 20:09:23
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
Titel: Antw:Notify mit 2 Bedingungen (Fensterkontakt open und Dummyschalter an) ---> gelöst
Beitrag von: Puschel74 am 14 Februar 2015, 20:15:27
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.
Titel: Antw:Notify mit 2 Bedingungen (Fensterkontakt open und Dummyschalter an) ---> gelöst
Beitrag von: flurin am 14 Februar 2015, 21:13:41
@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
Titel: Antw:Notify mit 2 Bedingungen (Fensterkontakt open und Dummyschalter an) ---> gelöst
Beitrag von: Puschel74 am 14 Februar 2015, 21:40:05
Egal ob Entwickler oder Anwender - eventMap müssen beide berücksichtigen.