Raspberry Pi: UPS Hat: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „== UPS Hat == Das UPS Hat stellt eine Aufsteckplatine mit einer '''USV''' (Unterbrechungsfreie Spannungsversorgung, im Englischen '''Uninterruptible Power Supp…“) |
(Initiale Seite) |
||
Zeile 17: | Zeile 17: | ||
# USV-Spannungsversorgung vom Raspberry Pi auf das UPS Hat umstecken | # USV-Spannungsversorgung vom Raspberry Pi auf das UPS Hat umstecken | ||
# Durch Tastendruck am UPS Hat den PI wieder starten | # Durch Tastendruck am UPS Hat den PI wieder starten | ||
== Software-Installation == | |||
Das UPS Hat stellt eine I2C-Schnittstelle zur Verfügung. Bei der Nutzung des '''Raspbian'''-Images kann dieses mittels des Kommandos '''raspi-config''' in den erweiterten Optionen konfiguriert werden. | |||
Manuell erfolgt die Konfiguration durch: | |||
apt-get install i2ctools i2c-dev libi2c-dev | |||
sowie durch editieren der /etc/modules und laden der Module i2c-bcm2708 und i2c-dev: | |||
root@pi-hole:~# more /etc/modules | |||
# /etc/modules: kernel modules to load at boot time. | |||
# | |||
# This file contains the names of kernel modules that should be loaded | |||
# at boot time, one per line. Lines beginning with "#" are ignored. | |||
i2c-bcm2708 | |||
i2c-dev | |||
sowie /boot/config.txt: | |||
[...] | |||
# Uncomment some or all of these to enable the optional hardware interfaces | |||
dtparam=i2c_arm=on | |||
dtparam=i2c1=on | |||
[...] | |||
Über die I2C-Schnittstelle lassen sich prozentuale Kapazität und Spannung abfragen. Dazu kann dieses kleine Script genutzt werden: | |||
#!/bin/bash | |||
# Read UPS Hat status and print on stdout | |||
# http://www.raspberrypiwiki.com/images/6/6f/How-to-use-via-i2c.pdf | |||
OLDUPSVOLTAGE=0 # To detect charging/discharging | |||
UPSSTATUS="N/A" | |||
function swapLHByteToDec() { | |||
# $1 is a string using format 0xABCD | |||
BYTE1=`echo $1 | cut -c 3-4` | |||
BYTE2=`echo $1 | cut -c 5-6` | |||
# Return decimal | |||
printf "%d\n" 0x${BYTE2}${BYTE1} | |||
} | |||
function float2Int() { | |||
MULT=`echo "$1*100" | bc -l` | |||
printf "%.0f\n" ${MULT} | |||
} | |||
while (true); do | |||
# UPS capacity in HEX | |||
UPSCAPACITY=`i2cget -f -y 1 0x36 4 w` | |||
SWAPPEDCAPACITY=$(swapLHByteToDec ${UPSCAPACITY} ) | |||
# UPS voltage in HEX | |||
UPSVOLTAGE=`i2cget -f -y 1 0x36 2 w` | |||
SWAPPEDVOLTAGE=$(swapLHByteToDec ${UPSVOLTAGE} ) | |||
# Calculations see PDF link | |||
UPSCAPAPERCENT=`echo "scale=2; ${SWAPPEDCAPACITY}/256" | bc` | |||
UPSVOLTDECIMAL=`echo "scale=2; ${SWAPPEDVOLTAGE}*78.125/1000000" | bc` | |||
INTVOLTAGE=$(float2Int ${UPSVOLTDECIMAL} ) | |||
INTOLDVOLT=$(float2Int ${OLDUPSVOLTAGE} ) | |||
[ ${INTVOLTAGE} -lt ${INTOLDVOLT} ] && UPSSTATUS="Discharge" | |||
[ ${INTVOLTAGE} -gt ${INTOLDVOLT} ] && UPSSTATUS="Charging" | |||
[ ${INTVOLTAGE} -eq ${INTOLDVOLT} ] && UPSSTATUS="Charged" | |||
echo -n `date -R` | |||
echo -n " UPSPERCENTLOAD=${UPSCAPAPERCENT}" | |||
echo -n " UPSVOLTAGE=${UPSVOLTDECIMAL}" | |||
echo " STATUS=${UPSSTATUS}" | |||
OLDUPSVOLTAGE=${UPSVOLTDECIMAL} | |||
# Wait | |||
sleep 180; | |||
done | |||
Im Einsatz produziert dieses die folgenden Ausgaben bei einem RPI 3 mit pi-hole ohne weitere USB-Komponenten oder HDMI (headless): | |||
Fri, 16 Feb 2018 14:35:35 +0100 UPSPERCENTLOAD=95.60 UPSVOLTAGE=4.08 STATUS=Discharge | |||
Fri, 16 Feb 2018 14:38:36 +0100 UPSPERCENTLOAD=94.49 UPSVOLTAGE=4.07 STATUS=Discharge | |||
Fri, 16 Feb 2018 14:41:36 +0100 UPSPERCENTLOAD=93.54 UPSVOLTAGE=4.05 STATUS=Discharge | |||
Fri, 16 Feb 2018 14:44:36 +0100 UPSPERCENTLOAD=92.59 UPSVOLTAGE=4.04 STATUS=Discharge | |||
Fri, 16 Feb 2018 14:47:36 +0100 UPSPERCENTLOAD=91.48 UPSVOLTAGE=4.04 STATUS=Charged | |||
Fri, 16 Feb 2018 14:50:36 +0100 UPSPERCENTLOAD=90.53 UPSVOLTAGE=4.05 STATUS=Charging | |||
Fri, 16 Feb 2018 14:53:36 +0100 UPSPERCENTLOAD=89.58 UPSVOLTAGE=4.04 STATUS=Discharge | |||
Fri, 16 Feb 2018 14:56:36 +0100 UPSPERCENTLOAD=88.64 UPSVOLTAGE=4.02 STATUS=Discharge | |||
Fri, 16 Feb 2018 14:59:36 +0100 UPSPERCENTLOAD=87.78 UPSVOLTAGE=4.02 STATUS=Charged | |||
Fri, 16 Feb 2018 15:02:36 +0100 UPSPERCENTLOAD=86.77 UPSVOLTAGE=4.01 STATUS=Discharge | |||
Das UPS-Hat hat in knapp 30 Minuten knapp 10% seiner Leistung verloren. Im headless-Betrieb kann daher von einer Stützzeit von mehreren Stunden ausgegangen werden. Das USB-Spannungskabel kann während des Betriebs ab- und wieder angesteckt werden, ohne daß der RPI dabei ausgeht oder mecket. | |||
[[Kategorie:Raspberry Pi]] | [[Kategorie:Raspberry Pi]] |
Version vom 16. Februar 2018, 15:04 Uhr
UPS Hat
Das UPS Hat stellt eine Aufsteckplatine mit einer USV (Unterbrechungsfreie Spannungsversorgung, im Englischen Uninterruptible Power Supply) zur Verfügung. Es ist optimal geeignet, um den Pi gegen Stromausfall und Schäden der SD-Karte bzw. der USB-Sticks zu schützen und sei daher allen PI-Nutzern wärmstens empfohlen.
Bestellquellen
Die üblichen Online-Händler, z.B.
- https://smile.amazon.de/gp/product/B0719Q5M9X MakerHawk Raspi UPS HAT Board für Raspberry Pi 3 Modell B Pi 2B B + A + und 2500mAh Lithium Akku
Achtung, der UPS Hat hat eine andere Funktion als der ähnlich aussehende PowerPack Hat. Dieser ermöglicht den Batteriebetrieb des Pi, kann jedoch den Akku nicht im Betrieb umschalten oder laden.
Hardware-Installation
Dauer ca. 2 Minuten:
- Raspberry PI herunterfahren, vom Strom trennen
- UPS Hat auf die Steckleister aufstecken (siehe Bilder beim Amazon-Link)
- Batterie richtig an den UPS Hat anstecken
- USV-Spannungsversorgung vom Raspberry Pi auf das UPS Hat umstecken
- Durch Tastendruck am UPS Hat den PI wieder starten
Software-Installation
Das UPS Hat stellt eine I2C-Schnittstelle zur Verfügung. Bei der Nutzung des Raspbian-Images kann dieses mittels des Kommandos raspi-config in den erweiterten Optionen konfiguriert werden.
Manuell erfolgt die Konfiguration durch:
apt-get install i2ctools i2c-dev libi2c-dev
sowie durch editieren der /etc/modules und laden der Module i2c-bcm2708 und i2c-dev:
root@pi-hole:~# more /etc/modules # /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. i2c-bcm2708 i2c-dev
sowie /boot/config.txt:
[...] # Uncomment some or all of these to enable the optional hardware interfaces dtparam=i2c_arm=on dtparam=i2c1=on [...]
Über die I2C-Schnittstelle lassen sich prozentuale Kapazität und Spannung abfragen. Dazu kann dieses kleine Script genutzt werden:
#!/bin/bash # Read UPS Hat status and print on stdout # http://www.raspberrypiwiki.com/images/6/6f/How-to-use-via-i2c.pdf OLDUPSVOLTAGE=0 # To detect charging/discharging UPSSTATUS="N/A" function swapLHByteToDec() { # $1 is a string using format 0xABCD BYTE1=`echo $1 | cut -c 3-4` BYTE2=`echo $1 | cut -c 5-6` # Return decimal printf "%d\n" 0x${BYTE2}${BYTE1} } function float2Int() { MULT=`echo "$1*100" | bc -l` printf "%.0f\n" ${MULT} } while (true); do # UPS capacity in HEX UPSCAPACITY=`i2cget -f -y 1 0x36 4 w` SWAPPEDCAPACITY=$(swapLHByteToDec ${UPSCAPACITY} ) # UPS voltage in HEX UPSVOLTAGE=`i2cget -f -y 1 0x36 2 w` SWAPPEDVOLTAGE=$(swapLHByteToDec ${UPSVOLTAGE} ) # Calculations see PDF link UPSCAPAPERCENT=`echo "scale=2; ${SWAPPEDCAPACITY}/256" | bc` UPSVOLTDECIMAL=`echo "scale=2; ${SWAPPEDVOLTAGE}*78.125/1000000" | bc` INTVOLTAGE=$(float2Int ${UPSVOLTDECIMAL} ) INTOLDVOLT=$(float2Int ${OLDUPSVOLTAGE} ) [ ${INTVOLTAGE} -lt ${INTOLDVOLT} ] && UPSSTATUS="Discharge" [ ${INTVOLTAGE} -gt ${INTOLDVOLT} ] && UPSSTATUS="Charging" [ ${INTVOLTAGE} -eq ${INTOLDVOLT} ] && UPSSTATUS="Charged" echo -n `date -R` echo -n " UPSPERCENTLOAD=${UPSCAPAPERCENT}" echo -n " UPSVOLTAGE=${UPSVOLTDECIMAL}" echo " STATUS=${UPSSTATUS}" OLDUPSVOLTAGE=${UPSVOLTDECIMAL} # Wait sleep 180; done
Im Einsatz produziert dieses die folgenden Ausgaben bei einem RPI 3 mit pi-hole ohne weitere USB-Komponenten oder HDMI (headless):
Fri, 16 Feb 2018 14:35:35 +0100 UPSPERCENTLOAD=95.60 UPSVOLTAGE=4.08 STATUS=Discharge Fri, 16 Feb 2018 14:38:36 +0100 UPSPERCENTLOAD=94.49 UPSVOLTAGE=4.07 STATUS=Discharge Fri, 16 Feb 2018 14:41:36 +0100 UPSPERCENTLOAD=93.54 UPSVOLTAGE=4.05 STATUS=Discharge Fri, 16 Feb 2018 14:44:36 +0100 UPSPERCENTLOAD=92.59 UPSVOLTAGE=4.04 STATUS=Discharge Fri, 16 Feb 2018 14:47:36 +0100 UPSPERCENTLOAD=91.48 UPSVOLTAGE=4.04 STATUS=Charged Fri, 16 Feb 2018 14:50:36 +0100 UPSPERCENTLOAD=90.53 UPSVOLTAGE=4.05 STATUS=Charging Fri, 16 Feb 2018 14:53:36 +0100 UPSPERCENTLOAD=89.58 UPSVOLTAGE=4.04 STATUS=Discharge Fri, 16 Feb 2018 14:56:36 +0100 UPSPERCENTLOAD=88.64 UPSVOLTAGE=4.02 STATUS=Discharge Fri, 16 Feb 2018 14:59:36 +0100 UPSPERCENTLOAD=87.78 UPSVOLTAGE=4.02 STATUS=Charged Fri, 16 Feb 2018 15:02:36 +0100 UPSPERCENTLOAD=86.77 UPSVOLTAGE=4.01 STATUS=Discharge
Das UPS-Hat hat in knapp 30 Minuten knapp 10% seiner Leistung verloren. Im headless-Betrieb kann daher von einer Stützzeit von mehreren Stunden ausgegangen werden. Das USB-Spannungskabel kann während des Betriebs ab- und wieder angesteckt werden, ohne daß der RPI dabei ausgeht oder mecket.