In einigen Anwendungen ist es wichtig, dass der Pi auch bei einem Stromausfall weiter mit Strom versorgt wird. Wird im Moment der Stromunterbrechung auf der SD Karte geschrieben ist es möglich, dass das Image korrupt und damit unbrauchbar wird.
Eine USV (Unterbrechungsfreie Stromversorgung) stellt sicher, dass bei einer Stromunterbrechung ein Akku / andere Stromquelle einspringt, ohne dass das Gerät beeinträchtigt wird.
Eine solche USV kann sehr einfach mit ein paar Bauteilen erstellt werden und im Notfall kann mittels eines Skripts darauf reagiert werden und der Pi ordnungsgemäß heruntergefahren werden.
Zubehör
- Powerbank mit 2.1A Output (wichtig: muss gleichzeitig auf- und entladbar sein)
- USB Hub (andernfalls müsste ein Kabel aufgeschnitten werden)
- Relais
- 10kΩ Widerstand
- 2 Micro USB Kabel
- Jumper Kabel
Zwar gibt es bereits fertige USV für den Raspberry Pi zu kaufen, aber diese sind entweder recht teuer (Link) oder nicht sehr gut bewertet (Link). Eine andere Variante (die allerdings Löt- und Elektronikkentnisse voraussetzt), wäre die Speisung zweier Stromquellen – zum einen über die Steckdose und zum anderen über die Powerbank.
Aufbau
Es werden zwei USB Ports des Hubs benötigt. An den ersten wird die Powerbank angeschlossen, die wiederum dem Pi als Stromquelle dient. Der zweite USB Anschluss wird als An/Aus Schalter des Relais verwendet. Ich habe die Kabel, die das Relais steuern, einfach unter die Halterungen geklemmt. Auf der rechten Seite siehst du wo 5V und GND an einer USB Buchse liegen.
Der mittlere OUT Pin des Relais kommt an GPIO27 (Pin 13) des Pi’s. Der rechte OUT Pin über einen 10kΩ Widerstand an Pin 2 (5V) des Pi’s, der rechte an Pin 6 (GND).
Software
Angenommen es kommt nun zu einem Stromausfall. Zum einen würde der Pi noch einige Stunden (je nach Powerbank Modell) laufen. Danach wäre aber Schluss. Damit der Pi nun mitgeteilt bekommt, dass er grade auf „Notstrom“ läuft, schaltet das Relais um und an GPIO23 liegen nun 0V an. Davor gab es einen HIGH Pegel, da durch die USB Hub Stromversorgung auch das Relais geöffnet war.
In meinem Beispiel möchte ich zeigen, wie man auf die Änderung reagiert und den Pi sachgemäß herunter fährt. Natürlich können auch andere Aktionen ausgeführt werden (Email versenden, Daten speichern, erst nach einer Weile herunter fahren, usw.).
Für dieses Beispiel musst du wiringPi installiert haben (eine ähnliche Umsetzung mit Python sollte sicher auch möglich sein). Der wiringPi Pin 2 entspricht GPIO27 (siehe wiringPi Pin Belegung).
Wir erstellen eine neue Datei
sudo nano /usr/local/etc/USV.sh
mit folgendem Inhalt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/bin/bash gpio mode 2 in while true do result="$( gpio read 2 )" if [ "$result" = "1" ]; then # Custom Code # in 60 min herunterfahren sudo shutdown -h 60 & # Custom Code Ende fi sleep 1 done |
Statt meinem Code kann auch jeder beliebige andere Shell-Befehl eingetragen werden.
Damit das Skript nun bei jedem Reboot auch mitstartet, tragen wir es noch als crontab ein:
sudo crontab -e
Am Ende der Datei wird nun folgende Zeile eingefügt:
@reboot bash /usr/local/etc/USV.sh &
Das von mir verwendete Powerbank Modell schaltet seine Aufladung ab, sobald es voll ist. Bei Interesse kann ich auch noch eine Schaltung präsentieren, womit man alle X Stunden die Powerbank aufladen lässt (was im Grunde nur ein zusätzliches Relais ist). Dazu kannst du auch ggf. diesen Artikel lesen.
31 Kommentare
Hallo !
Nicht schlecht die Anleitung. Ich verstehe nur noch nicht so richtig, wo die „offizielle“ Stromversorgung angeschlossen wird. Also die, die evtl. ausfallen könnte. Kommt die per Micro-USB an den Raspberry oder an den 2. USB von dem Hub ?
Danke,
Gruß
der_chefkoch
Die Stromversorgung (aus der Steckdose) kommt in das Akku Pack. Der Pi wird dann vom Akku Pack versorgt.
Hallo nochmal !
Schönen Dank für die schnelle Antwort.
Jetzt ist mir leider nur noch nicht klar, wo der Raspbery seinen Strom herbekommt… ?
Und wie muss ich den USB Hub weiter anschließen ? O.K. 1. Buchse: Power Pack. 2. Buchse wie oben beschrieben an das Relais. Und das einzelne Kabel von dem USB Hub kommt an den Raspberry ? Sorry, aber ich würde die USV gerne nachbauen, hab auch alles hier, nur mit der Verkabelung tu ich mich etwas schwer…. Ansonsten: Lob, Lob, Lob für die Seite. Freue mich immer wieder über neue Beiträge/Tutorials…
Weiter so !
Danke,
Gruß
Der_Chefkoch
Die Powerbank / Akku Pack Das Akku Pack hat einen Input, worüber es läd und einen Output, worüber angeschlossene Geräte geladen werden. Der USB Hub hat ebenfalls einen Input und mehrere Outputs. Nun schließt du den USB Hub direkt an die Stromquelle an (über einen USB Adapter o.ä.), sodass dieser geladen wird. Weiterhin schließt du den Pi an die Powerbank an. Das Relais wird über den Hub verbunden. Sobald die Stromverbindung unterbricht, liefert der uSB Hub keinen Strom und das Relais schaltet. Die Powerbank wird auch nicht weiter geladen, hat aber noch restliche Kapazität, um den Pi weiter zu versorgen. Wichtig ist, dass die Powerbank gleichzeitig geladen und entladen werden kann.
Ist es damit etwas verständlicher?
Ich denke, ich habs so langsam. Kann aber erst am WE weiter machen. Werde Erfolge vermelden ! Danke !
Auf der Suche nach einer unterbrechungsfreien Versorgung für den RPi bin ich hier gelandet und habe die Schaltung nur zufällig gesehen. Ich finde sie, ehrlich gesagt, ineffizient und zu aufwändig. Ein Relais einzig dafür abzustellen, dem RPi mitzuteilen dass irgendwo Spannung anliegt? Ich würde die Erkennung umbauen: RPi-GPIO als Input mit Pullup (erspart den 10k-Widerstand), npn-Transistor C an Pin 13 (GPIO), E an GND, Basis über 10k an die zu überwachenden 5V. Über die USB-Buchsen sind sie mit an Sicherheit grenzender Wahrscheinlichkeit sowieso mit GND verbunden.
Das Batch nun so umbauen, dass es bei 0V die Füße stillhält und auf offenen Eingang reagiert.
Sauberer wäre ein Optokoppler, C und E wie gehabt, LED mit 3-10k von 5V speisen. Das ist kleiner, kostet 1/10 und verbraucht 250 mW weniger Energie. Kleinvieh macht ja auch Mist…
hallo pfriemler.
kannst du deine variante vielleicht mal ein bisschen genauer beschreiben?
kenn mich da nich ganz so aus und bin mir über die bauteile auswahl nich ganz so schlüßig.
ne bezeichnung von den bauteilen wäre gut 😉
deine idee klingt ja gar nicht so schlecht.
grüße
Ich habe das Script mal probiert, habe aber das problem daß beim Start des Raspberry am gpio high Signal liegt und dadurch die automatische Anmeldung des Desktop nicht mehr funktioniert.
Sorry!
Da beim probeweisen manuellen Starten die Meldung „Befehl amp nicht gefunden“ kam, habe ich das „amp;“ entfernt, daß war anscheinend mein Fehler.
Hallo,
vielen Dank für dieses toll geschriebene Tutorial 🙂
Zuvor muss ich gleich sagen, dass ich mit Elektronik noch nicht so fit bin, also bitte nicht übel nehmen ^^
Ich frage mich, wenn man schon den USB Hub als „Signalgeber“ für den Stromausfall nutzt, ob es dann nicht evtl. klüger wäre, anstatt ein Relais einen „3.3V – 5V TTL I2C Logic Level Converter“ (wie auf der Sensorseite beschrieben) zu benutzen?
Ich würde mich über eine Antwort freuen ^^
Danke,
Ed
Hi Ed,
ja das sollte auch funktionieren. Wichtig ist ja nur, dass das Raspberry Pi erkennt, dass die Eingangsspannung weg ist.
Hallo,
was macht das Script wenn der Strom wieder zurück kommt? Wird der shutdown dann abgebrochen?
Nein, in der Variante wird der Shutdown nicht abgebrochen. Aber du kannst das Skript natürlich nach Belieben ändern (z.B. eine Funktion nach X Sekunden starten, die runter fährt. Innerhalb der Funktion kannst du nochmal prüfen).
Moin, danke für den Artikel und die Idee.
Puh, ich hab gerade sicher 15 Minuten davor gesessen und versucht nachzuvollziehen wie das funktionieren soll. Erst später ist mir das Licht aufgegangen, dass das Frizing-Verkabelungsbild nicht vollständig, bzw. imho sehr verwirrend ist. Es fehlt die Verkabelung der Regulären Stromversorgung. Dann hat man zwei Relaiskanäle und zwei USB-Buchsen. Der zweite Relaiskanal wird nicht gebraucht (warum ist er in dem Bild?) und über die zweite Buchse soll die reguläre Stromversorgung laufen. Sind nur Kleinigkeiten, aber in Summe verwirrend. Ich dachte erst der Pi wird über die GPIOs mit Stromversorgt, das hat mein Hirn total blockiert. xD Im Nachhinein macht es alles Sinn.
Ein 100% vollständiges Verkabelungsbild wäre cool, da reicht auch Paint. 😉
Nichtsdestotrotz dank nochmal.
Ne andere Sache (ich kenne mich mit ssh-Skripten konkret kaum aus): Letzendlich wird mit dem Skript die ganze Zeit gepollt (aka busy waiting). Belastet das nicht ziemlich die CPU?
Kann man das evtl. eventbasiert machen, zb über einen Interrupt?
Noch was anderes, wie könnte man es einrichten, dass der Pi automatisch angeht, sowie der Strom wieder da ist?
Hallo,
genau die Frage stelle ich mir auch. Ich komme zu dem Schluss dass es mit dieser Schaltung gar nicht geht.
Wenn der Pi down ist kann er ja nicht mehr prüfen das der Strom wieder da ist. Wenn die Powerbank entsprechend stark ist das sie auch einen langen Stromausfall überbrücken kann ist das auch kein Problem.
Alternativ könnte man den Pi extern über ein WakeOnLan Signal starten. Dieses müsste von einem entsprechend robustem Gerät aus gesendet werden, das so konfiguriert ist das es selber nach Stromausfall automatisch bootet und dann nach dem Start das Signal aussendet. Das könnte z.b. ein altes DSL Modem übernehmen auf das man Telnet Zugriff hat.
Ich hab mir da etwas überlegt:
Ein Relais mit 230V-Spule. Über dieses Relais läuft die Stromversorgung vom Akku-Pack zum Raspberry. Das Relais hängt an der gleichen Steckdose, wie der Akku-Pack und zieht an, wenn 230 V anliegen.
Ein weiteres Relais mit 5V-Spule. Über dieses Relais läuft ebenfalls parallel die Stromversorgung vom Akku-Pack zum Raspberry. Das Relais wird über einen GPIO gesteuert und zieht an, sobald der Raspberry gestartet wird (Aufruf eines entsprechenden Befehls beim Start).
Jetzt ist der Raspberry vom Akku-Pack über beide Relais mit Strom versorgt. Fallen die 230 V aus, faällt das 230V-Relais ab, die bleibt Versorgung über das andere Relais. Wenn der Raspberry nach der eingestellten Zeit herunter gefahren wird, fällt das 5V-Relais auch ab und der Raspberry ist stromlos.
Sobald die 230V wieder kommen, zieht das 230V-Relais an, der Raspberry wird mit Strom versorgt und startet. Das 5V-Relais zieht dann ebenfalls an (siehe oben).
Ich habe es noch nicht ausprobiert, aber es sollte gehen.
Die USB-Kabel muss man zerschneiden und über die Relais führen.
Hallo Felix,
welche Powerbank hast du dir gekauft? Hatte mir voreilig eine gekauft die sich nicht aufladen und gleichzeitig entladen lässt.
Ich habe diese hier, damit ist gleichzeitiges Laden und Entladen möglich.
LG, Felix
Mit dieser funktioniert es bei mir nicht !
Auch mir einem anderen Modell leider nicht !
Das Problem ist, dass die jeweilige Powerbank bei Eingangsspannungsverlust einen kurzen Moment am Ausgang keinen Strom liefert. Das reicht bei mir aus, dass das Betriebssystem neu startet…
Zum Thema „An/Aus-Schalten“ der RPI
Auf der Platine kann man zwei Pins anlöten und diese dann mit einem Taster verbinden.
Die Bezeichnung der Lötstellen lautet „RUN“.
Das ist Praktisch der Resetknopf der Pi. Wenn sie aus ist und man drückt den Taster, dann schaltet sie an. Wenn sie sich aufhängt und man drückt den Taster startet sie neu.
Bei der RPi2 sitzen die Lötstellen neben dem Display-Port
Bei der RPi3 sitzen die Lötstellen hinter dem USB-Port am GPIO
Grüße
Hi. Kannsr du das ein bisschen genauer erläutern wie du das umgesetzt hast, dass der raspi durc den reset pin in signal bekommt und nicht neustartet
Hallo zusammen,
ich habe die genannte Intenso Powerbank verbaut; ja sie gibt den Strom ab und lädt sich zeitgleich auf. Kommt es zum Stromausfall, gibt es einen kurzen Moment, an dem auch am Raspberry kein Strom anliegt; dieser Moment reicht aus, dass der Raspberry abstürzt und neu bootet. Ich dachte erst, es liegt an meiner Powerbank, aber nein, man findet so einige Kommentare dazu in den Bewertungen der Powerbanks. Habt Ihr ähnliches Verhalten schon mal festgestellt ? Hat jemand ggf. eine Kondensatorschaltung erstellt, die den Moment des Spannungsverlustes abfedert.
Gruß André.
Man könnte es auch anders lösen:
https://www.mikrocontroller.net/topic/399434
Da stürtzt nichts ab.
Im Prinzip sind das zwei unabhängige ideale Dioden.
Da kann man einiges daraus basteln 🙂
Hi. Bin leider nur ein Copy paste programmierer. Bringe mir das selber gerade bei und die USV ist gerade mein erstes Projekt. Das Programm läuft gut.
Jetzt würde ich es gerne meinen Wünschen ändern. Leider bin ich dazu nicht in der Lage und brauche Hilfe. Wäre toll wenn mir da jemand mit Programmänderungen o.ä. (und diesen dann auch erklären) weiterhelfen könnte.
Ich habe bereits ein Programm geschrieben, weches mir auf Befehlseingabe eine Email schickt.
Jetzt würde ich gern die Spannung am Relais abfragen und wenn sie abreißt, sprich die Powerbank übernimmt die Versorgung, möchte ich eine email bekommen. Sobald die Spannung wieder normal fließt, möchte ich erneut eine email haben und der shutdownbefehl soll abbrechen. Die Abfrage soll dann natürlich weiterlaufen.
Ich hoffe es versteht jemand mein anliegen und kann mir da weiterhefen
HAllo
ich habe deine Anleitung hergenommen, auch die INtenso gekauft, ABER wie umgehst du das Problem, dass wenn bei der Powerbank der Strom wegfällt, der Pi neu startet weil kurzfristig kein Strom da ist, bis die Powerbank den Strom liefert? ist zwar nur ein Bruchteil einer Sekunde aber er reicht, dass der Pi aus ist -> das ist nicht die Definition einer Unterbrechungsfreien Stromversorgung…
oder mache ich hier was falsch????
Sonst wärs klasse…
Gruß
Michl
Hallo zusammen,
leider ist es so wie Michl schreibt, der Pi geht bei Spannungsausfall kurzzeitig aus. Das ist also keine USV. Schade
LG Daniel
An für sich eine gute idee und wenn ich ehrlich bin wäre mir das nicht eingefallen. Ist zwar schade, dass es halt den fehler gibt, dass der Raspi trotzdem herunterfährt. Aber ansonsten ist das alles eine gute sache.
Noch ein weiterer Punkt den man beachten sollte. Die Lebensdauer von Lithium-Ionen Akkus wird extrem verkürzt, wenn sie auf der einen Seite zeitgleich geladen werden und auf der anderen Seite Verbraucher – wie hier der Raspberry – eine Entladung bewirken.
Dieses Verhalten der Akkus wird insbesondere bei Tablets beobachtet deren Lebenszyklus dadurch extrem verkürzt wird.
Die Anforderung an die PowerBank ist folglich nicht nur Möglichkeit zeitgleich zu laden und den Raspberry zu speisen, sondern eine integrierte Schaltung – wie bei Laptops-, die oben genannten Verschleiß der LiO-Zellen verhindert.
Hallo,
es geht doch viel eifacher un vor allem sicherer.
Man lasse das sonst übliche Netzteil weg und besorge sich ein LM2596S DC Spannung Step-Down Schaltregler Netzteil Modul. Das gibts in der Bucht schon für 1 Euro inc. Transport.
Dann nimmt man einen 12 V Akku, der über ein kleines Ladegerät aufgeladen bzw. gepuffert wird.
Das Ladegerät liefert auch den eigentlichen Strom für den Raspi. Das Schaltregler Modul wird an den Akku angeschlossen und genau auf 5,1 V eingestellt. Der Ausgang speist dann den Raspi. Es gibt keine Unterbrechung wenn das Netz ausfällt ! Die Versorgungsspannung des Raspi bleibt absolut konstant. Selbst wenn die Akkuspannung deutlich zusammen gebrochen ist. Das Teil hat einen Wirkungsgrad von über 95 % – also vertretbare Verluste. Man kann die Akkuspannung überwachen und kurz vor gefährlicher Unterspannung den Raspi runterfahren. Von kurzzeitigen Ausfällen bekommt der Raspi dann überhaupt nichts mit und läuft ganz normal weiter.
Ich habe da ein grundsätzliches Problem:
Ich brauche für die beschriebene Lösung eine Powerbank, die gleichzeitig laden und entladen kann. O.K. .
Warum dann nicht den Raspi direkt an die Powerbank anschließen und einen einfachen Netzstrom-Ausfallalarm etablieren?