Raspberry Pi: UPS Hat

Aus FHEMWiki
Zur Navigation springen Zur Suche springen

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.

  1. 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:

  1. Raspberry PI herunterfahren, vom Strom trennen
  2. UPS Hat auf die Steckleister aufstecken (siehe Bilder beim Amazon-Link)
  3. Batterie richtig an den UPS Hat anstecken
  4. USV-Spannungsversorgung vom Raspberry Pi auf das UPS Hat umstecken
  5. 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
 [...]

Nach einem Reboot können die Werte dann ausgelesen werden.

UPS-Status

Ü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
 [...]
 Fri, 16 Feb 2018 15:50:38 +0100 UPSPERCENTLOAD=72.57 UPSVOLTAGE=3.91 STATUS=Charged
 Fri, 16 Feb 2018 15:53:39 +0100 UPSPERCENTLOAD=71.75 UPSVOLTAGE=3.86 STATUS=Discharge
 Fri, 16 Feb 2018 15:56:39 +0100 UPSPERCENTLOAD=70.93 UPSVOLTAGE=3.90 STATUS=Charging
 Fri, 16 Feb 2018 15:59:39 +0100 UPSPERCENTLOAD=70.11 UPSVOLTAGE=3.87 STATUS=Discharge
 Fri, 16 Feb 2018 16:02:39 +0100 UPSPERCENTLOAD=69.29 UPSVOLTAGE=3.90 STATUS=Charging
 Fri, 16 Feb 2018 16:05:39 +0100 UPSPERCENTLOAD=68.47 UPSVOLTAGE=3.87 STATUS=Discharge

Das UPS-Hat hat in etwa 90 Minuten knapp 30% 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 meckert.