zed.0xff.me
ibm x40 и китайская батарейка :: часть 2 - solution
часть 1 – описание проблемы и скрипт-логгер
результат
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# grep STARTUP /var/log/battery.log -B1 | grep -v - -- Thu Jul 2 16:25:01 YEKST 2009 :: 14365 mW 15620 mWh 14266 mV ============== STARTUP ============= Thu Jul 2 23:15:01 YEKST 2009 :: 12227 mW 34750 mWh 14893 mV ============== STARTUP ============= Fri Jul 3 06:25:01 YEKST 2009 :: 13117 mW 19380 mWh 14227 mV ============== STARTUP ============= Fri Jul 3 21:15:01 YEKST 2009 :: 13208 mW 23190 mWh 13933 mV ============== STARTUP ============= Mon Jul 6 09:15:01 YEKST 2009 :: 18701 mW 32780 mWh 14168 mV ============== STARTUP ============= Mon Jul 6 20:40:01 YEKST 2009 :: 18523 mW 34460 mWh 13462 mV ============== STARTUP ============= Tue Jul 7 07:25:01 YEKST 2009 :: 17194 mW 39810 mWh 14187 mV ============== STARTUP ============= Wed Jul 8 11:20:01 YEKST 2009 :: 13261 mW 55910 mWh 15657 mV ============== STARTUP ============= Fri Jul 10 11:20:01 YEKST 2009 :: 13829 mW 19030 mWh 14481 mV ============== STARTUP ============= Sun Jul 12 21:45:01 YEKST 2009 :: 13559 mW 21810 mWh 13600 mV ============== STARTUP ============= Thu Jul 16 00:15:01 YEKST 2009 :: 12913 mW 23040 mWh 14364 mV ============== STARTUP ============= Tue Jul 21 07:15:01 YEKST 2009 :: 15477 mW 14800 mWh 14344 mV ============== STARTUP ============= Sat Jul 25 17:45:01 YEKST 2009 :: 6650 mW 17680 mWh 14090 mV ============== STARTUP ============= Fri Aug 7 23:05:01 YEKST 2009 :: 14131 mW 13170 mWh 13854 mV ============== STARTUP ============= |
получаем список минимальных напряжений батареи,
при которых ноут может самопроизвольно выключиться
в течение следующих 5 минут:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# grep STARTUP /var/log/battery.log -B1|grep mV | awk '{print $12}' | sort -n 13462 13600 13854 13933 14090 14168 14187 14227 14266 14344 14364 14481 14547 14893 15657 |
выделяем отсюда два некоторых средних значения,
соответствующие уровням “осталось мало заряда” и “осталось КРИТИЧЕСКИ мало заряда” :)
и забиваем их в скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/sh grep -wq discharging /proc/acpi/battery/BAT0/state if [ $? = 0 ]; then # discharging echo -n "`date` :: " >> /var/log/battery.log grep -oE "[0-9]+ .*" /proc/acpi/battery/BAT0/state | xargs >> /var/log/battery.log VOLTAGE=`cat /proc/acpi/battery/BAT0/state | grep -o "[0-9]* mV" | awk '{print $1}'` if [ $VOLTAGE -lt 14600 ]; then echo "0 blink" > /proc/acpi/ibm/led if [ $VOLTAGE -lt 14400 ]; then echo "1 blink" > /proc/acpi/ibm/led fi else echo "0 off" > /proc/acpi/ibm/led fi else # charging / charged echo "0 on" > /proc/acpi/ibm/led true fi |
в данном случае скрипт будет:
а) моргать зеленым светодиодом “питание от сети” (led 0) при низком уровне заряда
б) моргать зеленым и оранжевым (led 1) диодами при критическом уровне
а дальше – либо втыкаем блок питания и контроллер перехватывает управление диодами, либо заряд совсем кончается и питание аварийно отключается.