USV für den Raspberry Pi mit Raspi UPS HAT

Ich habe leider öfter das Problem gehabt, dass sich das Image auf der SD-Karte zerstört hat, sobald eine Spannungsspitze oder ein Stromausfall war. Damit ich dies verhindern kann habe ich mir die Raspi UPS HAT bestellt.

Hier Beschreibe ich kurz wo ich sie bestellt habe und wie man sie richtig anschließt und installiert.


Bestellung

Bestellt habe ich mir die Raspi UPS HAT bei AliExpress und folgendem Händer:

https://www.aliexpress.com/item/UGEEK-UPS-HAT-with-Battery-for-Raspberry-Pi-3-Model-B-2B-B-Raspberry-Pi-Battery/32786176030.html?spm=2114.13010608.0.0.8xht7t

Lieferzeit betrug 1 Monat und kam per Einschreiben.


Bilder


In Betrieb nehmen

Die Batterie wie auf den Bildern zu sehen mit Hilfe des Klebestreifens auf der Platine befestigen und mit dem Stecker verbinden. Dann das Board auf den Raspberry stecken und die Micro-USB Stromversorgung in die Buchse des Raspi UPS HAT stecken.

Nun sollten die LED´s Anfangen zu leuchten, aber der Raspberry bleibt dunkel.

Damit der Raspberry startet muss man den Knopf über der SD-Karte, an der UPS HAT drücken.


Installation und Einstellung

Software aktualisierenuser@computer:$ sudo apt-get update
sudo apt-get upgrade

Danach mittels raspi-config die I2C-Funktion aktivierenuser@computer:$ sudo raspi-config

Nun installieren wir python-smbususer@computer:$ sudo apt-get install python-smbus

Danach wiringPiuser@computer:$ sudo apt-get install git
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
cd wiringPi
./build

Danach laden wir uns UPS-HAT-sample-code-via-i2c-by-Joachim herunteruser@computer:$ wget http://www.linuxblognf.de/wp-content/uploads/2017/03/UPS-HAT-sample-code-via-i2c-by-Joachim.zip
unzip UPS-HAT-sample-code-via-i2c-by-Joachim.zip

Und probieren ob wir die Batterieladung und Spannung auslesen könnenuser@computer:$ sudo python UPS-HAT-sample-code-via-i2c-by-Joachim.py

Angezeigt werden dann folgendes

Voltage: 4.15V
Battery: 95%
-----------
|######### |+
-----------

Eigenes Script in Python was die Batterie überwacht und ab 10% das System herunter fährt

import struct
import smbus
import sys
import time

#Pfad zum Log-File
logfile = '/var/log/Raspi_UPS_HAT.log'

#Funktion zum Auslesen der Spannung
def readVoltage(bus):
 address = 0x36
 read = bus.read_word_data(address, 2)
 swapped = struct.unpack("<H", struct.pack(">H", read))[0]
 voltage = swapped * 78.125 /1000000
 return voltage

#Funktion zum Auslesen der Kapazitaet
def readCapacity(bus):
 address = 0x36
 read = bus.read_word_data(address, 4)
 swapped = struct.unpack("<H", struct.pack(">H", read))[0]
 capacity = swapped/256
 return capacity

#Aufzeichnen von Ereignissen
def log(msg):

 file = open(logfile,"a")
 file.write("%s: %s\n" % (time.strftime("%d.%m.%Y %H:%M:%S"), msg))
 file.close

bus = smbus.SMBus(1) # 0 = /dev/i2c-0 (port I2C0), 1 = /dev/i2c-1 (port I2C1)
while 0<1:
 if readCapacity(bus) <= 10:
 log("Batterie nur noch bei 10%. Fahre das System runter")
 os.system('shutdown now -h') 
 elif readCapacity(bus) <= 90:
 log("Stromausfall")
 log("Spannung:%5.2fV" % readVoltage(bus))
 log("Battery:%5i%%" % readCapacity(bus))
 time.sleep(60)
 else :
 time.sleep(600)

Ich habe das Script bei mir “ UPS-HAT-checked-and-shutdown.py“ genannt.

[Edit:26.03.2017 19:26]

Habe das Script noch einmal überarbeitet. Wenn Strom da ist wird es nur alle 10 Minuten abgefragt und sobald er Weg ist aktualisiert er jede Minute.

Des Weiteren habe ich die Reihenfolge der If-Anweisung korrigiert, damit er auch wirklich runter fährt.

Damit das Script automatisch startet müsst ihr eine Bash-Datei für die /etc/init.d schreiben und das Script anmelden.

[Edit:16.03.2020 18:00]

Wenn das Script bei Euch nicht funktionieren sollte, dann achtet auf das richtige Einrücken. Durch das kopieren des Scripts, kann es dazu kommen, dass Python damit Probleme hat.

Christian Frahm

Schreibe einen Kommentar