NEWS
Befehl wird im Skript nicht ausgeführt
-
Hallo zusammen,
Bin Neuling im Gebrauch von ioBroker und habe folgende Frage:
Ein Befehl soll bei Variablenänderung im Skript ausgeführt werden:
on('hm-rega.0.2764', function (obj) { current_state = getState("hm-rega.0.2764").val; log(current_state) if (current_state == "true") { exec('sudo /raspberry-remote/./send 11101 1 1'); } else { exec('sudo /raspberry-remote/./send 11101 1 0'); } });In der Konsole ausgeführt funktioniert die Funktion send, aber aus dem Skript nicht.
Das Skript selbst wird aber ausgeführt, habe ich über log geprüft.
Danke für Tips!
ModEdit: code bitte in code Blöcke
-
Für mich als Javascript-Laie sieht es so aus, als wenn dein Trigger nicht vollständig ist. Du triggerst ja scheinbar auf die Änderung der Variable hm-rega.0.2764. :?:
on({id: "hm-rega.0.2764", change: "ne"}, function (obj) {So sieht der Trigger aus, wenn ich aus Blockly heraus mir den Code anzeigen lasse. Ob dann der Rest so funktioniert, weiß ich leider nicht. :(
Enrico
-
Der Trigger ist in Orndung, wenn man ohne das "id:" schreibt, wird auf change: ne geprüft meine ich.
Das Problem dürfte sein, dass der hm-rega nicht ienen String wiedrgibt sondern einen boolschen Ausdruck.
Daher rate ich mal, dass
=== truegeht. Also keine Anführungszeichen, drei Gleichzeichen
-
on('hm-rega.0.2764', function (obj) { current_state = getState("hm-rega.0.2764").val; log(current_state) if (current_state == "true") { exec('sudo /raspberry-remote/./send 11101 1 1'); } else { exec('sudo /raspberry-remote/./send 11101 1 0'); } }); ```` `dien script geht kuerzer da das geraet bereits durch die function obj weitergegeben wird:
on('hm-rega.0.2764', function (obj) { current_state = obj.val; log(current_state) });was sagt dein log wen du das probierst
-
Daher rate ich mal, dass
=== truegeht. Also keine Anführungszeichen, drei Gleichzeichen `
Danke für den Hinweis, ist möglicherweise richtig, habe ich mal geändert.
Wenn die Bedingung nicht erfüllt ist müsste er allerdings in den Else-Teil springen und trotzdem die Funktion send ausführen. Macht er leider nicht…
-
Hallo,
Um es weiter abzukürzen, kannst du die Abfrage auf true dann so einbauen:
on('hm-rega.0.2764', function (obj) { log(obj.state.val) if (obj.state.val) exec('sudo /raspberry-remote/./send 11101 1 1'); else exec('sudo /raspberry-remote/./send 11101 1 0'); });Gruß
Pix
-
Also die Datei liegt in /raspberry-remote/. Die Syntax mit ./send habe ich aus mehreren Tutorien so übernommen, funktioniert übrigens genau so in der Konsole nicht: Da muss der . vor den Anfang, also ./raspberry-remote/send/
Ich sehe auch keine Fehlermeldung. Kann ich Bei Skriptausführung entstehende Fehler sichtbar machen?
-
Also die Datei liegt in /raspberry-remote/. Die Syntax mit ./send habe ich aus mehreren Tutorien so übernommen, funktioniert übrigens genau so in der Konsole nicht: Da muss der . vor den Anfang, also ./raspberry-remote/send/
Ich sehe auch keine Fehlermeldung. Kann ich Bei Skriptausführung entstehende Fehler sichtbar machen? `
Ja, das geht.Du müsstest der exec-Ausführung einen callback verpassen. Hier ist ein Beispiel von ruhr70: http://forum.iobroker.net/viewtopic.php … 935#p26547
! Auszug aus dem Code:````
function abfrageConsole() {
exec(abfrage, function(err, stdout, stderr) { // <--------DAS IST DIE RELEVANTE ZEILE
if (err) {
log(err,"error");
return;
}
stdout = stdout.replace(/\n+/g, " "); // neue Zeile gegen Leerzeichen ersetzen
stdout = stdout.split(/ +/g); // array erstellen, Lerzeichen als Trennervar anzProzesse = (stdout.length-1) / 11; //log(stdout); //log("Anzahl laufender ioBroker Prozesse: " + anzProzesse); var jsonArr = createArrayJson(stdout); var mem = Math.floor(getMemAbsolut(jsonArr)/1024); var cpu = Math.floor(getCpu(jsonArr)*10)/10; var memPercent = Math.floor(getMem(jsonArr)*10)/10;! setState(idProzesse ,writeJson(jsonArr));
setState(idMemAll ,mem);
setState(idAnzProzesse ,anzProzesse);
setState(idCpuAll ,cpu);
setState(idMemPercent ,memPercent);
});
}Gruß Pix