闲置安卓手机改造指南:用Termux打造零成本智能家居中枢
每次换新手机后,抽屉里总会多出一台"食之无味弃之可惜"的旧设备。与其让它们积灰,不如试试我这个方案——通过Termux将旧手机改造成全功能智能家居控制中心。去年我用一台退役的Galaxy S8实现了对家中12类设备的自动化控制,整套方案成本为零,却获得了媲美商业中枢的体验。
1. 硬件准备与环境配置
任何Android 7.0以上设备都能胜任这个角色,但建议选择具备红外发射功能的机型(如大部分华为、小米旗舰)。我的测试显示,配备4000mAh以上电池的设备可以持续工作72小时以上,配合充电底座更能实现永久待机。
必备工具清单:
- Termux官方应用(F-Droid渠道获取最新版)
- Termux:API插件(赋予硬件控制权限)
- Termux:Widget(快捷指令触发)
- 可选配件:USB转RJ45网口(提升网络稳定性)
pkg update && pkg upgrade pkg install termux-api termux-setup-storage # 授予文件访问权限注意:避免使用第三方修改版Termux,某些定制版本可能存在API调用限制
传感器兼容性检查命令:
termux-sensor -l正常设备应显示包括加速度计、光线传感器在内的至少5种传感器。若结果为空,可能需要检查系统权限设置。
2. 核心功能模块开发
2.1 环境感知系统搭建
利用手机内置传感器构建环境监测网络,以下Python脚本可实时采集多维数据:
import json from subprocess import check_output def get_sensor_data(): output = check_output(["termux-sensor", "-s", "light,proximity"]) data = json.loads(output) return { "illuminance": data["APDS9920-light"]["values"][0], "human_presence": data["APDS9920-proximity"]["values"][0] < 5 } while True: print(get_sensor_data())将上述脚本保存为environment_monitor.py,用nohup保持后台运行:
nohup python environment_monitor.py > monitor.log &2.2 红外遥控中枢实现
针对空调、电视等红外设备,需要先学习原始遥控信号。使用termux-infrared-frequencies获取支持频段后,按此流程录制信号:
- 准备原始遥控器对准手机红外发射器
- 执行录制命令:
termux-infrared-transmit -f 38000 - 在5秒内按下遥控器按键
测试发现,多数设备的控制码在3次重复录制后能达到95%以上的识别准确率。建议将常用指令保存为Shell脚本:
#!/data/data/com.termux/files/usr/bin/bash # 空调26℃制冷模式 termux-infrared-transmit -f 38000 <<EOF 0000 006D 0022 0002 0155 00AA 0015 0040... EOF2.3 智能通知系统集成
通过Tasker与Termux联动,可以实现复杂场景触发。比如当传感器检测到室内光线持续暗淡且无人时,自动关闭所有灯光并发送安防提醒:
const axios = require('axios'); const { execSync } = require('child_process'); function checkEnvironment() { const sensor = JSON.parse(execSync('termux-sensor -s light,proximity')); if (sensor.light < 10 && !sensor.proximity) { execSync('termux-notification -t "安防提醒" -c "检测到异常环境状态"'); axios.post('https://api.alert.com/trigger', { device: 'living_room', event: 'lights_off' }); } } setInterval(checkEnvironment, 300000);3. 自动化规则引擎设计
3.1 基于时间的场景配置
利用Termux的作业调度功能实现精准定时控制。以下配置使客厅灯光在工作日7:00自动开启:
termux-job-scheduler \ --script ~/scripts/morning_routine.sh \ --period-ms 86400000 \ --trigger-content-uri "content://com.android.calendar" \ --trigger-content-flag 1配套的morning_routine.sh脚本示例:
#!/data/data/com.termux/files/usr/bin/bash current_hour=$(date +%H) if [ "$current_hour" -eq 7 ]; then termux-infrared-transmit -f 38000 < living_room_light_on.code fi3.2 条件触发式自动化
结合传感器数据与设备状态实现智能响应。这张决策表展示了典型场景的逻辑组合:
| 触发条件 | 设备响应 | 附加动作 |
|---|---|---|
| 光线<15lux且有人 | 开启氛围灯50%亮度 | 播放欢迎语音 |
| 温度>28℃且湿度>70% | 空调开启除湿模式 | 推送通知建议关闭窗户 |
| 工作日8:00-18:00无人在家 | 启动安防监控 | 每2小时拍摄环境照片 |
实现上述逻辑的Node-RED流配置要点:
- 安装
node-red-contrib-termux插件 - 添加MQTT节点接收传感器数据
- 配置Switch节点实现条件分支
- 用Exec节点调用Termux命令
4. 系统优化与高级技巧
4.1 能耗控制方案
通过以下手段可使待机功耗降低至200mW以下:
- 启用Android原生的省电模式
- 设置CPU调频策略:
su -c "echo 'powersave' > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" - 禁用非必要传感器轮询
- 使用WakeLock保持必要服务:
from android import Android droid = Android() droid.wakeLockAcquirePartial()
4.2 故障恢复机制
建议在~/.termux/boot/目录下添加自启动脚本,包含以下恢复逻辑:
#!/data/data/com.termux/files/usr/bin/bash ping -c 1 8.8.8.8 || { termux-wifi-enable false sleep 5 termux-wifi-enable true termux-toast -g top "网络已重置" } [ -f /tmp/env_monitor.pid ] || { nohup python ~/scripts/environment_monitor.py > /dev/null & }4.3 扩展可能性
进阶用户可以考虑:
- 通过USB OTG连接Zigbee/Z-Wave适配器扩展协议支持
- 利用Termux的USB API对接Arduino开发板
- 编译自定义内核模块启用GPIO控制
- 搭建Web界面实现远程控制:
pkg install nginx php cp -r ~/control_panel /data/data/com.termux/files/usr/share/nginx/html
实际部署中发现,2017年后发布的设备红外发射功率普遍足够覆盖20㎡空间。对于复式结构,建议每层部署一个节点并通过MQTT同步状态。某次系统升级后,所有红外指令突然失效,最后发现是Android电源管理限制了红外模块,在开发者选项中关闭"暂停执行缓存应用"后恢复正常。