Hallo Zusammen,
ich hätte mal eine frage, ich habe da ein doif, mit dem Prüfe ich die fenster ob sie offen sind.
Abhängig ob ich oder meine Freundin daheim sind, bekommen wir eine Nachricht. Wenn wir beide da sind, bekommen wir sie auch beide.
Und jeweils das Fenster welches offen ist.
Ich hab das denk ich ziemlich aufwendig gemacht, da ich immer mehr fenster einbinden will, frag ich mich, ob es einfacher geht.
Hier mal das bisherige:
([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_WZ] eq "open" and [?rr_Torte] eq "home" and [?rr_Steph] ne "home")
(set teleBot msg Das Fenster im Wohnzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Wohnzimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?rr_Torte] eq "home" and [?rr_Steph] ne "home")
(set teleBot msg Das Fenster im Schlafzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Schlafzimmerist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_BAD] eq "open" and [?rr_Torte] eq "home" and [?rr_Steph] ne "home")
(set teleBot msg Das Fenster im Badezimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Badezimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_BAD] eq "open" and [?Fenstersensor_WZ] eq "open" and [?rr_Torte] eq "home" and [?rr_Steph] ne "home")
(set teleBot msg Das Fenster im Badezimmer und Wohnzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Badezimmer und Wohnzimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?Fenstersensor_WZ] eq "open" and [?rr_Torte] eq "home" and [?rr_Steph] ne "home")
(set teleBot msg Das Fenster im Schlafzimmer und Wohnzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Schlafzimmer und Wohnzimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?Fenstersensor_BAD] eq "open" and [?rr_Torte] eq "home" and [?rr_Steph] ne "home")
(set teleBot msg Das Fenster im Schlafzimmer und Badezimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Schlafzimmer und Badezimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?Fenstersensor_BAD] eq "open" and [?Fenstersensor_WZ] eq "open" and [rr_Torte] eq "home" and [?rr_Steph] ne "home")(set teleBot msg Alle Fenster sind noch offen)(set tabletflur ttsMsg Alle Fenster sind noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_WZ] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] ne "home")
(set teleBot msg @@freundin Das Fenster im Wohnzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Wohnzimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] ne "home")
(set teleBot msg @@freundin Das Fenster im Schlafzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Schlafzimmerist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_BAD] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] ne "home")
(set teleBot msg @@freundin Das Fenster im Badezimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Badezimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_BAD] eq "open" and [?Fenstersensor_WZ] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] ne "home")
(set teleBot msg @@freundin Das Fenster im Badezimmer und Wohnzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Badezimmer und Wohnzimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?Fenstersensor_WZ] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] ne "home")
(set teleBot msg @@freundin Das Fenster im Schlafzimmer und Wohnzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Schlafzimmer und Wohnzimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?Fenstersensor_BAD] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] ne "home")
(set teleBot msg @@freundin Das Fenster im Schlafzimmer und Badezimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Schlafzimmer und Badezimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?Fenstersensor_BAD] eq "open" and [?Fenstersensor_WZ] eq "open" and [rr_Steph] eq "home")
(set teleBot msg @@freundin Alle Fenster sind noch offen)(set tabletflur ttsMsg Alle Fenster sind noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_WZ] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] eq "home")
(set teleBot msg Das Fenster im Wohnzimmer ist noch offen)(set teleBot msg @@freundin Das Fenster im Wohnzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Wohnzimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] eq "home")
(set teleBot msg Das Fenster im Schlafzimmer ist noch offen)(set teleBot msg @@freundin Das Fenster im Schlafzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Schlafzimmerist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_BAD] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] eq "home")
(set teleBot msg Das Fenster im Badezimmer ist noch offen)(set teleBot msg @@freundin Das Fenster im Badezimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Badezimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_BAD] eq "open" and [?Fenstersensor_WZ] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] eq "home")
(set teleBot msg Das Fenster im Badezimmer und Wohnzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Badezimmer und Wohnzimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?Fenstersensor_WZ] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] eq "home")
(set teleBot msg Das Fenster im Schlafzimmer und Wohnzimmer ist noch offen)(set teleBot msg @@freundin Das Fenster im Badezimmer und Wohnzimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Schlafzimmer und Wohnzimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?Fenstersensor_BAD] eq "open" and [?rr_Steph] eq "home" and [?rr_Torte] eq "home")
(set teleBot msg Das Fenster im Schlafzimmer und Badezimmer ist noch offen)(set teleBot msg @@freundin Das Fenster im Schlafzimmer und Badezimmer ist noch offen)(set tabletflur ttsMsg Das Fenster im Schlafzimmer und Badezimmer ist noch offen)
DOELSEIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?Fenstersensor_SZ] eq "open" and [?Fenstersensor_BAD] eq "open" and [?Fenstersensor_WZ] eq "open" and [rr_Steph] eq "home" and [?rr_Torte] eq "home")(set teleBot msg Alle Fenster sind noch offen)(set teleBot msg @@freundin Alle Fenster sind noch offen)(set tabletflur ttsMsg Alle Fenster sind noch offen)
Puh, da kommt ja schon einiges zusammen.
Ich denke, für diese Art von Aufgabe gibt es in FHEM bislang noch keine wirklich gute Lösung, lasse mich aber gerne eines besseren belehren.
Ich denke, ich würde mit IF arbeiten, etwa so:
DOIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?rr_Torte] eq "home" and [?rr_Steph] ne "home")
IF([Fenstersensor_WZ] eq "open")
(set teleBot msg Das Fenster im Wohnzimmer ist noch offen,set tabletflur ttsMsg Das Fenster im Wohnzimmer ist noch offen),
IF ([Fenstersensor_SZ] eq "open")
(set teleBot msg Das Fenster im Schlafzimmer ist noch offen,set tabletflur ttsMsg Das Fenster im Schlafzimmerist noch offen),
...
Das macht es zumindest übersichtlicher und einfacher zu ergänzen.
Was die Benachrichtigungen angeht, solltest Du Dir mal den MSG-Befehl anschauen. Den muss man zwar erstmal ordentlich konfigurieren, aber idealerweise brauchst Du dann einfach nur msg...irgendwas zu sagen und die Benachrichtigungen werden dann automatisch abhängig von Anwesenheitsstatus usw. an den richtigen Stellen zugestellt. Dann würde es sich reduzieren auf
DOIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open")
IF([Fenstersensor_WZ] eq "open")
(msg Das Fenster im Wohnzimmer ist noch offen),
IF ([Fenstersensor_SZ] eq "open")
(msg Das Fenster im Schlafzimmer ist noch offen),
...
Zitat von: Brockmann am 17 November 2016, 09:00:48
Puh, da kommt ja schon einiges zusammen.
Ich denke, für diese Art von Aufgabe gibt es in FHEM bislang noch keine wirklich gute Lösung, lasse mich aber gerne eines besseren belehren.
Ich denke, ich würde mit IF arbeiten, etwa so:
DOIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open" and [?rr_Torte] eq "home" and [?rr_Steph] ne "home")
IF([Fenstersensor_WZ] eq "open")
(set teleBot msg Das Fenster im Wohnzimmer ist noch offen,set tabletflur ttsMsg Das Fenster im Wohnzimmer ist noch offen),
IF ([Fenstersensor_SZ] eq "open")
(set teleBot msg Das Fenster im Schlafzimmer ist noch offen,set tabletflur ttsMsg Das Fenster im Schlafzimmerist noch offen),
...
Das macht es zumindest übersichtlicher und einfacher zu ergänzen.
Was die Benachrichtigungen angeht, solltest Du Dir mal den MSG-Befehl anschauen. Den muss man zwar erstmal ordentlich konfigurieren, aber idealerweise brauchst Du dann einfach nur msg...irgendwas zu sagen und die Benachrichtigungen werden dann automatisch abhängig von Anwesenheitsstatus usw. an den richtigen Stellen zugestellt. Dann würde es sich reduzieren auf
DOIF ([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open")
IF([Fenstersensor_WZ] eq "open")
(msg Das Fenster im Wohnzimmer ist noch offen),
IF ([Fenstersensor_SZ] eq "open")
(msg Das Fenster im Schlafzimmer ist noch offen),
...
Vielen Dank für die Erste Idee. Und den MSG Befehl, den schau ich mir tatsächlich genauer an!
Noch jemand eine Idee?
Select Case wäre hier echt schön denk ich.
Wenn Du die individuellen Ansagen in ein Schema bringen kannst und der individuelle Teil aus dem Gerät (Fenstersensor) abgeleitet werden kann, dann kannst Du das Beispiel für "Batteriewarnung" aus der Commandref verwenden, http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Die individuellen Texte könntest Du aus dem Gerätenamen, dem Aliasnamen und dem Attribut
comment bilden.
Beispiel
Zitatset teleBot msg Das {(AttrVal($DEVICE,"comment","none"))} ist noch offen
, wenn das Attribut comment "Fenster im Schlafzimmer" lautet.
Nebenbei hast du mit deinem Konstrukt das Problem, dass, wenn mehr als ein Fenster offen ist, nur das erste gemeldet wird.
Du müsstest die Reihefolge umdrehen (erst 3 x "open", dann 2x "open"...)
Besser wäre es, ein untergeordnetes IF zu verwenden, wie von Brockmann vorgeschlagen.
Noch besser wäre es, du erstellt eine SUB (99_myUtil), welche mit drei if-Abfragen den Text erstellt und in der zweiten Abfrage die Geräte zuweist.
geht zwar auch im DOIF selbst
{my $text;if ([Fenstersensor_SZ] eq "open") ($text = "Text");...}
oder
{my $text=([Fenstersensor_SZ] eq "open") ? "Text" : ""}
wird aber schnell unübersichtlich.
Zitat von: Per am 17 November 2016, 12:13:09
Nebenbei hast du mit deinem Konstrukt das Problem, dass, wenn mehr als ein Fenster offen ist, nur das erste gemeldet wird.
Du müsstest die Reihefolge umdrehen (erst 3 x "open", dann 2x "open"...)
Besser wäre es, ein untergeordnetes IF zu verwenden, wie von Brockmann vorgeschlagen.
Noch besser wäre es, du erstellt eine SUB (99_myUtil), welche mit drei if-Abfragen den Text erstellt und in der zweiten Abfrage die Geräte zuweist.
geht zwar auch im DOIF selbst
{my $text;if ([Fenstersensor_SZ] eq "open") ($text = "Text");...}
oder
{my $text=([Fenstersensor_SZ] eq "open") ? "Text" : ""}
wird aber schnell unübersichtlich.
Das mir auch schon aufgefallen. Das es Falsch rum ist.
Ich kann dir mit der Sub nicht folgen. Und die unter IF abfragen funktionieren bei mir leider nicht.
Finde auch diese Lösung an sich eher schlecht, weil ich nicht jedes offene Fenster abfragen kann.
([?Bewegunsgmelderflur_button_tuer_Motion] eq "motion" and [TuersensorFlur] eq "open")
IF ([?rr_Torte] eq "home" and [?rr_Steph] ne "home")
IF (["^Fenstersensor_:opened"])
(set teleBot msg Das Fenster $Device:klarname ist noch offen)(set tabletflur ttsMsg Das Fenster $Device:klarname ist noch offen);
IF ([?rr_Steph] eq "home" and [?rr_Torte] ne "home")
IF (["^Fenstersensor_:opened"])
(set teleBot msg @@freundin Das Fenster $Device:klarname ist noch offen)(set tabletflur ttsMsg Das Fenster $Device:klarname ist noch offen),
IF([?rr_Steph] eq "home" and [?rr_Torte] eq "home")
IF ([Fenstersensor_WZ] eq "open")
(set teleBot msg Das Fenster $Device:klarname ist noch offen)(set teleBot msg @@freundin Das Fenster $Device:klarname ist noch offen)(set tabletflur ttsMsg Das Fenster $Device:klarname ist noch offen),
Am liebsten wär mir ja, er schreibt einfach jedes offene Fenster in eine Variable und die geb ich dann aus. Aber ich hab keine idee, wie ich das realisieren kann.
Beispiel Variable = Fenster Wohnzimmer,Fenster Bad,Fenster Schlafzimmer
Zitat von: AmunRe am 17 November 2016, 15:31:01
Am liebsten wär mir ja, er schreibt einfach jedes offene Fenster in eine Variable und die geb ich dann aus. Aber ich hab keine idee, wie ich das realisieren kann.
Beispiel Variable = Fenster Wohnzimmer,Fenster Bad,Fenster Schlafzimmer
Ich weiß nicht, ob das irgendwo hin führt, aber Du kannst jederzeit recht einfach rausfinden, welche Fenster gerade offen sind:
list state=openIch wüsste allerdings nicht, wie man die Ausgabe von list innerhalb von FHEM (beispielsweise in einem DOIF) verarbeiten könnte. Vielleicht hat jemand eine Idee dazu...
Zitat von: Brockmann am 18 November 2016, 09:59:46
Ich weiß nicht, ob das irgendwo hin führt, aber Du kannst jederzeit recht einfach rausfinden, welche Fenster gerade offen sind:
list state=open
Ich wüsste allerdings nicht, wie man die Ausgabe von list innerhalb von FHEM (beispielsweise in einem DOIF) verarbeiten könnte. Vielleicht hat jemand eine Idee dazu...
Danke, genau darum hab ich gefragt.
Den Trick kannte ich aber auch noch nicht!
Ich hatte da noch ne idee, komme jetzt aber nicht weiter.
ich hab ne Lightscene erstellt und alle möglichkeiten dort abgebildet. und mit Follow Device dafür gesort das immer der Status der Frenster mit einer Szene übereinstimmt.
Nun heißen die Szenen aber 01_WZ für nur Wohnzimmer offen
und 05_WZ_SZ für Wohnzimmer und Schlafzimmer. Wie bekomme ich es nun in einem DOIF hin, das er SZ durch Schlafzimmer und WZ durch Wohnzimmer in einer Ausgabe ersetzt?
das zauberwort könnte Readingsproxy sein, hab ich grad gelesen. Mal sehen ob das klappt.
Hier die Szene:
Internals:
CFGFN
DEF Fenstersensor_BAD Fenstersensor_WZ Fenstersensor_SZ Fenstersensor_Kueche
HAS_DataDumper 1
HAS_JSON 1
NAME allefenster
NR 18944
NTFY_ORDER 50-allefenster
STATE 08_WZ_KU
TYPE LightScene
followDevices 1
mayBeVisible 1
Content:
Fenstersensor_BAD 1
Fenstersensor_Kueche 1
Fenstersensor_SZ 1
Fenstersensor_WZ 1
Readings:
2016-11-18 19:52:20 state 08_WZ_KU
Scenes:
01_bad:
Fenstersensor_BAD open
Fenstersensor_Kueche closed
Fenstersensor_SZ closed
Fenstersensor_WZ closed
02_ku:
Fenstersensor_BAD closed
Fenstersensor_Kueche open
Fenstersensor_SZ closed
Fenstersensor_WZ closed
03_sz:
Fenstersensor_BAD closed
Fenstersensor_Kueche closed
Fenstersensor_SZ open
Fenstersensor_WZ closed
04_wz:
Fenstersensor_BAD closed
Fenstersensor_Kueche closed
Fenstersensor_SZ closed
Fenstersensor_WZ open
05_bad_ku:
Fenstersensor_BAD open
Fenstersensor_Kueche open
Fenstersensor_SZ closed
Fenstersensor_WZ closed
06_bad_wz:
Fenstersensor_BAD open
Fenstersensor_Kueche closed
Fenstersensor_SZ closed
Fenstersensor_WZ open
07_bad_sz:
Fenstersensor_BAD open
Fenstersensor_Kueche closed
Fenstersensor_SZ open
Fenstersensor_WZ closed
08_wz_ku:
Fenstersensor_BAD closed
Fenstersensor_Kueche open
Fenstersensor_SZ closed
Fenstersensor_WZ open
09_sz_ku:
Fenstersensor_BAD closed
Fenstersensor_Kueche open
Fenstersensor_SZ open
Fenstersensor_WZ closed
10_bad_ku_wz:
Fenstersensor_BAD open
Fenstersensor_Kueche open
Fenstersensor_SZ closed
Fenstersensor_WZ open
11_bad_wz_sz:
Fenstersensor_BAD open
Fenstersensor_Kueche closed
Fenstersensor_SZ open
Fenstersensor_WZ open
12_bad_ku_sz:
Fenstersensor_BAD open
Fenstersensor_Kueche open
Fenstersensor_SZ open
Fenstersensor_WZ closed
13_wz_sz_ku:
Fenstersensor_BAD closed
Fenstersensor_Kueche open
Fenstersensor_SZ open
Fenstersensor_WZ open
14_bad_wz_ku_sz:
Fenstersensor_BAD open
Fenstersensor_Kueche open
Fenstersensor_SZ open
Fenstersensor_WZ open
15_zu:
Fenstersensor_BAD closed
Fenstersensor_Kueche closed
Fenstersensor_SZ closed
Fenstersensor_WZ closed
devices:
Fenstersensor_BAD
Fenstersensor_Kueche
Fenstersensor_SZ
Fenstersensor_WZ