Batterieüberwachung

Betrifft OS:
FreeBSD

Mittels cron und einem Shellskript soll bei leerer Batterie der Laptop automatisch ausgeschaltet werden. Zwei Minuten bevor der Laptop heruntergefahren wird, erhält der Benutzer eine Warnmeldung auf der Konsole und auf dem X11-Bildschirm.

Voraussetzung

ACPI (Advanced Configuration and Power Interface) ist aktiviert, näheres zu ACPI unter: Energie- und Ressourcenverwaltung / Was ist ACPI? und ggf.: ACPI-Fehlersuche

Batteriestatus abfragen

Grundsätzlich gibt es 2 Möglichkeiten, um unter FreeBSD den Batteriestatus eines Laptops abzufragen:

Möglichkeit 1:

$ /usr/sbin/acpiconf -i batt

Ausgabe (Beispiel):

Design capacity:        4000 mAh
Last full capacity:     4000 mAh
Technology:     secondary (rechargeable)
Design voltage:         14800 mV
Capacity (warn):        420 mAh
Capacity (low):         156 mAh
Low/warn granularity:   264 mAh
Warn/full granularity:  3780 mAh
Model number:   PA3395U
Serial number:  3658Q
Type:           Li-Ion
OEM info:       TOSHIBA
State:          discharging
Remaining capacity:     23%
Remaining time:         unknown
Present rate:   0 mA
Voltage:        14334 mV

Möglichkeit 2:

$ /sbin/sysctl hw.acpi.battery

Ausgabe (Beispiel):

hw.acpi.battery.life: 23
hw.acpi.battery.time: 15
hw.acpi.battery.state: 1
hw.acpi.battery.units: 1
hw.acpi.battery.info_expire: 5

Möglich ist hierbei auch:

$ /sbin/sysctl hw.acpi.battery.life
$ /sbin/sysctl hw.acpi.battery.time

Ausgaben dazu (Beispiele):

hw.acpi.battery.life: 23
hw.acpi.battery.time: 15

bzw.:

$ /sbin/sysctl -n hw.acpi.battery.life
$ /sbin/sysctl -n hw.acpi.battery.time

Ausgaben dazu (Beispiele):

23
15

Die o.g. Befehle kann man verwenden, um per Shellskript den Batteriestatus zu überwachen.

Es kann vorkommen, daß bestimmte Laptops die hw.acpi.battery.time Information nicht liefern, deshalb ist es ratsam vor der Erstellung eines Überwachungsskriptes zu testen (im Batteriebetrieb!), welche Ausgaben die o.g. Befehle produzieren.

Shellskript

Das Shellskript /usr/local/sbin/batterietest kontrolliert die Stromversorgung und den Batteriestand des Laptops. Ist die Batterie leer, löst das Shellskript das Herunterfahren des Laptops aus.

/usr/local/sbin/batterietest

#!/bin/csh
# /usr/local/sbin/batterietest
# Akkustand kontrollieren
 
set restminuten=`/sbin/sysctl -n hw.acpi.battery.time`
set modus=`/sbin/sysctl -n hw.acpi.battery.state`
 
# Wird der Laptop nur von der Batterie mit Strom versorgt?
if ( "${modus}" == "1" ) then
 
  # Reicht die Batterie nicht mehr fuer 7 Minuten?
  if ( "${restminuten}" < "7" ) then
    shutdown -p +2 "Die Batterie ist leer! Der Computer wird in 2 Minuten heruntergefahren!" &
  endif
 
endif

Eine Alternative (falls das o.g. Skript nicht funktionieren sollte, weil z.B. `/sbin/sysctl -n hw.acpi.battery.time` keine/falsche Ergebnisse liefert):

#!/bin/csh
# /usr/local/sbin/batterietest
# Akkustand kontrollieren
 
set restprozent=`/sbin/sysctl -n hw.acpi.battery.life`
set modus=`/sbin/sysctl -n hw.acpi.battery.state`
 
# Wird der Laptop nur von der Batterie mit Strom versorgt?
if ( "${modus}" == "1" ) then
 
  # Batteriestand unter 15%?
  if ( "${restprozent}" < "15" ) then
    shutdown -p +2 "Die Batterie ist leer! Der Computer wird in 2 Minuten heruntergefahren!" &
  endif
 
endif

Nicht vergessen: Das Shellskript ausführbar machen mit:

# chown root /usr/local/sbin/batterietest
# chmod u+x /usr/local/sbin/batterietest

root-Crontab

Jetzt benötigt man noch einen Eintrag in der root-Crontab, damit alle 3 Minuten das Shellskript /usr/local/sbin/batterietest aufgerufen wird:

# su
# crontab -e

Jetzt folgende Zeilen eingeben:

# root-crontab
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
#
#minute hour mday month wday command
#
# Batteriestand alle 3 Minuten kontrollieren
*/3 * * * * /usr/local/sbin/batterietest

die neuen Zeilen speichern und den Editor verlassen.