有没有类似的技术方法或者直接有app?要求是做到插电但是不充电 使得电池可以维持在半充满的水平 以延长电池的寿命。
typec充电类型的mac,升级到10.15系统(10.14.6貌似也可以),在设置-》节能-》电池健康-》勾选电池健康管理,系统会每天自动充放电,保持健康。
其实想要保持电池健康,只需要每月多用几次电池就行
如果你的macbook是老款的MagSafe接口,那么恭喜你,你的愿望可以实现:
用一张细纸条或者胶带(更倾向于细纸条,胶带容易留下残胶,比较麻烦,除非用那种低粘度无残留的胶带)遮住充电头的最中央的那个触点(如果纸条比较宽,同时遮住了多个触点,也没有关系,因为充电触点是中心对称的,所以即使遮住了同一边的3个触点也没有问题)。
这样操作后,macbook可以使用充电器供电,但不会对电池充电,充电头指示灯会熄灭(正常情况下充满电池是绿色,充电中是橙色)。
这样的话电池掉电很缓慢,大概几天掉1%。我个人喜欢把电池电量保持在40%~60%之间(这样对电池寿命比较好,可以有效减少充电循环,最重要的是可以避免电池鼓包,我的机器原配的电池由于一直插电使用,循环次数并不是多,但悲剧的是忽然有一天发现本子盖不严实了,机器外壳有点弯曲变形,到店里一问才知道是电池鼓包了,换了新电池后立刻就可以正常合上盖子了,过了一段时间就彻底恢复正常了。电池鼓包应该是长期保持高电量造成的)。当电量低于40%时,就去掉纸条充会儿电,充到60%左右就放回去。如果需要外出长时间使用电池,那就去掉纸条充电到100%,这样也能保证最长使用时间(缺点是需要提前充电,紧急情况下来不及充电的话,只能使用40~60%的电量)。
还记得我 2 年前回答的方法说 M1 不支持吗,之前是因为我自己没有 Apple Silicon 的 MacBook ,一直没办法尝试适配 M1 限制充电的方法,也没空看其他软件的原理。
如今 M1 发布也快 3 年了。时隔三年(有够久的 ) ,我也终于换上 Apple Silicon MacBook 了!可以整点骚活了!
很显然,为了电池寿命,我肯定是要给他限制充电的。问题就在这里,之前回答里限制 BCLM 的方法不好用了。既然这样我肯定要去研究一下 Apple Silicon 上限制充电的方法的,既然都研究了,可能还会自己写一个。
不过呢,在决定要不要自己写之前,为了避免重复造轮子,还是先试用了一下现有的产品,包括闭源付费的和开源的。要是有好用的我就懒得写了x:(提前透露,我最后确实不满意,自己写了 charlie0129/batt )
结论就是,现有产品对于我一个搞开源的人来说,我感觉不太好用。。。
我就只想要一个 简单 的工具,只做一件事(限制充电),并且要把它做好了(比如一睡眠就不小心充满的那种 edge case 都要处理好了),就像 Unix 哲学 那样。
不过好像没东西满足我这个要求,那没办法了,,自己写呗!
前两周花了整整一个周末,了解了一下 M1 上控制充电的原理,用 Golang 和 C 写了个 MVP 。因为 Go 没法直接读写 SMC ,顺便撸了个简单的小轮子,开源了个 Go 读写 SMC (控制 MacBook 硬件)的库 charlie0129/gosmc 。
最终 batt 开源了。可以控制你的 Apple Silicon MacBook 的充电,而且重启、睡眠不影响,目前主要面向 power user 和开发者。当然,后续也在维护,毕竟我自己也在用。用了几周感觉大差不差了也就更新了知乎这篇回答。
(欢迎给 GitHub 仓库点点 star 小星星!)
charlie0129/battGitHub - charlie0129/batt: Control and limit battery charging on Apple Silicon MacBooks.
由于知乎回答修改麻烦,所以建议直接去 GitHub 看捏!GitHub 仓库那边的 README 更详细,也会跟随版本及时更新。不过 GitHub 那边的原文是英文的,知乎这里其实相于我又人工把一部分翻译成中文了
确实,macOS 有优化电池充电功能(具体介绍可以看看 GitHub 仓库的 readme ),不过他是根据你以往习惯来决定的,一旦你的作息不规律,那他就没用了。并且,让 macOS 替你决定就失去了 predictability (我很看重),你不能决定什么时候充电什么时候不充电了。所以,建议在使用 batt 之前关闭 macOS 的优化电池充电。
而使用 batt 就能够让你完全掌控充电。
然后目前是纯命令行的方式,所以可能需要你对命令行有点了解。加一个 macOS 原生 GUI 也挺好的,不过目前我确实没精力开发(绝对不是懒x)。如果你开发出来了 GUI ,可以来发发 PR 或者让我在这里附一个链接到你的仓库。
有的没的也说了,接下来开始安装:
自动安装:
bash <(curl -fsSL https://github.com/charlie0129/batt/raw/master/hack/install.sh)
(注意,你的网络需要能访问 GitHub ,不然会卡住不动。如果你有代理,你可以先设置代理 export https_proxy=http://你的代理地址
再运行上面的命令)如果后续有新版本,你也可以用这个命令直接升级到下一个稳定版。
2. 现在就帮你完成了手动安装一节的前 4 步了,接下来跳到手动安装一节的第 5 步继续即可。
手动安装:
batt
二进制文件。如果你需要开发版(最新的功能和bug修复,比如新版本有控制 MagSafe LED 的功能),你可以从 GitHub Action 下载自动构建的版本 GitHub Actions: build-test-binary (3 个月有效期,下载后 chmod +x )$PATH
里面,并且最好之后就别动了。比如可以放在 /usr/bin/local
里。(虽然你不放在 $PATH
里也没问题,不过之后使用不太方便)batt
看看效果,如果你看到了帮助信息,那说明好了。sudo batt install --allow-non-root-access
来安装。后面的 flag 是让你之后运行 batt 可以不加 sudo 的,如果你想要牺牲易用性换安全性,那可以把这个 flag 去掉。sudo spctl --master-disable
来直接禁用 GateKeeper 。batt status
看看有没有安装好了,如果你看到一些状态信息,那说明成功了。batt limit xx
来自定义 xx% 的充电限制。如果你当前电量大于你设置的充电限制,那只会暂停充电,并不会直接耗电到你设置的 level 。你可能需要用电池到你设置的充电限制以下才能看到效果(如果你不想拔电,你可以强制使用电池来放电,batt 有这个功能 batt adapter disable
)
如果要关闭充电限制,运行 batt limit 100
设置为 100% 即可。
batt help
看看有哪些额外的命令,比如有禁止充电器的功能(用于在插电的时候强制用电池) 、防止 idle sleep 、睡眠前暂停充电等为了方便同步,在 GitHub 有常见问题的说明: https://github.com/charlie0129/batt#faq
可以在 GitHub 提提 issue
发现github上有开发者把以下的操作编写了一个带图形界面的app了,实现的功能是一样的,懒得折腾命令行的可以去看看:https://github.com/davidwernhart/AlDente
M1 MacBook 的用户建议不要抱太大希望(,我这个操作所有测试都是在 Intel 处理器的 Mac 上进行的,没有在 M1 上面做任何测试。我短期内也没有要买 M1 的打算,所以应该不会更新适用于 Apple Silicon 的方法抱歉,M1的操作方法就留给大家探索了,研究出来了欢迎私信。
在macOS 10.15.5及以上系统中有电池健康功能,系统觉得你不要充电时会停下来,但是你无法手动控制充电限制为多少。
如果你想更加自由地控制你的电池能冲到多少,可以参照以下我的方法(受限于手头设备,目前在15寸2017和2018 MBP, macOS 10.14, 10.15, 11.0测试过,其他相近机型和系统大概率能用,请自行测试)。
以下内容稍微有点硬核(其实难度不大,步骤说的比较详细,按着步骤走一般不会出问题),了解CLI基础操作的话更好。目前我这个操作方法网上几乎找不到类似的教程,但是实测有效。
MacBook系列是通过SMC (System Mangement Controller) 管理部分硬件的,包括电池。
我发现在SMC中有一个键为"BCLM" (没有官方文档,猜测为Battery Charge Limit)的缩写,默认值为0x64,即10进制的100,很可能代表充电限制为100%,实测后发现确实。
这就好办了,将你需要的电量限制强制写入这个键值即可,你的MacBook在达到这个电量限制的时候就会停止充电而只使用电源适配器。
好在开源的 smcFanControl 提供了一个 SMC 工具,以下是操作步骤:(确保你安装了Xcode或者 Xcode commandline tools 两者之一,以正常编译C代码。两个都没有安装的话只要安装后者就行了)
打开“终端”(你可以在“程序坞->其他”里找到它),依次输入每条命令并回车执行:
git clone https://github.com/hholtmann/smcFanControl.git
2. cd smcFanControl/smc-command
3. make
4. sudo https://www.zhihu.com/question/smc -k BCLM -w <你需要的充电限制的16进制值>
(不包括尖括号)
这条命令执行的时候会提示你输入密码,输入你的开机密码再回车即可(输入密码的时候光标是不会动的,其实已经输进去了)。
(比如 sudo https://www.zhihu.com/question/smc -k BCLM -w 32,这设置了充电限制为50%,若你当前电量超过了50%就会停止充电,若低于50%就会充电至50%)
至此所有的设置操作已经结束了。以后你想重新设置只要重新打开终端执行第2和第4条命令就行了。
比如你设置了50%,而你当前的电量大于50%,那么你的电量只会保持当前电量不变。要看到效果的话只要把电用到50%以下再充电即可。
比如你设置了充电限制为60%,你实际会看到的是冲到了62%才停止充电。这是正常现象,macOS显示的电量会比实际的多一些(跟iPhone的电量显示一个道理)。
建议设置的充电限制在32~64(16进制)之间(即50%~100%)。
如果设置成功,接通电源时,在停止充电的后菜单栏电池的菜单中会显示“电池不在充电”和“电源:电源适配器”(不清楚中文系统中确切的翻译是什么,大概翻译了一下233),而不是“电池已充满”。
这个设置是一直有效的,重启之后不用重新设置。当然,如果你的Mac死机了,升级系统了或者你强制重启了它,SMC中的某些键会恢复默认值,它就恢复默认的100%充电限制了。
如果因为上述原因你发现你的充电限制没了,或者你想重新设置,打开终端执行一遍上面的第2条和第4条命令即可(不用全部重来)。
要手动恢复默认设置的话:sudo https://www.zhihu.com/question/smc -k BCLM -w 64
即可,表示设置为100%充电限制。
你也可以检查一下你有没有设置成功:https://www.zhihu.com/question/smc -k BCLM -r
,这会返回当前BCLM中的值,查看终端返回的值是不是你设置的值。
如果觉得终端设置麻烦,我给出几个自动化操作的方案,都是以上面的命令行操作为基础的(要更复杂一些,以后有空再补充):
1. 把以上操作保存为一个脚本,直接打开运行设置。
2. 利用Apple Script直接保存为一个带图形界面的app,直接运行来设置。
3. 使用hammerspoon,在系统的菜单栏里面加一个图标,加几个设置电量的按钮。这也是我自己的做法。
最简单的方法,也是最不实用的方法,合盖外接显示器充电
对于 Intel 芯片的 Mac,你可以在保持网络连接没有任何阻碍的情况下,打开终端(Terminal),依次输入以下指令(确保每一项指令都执行成功以后再执行下一条):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew tap zackelia/formulae
brew install bclm
sudo bclm write 68
这里的“68”代表我打算让电池电量达到 70%(硬件实际为 68%,系统界面显示会比实际多 2%)就停止充电,你可以根据自己的偏好更改数字,建议在40到80之间。
所有指令执行完毕以后,你的电脑已经可以按照你的设置限制充电了,但是为了防止系统升级或宕机后参数被意外重置,你可以输入
sudo bclm persist
来保证你的设置在任何状态下都生效。
对于 Apple 芯片的 Mac,这个数字仅支持 80 和 100 两个值,并且 macOS 版本要高于 13.0。
详情见项目介绍页:
https://github.com/zackelia/bclm你也可以选择图形界面的 Charge Limiter,安装后仅输入数字即可实现相同功能,原理相同。
https://github.com/godly-devotion/charge-limiter另外还有 AlDente,可以实现更复杂的功能,但是睡眠状态下所有设置可能不起作用。而且此应用在电池电量达到限制比例时,电源插头指示灯会一直显示为在充电状态(橙色),看着可能会比较膈应。好处是可以实时看到电池和外接电源的使用分配情况,还可以设置自放电到一定比例再开始充电(比如限制70%停止充电,可以设置电池自消耗到60%才开始充电,而不是始终保持电量在70%)。不过这些高级功能仅属于付费用户,免费版仅能实现限制充电比例这一项功能。
电 话:400-123-4567
传 真:+86-123-4567
手 机:13800000000
邮 箱:admin@eyoucms.com
地 址:广东省广州市天河区88号