NEWS
Zu blöd für "wenn eins oder mehrere aus mehreren = true dann"… / Fensterskript
-
Guten morgen zusammen,
ich bin irgendwie zu blöd und kann per googlen leider keine Beispiele für meine Frage finden, da es immer nur simpelste if Abfragen sind (oder meine google Suchen sind falsch, kann auch sein).
Wie dem auch sei, ich möchte gerne ein Skript schreiben, dass mir über SayIt ansagt, wenn Fenster in diversen Räumen länger als 15 Minuten offen sind.
Dabei möchte ich aber NICHT, die bereits vorhanden Skripte nutzen, die einfach durch das Homematic Gewerk Verschluss iterieren, da ich als Ansage nur haben möchte "Fenster im Wohnzimmer offen". ich will nicht haben "Fensterkontakt 1 Wohnzimmer hinten links" offen. Wir haben nämlich viele Fenster, was die Ausgabe unnötig lang machen würde.
Aus meinem Setup gibt es daher in der Homematic CCU2 bereits für jeden Raum (!) eine Variable. Selbige wird beschrieben, wenn eines der dortigen Fenster bereits seit 15 Minuten offen ist (und die Außentemperatur unter 10°C) und eine Telegram Nachricht wird gespusht.
Quasi analog zum push will ich nun noch via Sayit die Ansage haben.
Meine Versuche, es in etwa so zu lösen:
on( triggerWohnEss || triggerSchlafzimmer || … , function (){ xxxxx });
wobei triggerWohnEss = hm.rega.0.7xxx zugeordnet ist (Systemvariable Homematic, state. false/true)
funktionieren nicht.
Grundsätzlich ist mein Ziel, dass sobald eine der Variablen trifft, eine Funktion ausgelöst wird, die quasi 5 Minuten lang noch weiter abwartet, ob noch weitere Variablen sich aktivieren und dann je Variable an eine Basisansage einen entsprechenden Zusatz hängt.
Die Zusätze sowie etwaiges Formatieren des Textes (Kommata setzen wenn mehr als eine Variable, letztes Komma durch "und" ersetzen usw) denke ich bekomme ich selber hin.
Dankbar bin ich für Hilfe zum Auslösen sowie zum verzögerten Sammeln der Zustände. Hintergrund dazu ist, dass z.B. beim morgendlichen Lüften ja viele Fenster quer durchs Haus in kurzer Reihenfolge hintereinander geöffnet werden und ich meiner Frau nicht zumuten will, dass alle paar Sekunden eine neue Ansage kommt. Dann lieber das erste Fenster noch 5 Minuten länger offen und dafür dann eine Sammelansage.
Ganz ideal wäre es, wenn - sofern die Fenster nicht geschlossen werden, danach im 5 (oder 10) Minuten Takt wieder geprüft wird, ob noch etwas offen ist und wenn ja die Ansage wiederholt (mit entsprechenden Anpassungen) wird. Dazu habe ich aber auch schon Skripte oder zumindest Teile gefunden, so dass ich mich erstmal selbst daran probieren würde (ich will ja lernen
Danke für jeden Push in die richtige Richtung.
Beste Grüße
-
Nachtrag:
unelegant aber ich denke gangbar wäre es, jede Variable abzufragen, wenn true dann setzen eine Variable auf 1 und dann die Funktion anzusteuern über wenn besagte Variable = 1 dann…
Erscheint mir aber lang und hässlich, aber vielleicht geht es nur so?
-
Vielleicht reicht dir das schon als Anregung
-
Danke dir.
Leider hilft es aber nicht, da dieses Skript genau das tut, was ich nicht brauche/will: es iteriert durch alle Kontakte im Gewerk "Fenster" bzw Verschluss aus der CCU2.
Ich will ja statt 25 Fensterkontakte abzufragen mit blöden Namen nur 9 Räume abfragen aus Systemvariablen der CCU2.
Aber auch ganz grundsätzlich interessiert mich, wie man bei JS eine if Abfrage mit vielen "oder"-Varianten kreiiert.
Danke und Grüße