kindle oasis升级大电池后显示电量不准的解决方法
kindle吧
全部回复
仅看楼主
level 1
糊锅巴1 楼主
最近升级了OASIS的电池到1500MA,使用过程中发现电池百分比很快就从100%掉到0%,虽然掉到0%还可以使用很长时间,但是没法判断什么时候该充电了,网上搜了一下资料,写了一个小补丁,勉强能解决判断什么时候充电的问题,但不保证100%正确。
补丁原理是从系统里读取到电压的正确电压,然后根据电压判断电池还剩余多少,kindle oasis电压是跌到3.4V以内开启保护模式提示必须充电才能使用,所以补丁在电池到3.4V时,显示电量为0%。注意的是达到这个电压必须马上充电,不然进保护后,因为充电功率非常低,至少要充2个小时以上才能再次开机。
因为电压是实时波动的,所以最后电量仅供参考,不保证100%正确。
以下是代码,方法很简单,复制后新建一个文件,扩展名是lua,然后放到koreader/patches目录下,重启koreader,然后看书时在状态栏下面显示电池剩余就可以看到了。
-- UserPatch for Kindle Oasis1: 保留原生电池图标+原生电量,追加电压+自定义估算电量(3.4V=0%)
local userpatch = require("userpatch")
local ReaderFooter = require("apps/reader/modules/readerfooter")
local footerTextGeneratorMap = userpatch.getUpValue(ReaderFooter.applyFooterMode, "footerTextGeneratorMap")
if not footerTextGeneratorMap then
return
end
local orig_battery = footerTextGeneratorMap.battery
-- 读取电压
local function getBattVoltage()
local path = "/sys/class/power_supply/max77696-battery/voltage_now"
local f = io.open(path, "r")
if not f then return nil end
local raw = f:read("*a")
f:close()
local mv = tonumber(raw)
if not mv then return nil end
return mv / 1000.0
end
-- 换算:3.40V=0%,4.20V=100%
local function voltToSoc(volt)
local v_min = 3.40
local v_max = 4.20
if volt >= v_max then
return 100
elseif volt <= v_min then
return 0
end
return math.floor((volt - v_min) / (v_max - v_min) * 100 + 0.5)
end
footerTextGeneratorMap.battery = function(self, settings)
local orig_str = orig_battery(self, settings)
local volt = getBattVoltage()
if not volt then
return orig_str
end
local soc_est = voltToSoc(volt)
-- 格式示例:[原生图标] 42% 3.56V 20%
local new_str = string.format("%s %.2fV %d%%", orig_str, volt, soc_est)
return new_str
end
2026年09月22日 07点09分 1
level 1
糊锅巴1 楼主
附上一张实际显示效果图片
2026年09月22日 07点09分 2
前面81%是系统给的剩余电量,后面的4.09V是实际电压,86%是根据电压估算的实际剩余容量
2026年09月22日 07点09分
level 6
谢谢分享
2026年09月22日 07点09分 3
1