NEWS
Python Script ausführen (GPIO)
-
nach obigem Script versuche ich mein Python-Programm auszuführen, welches bei Aufruf per modbus Daten von meinem Instrument abholt. In der Konsole funktioniert das wie gewünscht, der Wert wird auf der Konsole ausgegeben. Beim javascript Aufruf haperts aber noch ein bisschen.
(python script name ist natürlich angepasst) - wenn ich richtig verstanden habe, sollte die Konsolenausgabe stdout in iobroker eingelesen werden?
Dabei ist mir nicht klar wie
1. das Script getriggert wird, dies sollte in regelmässigen Intervall geschehen.
2. ich die Daten auslesen kann (wohl unter Javascript.0 … aber dort steht kein Wert)
Kann mir jemand auf die Sprünge helfen?
-
nach obigem Script versuche ich mein Python-Programm auszuführen, welches bei Aufruf per modbus Daten von meinem Instrument abholt. In der Konsole funktioniert das wie gewünscht, der Wert wird auf der Konsole ausgegeben. Beim javascript Aufruf haperts aber noch ein bisschen.
(python script name ist natürlich angepasst) - wenn ich richtig verstanden habe, sollte die Konsolenausgabe stdout in iobroker eingelesen werden?
Dabei ist mir nicht klar wie
1. das Script getriggert wird, dies sollte in regelmässigen Intervall geschehen.
2. ich die Daten auslesen kann (wohl unter Javascript.0 … aber dort steht kein Wert)
Kann mir jemand auf die Sprünge helfen? `
Es war ein Fehler im Kode:So konnte es aussehen. Alle 5 Minuten:
createState('pythonResult', ''); schedule("*/5 * * * *", function () { var python = require('child_process').spawn('python', // second argument is array of parameters, e.g.: ["/home/me/pythonScript.py"]); var result = ''; python.stdout.on('data', function(){ result += data.toString(); }); python.on('close', function(code){ if (code !== 0) { log('Error: ' + code); } else { log(result); setState('pythonResult', result, true); } }); });
Ergebnis dann in javascript.0.pythonResult
-
hallo bluefox, danke für die Antwort,
jetzt läuft wenigstens etwas, aber wohl nicht das erwünschte:
odroid 2015-06-03 23:29:01 error host.odroid instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
in javascript.0.pythonResult steht kein Wert
der manuelle Aufruf:
root@odroid:/# python /root/strom.py
2.36
(Skript angepasst)
-
… ich komm nicht weiter
wenn ich die variable data initialisiere var data = ' ';
dann verschwindet die Meldung uncaught exception
initialisiere ich mit irgendeinem Wert, wird der auch unter javascript.0.pythonResult angezeigt.
irgendwie funktioniert die Datenübergabe via stdout nicht, aber da blick ich zuwenig durch
-
Es war ein Fehler im Kode:
So konnte es aussehen. Alle 5 Minuten:
gekürzt... var python = require('child_process').spawn('python', // second argument is array of parameters, e.g.: ["/home/me/pythonScript.py"]); gekürzt... ```` `
Versuch mal den 'unbuffered' Parameter -u mitzugeben…
Singemäss:
["/home/me/pythonScript.py"], '-u');
-
hallo Yves - schade, gleiches Bild
! inMem 2015-06-05 12:49:04 debug message * system.adapter.javascript.0.alive val=true, ack=true, ts=1433501344, from=system.adapter.javascript.0, lc=1433500654
! javascript-0 2015-06-05 12:49:00 info script.js.modbusstrom: 12
! inMem 2015-06-05 12:48:00 debug message * javascript.0.pythonResult val=12, ack=true, ts=1433501281, from=system.adapter.javascript.0, lc=1433501161
wobei 12 der Wert ist, den ich manuell vorinitialisiert hab.ohne var data = '12'; siehts so aus
! odroid 2015-06-05 13:00:00 error host.odroid instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
! odroid 2015-06-05 12:59:30 info host.odroid instance system.adapter.javascript.0 started with pid 12531
! host-odroid 2015-06-05 12:59:00 info Restart adapter system.adapter.javascript.0 because enabled
! host-odroid 2015-06-05 12:59:00 error instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
! inMem 2015-06-05 12:59:00 debug message * javascript.0.pythonResult val=, ack=true, ts=1433501940, from=system.adapter.javascript.0, lc=1433501940
! javascript-0 2015-06-05 12:59:00 info script.js.modbusstrom:
! ReferenceError: 2015-06-05 12:59:00 error at Pipe.onread (net.js:526:21)
! ReferenceError: 2015-06-05 12:59:00 error at Socket.Readable.push (_stream_readable.js:127:10)
! ReferenceError: 2015-06-05 12:59:00 error at readableAddChunk (_stream_readable.js:165:9)
! ReferenceError: 2015-06-05 12:59:00 error at emitReadable (stream_readable.js:404:5)
! ReferenceError: 2015-06-05 12:59:00 error at emitReadable (_stream_readable.js:408:10)
! ReferenceError: 2015-06-05 12:59:00 error at Socket.EventEmitter.emit (events.js:92:17)
! ReferenceError: 2015-06-05 12:59:00 error at Socket. (_stream_readable.js:746:14)
! ReferenceError: 2015-06-05 12:59:00 error at Socket.EventEmitter.emit (events.js:95:17)
! ReferenceError: 2015-06-05 12:59:00 error at Socket. (script.js.modbusstrom:9:57)
! ReferenceError: 2015-06-05 12:59:00 error data is not defined
! uncaught 2015-06-05 12:59:00 error exception: data is not defined -
Ich bin mir sowieso nicht sicher, ob das nicht besser mit exec als mit spawn gemacht werden sollte ?
Vielleicht weiss Bluefox da mehr.
-
hallo Yves - schade, gleiches Bild
! inMem 2015-06-05 12:49:04 debug message * system.adapter.javascript.0.alive val=true, ack=true, ts=1433501344, from=system.adapter.javascript.0, lc=1433500654
! javascript-0 2015-06-05 12:49:00 info script.js.modbusstrom: 12
! inMem 2015-06-05 12:48:00 debug message * javascript.0.pythonResult val=12, ack=true, ts=1433501281, from=system.adapter.javascript.0, lc=1433501161
wobei 12 der Wert ist, den ich manuell vorinitialisiert hab.ohne var data = '12'; siehts so aus
! odroid 2015-06-05 13:00:00 error host.odroid instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
! odroid 2015-06-05 12:59:30 info host.odroid instance system.adapter.javascript.0 started with pid 12531
! host-odroid 2015-06-05 12:59:00 info Restart adapter system.adapter.javascript.0 because enabled
! host-odroid 2015-06-05 12:59:00 error instance system.adapter.javascript.0 terminated with code 6 (uncaught exception)
! inMem 2015-06-05 12:59:00 debug message * javascript.0.pythonResult val=, ack=true, ts=1433501940, from=system.adapter.javascript.0, lc=1433501940
! javascript-0 2015-06-05 12:59:00 info script.js.modbusstrom:
! ReferenceError: 2015-06-05 12:59:00 error at Pipe.onread (net.js:526:21)
! ReferenceError: 2015-06-05 12:59:00 error at Socket.Readable.push (_stream_readable.js:127:10)
! ReferenceError: 2015-06-05 12:59:00 error at readableAddChunk (_stream_readable.js:165:9)
! ReferenceError: 2015-06-05 12:59:00 error at emitReadable (stream_readable.js:404:5)
! ReferenceError: 2015-06-05 12:59:00 error at emitReadable (_stream_readable.js:408:10)
! ReferenceError: 2015-06-05 12:59:00 error at Socket.EventEmitter.emit (events.js:92:17)
! ReferenceError: 2015-06-05 12:59:00 error at Socket. (_stream_readable.js:746:14)
! ReferenceError: 2015-06-05 12:59:00 error at Socket.EventEmitter.emit (events.js:95:17)
! ReferenceError: 2015-06-05 12:59:00 error at Socket. (script.js.modbusstrom:9:57)
! ReferenceError: 2015-06-05 12:59:00 error data is not defined
! uncaught 2015-06-05 12:59:00 error exception: data is not defined `
Es war ein Fehlerchen drin:createState('pythonResult', ''); schedule("*/5 * * * *", function () { var python = require('child_process').spawn('python', // second argument is array of parameters, e.g.: ["/home/me/pythonScript.py"]); var result = ''; python.stdout.on('data', function(data){ result += data.toString(); }); python.on('close', function(code){ if (code !== 0) { log('Error: ' + code); } else { log(result); setState('pythonResult', result, true); } }); });
-
8-) 8-) 8-) 8-)
Jetzt läuft alles - danke bluefox.
:idea: Sollte man das nicht (sticky) unter "ioBroker Skripten" und/oder im wiki aufführen? Zumindest die Lösung passt dort m.E besser hinein.
-
Wenn du mir sagst welches das aktuelle und funktionierende Skript ist.
Und einen Zweizeiler wozu es gut ist kommt es da hin:
http://www.iobroker.net/docu/?page_id=57&lang=de
Gruß
Rainer
Gesendet von meinem LIFETAB_S785X mit Tapatalk