Push Mitteilung bei Offenen Fenster nach 5min

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.

includes ist case sensitiv, d.h. Groß- bzw. Kleinschreibung ist relevant:

https://www.w3schools.com/jsref/jsref_includes.asp

Ich habe den Filter hier entfernt, damit kannst du beliebige Namen verwenden:

// 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")) currentText = "Fenster";
if(device.name.includes("Dachfenster")) currentText = "Dachfenster";
if(device.name.includes("Gaubenfenster DG")) currentText = "Gaubenfenster";
if(device.name.includes("Terrassentür")) currentText = "Terrassentür";

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;

Ansonsten auch gerne weiter per PM.

@RonnyW und @Joka, so war das jetzt auch nicht gemeint das Ihr jetzt für mich googlet. Ich bin davon ausgegangen das Ihr sowas wisst. Danke dafür! :+1:t3:

@RonnyW, die ODER-Verknüpfung von insgesamt 3 Variablen (oder wie diese auch heißen mögen), habe ich nochmals nachgestellt und jetzt keine Fehlermeldung mehr bekommen. Vermutlich war eine Klammer zu viel oder zu wenig. Wenn man sowieso einen Teilstring nutzen kann, z.B. “enster”, dann benötige ich sowieso nur eine ODER-Verknüpfung.

Hm, der “Filter” hat doch die Namen der Sensoren “gefiltert”:
Wenn der Name des Sensors “enster” oder “tür” beinhaltet, aber das fehlt ja jetzt.
Außerdem fehlen doch jetzt die Räume? :thinking:

Lasst mich mal rumprobieren. Sollte ich Hilfe benötigen melde ich mich noch mal.

Der Vorfilter ist entfernt, es werden ja noch die konkreten Namen abgefragt.

Kein Problem, immer fragen :wink:
Man muss nicht alles wissen sondern nur wissen, wo man suchen kann.

Wenn du andere Attribute der Geräte prüfen sillst, dann müsstes du schauen, welche es gibt und wie du sie ansprechen kannst.
ALso entweder die Web-API vom Homey durchsuchen (in der Developer-Seite) oder wie ich HomeyDash im Browser aufrufen und dann die Debugger-Konsole starten. Dann kann man sich die Eigenschaften “live” anschauen.
Ich kann dir mal ne kleine Anleitung basteln, falls du das mal brauchst. Einfach melden bei Fragen…geht auch per PN

Hab’s nach zig “Try and Error” hinbekommen, danke Euch! :+1:t3:

Ob ich noch andere Anwendungsfälle habe, müsste ich mir erstmal Gedanken drüber machen. Aber dann würde ich definitiv auf Euch zurückkommen.

Super :+1:, ist auch aktuell mein einziger Anwendungsfall + die Zigbee Prüfskripte von Dijker.

1 Like

Die habe ich auch noch, waren auch deutlich einfacher ans Laufen zu bringen… :stuck_out_tongue_winking_eye:

Wenn man wirklich Ahnung von JavaScript hätte, dann könnte man bestimmt vieles vereinfachen. Aber nicht mehr in diesem Leben… :man_shrugging:t3: