[German] GPIO über API oder SSH Lokal steuern

Hallo zusammen,

ich stehe vor dem Problem, dass ich die GPIO´s aus der ferne schalten muss.

Hardware:

  • Raspberry Pi 3

Software

  • Image auf SD-Karte von Info-Beamer

  • Paket Vollbild-Browser

Der Raspberry ist in einen “Magic-Mirror” verbaut, in welchen ich über einen optokoppler über die GPIO´s sowohl die Lüfter, den Monitor und ein LED-Band ansteuere.
Ich stelle über eine Nuc-PC mit IO-Broker eine VIS zur Verfügung, welche auch tadellos dargestellt wird → Großes lob an dieser Stellle.

Früher habe ich die GPIO´s per SSH direkt aus dem IO-Broker angesteuert, leider lässt der Raspberry keine Lokale SSH-Sitzung zu. → in dem Paket ist keine ssh_config Datei und keine Möglichkeit sich per User und Key anzumelden.

Über die Internetseite ->info-beamer->geräte->root-Terminal-Sitzung lassen sich die GPIO´s schon mal schalten

echo 22 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio22/direction
echo 1 > /sys/class/gpio/gpio22/value
echo 0 > /sys/class/gpio/gpio22/value

Dies funktioniert

Da SSH nicht möglich ist, versuche ich es über die REST-API… ohne Erfolg
mit folgendem curl-Befehl bekomme ich zwar ein “ok” zurück, jedoch wird der befehl nicht ausgeführt :roll_eyes:

curl -u :XXXXXX -d "{echo 1 >}" -X POST https://info-beamer.com/api/v1/device/30481/node/sys/class/gpio/gpio22/value

Hat jemand schon mal eine solchen Anwendungsfall gehabt?
Kann man die SSH-Verbindung vielleicht doch einrichten?

Device Seite > Configuration > Advanced/Development Tab > [ x] Enable SSH remote access.

Dann Public Key in die Textbox darunter eintragen und Konfiguration speichern. Der Pi rebootet einmal und dann kann man sich mittels des passenden Private Keys als root einloggen. Generell ist es eine eher schlechte Idee, per SSH Dinge zu automatisieren da das nicht skaliert. Da es sich aber nur um einen Pi handelt, ist es vermutlich ok.

Hallo infobeamer-fw.

danke dir für die schnelle Antwort.
Ja das hatte ich schon versucht, ich habe mit PUTTY-GEN einen SSH-Key erstellt ( einmal den RSA & ECDSA) beide Schlüssel habe ich hier in der Box hinterlegt → Ich habe extra auf die Formatierung geachtet.
Wenn ich mich nun mit meinen Raspberry Pi per PUTTY auf SSH ebene Verbinden will, bekomme ich immer einen Fehler → Host send Public key
Habe sowohl den Private als auch den Public hinterlegt → Ich weiß auch noch nicht, ob ich den Private -Key im Nuc beim IO-Broker hinterlegen kann, da ich aus einem JavaScript heraus einen simplen SSH Aufruf erzeuge.
Entschuldige mich hier bitte etwas, bin kein richtiger Profi was das Programmieren angeht, darum auch die “blöden Fragen”

Simpler wäre es sicher, per REST-API ein Lokales Skript zu füttern, dass die echo befehle ausführt…
Hier scheitere ich noch etwas an der Doku vom API.

Vllt hast du mir ja noch ein paar Tipps.

Danke schonmal vorab
Michael

RSA ist ausreichend. Sollte eine Zeile sein, die so aussieht: ssh-rsa [Base64 Zeugs...].

Sorry, da kann ich auch nicht weiterhelfen. Keine Ahnung, was ein IO-Broker ist oder wie da was konfiguriert werden muss. Private Key muss aber auf jedenfall irgendwo hinterlegt werden, da dieser notwendig ist um sich gegenüber dem info-beamer Device (welches den passenden Public Key konfiguriert hat) zu authentifizieren.

Das liegt daran, dass das nicht vorgesehen ist. Theoretisch kannst du mittels eines Package service einen kleinen Webserver auf dem Pi starten, der dann eine solche API bereitstellt, aber das ist dann doch komplizierter. SSH klingt in dem Fall einfacher.

Hallo infobeamer-fw,

danke dir für die Tipps, ich habe jetzt die Lösung gefunden.
Der SSH-KEY von PUTTYGEN hat ein komplett falsches Format

RSA ist ausreichend. Sollte eine Zeile sein, die so aussieht: ssh-rsa [Base64 Zeugs...]

Ich habe jetzt per cmd einen SSH-Key generiert und diesen hinterlegt im Info-Beamer. Über Putty konnten ich diesen sogar in das Putty-Format umwandeln und kann jetzt per cmd, Putty und per IO-Broker auf das SSH-zurückgreifen.

Im IO-Broker verwende ich im JavaScript den simple-ssh, hier ist es auch echt simple den Key zu hinterlegen.
Man muss nur mit dem Zeilenumbruch im SSH-KEY sehr aufpassen, da ein String ohne Zeilenumbruch nicht akzeptiert wird.
\n

var ssh-key;
ssh-key = '-----BEGIN RSA PRIVATE KEY-----\nasdfhasdfjasdhfhhkasdfhasjdfhjasdfh\nuswuswusw';

var ssh = new SSH({
    host: 'localhost',
    user: 'username',
    key: 'ssh-key'
});

Danke dir :+1: :muscle: