Warum steht zwischen den Klammern am Ende der url "0" statt 11,9 ?
Warum ist die Zeilenausgabe (print) vertauscht?
das wirkt total unlogisch, ist aber recht einfach erklärt.. Die Shelly.Call Funktion arbeitet aynchron. Sie startet, das Script wartet aber nicht auf die Rückgabe und läuft einfach weiter. Grundsätzlich ist das auch wichtig, weil sonst ja die gesamte Verarbeitung stocken würde bis eine Antwort da ist..
Beim Abfragen des lokalen Relais mag das unproblematisch sein, beim Aufruf externer URLs (mehrere Shelly Duo schalten) wäre das aber extrem unpraktisch.
Lösen kannst du das auf zwei Arten:
1) die Verarbeitung der abhängigen Sachen direkt in die Callback-Funktion vom Shelly.Call mit einbauen:
//Setup
let hip = '192.168.1.93';
//Status lesen
Shelly.call(
"switch.getStatus",
{ id: 0 },
function (response) {
let spower = JSON.stringify(response.apower);
let url = 'http://' + hip + ':8181/66er.exe?answer=dom.GetObject(%22JS-Test-Zahl%22).State' + '(' + spower + ')';
print(url);
},
null
);
Alles anzeigen
2) einen Timer nutzen um die Folgeverarbeitung absichtlich zu verzögern:
let power = 20;
Shelly.call(
"switch.getStatus",
{ id: 0 },
function (response) {
power = response.apower;
},
null
);
// wird falsch mit dem Wert 20 ausgegeben
print(power);
// Timer verzögert die Ausgabe um 100ms
Timer.set(100, false, function (ud) {
// Wird richtig mit dem aktuellen wert ausgegeben
print(power);
}, null);
Timer.clear();
Alles anzeigen
Verständlich oder nach wie vor unklar?