Ich würde gerne einen Flows erstellen das ich eine Push Mitteilung bekommen wenn ein Fenster länger als 5min offen ist. Aber natürlich nur wenn es in der Zwischenzeit nicht bereits geschlossen wurde.
Ich finde aber leider in den Flows keine Warte 5min Funktion. Es gibt es Verzögerungsfunktion bei der finalen Aktivität aber das verhindert nicht die Mitteilung wenn das Fenster in der Zwischenzeit geschlossen wurde.
Da gibt es doch sicherlich einen Trick oder Funktion wie man das umsetzt.
Du startest einfach nach 5 Minuten einen zweiten Flow, entweder direkt oder über eine Variablenänderung als Auslöser. Dort in der und-Bedingung den aktuellen Zustand abfragen und dann die Meldung ausgeben
Aber wie Stelle ich den ein das nach 5min etwas startet? Das ist doch mein Problem. Ich finde keine “warte 5min dann” Funktion. Nur bestimmte Uhrzeiten und Datum.
Hatte gehofft das mit Variablen nicht für jedes Fenster anlegen zu müssen. So sind das ja leider zwei Flows pro Fenster. Bei 15 Fenster sind das 30 Flows.
Mit der < group > App könnte man die Sensoren z.B. für die einzelnen Zonen/Räume auch zusammenfassen, dann könnte man sich ggfs. ein paar Flows sparen.
Eine weitere Möglichkeit wäre die Build-In Funktionen “Zonen” zu nutzen. Allerdings wird eine “Zone” auch dann aktiv wenn z.B. ein Bewegungssensor oder ein Wassersensor in dieser Zone ausgelöst wird.
Die Anzahl der Flows stellt für Homey übrigens kein Problem dar, einige User haben über 700 Flows. Es ist halt nur ein bisschen Arbeit. Aber mit der Homey Web App, siehe Post #6 von @CyberSponk, ist das schnell erledigt.
Ich bin bei den Kontaktsensoren komplett auf genau EIN Homeyscript (Quelle Beispiel + Beschreibung: Homey Web App (Soon) - #28 by RonnyW) umgestiegen. Voraussetzung sind sehr geringe Programmierkenntnisse (Copy des Scipt + Eintrag der eigenen Sensoren, ggf. eigene Anpassungen). Als Benefit erhält man maximale Möglichkeiten bei minimalem Wartungsaufwand.
Bei mir muss der Sensorname Fenster oder Oberlicht enthalten (Sensorname = Fenster Schlafzimmer). if(device.name.includes("Fenster") || device.name.includes("Oberlicht"))
D.h. auf Basis dieses Scripts muss euer Sensorname z.B. wie folgt lauten:
Fenster abc
Oberlicht abc
abc Fenster
abc Oberlicht
Fenster Schlafzimmer
Oberlicht Küche
Küche Oberlicht
Schlafzimmer Fenster
Diese Zeile jeweils pro Kontaktsensor kopieren: if(device.name.includes("Schlafzimmer")) currentText = "Schlafzimmer";
Hier als Sensornamensanteil den Zimmernamen eintragen: device.name.includes("Schlafzimmer")
Hier den Text für die Pushnachricht oder Sprachsausgabe eintragen: currentText = "Schlafzimmer";
Es wird ein TAG generiert, der alle offenen Fenster kumuliert beinhaltet.
Den TAG könnt ihr dann im THEN Anteil des Flows verwenden für Push oder Sprachausgabe.
Das Homeyscript selbst wird im AND Bereich verwendet. Es wird TRUE oder FALSE zurückgegeben und in THEN oder else verzweigt:
Im WHEN Bereich kann man natürlich auch "Dieser Flow wird gestartet "verwenden und als Favorit speichern. Auf dem Smartphone dann als Shortcut speichern und vor dem Einschlafen ausführen.
Wirklich klasse, wenn man Ahnung davon hat. Ich habe leider keinen blassen Schimmer davon.
Könntest Du vielleicht die Funktionen (device.name.includes()) und currentText erklären.
Was muss wo eingetragen werden?
Deine Programmierkenntnisse reichen aus @DirkG, du hattest ja vor meinem Edit exakt die richtigen Stellen identifiziert
Keine Angst vor dem Code drumherum, den kannst du theoretisch einfach ignorieren. Folge mal der Anleitung und bei Fragen fragen.
Den Rest macht homeyscript, das ist speziell für Kontaktsensoren einfach zu elegant, als es zu ignorieren und weiterhin xx Flows zu erstellen. Die Kontaktsensoren vermehren sich nämlich im Haus schlagartig.
So viel zu “meinen Programmierkenntnissen”, funktioniert natürlich nicht…
Wenn ich das Skript für sich teste, bekomme ich folgende Ausgabe in der Konsole:
Wenn ich den Flow teste, wird bei der Und… HomeyScript-Karte “Run Fensterprüfung” ein rotes Ausrufezeichen angezeigt.
Tatsache ist aber, dass bei den Tests mindestens ein Fenster geöffnet war, und das wurde nicht angezeigt.
Folgendes ist mir z.B. noch unklar:
device.name.includes: Bedeutet “includes” ein ganzes Wort von der Namensgebung des Sensors, oder könnte das z.B. auch nur einen Teile eines Wortes enthalten?
Beispiel: tatsächliche Bezeichnung lautet “Gaubenfenster DG”. Würde jetzt “fenster” reichen, oder muss es mindestens “Gaubenfenster” heißen?
Wird Groß-/Kleinschreibung berücksichtig?
Warum sind in der Aufzählung zwei Zeilen mit “||” enthalten? Wo ist der Unterschied zur ersten Zeile und was muss in der zweiten eingetragen werden?
Ich habe bereits mehrere Variationen ausprobiert, aber dann bekomme ich in der Console Fehlermeldungen angezeigt.
Copy/Paste hilft also nicht immer weiter. Ohne genau zu verstehen was das ein oder andere bedeutet, kann man, zumindest ich, keine gezielte Änderung vornehmen.
Folgende namentlichen Variationen an Fenstersensoren habe ich:
– Fenster
– Dachfenster
– Gaubenfenster
Zusätzlich noch eine Tür:
– Terrassentür
Wie müsste ich das Skript jetzt aufbauen?
Nur nebenbei, diese “Fenster offen Prüfung” mit dem Skript hat im Grunde nichts mit der Eigentlichen Anforderung von @helbro zutun. Bei ihm geht es (vermutlich) darum eine Meldung zu bekommen, wenn das Fenster zum Lüften länger als 5 Minuten offen steht. Bei dem Skript geht es um einen Check, ob alle Fenster und Türen geschlossen sind bevor man das Haus verlässt (was ich aber gerne nutzen würde… ).
Hi, ich habe den Befehl nicht geprüft, würde aber davon ausgehen, dass ein Substring geprüft wird. D.h. “fenster” wäre ausreichend. Ob Groß/Klein weiß ich nicht. Das sind JavaScript-Funktionen, d.h. die könntest du nach Beispiele googeln.
|| ist die ODER-Verknüpfung der beiden Bedingungen.
&& wäre UND
Ich kann auch direkt JavaScript lernen, dann brauch ich keine blöden Fragen mehr stellen…
Die ODER-Verknüpfung hatte ich z.B. mit den 4 o.g. Namen in einer Zeile ausprobiert und eine Fehlermeldung bekommen, dass die zweite ODER-Verknüpfung ein Problem verursacht.