ioBroker.javascript
ioBroker.javascript copied to clipboard
Blockly Script wird trotz Cron unzuverlässig ausgeführt ohne Meldungen im Debug
Hallo Zusammen,
ich habe seit längerem Probleme mit zwei meiner Blocklyscripte, da beide nicht konstant zuverlässig ausgeführt werden. Soll heißen, das mein Script trotz Cronschedule manchmal nicht ausgeführt wird und trotz Javascript Adapter im Debug keinerlei Meldungen zum geplanten Zeitpunkt angezeigt werden!
Script 1 soll alle Rollos bis auf Terrasse 6 Uhr zu 50% öffnen und 6:30 dann zu 100%, der erste Schritt wird immer ausgeführt, der zweite allerdings nicht. Keinerlei Output im Debuglog! Gerade habe ich den Teil von 6:30 nochmal auf 6:40 geändert und da werden die Rollos korrekt zu 100% geöffnet!
Script 2 soll Terrassenrollo Abends 22:30 herunterfahren, das klappt leider nur 2 von 10 mal, bisher konnte ich den Fehler nicht finden warum es oft nicht funktioniert. Wenn das Rollo 22:30 nicht geschaltet wird und ich das Script dann am selbern Abend zB 22:40 nochmal neu plane wird es heruntergefahren. Wenn das Script 22:30 nicht herunter gefahren wird erscheinen keinerlei Fehler, Warnungen oder Meldungen im DebugLog!
Welche Infos soll ich hier noch hochladen (Bilder vom Script vermutlich nicht) ggf Blockly exporieren?
Versions:
- Adapter version: Javascript Adapter 5.7.0
- JS-Controller version: 4.0.23
- Node version: 14.19.3
- Operating system: Debian
Iobroker läuft in einer Debian VM auf einem IntelNuc host mit Proxmox
Danke!
Bitte screenshot vom Blockly zeigen UND auch das daraus generierte JavaScript (oben rechts auf das "Blockly|JS" Icon klicken, dann Zeigt er JavaScript an. Klingt eher nach einem Skriptfehler
Script 1
var prozent, Intervall4;
schedule("30 22 * * *", async function () {
if (getState("lupusec.0.devices.RF:055b9110.status_ex").val == false) {
setState("tuya.0.bf9bafec286e1c9621xe1a.1"/*control*/, 2);
prozent = 92;
Intervall4 = setInterval(async function () {
prozent = (typeof prozent == 'number' ? prozent : 0) + -1;
if (prozent <= 1) {
(function () {if (Intervall4) {clearInterval(Intervall4); Intervall4 = null;}})();
setState("tuya.0.bf9bafec286e1c9621xe1a.101"/*switch_stop*/, true);
}
}, 270);
}
});
Script 2
var prozent, Intervall, Intervall2, Intervall3;
schedule("0 6 * * *", async function () {
// Rollos hoch
if (getState("lupusec.0.status.mode_pc_a1").val == 0 && getState("javascript.0.scriptEnabled.User_created.Button_2").val == true) {
setState("tuya.0.bf0b55acbece98f9328cfu.1"/*control*/, 0);
setState("tuya.0.bf7b15a9d963396a54wsvj.1"/*control*/, 0);
setState("tuya.0.bf35e6ae8de3acfa370t9x.1"/*control*/, 0);
setState("tuya.0.67304186cc50e3726503.1"/*status*/, 0);
setState("tuya.0.bf9481040b8a50341fyjjd.1"/*control*/, 0);
setState("tuya.0.bf9bafec286e1c9621xe1a.1"/*control*/, 0);
setState("tuya.0.bfc2615e46b03c8c69og9w.1"/*control*/, 0);
prozent = 50;
Intervall = setInterval(async function () {
prozent = (typeof prozent == 'number' ? prozent : 0) + -1;
if (prozent <= 0) {
(function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
// Rollos stop
setState("tuya.0.bf0b55acbece98f9328cfu.1"/*control*/, 1);
setState("tuya.0.bf7b15a9d963396a54wsvj.1"/*control*/, 1);
setState("tuya.0.bf35e6ae8de3acfa370t9x.101"/*switch_stop*/, true);
setState("tuya.0.67304186cc50e3726503.1"/*status*/, 2);
setState("tuya.0.bf9481040b8a50341fyjjd.101"/*switch_stop*/, true);
setState("tuya.0.bf9bafec286e1c9621xe1a.1"/*control*/, 1);
setState("tuya.0.bfc2615e46b03c8c69og9w.101"/*switch_stop*/, true);
}
}, 200);
}
});
// Rollos auf 100% wenn unscharf
schedule("40 6 * * *", async function () {
if (getState("lupusec.0.status.mode_pc_a1").val == 0 && getState("javascript.0.scriptEnabled.User_created.Button_2").val == true) {
setState("tuya.0.bf0b55acbece98f9328cfu.1"/*control*/, 0);
setState("tuya.0.bf7b15a9d963396a54wsvj.1"/*control*/, 0);
setState("tuya.0.bf35e6ae8de3acfa370t9x.1"/*control*/, 0);
setState("tuya.0.67304186cc50e3726503.1"/*status*/, 0);
setState("tuya.0.bf9481040b8a50341fyjjd.1"/*control*/, 0);
setState("tuya.0.bf9bafec286e1c9621xe1a.1"/*control*/, 0);
setState("tuya.0.bfc2615e46b03c8c69og9w.1"/*control*/, 0);
prozent = 100;
Intervall2 = setInterval(async function () {
prozent = (typeof prozent == 'number' ? prozent : 0) + -1;
if (prozent <= 0) {
(function () {if (Intervall2) {clearInterval(Intervall2); Intervall2 = null;}})();
// Rollos stop
setState("tuya.0.bf0b55acbece98f9328cfu.1"/*control*/, 1);
setState("tuya.0.bf7b15a9d963396a54wsvj.1"/*control*/, 1);
setState("tuya.0.bf35e6ae8de3acfa370t9x.101"/*switch_stop*/, true);
setState("tuya.0.67304186cc50e3726503.1"/*status*/, 2);
setState("tuya.0.bf9481040b8a50341fyjjd.101"/*switch_stop*/, true);
setState("tuya.0.bf9bafec286e1c9621xe1a.1"/*control*/, 1);
setState("tuya.0.bfc2615e46b03c8c69og9w.101"/*switch_stop*/, true);
}
}, 190);
}
});
// Rollos Abends runter
schedule({astro: "sunset", shift: 30}, async function () {
setState("tuya.0.bf0b55acbece98f9328cfu.1"/*control*/, 2);
setState("tuya.0.bf7b15a9d963396a54wsvj.1"/*control*/, 2);
setState("tuya.0.67304186cc50e3726503.1"/*status*/, 1);
setState("tuya.0.bf9481040b8a50341fyjjd.1"/*control*/, 2);
setState("tuya.0.bfc2615e46b03c8c69og9w.1"/*control*/, 2);
setState("tuya.0.bf35e6ae8de3acfa370t9x.1"/*control*/, 2);
prozent = 85;
Intervall3 = setInterval(async function () {
prozent = (typeof prozent == 'number' ? prozent : 0) + -1;
if (prozent <= 0) {
(function () {if (Intervall3) {clearInterval(Intervall3); Intervall3 = null;}})();
// Rollos stop
setState("tuya.0.bf0b55acbece98f9328cfu.1"/*control*/, 1);
setState("tuya.0.bf7b15a9d963396a54wsvj.1"/*control*/, 1);
setState("tuya.0.67304186cc50e3726503.1"/*status*/, 2);
setState("tuya.0.bf9481040b8a50341fyjjd.101"/*switch_stop*/, true);
setState("tuya.0.bfc2615e46b03c8c69og9w.101"/*switch_stop*/, true);
setState("tuya.0.bf35e6ae8de3acfa370t9x.1"/*control*/, 1);
}
}, 190);
});
1;
true;
Ok, Skript 1: DIr ist schon klar das deine "alle 270ms nen counter um 1 erniedrigen von 92 bis 2 das gleiche ist wie "x*270ms warten"?? Sehr kompliziert gebaut, aber naja ok ... bzw am ende ein "steuere im x Sekunden "delayed" ist das gleiche ... dann wäre es noch einfacher Am Ende sieht das an sich aber ok aus. Bau doch mal ins blockly einfach log ausgaben ein ... logge den Zähler, logge wann es startet und logge ob er das state am Ende setzt. Wenn er das "erste" macht, kann der "Fehler ja nur im anderen teil liegen. Und da hilft logging
Skript 2: Das gleiche an sich. Auch hier LOgging dazu und schauen was rauskommt
was auffällt ist in meinen Augen nur das die variable prozent zb beim zweiten Skript für beide fälle genutzt wird ... wenn da also irgendwas ist und ein Skript lännger läuft oder sowas dann überschreiben die sich. Glaube aber nicht das das was damit zu tun hat.
Alles in alles denke ich eher ein Forum-Thema denn ein Fehler im Adapter
ok schaue ich mir an und mache mal einen neuen Post im Forum auf, danke
Dieses Problem hatte ich auch vor einiger Zeit. Hab Blockly über Crons zb um 00:00 Uhr gestartet. Ab und an ist es vorgekommen, dass das Skript nicht ausgeführt wurde. Am nächsten Tag ging alles wieder ganz normal. Ich konnte diesen Fehler nicht reproduzieren!
Ich hab mir damals folgendermaßen geholfen: Datenpunkt angelegt (boolean) wo ich den wert auf false setze, wenn das skript ausgeführt wird. Das Skript lasse ich im Abstand von 1 Minute 3x hintereinander laufen. Ist der DP True, wird das skript ausgeführt, wenn false, dann nicht.
Ein zweites Skript setzt den DP spät in der Nacht wieder auf True, auch dieses habe ich 3x aufgerufen! Zugleich hab ich mir damals immer eine Telegram Nachricht geschickt. So konnte ich sehen, wann das Skript ausgeführt wurde.
Der Fehler ist sehr sporadisch, ich denke, dass es vielen garnicht erst auffällt....
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs within the next 7 days. Please check if the issue is still relevant in the most current version of the adapter and tell us. Also check that all relevant details, logs and reproduction steps are included and update them if needed. Thank you for your contributions. Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivitäten gab. Es wird geschlossen, wenn nicht innerhalb der nächsten 7 Tage weitere Aktivitäten stattfinden. Bitte überprüft, ob das Problem auch in der aktuellsten Version des Adapters noch relevant ist, und teilt uns dies mit. Überprüft auch, ob alle relevanten Details, Logs und Reproduktionsschritte enthalten sind bzw. aktualisiert diese. Vielen Dank für Eure Unterstützung.