Raspberry Pi – PC per GPIOs einschalten / neustarten / ausschalten lassen

In dieser Anleitung basteln wird eine Schaltung mit der es uns möglich ist, ein PC direkt über den Frontpanel-Anschluss zu starten, auszuschalten oder einen Neustart durchzuführen.
Wake-On-Lan funktioniert nicht immer zuverlässig oder wird ggf. nicht von allen Netzwerkadaptern unterstützt.
Mit dem Raspberry Pi, einem Optokoppler und ein paar Drähten ist es uns mit etwas Bastelaufwand möglich, direkt den Rechner zu kontrollieren.

Das Ausgangsszenario

Ich habe einen NAS zuhause, welcher nicht die ganze Zeit laufen muss.
Da weiter weg geht und ich zu faul bin jedes mal dort hin zu laufen, um ihn einzuschalten, möchte ich ihn per „Fernsteuerung“ starten.
Auf der NAS steht ein Raspberry Pi, auf welchem bereits ein Pi-Hole läuft. Den kann man ja für so etwas „missbrauchen“.
WOL funktioniert leider nicht.
Ein anderer Rechner sollte niemals direkt mit dem Raspberry Pi verbunden werden, da der Rechner selbst Spannung an den Pins anlegt. Das könnte ggf. den Raspberry Pi beschädigen. Daher brauchen wir eine Trennung beider Geräte – ein Optokoppler.

Was benötigen wir?

– Ein Raspberry Pi (egal welche Version)
– Netzteil + SD-Karte + LAN-Kabel (Optional)
– Ein Optokoppler mit min. 2 Relais
Passende Kabel
– Ein Plan der Pin-Belegung des Pis (Je nach Version unterschiedlich!)

Alles besorgt? Los gehts!

1. Pi Vorbereiten

Als erstes solltest du ein Betriebssystem auf dem RPi installieren. Ich habe hier die normale Raspbian Version installiert.
Ebenfalls sollten alle aktuellen Updates installiert sein!
Zur einfachen Bedienung empfiehlt es sich noch den Editor nano zu installieren.

Meine Empfehlung ist es, den Pi per LAN zu betreiben.

2. WiringPi installieren

Damit wir nun die Pins ansteuern können, muss je nach Distribution etwas Software nachinstalliert werden.

sudo apt install wiringpi -y

3. Das GPIO-Layout ausgeben

Wir müssen nun erst einmal heraus finden, welche Pins überhaupt genutzt werden können.
Dazu nutzen wir nun folgenden Befehl:

gpio readall

Es wird nun eine Liste angezeigt, die etwa so aussehen könnte.

Hierbei interessieren uns an meinem Beispiel nun folgende Pins.
[Physical]
Pin 2 => 5 Volt für den Optokoppler
Pin 6 => 0 Volt für den Optokoppler
Pin 11 + Pin 12 => GPIO0 und GPIO1 = Schaltkontakte

Pin 2 und Pin 6 benötigen wir für den Optokoppler, damit dieser mit etwas Strom versorgt werden kann. Pin 11 und 12 sind sogenannte GPIO-Ausgänge ODER Eingänge, welche die Schaltimpulse ausgeben oder entgegennehmen.
Wir können aber auch z.B. Pin 13, 15, 16, 18, 22, … nutzen.

Mit der physikalischen Pinnummerierung wissen wir nun schon eimal, welche Pins am Pi nutzbar sind.
Für die Programmierung müssen wir aber die Nummern des Felds BCM nehmen.
Pin am RPi – Pin im Programm
11 – 17
12 – 18
13 – 27
15 – 22

Ist etwas durcheinander, aber nur so funktionierts.
Daher am besten nun eine Liste anfertigen, welche Ports zur Schaltung genutzt werden können.

4. Der Aufbau

Nun gehts an den Aufbau der Schaltung.
Wir verbinden nun alles so wie ich es hier aufgemalt habe.

Von PIN2 am Pi gehts an den Optokoppler mit dem Anschlussname VCC (5V).
Von PIN6 am Pi gehts an den Optokoppler mit dem Anschluss GND (0V).
Von PIN11 am Pi gehts an den ersten Input des Optokopplers (IN1).
Von PIN12 am Pi gehts an den zweiten Input des Optokoppler (IN2).

Vom Optokoppler-Relais, welches im Aus-Zustand offen ist (NO), schließen wir nun ein Kabel an, welches mit den Pins am zu steuernden Rechner verbunden werden (Frontpanel-IO).
Am zweiten Relais schließen wir nun ein weiteres Kabel an. Ebenfalls so, das wir im Aus-Zustand den offenen Zustand haben (NO). Dieses Kabel stecken wir dann ebenfalls am zu steuernden PC an.
Du selbst kannst entscheiden, welches Relais für den Power-Button und für den Reset-Button genutzt wird.

Alles soweit angeschlossen? Super! Nun gehts an den Code!

5. Das Schalt-Script

Wir fertigen uns nun drei Scripte an.
Mit diesen steuern wir die beiden GPIO-Ausgänge und schalten den Rechner ein, aus und lassen ihn neu starten.

PC Starten:

#!/bin/sh
echo Schalte den Server ein...
gpio export 17 out
sleep 1
gpio -g write 17 0
sleep 1
gpio -g  write 17 1
echo Server eingeschaltet.

Zur Erklärung:
gpio export 17 out: Wir aktivieren den Pin, damit er Schaltimpulse aus gibt
sleep 1: Das Script wartet eine Sekunde bevor es weiter geht
gpio -g write 17 0: Wir schalten das Relais um – PC geht an, da wir auf den Powerbutton „drücken“
gpio -g write 17 1: Wir schalten das Relais wieder um – Wir lassen den Powerbutton „los“

Die beiden Echos geben einfach nur ein netten Text nebenbei aus.

Das gleiche Spiel geht genau so auch für die anderen beiden Scripte.
Lediglich für das Ausschalt-Script ist die Sleep-Zeit länger, da wir 10 Sekunden auf dem Powerbutton bleiben sollen / müssen.
Hast du in einem System hinterlegt, das es mit einem einfachen klick auf Power auch herunterfahren kann, reduziere die Zeit auf 1.

PC Neustarten:

#!/bin/sh
echo Schalte den Server ein...
gpio export 18 out
sleep 1
gpio -g write 18 0
sleep 1
gpio -g  write 18 1
echo Server eingeschaltet.

PC Ausschalten:

#!/bin/sh
echo Schalte den Server ein...
gpio export 17 out
sleep 1
gpio -g write 17 0
sleep 10
gpio -g  write 17 1
echo Server eingeschaltet.

Nun müssen alle Scripte noch ausführbar sein.
Dazu einfach diesen Befehl absetzen:

chmod +x Dein-Script-Name.sh

Fertig!

6. Testen

Führe nun ein Script aus!
Schalten wir den PC einmal ein…

./PC-Starten.sh

Er sollte nun eingeschaltet werden.
Du kannst auch nun die anderen beiden Scripte noch testen.

Damit können wir nun über den Raspberry Pi den Rechner steuern.
Natürlich können wir nun das Spiel noch etwas weiter treiben, damit wir von unterschiedlichen Quellen den Rechner starten können. Ein paar Beispiele habe ich unten aufgelistet.
Wir sind aber soweit erst einmal fertig.

Viel Spaß mit dem Steuern deines PCs!


Tipps & Tricks für weiteren Bastelspaß

Die Scripte lassen sich ohne weiteres per CronJob ausführen. So kannst du deine Gerätschaften zeitgesteuert schalten lassen.

Soweit noch mehrere Relais zur Verfügung stehen, lassen sich noch andere Geräte steuern.

Ich habe die Scripte in OpenHAB eingebunden. So kann ich den NAS per Weboberfläche (HABPanel) steuern und den Status des Speichers auslesen.
Dazu war nur das AddOn Exec Binding notwendig.

Wenn du von unterwegs die Maschinen starten willst, verbinde dich per VPN mit dem RPi und führe dann die Scripte aus!

Noch mehr?
Die GPIOs lassen sich auch z.B. per Phyton-Script ansteuern. Ist aufwendiger, aber auch machbar.

Diese Diashow benötigt JavaScript.

Kommentar verfassen