一加12支持无线充电,于是我买了个无线充来用,平时就把无线充当支架放手机。
但是考虑到这样长期电量保持100%,对手机电池损害是加速的,于是便考虑控制充电电量。比如充到80就停充,电量低于70就开始充。
尝试过的几种方案如下,最后一种是我目前在用的方案
方案1:充电控制器模块
充电控制器模块搭配充电控制APP是最简单的方案,绝大部分手机都可以用,但是在一加12上面表现不好,不支持无线充的控制。
当然了,如果你手机没有无线充,或者不需要用它控制一加12的无线充,那么它将会是最完美的,最简单的充电控制方案
方案2:tasker+TaskerLauncherShortcut插件+米家
后来搜索到了这个帖子《我研究出了米家史上最强的自动离家模式》,作者就是用tasker搭配米家APP来控制米家的设备。其原理可行,而且比较灵活,非米家设备(比如全橙的智能插座),也可以通过小爱音箱来间接控制。
具体方案就是:
tasker获取电量——tasker执行米家快捷方式调用米家APP——米家APP控制米家插座或其他设备
或者
tasker获取电量——tasker执行米家快捷方式调用米家APP——米家APP控制小爱音箱——小爱音箱执行文字命令——控制全橙插座开关或其他设备
但是实际操作下来发现,它里面用到的【TaskerLauncherShortcut】插件必须要作为默认桌面才能使命令生效,这肯定忍不了啊(可能文章作者用的是旧版?不得而知)。
方案3,tasker+米家
继续搜索,发现完全可以不用【TaskerLauncherShortcut】这个插件,直接用tasker执行意图来调用米家快捷方式也可以,《Tasker控制米家App》
但是实际操作下来,需要抓包获取关键数据,这个我不擅长,实际抓包后没有找到相关数据,也只能放弃。
方案4,tasker+homeassistant
继续搜索,受到《http调用api让米家小爱同学执行指令和播放文字》这个方案启发,发现可以用tasker执行post命令,借由homeassistant调用小爱音响执行文字命令,来控制全橙插座开关。虽然这是链路最长的方案,但是最麻烦的就是homeassistant,而这个之前玩过,所以反而对我最可行。
流程就是
tasker获取电量信息——发送post请求给homeassistant——homeassistant控制我书房的小爱音箱——小爱音箱执行文字命令(比如:打开充电器开关)——控制开关或其他设备
说干就干
- 按这个教程《还觉得HomeAssistant太折腾?其实Windows系统就能安装,保姆级部署教程在这里!傻瓜也能照着做!》给我的NAS装上基于Hyper-V的homeassistant
- 按这个教程小米MIoT设备接入HomeAssistant通用插件教程给homeassistant装好【hacs xiaomi miot】这个插件并设置好小米账号,至此,家里的所有米家设备都已经接入到homeassistant了,其中包括我们这次要用到的小爱音箱
- 装好homeassistant的手机APP。到这一步,我发现事情变得更简单了,因为……
方案4 plus:homeassistant的手机APP+homeassistant自动化
因为我发现homeassistant的手机APP(后文简称HA APP),装到手机上之后,它不仅仅是个控制台,它还会把手机作为一个设备接入到homeassistant中,而手机的很多状态信息都会被homeassistant获取到。其中恰好就包括我们最需要的“手机电量”。
于是事情就变得简单了,我们完全可以抛弃臃肿的tasker,只使用HA APP就也可以了。
步骤如下
- 手机上装好HA APP,打开后正常接入到我前面装好的homeassistant中,其中会提示你设置当前设备名称,我就设置为【一加12】
- 到homeassistant后台——配置及——设备与服务,其中的【移动应用】就是
- 到homeassistant后台——配置——自动化与场景——创建自动化,按如下设置,就完成了一个【电量低于70就自动打开智能插座】的设置了,同样的,超过80就自动关闭插座你应该也会了
方案4 plus pro:可以继续优化
基于方案4plus,我们还有几个继续优化的空间
- 因为我家里的仅有的几个米家插座有固定的门的用途,只有几个闲置的全橙插座可以用,因此必须要间接的通过小爱同学来控制。
- 能不能用homeassistant直接控制非米家的智能开关,而不经过小爱?也可以,只要你的智能设备能接入homeassistant就行,比如我手头的全橙开关就可以接入homeassistant,但是非常麻烦,我之前研究过就放弃了,如果读者有精力可以研究
- 按上面的方案4plus,小爱同学开关插座后会说话(反馈命令的完成情况),冷不丁的比较吓人,因此我们可以将自动化方案中的动作部分改为以调用【Xiaomi Miot Auto: Intelligent speaker】服务的形式,这个服务支持让小爱音箱静默执行文字命令
方案5,tasker+homeassistant
是的这又是一个tasker搭配homeassistant的方案,但是更加优雅,因为homeassistant本身就支持webhook功能,方便使用网络请求来进行控制
- 如图所示在homeassistant后台设置好自动化,触发条件为webhook,会自动生成一个webhook ID,你也可以手动修改这个ID
- tasker端执行任务时使用http request来请求这个api就可以了,api的构成很简单
http://192.168.xx.xx:8123/api/webhook/{webhookID}
- 实际使用中我在路由器做了ddns和端口转发,可以使用域名+端口,以便在手机没连接WIFI时也能控制
方案5 Plus
我不在家的时候,晚上回卧室睡觉的时候,哪怕电量再低都是不需要开启充电的,除了使用NFC匹配【手机是否放在无线充上】这个场景外,还可以采用【和电脑同开同关】的策略,因为我在书房时,台式机肯定是开的。而我的台式机开关机状态是可以知道的。因为台式机使用米家智能插座+bios上电电自动开机实现自动开机,插座功率低于10W超过1分钟自动关闭,插座和BIOS设置于与本文主题相去较远不详述,只说相关部分。
- 我在米家APP中设定的逻辑是【电脑开机时,自动打开充电插座】
但是当手机电量超过80的时候把手机放在无线充上,此时插座打开了,手机就会继续充电直至充满,不符合我的要求,于是还需要在手机上使用tasker进行额外的设定
- tasker中设置:手机开始无线充电时,判断电量是否超过80,是的话关闭插座
但是当夜间或不在家时(电脑插座没开时),电量低于70的情况下,也不打开充电插座,tasker显然无法轻易知道米家的智能插座是否开启,只能在homeassistant中判断
- homeassistant中,打开充电器的逻辑中,加入判断【电脑插座是否开启】,是的话则打开充电器
- 最后,米家APP中设置一条【电脑插座关闭时,也关闭充电插座】
- 如果我使用有线充电时,无线充插座也无需开着,因此tasker中可以再加一条【有线充电时,关闭无线充插座】【断开有线充电时,打开无线充插座】
以上策略,成功实现以下场景
- 电脑关着,充电插座一定是关的
- 电脑开着,且手机电量高于80的时候,手机放在无线充上后,插座一定是关的
- 电脑开着,且手机电量低于70的时候,充电插座一定是开的
拓展
tasker与homeassistant的互联
- tasker可以通过post/get请求(搭配homeassistant自动化中webhook触发条件)来执行homeassistant的脚本
- tasker可以通过这个插件,来执行homeassistant的脚本
一加手机的【充电保护功能】(阿木注:此方法对一加12无线充无效,不确定是否是一加的bug。总之充电不受控制会一直充直到充满)
-
氧OS(阿木注:不确定氧11是否支持,不支持的话需要升级更高版本)自带【充电保护】功能,开启后可以自动实现充到80%自动停充。此功能对于电池来说,是走旁路供电的,即“电池闲置模式”,手机如果仍然接通电源,那么手机所消耗的电量全部来自于电源,不经过电池(来源酷安@天伞桜)
-
ColorOS阉割掉了【充电保护】功能,通过修改feature,打开“充电至80%”的功能。具体修改文件在/my_bigball/etc/extension/appfeature.region_cn.com.oplus.battery.xml,将
中的false改为true。会使用magisk模块的,应该实现不难。微博@wuxianlin magisk模块改动:
将系统的/my_bigball/etc/extension/appfeature.region_cn.com.oplus.battery.xml文件拷贝到模块的my_bigball/etc/extension/路径,修改上述feature。
magisk模块的post-fs-data.sh增加一行命令:mount -o bind ${MODDIR}/my_bigball/etc/extension/appfeature.region_cn.com.oplus.battery.xml /my_bigball/etc/extension/appfeature.region_cn.com.oplus.battery.xml -
还有个方法可以开启该功能,不需要解锁 root,用 adb shell 执行 settings put system regular_charge_protection_switch_state 1,关掉就把 1 改成 0,记得关闭开发者选项里的权限监控 (微博@MlgmXyysd)