Irgendwann lief mir der Power-Manager von Conrad Elektronik über den Weg. Dieses Ding ist eine recht große Blechkiste mit 7 Steckdosen an der Rückseite und einem Hautschalter und 7 einzelnen Einschaltern für die Steckdosen an der Frontseite. Von der Größe her ist es wohl so gedacht, daß man es unter seinen Monitor stellen soll. Daher ist in der Kiste auch ziemlich viel Luft.
Ich dachte mir also, damit kann man doch mehr machen, als nur manuell den Strom von bis zu 7 Geräten ein- und auszuschalten. Ich hatte da auch schon eine konkrete Anwendung im Blick:
Ein Server (natürlich mit Linux) sollte nicht die ganze Zeit (über Nacht und während des Wochenendes) wenn keiner da ist der ihn nutzen könnte, durchlaufen. Eigentlich könnte sich der Server ja nach Feierabend, wenn alle Leute gegangen sind, selbständig runterfahren und dann ausschalten (evtl. vorher automatisch ein Backup machen). Ja, das geht auch mit ATX-Boards, aber der Server hatte keins. Außerdem waren da noch 2 Drucker und ein Teil der Netzwerkinfrastruktur (Zentrale HUBs etc) die ja auch nicht laufen müssen, wenn der Server nicht läuft.
Gesagt, getan: Ich nahm mir also den Power-Manager von Conrad vor und modifizierte diesen ein wenig. Konkret baute ich 7 Relais ein, die von einem Microcontroller (ein Atmel 89C2051) gesteuert werden. Der µC hat eine serielle Schnittstelle, die mit einer der seriellen Schnittstellen des Servers verbunden wird. Die Relais ersetzen die manuellen Schalter in dem Power-Manager, die jetzt nur noch als Kontrollleuchte dienen (das sind Schalter mit eingebauter Glimmlampe).
Der Server bekam einen neuen Eintrag in der crontab verpaßt, der regelmäßig überprüft, ob die Dienste des Servers noch gebraucht werden. Wenn nicht, so wird der Server runtergefahren. Am Ende des halt-Skripts steht dann der Befehl um den Saft über den Powermanager abzudrehen.
Wie schaltet der Server wieder ein?
Da ist natürlich ein Trick dabei: In den zentralen HUB (inzwischen
auch durch einen Switch ersetzt), an dem die Netzwerkkabel von den wichtigen
Leuten zusammenlaufen habe ich eine kleine Schaltung eingebaut, die erkennt,
ob jemand seinen Rechner einschaltet (dazu gehört auch eine kleine
Modifikation an den Netzwerkkarten der beteiligten Rechner). Die Schaltung
funktioniert auch, wenn der HUB nicht eingeschaltet ist. Dieses Signal
wird von einem Steuereingang in dem Powerswitch ausgewertet und führt
dazu, daß die HUBs und der Server eingeschaltet werden.
Zusätzlich ist in dem Steuerprogramm des Microcontrollers auch eine simple Timerfunktion eingebaut, die ich dazu nutze, den Server hochzufahren, kurz bevor die wichtigen Leute ankommen. Dadurch ist sichergestellt, daß der Server seine Dienste rechtzeitig anbieten kann, und somit die anderen PCs ohne Wartezeit auf den Server starten können. Dies ist z.B. wichtig, wenn der Server über DHCP die IP-Adressen im Netzwerk vergibt, ebenso kann der Server schon mal die Mail abholen, die sich über Nacht beim Provider gesammelt hat. Der Zeitpunkt des nächsten Einschaltens wird ebenfalls von einem Script auf dem Server festgelegt und beim shutdown an den Powerswitch übergeben.
Damit sind jezt 2 Ausgänge des Powerswitch belegt:
Den dritten und vierten Kanal habe ich verwendet, um zwei Drucker
zu steuern. Alle Rechner im Netzwerk sind so eingerichtet, daß alle
Druckaufträge erst mal zum Server gehen. Dieser weiß dann, welcher
Drucker verwendet werden soll und schaltet diesen automatisch ein und leitet
den Druckauftrag weiter. Nach einer gewissen Zeit der Nichtbenutzung wird
der Drucker autmatisch wieder ausgeschaltet.
Für alle (bastel-) technisch begeisterten Leser hinterlege ich hier hier eine kurze Bauanleitung für den Powerswitch.