Здравствуйте!
Постил в профильный раздел, но он скорее мерт, чем жив.
Изначально была задача - научить сабж покзывать на странице статуса заряд батареи, ибо мой "сервер" крутиться но ноуте.
Готовых решений не нашел, и, покурив манов, решил напилить сам.
Вышел костыль-костылище, прилагаю:
sub get_system_battery
{
if(open(BAT_UEVENT, "/sys/class/power_supply/BAT0/uevent")){
my @bat_uevent = <BAT_UEVENT>;
close (BAT_UEVENT);
my $bat_rtime;
foreach my $line (@bat_uevent){
my @mas=split(/=/,$line);
push @bat_uevent_sp, $mas[1];
}
my $bat_perc = $bat_uevent_sp[10]/$bat_uevent_sp[9]*100;
my $bat_state = $bat_uevent_sp[1];
my $bat_des_perc = $bat_uevent_sp[9]/$bat_uevent_sp[8]*100;
if ($_[0] eq "perc"){
return int $bat_perc;
}elsif ($_[0] eq "state"){
return $bat_state;
}elsif ($_[0] eq "des_perc"){
return int $bat_des_perc;
}elsif ($_[0] eq "bat_rtime"){
return int $bat_rtime;
}else{
return "ERROR";
}
}else{
return "ERROR, NO BATTERY";
}
}
my $battery = get_system_battery(perc).'% '.get_system_battery(state).','.get_system_battery(des_perc).'% of design capacity';
if($battery) {
print "<tr> <td><b>Battery state</b></td>\n";
print "<td>$battery</td> </tr>\n";
}
Прошу не закидывать, я ни разу не программист, так, интересуюсь, а перл вообще первый раз вижу.
Но оно работает!!
К чему топик - хочу еще прикрутить отображение оставшегося времени работы, и тут затык.
Можно применить вот такое, оно тоже завелось:
my $bat_rtime;
$bat_rtime = qx("/usr/bin/acpi");
@bat_rtime = split (/,/,$bat_rtime);
$bat_rtime = $bat_rtime[2];
print "$bat_rtime";
Соотвественно с допилкой регэкспой, запихиванием в суб, обвязкой ифами и тд.
Но в таком решении смущает вызов системной команды - хочу по красивому, из файла или по формуле.
И затык как раз в формуле/файле - где брать? Как acpi считает? Гуглеж ничего не дал.
Буду благодарен за помощь!
Пользователь решил продолжить мысль 18 Сентября 2013, 00:34:23:
Хотя что-то мне щас подумалось, что нагородил я ради исскуства, хотя можно было бы обойтись вот этим..
sub get_system_battery
{
my $bat_rtime;
if($bat_rtime = qx("/usr/bin/acpi")){
$bat_rtime = substr($bat_rtime, 11);
return $bat_rtime;
}else{
return "ERROR";
}
}