Homey Community Forum

Push Mitteilung bei Offenen Fenster nach 5min

Moin,

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.

Was ich ich gebaut habe sieht so aus

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.

Im ersten Flow bei DANN die Karte Flow mit der Option Start sowie Auswahl des zweiten Flows mit einem Delay von x-Minuten hinzufügen.

Im zweiten Flow bei WENN die Karte Dieser Flow wurde gestartet auswählen sowie bei UND den jeweiligen Fensterkontakt mit Der Kontaktalarm ist an.

Somit führt der erste Flow den zweiten nach x-Minuten aus. Ist das Fenster noch geöffnet, wird DANN ausgeführt.

Danke für den Tipp. Sähe dann so aus.

und

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. :cold_sweat:

Yupp. Wobei Du einen Flow kopieren kannst > HOMEY Web Beta (14.03.21). Der Aufwand hält sich so in Grenzen.

Ich nutze die Tür-/Fenster-Kontakte und die Flows dazu noch zusätzlich für u.a. Heizung womit man für jede(s) Türe/Fenster ein/zwei Flow(s) hat.

Kann gelöscht werden!

Das wäre eine mögliche Lösung, allerdings darfst Du nicht vergessen den Flow wieder zu aktivieren, ansonsten kommt gar keine Meldung mehr.

Ich würde anstelle der verzögerten Flow-Auslösung mit einem Timer arbeiten:

Das habe ich eben auch gemerkt. Ich finde nur die Timer Funktion nicht. Ist das eine App?

Jepp, ich nutze die Chronograph App. Es sind aber auch andere Timer Apps im Store erhältlich.

Danke hab ich eben gesehen und funktioniert so einwandfrei. Wurden halt dann 45 Flows für 15 Fenster aber gut bissel Arbeit muss ein.

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.

1 Like

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.

Hier meine angepasste Version:

// Fensterprüfung
let devices = await Homey.devices.getDevices();
let windowText = "";
let currentText = "";
let logText = "";
let windowOpen = false;
_.some(devices, device => {
if(device.class == 'sensor')
{
if(device.capabilitiesObj &&
device.capabilitiesObj.alarm_contact &&
device.capabilitiesObj.alarm_contact.value)
{
currentText = "";
if(device.name.includes("Fenster") || device.name.includes("Oberlicht")){
  if(device.name.includes("Schlafzimmer")) currentText = "Schlafzimmer";
  if(device.name.includes("Bad")) currentText = "Bad";
  if(device.name.includes("Küche") || device.name.includes("Terrassentür")) currentText = "Küche Oberlicht";
  if(device.name.includes("Gäste WC")) currentText = "Gäste WC";
  if(device.name.includes("Kamin")) currentText = "Kamin Oberlicht";
}
if(currentText != ""){
windowOpen = true;
if(windowText=="")
windowText = currentText;
else if(!windowText.includes(currentText))
windowText = windowText + " und " + currentText;
}
}
}
});
if(windowOpen == true)
windowText = "Fenster geöffnet: " + windowText;
else
windowText = "Fenster geschlossen";
console.log(windowText);
//Homey.logic.updateVariable( id = "Fensterpruefung", variable=windowText);
await tag("windowText", windowText);
return windowOpen;

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. :wink:

1 Like

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 @fantross, du hattest ja vor meinem Edit exakt die richtigen Stellen identifiziert :wink:

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.

Danke, werde ich morgen mal ausprobieren… :+1:t3:

So viel zu “meinen Programmierkenntnissen”, funktioniert natürlich nicht… :joy:
Wenn ich das Skript für sich teste, bekomme ich folgende Ausgabe in der Konsole:

Bildschirmfoto 2021-03-15 um 08.32.49

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… :wink:).

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… :man_shrugging:t3:

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.

.includes sucht nach einen Teilstring, unabhängig von der Position. Groß/Kleinschreibung ist zu beachten.
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/String/includes

Hast du mal ein Beispiel für dein ODER? Wenn die Klammern korrekt sind, dann kann du beliebig viele UND und ODER verknüpfen und schachteln.