Falls jemand Interesse an der kompletten Lösung hat (Verbesserungsvorschläge willkommen).
Aufgabe: Sende jede Minute eine Nachricht wenn bestimmte Fenster länger als X Minuten offen ist und die Aussentemperatur kleiner als "activeTemp" ist. Das hilft meiner vergesslichen Familie viel Heizenergie zu sparen 🙂
const aFenster = [
{
"id": "hm-rpc.0.KEQ0006299.6.SENSOR",
"descr": "in der Küche Richtung Garten"
},
{
"id": "hm-rpc.0.KEQ0006287.1.SENSOR",
"descr": "im HWR"
},
{
"id": "hm-rpc.0.KEQ0006287.6.SENSOR",
"descr": "im Wohnzimmer links"
},
{
"id": "hm-rpc.0.KEQ0006287.12.SENSOR",
"descr": "im Wohnzimmer rechts"
}
];
const idTemp = 'hm-rpc.1.NEQ0773998.1.TEMPERATURE'; // Aussentemperatur
const activeTemp = 15;
const delay = 5; // Minuten solange im Intervall unten 60000 steht
var interval = null;
aFenster.forEach(Fenster => on(Fenster.id, function (dp) {
if (getState(dp.id).val) {
console.log("Fenster " + Fenster.descr + " geoeffnet");
let cnt = 0;
interval = setInterval(function () {
cnt++;
// wenn Counter größer als delay && Aussentemperatur kleiner als activeTemp
if (cnt >= delay && getState(idTemp).val < activeTemp) {
var duration = Math.round((Date.now() - dp.state.lc) / 60000)
// sende Nachricht ins Log, oder via telegram, oder lass Alexa schimpfen..
console.log("Das Fenster " + Fenster.descr + " ist schon " + duration + " Minuten offen.");
}
}, 60000);
} else { // Fenster schließt
clearInterval(interval);
console.log("Fenster " + Fenster.descr + " geschlossen");
}
}));
Danke noch mal @paul53!