长期运行准备 —— termux第二弹

2021年12月07日 218点热度 0人点赞 0条评论

之前讲过 如何安全的二次利用你的旧手机 , 前几天又说了实际遇到的情况。这会电池安全脚本给它部署上,再讲一下termux安装好后需要做的一些事情。

完善脚本

先上完整代码: https://github.com/Virace/Automatic-charging-of-MP

主要就是对于温度的检测。

....
elif temperature >= TT * 10:
    # 44° 温度过高通知
    if not os.path.exists(target):
        os.system(f'echo 1 > {target}')
    else:
        with open(target, 'r+') as f:
            count = int(f.read())
            log.warning(f'temperature anomaly, count: {count + 1}')
            if count >= 5:
                f.seek(0)
                f.write('0')
                if ac is True:
                    result = power.off()
                msg_push(f'目前温度异常,请及时检查。温度: {temperature / 10}°, 已操作开关: {result}')
            else:
                f.seek(0)
                f.write(str(count + 1))
elif temperature <= 400 and os.path.exists(target):
    os.remove(target)

TT是配置中设置的温度阈值,超过这个温度就会记录一次,连续5次将会断开电源,并且微信推送。因为这个脚本是准备在crontab中按时出发的,所以这个超温几次触发推送,是要根据设置的计划任务频率设置的。

其余的就是加上了推送,并没有太大比变化。

部署

这个脚本是跑在手机本身上的,所以要用adb连接自己来获取电池信息。需要在termux中先安装adb相关工具,但是遇到了问题。

ADB

没安装的时候输入adb会提示没找到该命令,并推荐你安装一个软件包"android-tools",莫装!测试了,adb服务无法启动。

需要使用这个开源脚本方可安装: https://github.com/MasterDevX/Termux-ADB,安装脚本中默认使用GitHub直接下载,国内访问不太稳定,可以使用下面提供替换过CDN的脚本。

#!/data/data/com.termux/files/usr/bin/bash

directory="$(pwd)"
echo
echo -e "\e[93mThis script will install ADB & FastBoot Tools in Termux."
echo
echo -e "\e[32m[*] \e[34mDownloading wrapper script..."
mkdir $PREFIX/tmp/adbtemp
downpath="$PREFIX/tmp/adbtemp"
wget https://cdn.jsdelivr.net/gh/MasterDevX/Termux-ADB@master/bin/adb -P $downpath/ -q
echo -e "\e[32m[*] \e[34mDownloading binaries..."
wget https://cdn.jsdelivr.net/gh/MasterDevX/Termux-ADB@master/bin/adb.bin -P $downpath/ -q
wget https://cdn.jsdelivr.net/gh/MasterDevX/Termux-ADB@master/bin/fastboot -P $downpath/ -q
wget https://cdn.jsdelivr.net/gh/MasterDevX/Termux-ADB@master/bin/fastboot-armeabi -P $downpath/ -q
echo -e "\e[32m[*] \e[34mCopying files to bin..."
cp $downpath/* $PREFIX/bin
echo -e "\e[32m[*] \e[34mSetting execution permissions..."
files="$(ls $downpath)"
cd $PREFIX/bin
chmod +x $files
echo -e "\e[32m[*] \e[34mCreating workspace directory..."
cd $HOME
if [ ! -d "adbfiles" ]; then
  mkdir adbfiles
fi
echo -e "\e[32m[*] \e[34mCleaning up..."
cd $directory
rm -rf $downpath
rm -rf InstallTools.sh
echo
echo -e "\e[32mTools were successfully installed!\e[39m"
echo

在开发者模式中开启adb调试,执行 adb devices 即可启动服务,并且可以看到下列字样。

~ $ adb devices
List of devices attached
emulator-5554	device

emulator-5554 这只是个名字,可能你看到的会不一样,无所谓。在脚本中将 config.py 变量 LOCAL_IP 更改为这个名字即可。

安装依赖

微信推送用到了bs4和requests,插座操作则用到了python-miio,安装这个包遇到了不少问题。其中 python-miio 自己本身依赖了一个软件包 cryptography 用来编码解码,但是安装频繁出错。

第一次遇到的报错是缺少rust而无法编译,所以直接apt install rust就可以了。

第二次遇到的报错如图,也就是说编译脚本中无法识别当前系统类型。

然后经过搜索,在GitHub中找到了答案: https://github.com/termux/termux-packages/issues/8037#issuecomment-975627474

~ $ rustc -vV
rustc 1.57.0
binary: rustc
commit-hash: unknown
commit-date: unknown
host: aarch64-linux-android
release: 1.57.0
LLVM version: 13.0.0
~ $ export CARGO_BUILD_TARGET=aarch64-linux-android

先 rustc -vV 查看其输出的host,然后设置环境变量。

第三次是因为网络问题,导致没办法GitHub上下载相关文件,这个就不提了是修改host还是挂什么东西,这个问题不便回答。

解决了这三个问题,依赖算是安装好了。

计划任务

crontab打算每两分钟执行一次。

crontab -e

*/2 * * * * python $HOME/auto_power/main.py

这样就可以了,执行后可以在项目目录中查看 main.log 日志文件。

AC为充电器连接状态,CHARGE为剩余电量,STATE为充电状态,TP为电池温度。

其他方法

其实最近一直在测试上个文章提到的 ACC(Advanced Charging Controller),两部手机安装的都是魔趣安卓10版本,执行都不正常。

无论情景模式如何设置,永远是电量保持在90%无法调节,而且通过adb获取电池信息还是没有充电的状态,但是状态栏右上角电池又显示为充电状态,包括充电记录等信息全都不正确,原因未知,所以目前放弃此方法。

本来就像用这两种方法来处理,但是目前来看只能用我的"笨办法"了。

要是支持不使用电池充电器直连就好了,没找到相关操作~

文章评论