Стан акумулятора Lenovo T440s невідомий, але заряджається?


14

Я намагаюся налаштувати свій Lenovo на arch linux. Останнє, що мені потрібно зробити - це акумулятор працює на 100%.

Зараз з'ясовується, що стан основного акумулятора невідомий:

> acpi -V
Battery 0: Unknown, 97%
Battery 0: design capacity 5849 mAh, last full capacity 5956 mAh = 100%
Battery 1: Charging, 96%, 00:05:50 until charged
Battery 1: design capacity 1861 mAh, last full capacity 1536 mAh = 82%
Adapter 0: on-line
Thermal 0: ok, 43.0 degrees C
Thermal 0: trip point 0 switches to mode critical at temperature 200.0 degrees C
Cooling 0: x86_pkg_temp no state information available
Cooling 1: intel_powerclamp no state information available
Cooling 2: Processor 0 of 10
Cooling 3: Processor 0 of 10
Cooling 4: Processor 0 of 10
Cooling 5: Processor 0 of 10

Але якщо я запитую акумулятор безпосередньо, я отримую зовсім іншу відповідь:

> cat /sys/class/power_supply/BAT0/status
Charging

> cat /sys/class/power_supply/BAT0/uevent
POWER_SUPPLY_NAME=BAT0
POWER_SUPPLY_STATUS=Charging
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-ion
POWER_SUPPLY_CYCLE_COUNT=0
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11100000
POWER_SUPPLY_VOLTAGE_NOW=12389000
POWER_SUPPLY_POWER_NOW=0
POWER_SUPPLY_ENERGY_FULL_DESIGN=23200000
POWER_SUPPLY_ENERGY_FULL=19150000
POWER_SUPPLY_ENERGY_NOW=19050000
POWER_SUPPLY_CAPACITY=99
POWER_SUPPLY_CAPACITY_LEVEL=Normal
POWER_SUPPLY_MODEL_NAME=45N1773
POWER_SUPPLY_MANUFACTURER=SANYO
POWER_SUPPLY_SERIAL_NUMBER=16120

Я в повній втраті щодо того, що тут робити. У мене є сценарій звітності про час роботи акумулятора, який закінчується з виводу деяких з цих команд, і я хотів би, щоб він був максимально повним. Ясно, що акумулятор заряджається, але чому acpi -V сказати, що це невідомо? Хтось знає?


2
Я бачу приблизно те саме на своїх T460. Я думаю, що дві батареї по черзі заряджають / розряджають; на даний момент мій BAT0 - "Зарядка, 98%, 00:04:52 до заряджання", а мій BAT1 - "Невідомо, 79%", згідно з acpi. Інструменти для ноутбукового режиму повідомляють: "У вас пошкоджена батарея. Неможливо визначити фактичний стан" , але UPower має евристику, щоб визначити, що фактичний стан акумулятора "Зарядний".
Матіас Рав

1
Якщо ноутбук має лише один акумулятор, є лише 2 можливі стани: «розрядка» та «зарядка» (і, ну, «заряджена на 100%»). Якщо у ноутбука є 2 акумулятори, він може використовувати лише один з них, тоді стан другого акумулятора вважатиметься "невідомим" (оскільки він не заряджається і не розряджається). У мене те саме відбувається з моїм Thinkpad X250, тому я припускаю, що це очікувана поведінка.
ddnomad

Відповіді:


0

Перебуваючи на Arch, ви можете спробувати встановити пакет tpacpi-bat(сценарій Perl з ACPI вимагає останніх ThinkPads (таких як T420 і W520), порогові значення акумулятора якими tp_smapi не підтримуються) з

pacman -S tpacpi-bat

Це може допомогти виправити це. Інформацію про конфігурацію див . Тут .


0

Це поширена проблема з ноутбуками Thinkpad з подвійними акумуляторами.

Коли ви підключите ваш ноутбук, він почне заряджати BAT0, а BAT1 повідомляє про невідомий стан. BAT1 повідомить про стан зарядки, коли BAT0 заповнений, а BAT1 фактично почне заряджати.

Вам потрібно врахувати це у своєму сценарії та поєднати значення BAT0 та BAT1, щоб мати щось корисне:

battery_level=$(("$battery_level_0 + $battery_level_1"))
battery_max=$(("$battery_max_0 + $battery_max_1"))

battery_percent=$(("$battery_level * 100"))
battery_percent=$(("$battery_percent / $battery_max"))

Ось повний приклад:

#!/bin/sh

path_ac="/sys/class/power_supply/AC"
path_battery_0="/sys/class/power_supply/BAT0"
path_battery_1="/sys/class/power_supply/BAT1"

ac=0
battery_level_0=0
battery_level_1=0
battery_max_0=0
battery_max_1=0

if [ -f "$path_ac/online" ]; then
    ac=$(cat "$path_ac/online")
fi

if [ -f "$path_battery_0/energy_now" ]; then
    battery_level_0=$(cat "$path_battery_0/energy_now")
fi

if [ -f "$path_battery_0/energy_full" ]; then
    battery_max_0=$(cat "$path_battery_0/energy_full")
fi

if [ -f "$path_battery_1/energy_now" ]; then
    battery_level_1=$(cat "$path_battery_1/energy_now")
fi

if [ -f "$path_battery_1/energy_full" ]; then
    battery_max_1=$(cat "$path_battery_1/energy_full")
fi

battery_level=$(("$battery_level_0 + $battery_level_1"))
battery_max=$(("$battery_max_0 + $battery_max_1"))

battery_percent=$(("$battery_level * 100"))
battery_percent=$(("$battery_percent / $battery_max"))

if [ "$ac" -eq 1 ]; then
    plug=""

    echo "$plug $battery_percent %"
else
    if [ "$battery_percent" -gt 95 ]; then
        echo ""
    elif [ "$battery_percent" -gt 85 ]; then
        icon=""
    elif [ "$battery_percent" -gt 60 ]; then
        icon=""
    elif [ "$battery_percent" -gt 35 ]; then
        icon=""
    elif [ "$battery_percent" -gt 10 ]; then
        icon=""
    else
        icon=""
    fi

    echo "$icon $battery_percent %"
fi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.