Thinkpad и индикация за батерия

Взех си евтина китайска батерия от eBay, която държи 3 пъти повече от оригиналната. Естествено електрониката въобще не се разбира с лаптопа и единствената информация, която може да бъде извлечена е процента на заряд. Брой презареждания, температури, напрежение на елементите, тоци – абсурд. Такъв абсурд, че даже и светодиодът за батерия не работи – има само едно – зелено състояние. По принцип с оригиналната батерия като падне под 30% зеленото се сменя с оранжево, а като падне под 20% оранжеовото почва да мига. Ама те и процентите на новата са едни проценти… на 20% гасне лаптопа.
Липсата на някаква осезаема индикация за батерията ми бърка в здравето. За това си написах едно просто скриптче, което взима процента на батерията и при ниски или критични нива примигва осветителния светодиод и издава звук. Скриптът е Thinkpad специфичен и няма да работи на други машини.

  1.  
  2. #!/usr/bin/php
  3. <?php
  4. $sLedFile = "/sys/devices/platform/thinkpad_acpi/leds/tpacpi::thinklight/brightness";
  5. $sBatteryFile = "/sys/devices/platform/smapi/BAT0/remaining_percent";
  6. $sStateFile = "/sys/devices/platform/smapi/BAT0/state";
  7.  
  8. $iPercentLow = 40;
  9. $iPercentCritical = 30;
  10.  
  11. $iNumBlinksCritical = 5;
  12. $iNumBlinksLow = 3;
  13.  
  14. /* **************************************** */
  15. $sState = trim(file_get_contents($sStateFile));
  16. if ($sState != ‘discharging’){
  17.     exit(0);
  18. }
  19.  
  20. $iPercentCurrent = trim(file_get_contents($sBatteryFile));
  21. if ($iPercentCurrent < $iPercentCritical){
  22.     for ($i = 0; $i < $iNumBlinksCritical; $i++){
  23.         blink_critical($sLedFile);
  24.     }
  25. }
  26. else if ($iPercentCurrent < $iPercentLow){
  27.     for ($i = 0; $i < $iNumBlinksLow; $i++){
  28.         blink_low($sLedFile);
  29.     }
  30. }
  31.  
  32. function blink_critical($sLedFile){
  33.     `echo 1 > $sLedFile`;
  34.     usleep(100000);
  35.     `echo 0 > $sLedFile`;
  36.     //usleep(100000);
  37.     `beep -f 2000 -l 100`;
  38. }
  39.  
  40. function blink_low($sLedFile){
  41.     `echo 1 > $sLedFile`;
  42.     usleep(1000000);
  43.     `echo 0 > $sLedFile`;
  44.     usleep(1000000);
  45. }
  46.  
  47. ?>
  48.  

Това го слагам на crontab да се изпълнява всяка минута и проблемът е решен:

*/1 * * * * /root/bin/check_battery.php

Tags: ,

6 Responses to “Thinkpad и индикация за батерия”

  1. gotha says:

    Като собственик на Thinkpad отскоро, ще си го запиша някъде, може да потрябва някой ден 🙂
    Колко държи китайката, съответно оригиналната ?

  2. ivanatora says:

    Оригиналната държи час, а китайката три. Ама трябва да се има предвид че едната е 6 клетки, а другата 9. Какъв модел е твоя Thinkpad?

  3. gotha says:

    edge 14 и батерията в най-добрите случаи докарва до към 4 часа, но това е много относително – когато гледам нещо на 720p едва докарва 3. По спецификации до дават повече от 4, но ме съмнява, че можеш да ги докараш само със спрян X и vim. И то ако не пишеш много бързо 😛

    Още е новичък, ще видим как ще е батерията след някоя друга година.

  4. gotha says:

    btw, днес показах на колегите този код с коментара – “Гле`йте момчета, к`ви работи пишат вече хората на php!” 🙂

    btw2, имаш вариант, вместо с cron, да набримчиш цялото в безкраен цикъл с sleep X секунди, да му напишеш init скрипт (който вероятно ще е по-дълъг от този 🙂 и да си го ползваш като абсолютно нормален linux service. Все пак предполагам, че едва ли ще ти се занимава. 🙂

  5. ivanatora says:

    Тези 4 часа ги дават за Windows 7+ и нормално – там управлението на захранването е като че ли по-добро от това в линукса.
    Това с безкрайния цикъл и sleep не ми харесва, предпочитам крона 😛

  6. gotha says:

    Мда, признавам си, че се предадох и ползвам оная, другата ОС 🙂

    иначе
    >Това с безкрайния цикъл и sleep не ми харесва, предпочитам крона
    какво да ти кажа, perl програмисти 😛

Leave a Reply