NEWS
[gelöst] Befehl an Raspi
-
Hallo,
Ausgangslage:
iobroker l
ä
uft auf win Laptopzus
ä
tzlichRaspi (im Heimnetzwerk erreichbar)
Ich m
ö
chte nun per Script in iobroker eine Datei auf dem Raspi aufrufen.Genauer; Auf dem Raspi soll eine
…
sh-Datei aufgerufen werden.Der Befehl auf dem Raspi hei
ß
t: "sudo /etc/.../abc.sh"K
ö
nnt ihr mir mal einen script-schnipsel geben wie das funktioniert.Danke im Voraus.
mfg
Dieter
-
-
Ne, das hilft mir nicht weiter.
Das Raspi sh-Script hab ich doch schon.
Ich brauche nun ein iobroker-Script das dieses Raspi-Script aufruft.
Von iobroker aus.
mfg
-
Das sollte mit dem NPM-Modul https://www.npmjs.com/package/ssh2 funktionieren. Die Installation erfolgt, indem man das Modul ssh2 in der Konfiguration der Javascript-Instanz als zus
ä
tzliches NPM-Modul eintr
ä
gt. -
Ne, das hilft mir nicht weiter.
Das Raspi sh-Script hab ich doch schon. `
Ja, nur um auf deinem anderen Rechner ein Befehl auszuf
ü
hren, musst du diesen Befehl dorthin bringen.Im Falle eines Shell-Skripts ist die einfachste mir bekannte L
ö
sung dich per SSH dorthin zu verbinden um den Skriptaufruf t
ä
tigen zu k
ö
nnen.Die Variante von Paul basiert auch auf SSH, macht es f
ü
r dich wom
ö
glich etwas anwenderfreundlicher - mit dem npm-Paket habe ich jedoch keine Erfahrung. -
Im Falle eines Shell-Skripts ist die einfachste mir bekannte L
ö
sung dich per SSH dorthin zu verbinden um den Skriptaufruf t
ä
tigen zu k
ö
nnen. `Hallo, danke f
ü
r den Input.Hast du rein zuf
ä
llig noch ein Muster-Script wie das gehen k
ö
nnte.Ich vermute, dass dies nicht so einfach ist.
mfg
Dieter
-
Das Skript k
ö
nnte dann etwa so aussehen (getestet):const idTrigger = '...'; // Datenpunkt-ID des Auslösers const Client = require('ssh2').Client; function execabc() { var conn = new Client(); conn.on('ready', function() { conn.exec('sudo /etc/.../abc.sh', function(err, stream) { if (err) throw err; stream.on('close', function(code, signal) { conn.end(); }).on('data', function(data) { log('Ausgabe: ' + data); }).stderr.on('data', function(data) { log('Fehler: ' + data); }); }); }).connect({ host: '192.168.100.100', // IP des RPi port: 22, username: 'pi', password: 'deinpasswort' }); } on(idTrigger, execabc); // Wertänderung von Trigger startet execabc() -
Also wie ich bereits sagte, wird Paul evtl eine nutzerfreundlichere L
ö
sung in ioBroker haben.Mein Ansatz w
ä
re in deinem Skript etwas in Richtung:Im JavaScript adapter:
exec('ssh user@server /absoluterPfadZumSkriptordner/skript.sh')Das m
ü
sste eine Verbindung zu deinem Rechner herstellen, das Skript ausf
ü
hren und die Verbindung wieder beenden.Allerdings m
ü
sstest du mal schauen, wie man die Authentifizierung handhabt, da du wahrscheinlich an deinem Pi noch ein Nutzerpasswort mitgeben musst. Ich habe in der Vergangenheit auch schon Packages f
ü
r SSH-Anwendungen gehabt, wo man das Passwort hart mit in den Befehl schreiben kann (wie sinnvoll das ist, ist die andere Frage).F
ü
r den Standard-SSH Befehl m
ü
sstest du mal hier schauen bez
ü
glich authentifizieren: https://wiki.ubuntuusers.de/SSH/Ah, ich sehe gerade dein Broker l
ä
uft auf Windows, dann muss ich dich ans NPM-Package verweisen. Sorry. 
-
Vielen lieben Dank, Paul
Das probier ich heute abend gleich aus.
mfg
Dieter
-
So, nochmals Danke an beide.
Was brauche ich noch:
Kann man das log in iobroker untersuchen?
Genauer:
Wenn ein bestimmer Adapter einen Fehler ist log schreibt, dann m
ö
chte ich darauf reagieren.Habt ihr auch sowas?
Oder mal einen Link f
ü
r mich.mfg
Dieter
P.S.
Wenn ich dies zusammen habe probier ich dann mal ein Script zu unterstellen, das folgendes machen soll:
- wenn von Adapter x Fehler im log, dann f
ü
hre Befehl auf Raspi aus und starte danach den Adapter x neu
- wenn von Adapter x Fehler im log, dann f
-
Kann man das log in iobroker untersuchen? `
Wei
ß
leider nicht obs da schon was in ioBroker gibt. Notfalls liegt die Log-Datei in iobroker/log/ (wird in Windows hoffentlich auch so sein).L
ä
sst sich mit Sicherheit einlesen mittels JS. 
Unter Linux k
ö
nnte man es mitvar logfile = exec('cat absPath/logfile.log');in eine Variable schreiben
Windows
ä
quivalent zu cat scheint der Befehl````
typeEvtl. mal hier schauen: [https://www.forum.iobroker.net/viewtopic.php?t=4138](https://www.forum.iobroker.net/viewtopic.php?t=4138) -
R
ü
ckinfo zu pauls script:Paul, das script l
ä
uft einwandfrei.Vielen Dank f
ü
r den Input.mfg
Dieter
-
Bekomme folgenden Fehler:
20:48:13.373 error javascript.0 (1414) script.js.common.Sensoren.Taster.TasterYolo: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/lib/../../ssh2'Betrifft die erste Zeile des beispielcodes:
const Client = require('ssh2').Client;Was muss ich hier tun? Kann mir jemand helfen?
-
Bekomme folgenden Fehler:
20:48:13.373 error javascript.0 (1414) script.js.common.Sensoren.Taster.TasterYolo: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/lib/../../ssh2'Betrifft die erste Zeile des beispielcodes:
const Client = require('ssh2').Client;Was muss ich hier tun? Kann mir jemand helfen?
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
