NEWS
Java adapter SSH keine funktion mehr ?
-
Hallo zusammen,
Ich habe immer meine Raspberri PI im Wohnzimmer mit einem Script runtergefahren.So wie es nun aussieht funktioniert das nicht mehr.
Ich habe vor kurzem den JavaScript Adapter geupdatet.on({id: '0_userdata.0.DG_Technik.Raspberry_Wohn_Shutdown', change: "any"}, function (obj) { const node_ssh = require('node-ssh').NodeSSH; const ssh = new node_ssh(); ssh.connect({ host: '192.168.xxx.xxx', username: 'pi', password: 'xxxxxxx' }).then(() => { ssh.execCommand("sudo shutdown"); });
Fehlermeldung ist folgende.
javascript.0 2024-04-22 02:47:14.530 error Error: No response from server at Client.<anonymous> (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-ssh/lib/cjs/index.js:198:24) at Client.emit (node:events:517:28) at Client.emit (node:domain:489:12) at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.javascript/node_modules/ssh2/lib/client.js:821:12) at Socket.emit (node:events:517:28) at Socket.emit (node:domain:489:12) at TCP.<anonymous> (node:net:350:12)
Würde mich über Hilfe freuen.
-
versuche es mal so:
const { Client } = require('ssh2'); function getData(sHost='', sUser='', sPass='', sBefehl='') { const conn = new Client(); return new Promise((resolve, reject) => { let allData = ""; conn.on('ready', () => { conn.exec(sBefehl, (err, stream) => { if (err) { reject(err); conn.end(); return; } stream.on('data', (data) => { allData += data; }); stream.on('close', (code, signal) => { resolve(allData); conn.end(); }); stream.on('error', reject); }); }).connect({ host: sHost, port: 22, username: sUser, password: sPass }); }); }; getData('xxx.xxx.xxx.xxx', 'BENUTZER', 'KENNWORT', "sudo shotdown").then(result => { console.log(result); });
Füge im JS-Adapter "ssh2" dazu. Dein jetzigen kannst du dann entfernen wenn er nicht mehr gebraucht wird.
Ro75.
EDIT: Über diese Variante kannst du auch Daten abfragen (z.B. free, etc)
-
.... oder Du schaust hier:
https://forum.iobroker.net/topic/74157/gelöst-ssh-befehle-per-blockly-absetzen/4
-
habe es mit dem ursprünglichem Script wieder zum laufen gebracht.
aber habe noch fehlermeldungen.
kann mir jemand sagen was diese bedeuten ?javascript.0 2024-04-22 20:18:53.646 error Error: No response from server at Client.<anonymous> (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-ssh/lib/cjs/index.js:202:24) at Client.emit (node:events:517:28) at Client.emit (node:domain:489:12) at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.javascript/node_modules/ssh2/lib/client.js:821:12) at Socket.emit (node:events:517:28) at Socket.emit (node:domain:489:12) at TCP.<anonymous> (node:net:350:12) javascript.0 2024-04-22 20:18:53.646 error Error: No response from server javascript.0 2024-04-22 20:18:53.644 error An error happened which is most likely from one of your scripts, but the originating script could not be detected.
-
@padi0-000 sagte in Java adapter SSH keine funktion mehr ?:
Error: No response from server
eigentlich sagt es das schon.
läuft der ssh deamon auf dem anderen server bzw. ist die ip adresse erreichbar?probiere mal selbst auf der konsole den ssh befehl abzusetzen.
um es möglichst realistisch zu machen am besten mit dem iobroker user durchführen.
den kannst du nutzen wenn du auf der konsole den folgenden befehl aufrufstsudo -u iobroker bash
dadurch wird in einer neuen ebene deiner konsole die shell erneut aufgerufen aber als user iobroker. als passwort musst du das passwort deines aktuellen users eintragen. der aktuelle user muss der gruppe sudoer zugeordnet sein. zurück kommst du mit exit.
wenn dein shell prompt gut eingestellt ist, kannst du daran erkennen mit welchem user du gerade unterwegs bist. -
@padi0-000 sagte in Java adapter SSH keine funktion mehr ?:
kann mir jemand sagen was diese bedeuten ?
Nur eine Vermutung: Du triggerst auf "change: any". Also auf jede Änderung. Angenommen Du setzt den State jetzt auf true und dann zurück auf false. Dann würde die Logik 2x ausgeführt, aber das System fährt ja schon bei der ersten Änderung herunter.
Das heißt dass die zweite Verbindung nicht mehr zustande kommt. Du solltest also
- noch mit
.catch()
den Fehler abfangen. - nur auf einen bestimmten Wert triggern (z.B.
val: true
) oder zumindest im Trigger prüfen. Wäre ja komisch, wenn man den Wert auffalse
setzt und der Server dann runter fährt
- noch mit
-
@haus-automatisierung sagte in Java adapter SSH keine funktion mehr ?:
@padi0-000 sagte in Java adapter SSH keine funktion mehr ?:
kann mir jemand sagen was diese bedeuten ?
Nur eine Vermutung: Du triggerst auf "change: any". Also auf jede Änderung. Angenommen Du setzt den State jetzt auf true und dann zurück auf false. Dann würde die Logik 2x ausgeführt, aber das System fährt ja schon bei der ersten Änderung herunter.
Das heißt dass die zweite Verbindung nicht mehr zustande kommt. Du solltest also
- noch mit
.catch()
den Fehler abfangen. - nur auf einen bestimmten Wert triggern (z.B.
val: true
) oder zumindest im Trigger prüfen. Wäre ja komisch, wenn man den Wert auffalse
setzt und der Server dann runter fährt
Das ist der Lösungsansatz. sobald ich den Wert manuell auf True setze fährt der Raspberry runter und es gibt keine Fehlermeldung.
Sobald ich dann wieder zurück auf False setze bekomme ich die Fehlermeldungen.Wie muss ich das eintragen ?
on({id: '0_userdata.0.DG_Technik.Raspberry_Wohn_Shutdown', change: "val: true"}, function (obj) {
- noch mit
-
-
@padi0-000 sagte in Java adapter SSH keine funktion mehr ?:
Wie muss ich das eintragen ?
In der Doku sind Beispiele
on({ id: '0_userdata.0.DG_Technik.Raspberry_Wohn_Shutdown', val: true }, function (obj) {
-
So es funktioniert jezt alles und das ohne fehlermeldung.
Es lag tatsächlich an dem Trigger...
Was mich wundert, das die Fehlermeldung erst jezt aufgetaucht ist, da es schon lange lief...Danke für die hilfe.