Hi,
Ich hatte ein ähnliches Problem. Bei einem Neustart sollte ein Befehl an raspberry gesendet werden. Das PW sollte dabei mitgegeben werden. Mit blockly habe ich es nicht hinbekommen, mit Java gings.
Das Skript macht folgendes. Es überprüft den Datenpunkt mpd info connect auf false. Ist dieser auf false, wird sich auf dem raspberry mit pw eingeloggt jnd der sudo Befehl abgewendet.
Vielleicht hilft dir das Skript weiter. Habe dir noch einige Anmerkungen reingeschri3ben
const { Client } = require('ssh2'); // Importiere die ssh2 Bibliothek // Konfiguration für den Raspberry Pi MPD (IP, Benutzername und Passwort) const raspberryMPDConfig = { host: '192.168.XXX.XX', // IP-Adresse von Raspberry Pi MPD port: 22, username: 'pi', // Benutzername auf Raspberry Pi MPD password: 'XXX' // Passwort für den Benutzer }; let sshErrorLogged = false; // Flag, um Fehler nur einmal zu protokollieren // Funktion, die den Befehl an Raspberry Pi MPD sendet function sendCommandToRaspberryMPD() { const conn = new Client(); // Verbindung zu Raspberry Pi MPD herstellen conn.on('ready', () => { // Den Befehl "sudo service mpd start" ausführen conn.exec('sudo service mpd start', (err, stream) => { if (err) { if (!sshErrorLogged) { console.error('Fehler beim Ausführen des Befehls:', err); // Fehler nur einmal loggen sshErrorLogged = true; // Fehler flag setzen } conn.end(); return; } stream.on('data', () => { // Keine Ausgabe mehr aufzeichnen }); stream.on('close', () => { conn.end(); // Verbindung schließen }); }); }).on('error', () => { if (!sshErrorLogged) { console.error('Fehler bei der SSH-Verbindung.'); // Fehler nur einmal loggen sshErrorLogged = true; // Fehler flag setzen } }).connect(raspberryMPDConfig); } // Event-Listener für den Datenpunkt mpd.0.info.connection on({ id: 'mpd.0.info.connection', val: false }, async (obj) => { let value = obj.state.val; // Der aktuelle Wert des Datenpunkts let oldValue = obj.oldState.val; // Der vorherige Wert des Datenpunkts if (value === false) { sendCommandToRaspberryMPD(); } else { sshErrorLogged = false; // Fehlerflag zurücksetzen, wenn der Wert nicht mehr false ist } });