NEWS
Lowbat *einmalig* mailen
-
@paul53 Wobei mir gerade beim Testen was auffällt. Wir nehmen Einträge aus der Liste tagesliste weg. Wir versuchen aber über die gesamte ursprüngliche Länge der Liste auf die Werte zuzugreifen. Der Index spielt uns in die Karten.
Als Lösung vielleicht eine dritte Liste, die sich spiegelt mit der tagesliste. Nur dort entfernen wir und aktualisieren diese zum Schluss mit der tagesliste?
-
-
@paul53 sagte: Dann korrigiere den Index nach dem Entfernen.
Das wäre eine Idee. Dennoch geht die Schleife ja so lang wie die ursprüngliche Länge der tagesliste.
Aus benachrichtigt = [id1, id2] und tagesliste = [1, 20] wird benachrichtigt = [id2] und tagesliste = [20, -1].
-
@timmss sagte: tagesliste = [20, -1].
Wirklich? Ich habe mal eine Tagesliste mit Javascript nachgebildet:
-
@paul53 Diese Schleife:
gibt mir diese outputs:
2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: benachrichtigt vorher: 11,20,94 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: tagesliste vorher: 1,20,29 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: Schleifendurchgang: 0 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: benachrichtigt jetzt: 20,94 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: tagesliste jetzt: 20,29 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: Schleifendurchgang: 1 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: benachrichtigt jetzt: 20,94 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: tagesliste jetzt: 19,29 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: Schleifendurchgang: 2 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: benachrichtigt jetzt: 20,94 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: tagesliste jetzt: 19,28 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: Schleifendurchgang: 3 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: benachrichtigt jetzt: 20,94 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: tagesliste jetzt: 19,28,-1 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: benachrichtigt danach: 20,94 2025-09-10 08:55:06.468 - info: javascript.0 (36733) script.js.common.Allgemein.Mailing_von_LOW_BAT: tagesliste danach: 19,28,-1
So wurden die debugs eingearbeitet:
-
@timmss sagte: gibt mir diese outputs:
In Blockly funktioniert es so leider nicht, da die Blockly-Schleife eine Zwischenvariable i_end verwendet, die beim Entfernen nicht angepasst wird.
-
@paul53 Ärgerlich. Dann bauen wir diese Schleife einfach in eine JavaScript-Funktion?
-
-
@paul53 So simpel wie es eigentlich ist hat es geholfen. Auch nach Tests.
Riesiges Dankeschön für deine Zeit und Geduld.
-
@timmss sagte: Schleife einfach in eine JavaScript-Funktion?
Mit einer Javascript-Funktion ist es wesentlich kürzer:
for(let i = 0; i < tage.length; i++) { tage[i]--; if(tage[i] == 0) { tage.splice(i, 1); ids.splice(i, 1); i--; } }
-
Eine andere Idee:
Ein weiterer Zustand
BatteryOkValidated wird erst gesetzt, wenn mindestens einen Tag keine BatteryLow Ereignisse gekommen sind. Wird bei Start des Skripts auf True gesetzt ...
Kommt ein BatteryLow Ereignis wird geprüft ob BatteryOkValidated gesetzt ist.
Falls ja, wird BatteryOkValidated auf false gesetzt, und eine Mail abgesetzt, sowie ein Timeout (für das Zurücksetzen von BatteryOkValidated auf true) gesetzt.
Falls nein wird der Timeout für das Setzen von BatteryOkValidated verlängert.