PC ferngesteuert an- und ausschalten

Vorwort

Nach einer LAN Party musste ich leider feststellen, dass der Ein- und Ausschaltknopf meines PCs defekt ist. Seitdem konnte ich den PC nurnoch per WakeOnLan anschalten… bis ich ins Home Office kam. Das LAN Kabel, was ich bisher für meinen Gaming-PC verwendet habe, musste für den Arbeitsrechner herhalten. Über WLAN lässt sich der PC nicht einschalten. Also musste eine neue Starthilfe her. Direkt auf meinem Gaming-PC liegt ein Raspberry Pi 2. Also warum diese Synergie nicht aussnutzen und den PC über den Raspberry starten?

Vorraussetzungen

  • Raspberry Pi 2 (Oder andere Version des Pi’s mit GPIO Schnittstelle)
  • Steckplatine
  • Relais-Modul
  • Drahtbrücken

Hauplatine anklemmen

Die Hauptplatine hat eine Schnittstelle, über die sich der PC anschalten lässt. Sie ist für gewöhnlich als “Front Panel” gekennzeichnet und ist über Kabel mit der Vorserseite verbunden. Nach entfernen der Kabel von der Hauptplatine werden die Pins frei. Die Spezifikationen, welche Pins welche Funktion haben, sind von der Hauptplatine abhängig. Da hilft nur eine Recherche. Nachdem die Pins für Power und Ground bekannt sind, werden diese jeweils mit Drahtbrücken versehen.

Komplette Schaltung

Das Relais wird an einen 5V und Ground Pin am GPIO angeschlossen. Das Input Signal zum switchen des Relaiss hängt am Pin 7 (GPIO 4). Mit diesem wird das Power mit dem Ground Signal geschlossen. Physischer Aufbau ist in folgender Abbildung zu sehen.

Schaltung

Programmierung

Nun fehlt nurnoch ein Programm, um das Relais zu steuern. Dazu verwende ich Golang. Es läuft aber auch mit einer beliebigen anderen Programmiersprache mit GPIO Bibliothek. Hier der Go-Code dazu:

package main

import (
	"log"
	"net/http"
	"time"

	rpio "github.com/stianeikeland/go-rpio"
)

var (
	powerPin = rpio.Pin(4)
)

func powerOff() {
	powerPin.High()
	time.Sleep(5 * time.Second)
	powerPin.Low()
}

func powerOn() {
	powerPin.High()
	time.Sleep(time.Second / 5)
	powerPin.Low()
}

func powerOnHandle(rw http.ResponseWriter, r *http.Request) {
	log.Println("Press power on")
	powerOn()
	rw.Write([]byte("PC hochgefahren/-runtergefahren"))
}

func powerOffHandle(rw http.ResponseWriter, r *http.Request) {
    log.Println("Hold power on")
    powerOff()
	rw.Write([]byte("PC getötet"))
}

func main() {
	err := rpio.Open()
	if err != nil {
		log.Fatal("Couldn't open gpio connection")
	}
	defer rpio.Close()
	powerPin.Output()

	http.HandleFunc("/pc/on", powerOnHandle)
	http.HandleFunc("/pc/off", powerOffHandle)
	log.Fatal(http.ListenAndServe(":8500", nil))
}

Zur Erläuterung:

func powerOff() {
	powerPin.High()
	time.Sleep(5 * time.Second)
	powerPin.Low()
}

und

func powerOn() {
	powerPin.High()
	time.Sleep(time.Second / 5)
	powerPin.Low()
}

simulieren einen Knopfdruck von jeweils 1/5 Sekunde (zum einfachen Ein- und Ausschalten) und einen 5 Sekunden Knopfdruck (zum sofortigen Ausschalten). Diese Funktionalitäten sollen per HttpServer bereitgestellt werden. Sie werden über

http.HandleFunc("/pc/on", powerOnHandle)
http.HandleFunc("/pc/off", powerOffHandle)

gehandelt. Durch auffruf von http://raspberrypi:8500/pc/on und http://raspberrypi:8500/pc/off werden die Funktionalitäten ausgeführt. (Wobei raspberrypi die Adresse vom Raspberry Pi ist)
Nachdem das Programm erzeugt wurde sollte die ausführbare Datei in der ~/.bashrc Datei aufgeführt werden, damit sie bei jedem Start des Raspberry Pi’s ausgeführt wird und der Service durcheghend läuft.

Mit Android Smartphone steuern

Um das ganze per Handy Fernzusteuern wird eine App benötigt, die die Http API ansprechen kann. Dazu verwende ich Http Shortcuts. Damit lassen sich per Widgets auf dem Startbildschirm ganz einfach Http Anfragen versenden. Dafür habe ich zwei Shortcuts angelegt.

Power On Power Off
Power On Power Off
Dabei ist hometoolservice eine in der App angelegt Konstante, die die Addresse raspberrypi:8500 beinhaltet. Diese Shortcuts können dann als Widget auf dem Startbildschirm angelegt werden.

Zusammenfassung

In diesem Artikel habe ich gezeigt, wie man mithilfe eines Raspberry Pi’s über ein Relais den PC per Handy an und ausschalten kann. Das gleiche Konzept läuft auch für die Stromversorung anderer Geräte. Beispielsweise lässt sich eine Lampe, die mit Strom über die Steckdose läuft, durch Kappen einer Ader im Kabel und Anbinden an das Switch des Relais an- und aussschalten. Dafür ist eine Anpassung des Codes notwendig. Wie die Lampe an das Relais angebunden wird, ist in vielen Youtube Videos erklärt. Dabei ist oberste Vorsicht geboten. Der Strom aus der Steckdose hat eine lebensgefährliche Spannung.

Nachsatz

Das zur Verfügung gestellte Programm hat keine Implementierung von Sicherheit. Jeder der im Netzwerk Zugang zum Raspberry Pi hat, kann ihn an- und ausschalten. Desswegen ist es ratsam, den Service in diesem Zustand nicht ans öffentliche Netz zu hängen. Zudem gibt es keine Gewähr für den Aufbau der Schaltung. Das Projekt ist rein experimentell.

comments powered by Disqus