Bitte um Hilfe bei IF-Bedingung (Info über noch offene Fenster bei Tür-Öffnung)

Begonnen von MaJu, 22 April 2014, 22:59:54

Vorheriges Thema - Nächstes Thema

Puschel74

Hallo,

@Damian
define Wohnungstuer_n notify Wohnungstuer:open
IF ([Fenster_Katzenzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Katzenzimmer ist noch offen);;
IF ([Fenster_Wohnzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Wohnzimmer ist noch offen);;
IF ([Fenster_Schlafzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Schlafzimmer ist noch offen)


2 Semikolon am Schluss der beiden Zeilen?
Wenn der Code für das DEF gedacht ist (da ja auch \ fehlen) sollte dann nicht 1 Semikolon genügen?
Oder ist das dem IF geschuldet?

Grüße
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.

MaJu

Vielen Dank, das ist ja fast wie im Chat hier, eine tolle und hilfsbereite Community! :-)

Der von Damian angesprochene Punkt, dass ALLE Abfragen durchlaufen werden, ist relativ wichtig. Es sollten gleich alle offenen Fenster genannt werden. Mit dem Beispiel ist das dann zwar nicht in einem Satz, aber das folgende ist auch okay: "Achtung! Fenster im Wohnzimmer ist noch offen! Achtung! Fenster im Schlafzimmer ist noch offen!"

Ich kann es leider erst heute abend testen und berichte hier bzw. werde das Thema "Wanddisplay" bei Erfolg mit allen Codeschnipseln meiner Anwendung ins Wiki packen.
Erlebnisreiche Grüße aus Leipzig!

Damian

Zitat von: Puschel74 am 23 April 2014, 10:49:52
Hallo,

@Damian
define Wohnungstuer_n notify Wohnungstuer:open
IF ([Fenster_Katzenzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Katzenzimmer ist noch offen);;
IF ([Fenster_Wohnzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Wohnzimmer ist noch offen);;
IF ([Fenster_Schlafzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Schlafzimmer ist noch offen)


2 Semikolon am Schluss der beiden Zeilen?
Wenn der Code für das DEF gedacht ist (da ja auch \ fehlen) sollte dann nicht 1 Semikolon genügen?
Oder ist das dem IF geschuldet?

Grüße

Du hast Recht! In der DEF-Eingabe reicht auch ein Semikolon. Man müsste zwei Semikolons angeben, wenn man es in der Kommandozeile eingetippt hätte. Allerdings sind hier mehrere Zeilen, also kann man es tatsächlich nur in der DEF-Eingabe so hinbekommen.  :) Also:

define Wohnungstuer_n notify Wohnungstuer:open
IF ([Fenster_Katzenzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Katzenzimmer ist noch offen);
IF ([Fenster_Wohnzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Wohnzimmer ist noch offen);
IF ([Fenster_Schlafzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Schlafzimmer ist noch offen)


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

MaJu

Leider funktioniert es nicht. Nach Eingabe von define Wohnungstuer_n notify Wohnungstuer:open im FHEM-Frontend erscheint folgende Fehlermeldung: Usage: define <name> notify <regexp> <command>

Dann habe ich define Wohnungstuer_n notify Wohnungstuer open eingegeben (mit Leerzeichen statt Doppelpunkt), daraufhin habe ich jetzt ein notify "Wohnungstuer_n", in das ich bei DEF eingetragen habe: IF ([Fenster_Katzenzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Katzenzimmer ist noch offen);
IF ([Fenster_Wohnzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Wohnzimmer ist noch offen);
IF ([Fenster_Schlafzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Schlafzimmer ist noch offen)


Hier passiert aber nichts. Wie auch, es wird ja nirgendwo definiert dass die Tür offen sein muss.
So sieht es jetzt aus:
(http://www.fotos-hochladen.net/thumbnail/notifytuerl2xbt146kn_thumb.jpg)

Ich stehe wieder auf dem Schlauch :-(
Erlebnisreiche Grüße aus Leipzig!

Puschel74

Hallo,

define Wohnungstuer_n notify Wohnungstuer:open ()
und zwischen die beiden Klammern kommt dann im DEF
IF ([Fenster_Katzenzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Katzenzimmer ist noch offen);
IF ([Fenster_Wohnzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Wohnzimmer ist noch offen);
IF ([Fenster_Schlafzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Schlafzimmer ist noch offen)


Zum Schluss die  {} wieder löschen (?? - da bin ich grad überfragt aber ich hab in der commandref auch nichts gefunden dazu).
Beim normalen if würden die beiden {} kommen und der Code zwischen rein.

Grüße

Edith: Dann gehört aber auch die commandref angepasst  :o
define test notify lamp
IF ([lampe] eq "on") (

    IF ([outdoor:humidity] < 70)
        (set lamp off) ELSE
        (set lamp on)

) ELSE

    (set switch on)

das Define kann ich ja so nie per Befehlszeile eingeben *grübel*

Edith: Angepasst aufgrund von nachfolgendem Beitrag der-Lolo
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.

der-Lolo

meine antwort anfangs mit dem codeschnipsel von Damian führt dich zum ziel...

MaJu

Danke, ich bin ein Schritt weiter. Beim notify steht jetzt im DEF:
Wohnungstuer:open (
IF ([Fenster_Katzenzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Katzenzimmer ist noch offen);
IF ([Fenster_Wohnzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Wohnzimmer ist noch offen);
IF ([Fenster_Schlafzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Schlafzimmer ist noch offen)
)


ABER: Das notify reagiert nur auf das Wohnzimmerfenster. Egal welche ich auf- und zumache, es wird nur das Wohnzimmerfenster angesagt. :-(
Erlebnisreiche Grüße aus Leipzig!

der-Lolo

du hast da noch ein kleines verständnisproblem, das notify reagiert auf die wohnungstuer - ein kleines wichtiges Detail - anschliessend wird geschaut welche bedingung zutrifft.
Wirf mal einen Blick in den Eventmonitor, vielleicht hast du bei den anderen Zimmern einen tipfehler...
oder was ich noch eher für wahrscheinlich halte - eines deiner älteren versuchs notifys reagiert noch.

MaJu

Ich habe die config gespeichert und mit "shutdown restart" einen Neustart durchgeführt.
Es gibt kein weiteres notify zum Thema Türsensor.

Die Events sehen folgendermaßen aus:
Events:
2014-04-23 21:37:21 dummy Aquarium_Temperatur 24.9°C
2014-04-23 21:37:21 CUL_HM Aquarium temperature: 24.9
2014-04-23 21:37:21 CUL_HM Aquarium battery: ok
2014-04-23 21:37:21 CUL_HM Aquarium humidity: 100
2014-04-23 21:37:21 CUL_HM Aquarium T: 24.9 H: 100
2014-04-23 21:37:33 CUL_HM Fenster_Katzenzimmer open
2014-04-23 21:37:33 CUL_HM Fenster_Katzenzimmer contact: open (to CUL_0)
2014-04-23 21:37:33 CUL_HM Fenster_Katzenzimmer open
2014-04-23 21:37:33 CUL_HM Fenster_Katzenzimmer contact: open (to Sensor_Katzenzimmer)
2014-04-23 21:37:35 CUL_HM Katzenzimmer_Climate desired-temp: 6.0
2014-04-23 21:37:35 CUL_HM Sensor_Katzenzimmer desired-temp: 6.0
2014-04-23 21:37:35 CUL_HM Sensor_Katzenzimmer battery: ok
2014-04-23 21:37:36 CUL_HM Wohnungstuer open
2014-04-23 21:37:36 CUL_HM Wohnungstuer contact: open (to CUL_0)


Dennoch keine Ansage, obwohl gesagt werden müsste dass das Fenster im Katzenzimmer noch offen ist. Öffne ich danach das Wohnzimmer-Fenster und danach die Tür, kommt die Ansage, dass das Wohnzimmerfenster offen ist.

@der-Lolo: Ja, das notify soll ja auch nur reagieren, wenn die Tür geöffnet wird. So wie du es nennst ist es auch mein Ziel.
Erlebnisreiche Grüße aus Leipzig!

der-Lolo

und wie schauen die events beim wohnzimmer aus? gibt es dort einen unterschied?

MaJu

Ich erkenne keinen Unterschied, außer, dass hier das ttsSay-Kommando ausgeführt wird:
Events:
2014-04-23 22:25:57 CUL_HM Fenster_Wohnzimmer open
2014-04-23 22:25:57 CUL_HM Fenster_Wohnzimmer contact: open (to CUL_0)
2014-04-23 22:25:57 CUL_HM Fenster_Wohnzimmer open
2014-04-23 22:25:57 CUL_HM Fenster_Wohnzimmer contact: open (to Sensor_Wohnzimmer)
2014-04-23 22:25:59 CUL_HM Sensor_Wohnzimmer desired-temp: off
2014-04-23 22:25:59 CUL_HM Sensor_Wohnzimmer battery: ok
2014-04-23 22:26:00 CUL_HM Wohnzimmer_Climate desired-temp: off
2014-04-23 22:26:03 CUL_HM Sensor_Wohnzimmer desired-temp: 6.0
2014-04-23 22:26:03 CUL_HM Sensor_Wohnzimmer battery: ok
2014-04-23 22:26:03 CUL_HM Wohnzimmer_Climate desired-temp: 6.0
2014-04-23 22:26:03 CUL_HM Wohnungstuer open
2014-04-23 22:26:03 CUL_HM Wohnungstuer contact: open (to CUL_0)
2014-04-23 22:26:03 webViewControl Flurtablet ttsSay Achtung! Fenster im Wohnzimmer ist noch offen


Zu diesem Zeitpunkt waren alle Fenster offen. Schlaf- und Katzenzimmer auf bei geschlossenem Wohnzimmer: keine Ansage. Wohnzimmerfenster auf (egal ob die anderen offen sind oder nicht): Über offenes Wohnzimmerfenster wird gewarnt.

Im DEF des notify steht weiterhin:
Wohnungstuer:open (
IF ([Fenster_Katzenzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Katzenzimmer ist noch offen);
IF ([Fenster_Wohnzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Wohnzimmer ist noch offen);
IF ([Fenster_Schlafzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Schlafzimmer ist noch offen)
)
Erlebnisreiche Grüße aus Leipzig!

der-Lolo

hm, da bin ich dann auch am ende mit meinem latein - schau mal noch die Detail ansicht der Sensoren ganz unten Probably associated with - ob da was steht...
und beim notify sollte da auch was drin stehen...

Damian

So, champions league-Spiel ist zu ende und ich sehe du quälst dich hier. Dann wollen wir dem Problem auf den Grund gehen.

Als erstes müssen die runden Klammern weg, denn so dürfte es im Log nur Fehlermeldungen geben, denn das FHEM-Kommando "(" gibt es nicht. Das Leerzeichen hinter open muss bleiben.

Ansonsten würde ich dir empfehlen kleinschrittig vorzugehen:

z. B. den alten notify löschen und dann so in der Kommandozeile eingeben:

define Wohnungstuer_n notify Wohnungstuer:open IF ([Fenster_Katzenzimmer] eq "open") (set Flurtablet ttsSay Achtung! Fenster im Katzenzimmer ist noch offen)


Katzenzimmer öffnen, sicherstellen, dass im Status von Katzenzimmer "open" steht und danach Wohnungstür öffnen. Wenn es nicht funktioniert im Log schauen. Dann sehen wir weiter.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

der-Lolo

jetzt wo du es sagst seh ich die klammer auch...
aber wenn ja wie MaJu sagt die meldung beim Wohnzimmerfenster kommt muss es ja auch noch ein schlummerndes notify irgendwo geben... oder?

Damian

Zitat von: der-Lolo am 23 April 2014, 23:13:56
jetzt wo du es sagst seh ich die klammer auch...
aber wenn ja wie MaJu sagt die meldung beim Wohnzimmerfenster kommt muss es ja auch noch ein schlummerndes notify irgendwo geben... oder?

Das könnte auch noch sein.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF