Hallo,
ich benötige für das Scripting eine function oder andere Möglichkeit, die Ausführung des Scripts für eine Zeit zu unterbrechen, ohne den Shelly mit irgend etwas sinnlosem zu beschäftigen.
Hat da jemand eine Lösung?
Hallo,
ich benötige für das Scripting eine function oder andere Möglichkeit, die Ausführung des Scripts für eine Zeit zu unterbrechen, ohne den Shelly mit irgend etwas sinnlosem zu beschäftigen.
Hat da jemand eine Lösung?
Es gibt keine Sleep Funktion, du musst mit asynchronen Timer, oder TimeStamps arbeiten.
Alles anzeigenOk vergiss es, keine Chance ich hab mit der pseudo Sleep() gerade ein bisle herum gespielt und es zeigte sich schnell, sie wirkt sich nur auf die Konsole aus nicht auf die eigentliche Anwendung.....
Das bedeutet wenn ich versuche eine Lampe/Output blinken zu lassen mit der pseudo Sleep() dann wird zwar die Text Ausgabe in der Konsole verzögert ausgeführt jedoch, nicht das Blinken.
Die Lampe Blinkt also trotz Sleep so schnell wie es geht.
Ich Vermute mal es gibt im Hintergrund einige Optimierungen am Code um ihn so schnell und Ressourcen freundlich wie nur möglich auszuführen.
Wahrscheinlich wird es in einem Container ausgeführt, das ganze ist jedenfalls sehr interessant und lehrreich gewesen.
Zusammengefasst eine syncrone sleep()/wait()/delay() Funktion ist nicht machbar, nicht mal mit Tricks, eine Verzögerung kann nur asynchron durchgeführt werden.
Danke dir. Das ganze Scripting ist doch sehr bescheiden. Ich bin da halt von der Python Seite kommend sehr verwöhnt. Werde mal weiter fummeln.
Was genau soll den dein Skript machen, evt gibt es das schon oder jemand im Forum kann dir dabei helfen.
function timerCode() {
i += 1;
if (i === devices.length){i = 0};
Shelly.call(
"http.get",
{url: net + devices[i] + "/psovrd2",timeout: 8},
function(result, error_code, error_message) {
if (error_code !== 0) {
print("timeout " + net + devices[i]);
}
else if (result.code === 200) {
let obj = JSON.parse(result.body);
print("success " + net + devices[i]);
}
})
}
//Anpassen (max. 15 TRV)
let net = "172.16.0.";
let devices = ["64", "67", "68", "69", "70", "71", "72", "73", "75", "76"];
//Anpassen Ende
let wait = 150000/(devices.length);
let i = -1;
Timer.set(wait,true,timerCode);
Alles anzeigen
Das beleidigt mein Auge
Das was hier der Timer macht, würde ich gerne mit einer for Schleife machen, die idealerweise wartet, bis eine Url erledigt ist. Oder eben eine feste Zeit.
In Javascript oder Python geht das natürlich viel eleganter, aber....