Notify mit 2 Bedingungen (Fensterkontakt open und Dummyschalter an) ---> gelöst

Begonnen von FHEM_Seb, 11 Februar 2015, 17:42:28

Vorheriges Thema - Nächstes Thema

FHEM_Seb

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")}}

nesges

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).

FHEM_Seb

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!

flurin

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

FHEM_Seb

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

flurin

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

Bennemannc

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
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Puschel74

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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

flurin

@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

Puschel74

Egal ob Entwickler oder Anwender - eventMap müssen beide berücksichtigen.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.