Raspberry Pi: UPS Hat: Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „== UPS Hat == Das UPS Hat stellt eine Aufsteckplatine mit einer '''USV''' (Unterbrechungsfreie Spannungsversorgung, im Englischen '''Uninterruptible Power Supp…“)
 
Keine Bearbeitungszusammenfassung
 
(2 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
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
  [...]
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.


[[Kategorie:Raspberry Pi]]
[[Kategorie:Raspberry Pi]]
[[Kategorie:USV]]

Aktuelle Version vom 11. Juni 2019, 18:38 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.

  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.