NEWS
Problem mit "Fenster offen Script"
-
@werner2000x sagte: neuen script
Dann ergänze es durch Log-Ausgaben:
const ids = Array.prototype.slice.apply($("(functions=window)")); log(ids); on({id: ids, change: "ne"}, async function() { let count = 0; for (let id of ids) { if (getState(id).val) count++; } setStateAsync("javascript.0.FensterUeberwachung.DoorsOpen", count, true); log('Anzahl offen: ' + count); });
-
@paul53 Hier der Log:
javascript.0 16:11:59.416 info script.js.Meine_Geräte.FensterOffenWarung: Anzahl offen: 3
-
@werner2000x sagte: Hier der Log:
Wo ist der Log aus Zeile 2?
-
@paul53 Log aus 2. Zeile:
avascript.0 16:15:19.420 info script.js.Meine_Geräte.FensterOffenWarung: [ 'innogy-smarthome.0.Esszimmer.Fenstersensor-Esszimmer.Fenstersensor-Esszimmer.IsOpen', 'innogy-smarthome.0.Flur.Tür-und-Fenstersensor-1.Tür-und-Fenstersensor-1.IsOpen', 'innogy-smarthome.0.Küche.Fenstersensor-Küche.Fenstersensor-Küche.IsOpen', 'innogy-smarthome.0.Schlafzimmer.Fenster.WDS.IsOpen', 'zigbee.0.00158d008b158119.contact', 'zigbee.0.00158d008b159b8c.contact', 'zigbee.0.00158d008b159c0a.contact', 'zigbee.0.00158d008b31a568.contact' ] javascript.0 16:15:19.421 info script.js.Meine_Geräte.FensterOffenWarung: registered 8 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
-
@werner2000x sagte: Log aus 2. Zeile
Da sind doch die 8 Datenpunkt-IDs der Fenster!
Liefert "contact" ebenfalls true bei "offen"? -
@paul53 Die Fenster isopen (innogy) liefern 0 bei zu, die contact-event 1 bei zu.
-
@werner2000x sagte: contact-event 1 bei zu.
Dann modifiziere die Schleife:
for (let id of ids) { let open = getState(id).val; if(id.includes('contact')) open = !open; if(open) count++; }
Ich würde allerdings eine Vereinheitlichung per Alias bevorzugen, wie @Codierknecht bereits erwähnte.
-
@paul53 Danke für die Hilfe.
Es kommt der Fehler "open is not defined"onst ids = Array.prototype.slice.apply($("(functions=window)")); log(ids); on({id: ids, change: "ne"}, async function() { let count = 0; for (let id of ids) { if (getState(id).val) count++; if(id.includes('contact')) open = !open; if(open) count++; } setStateAsync("javascript.0.FensterUeberwachung.DoorsOpen", count, true); log('Anzahl offen: ' + count); });
-
@werner2000x sagte: "contact event" jedoch immer noch als offen gewertet.
Du solltest die bestehende Schleife modifizieren und nicht eine weitere Schleife hinzufügen.
const ids = Array.prototype.slice.apply($("(functions=window)")); // log(ids); on({id: ids, change: "ne"}, async function() { let count = 0; for (let id of ids) { let open = getState(id).val; if(id.includes('contact')) open = !open; if(open) count++; } setStateAsync("javascript.0.FensterUeberwachung.DoorsOpen", count, true); log('Anzahl offen: ' + count); });
-
@paul53 sorry, habe falsch eingefügt. Jetzt klappt es.