我如何使用 100 行 Flask 从云服务器控制我的 Android 手机
Source: Dev.to
问题
大多数跨设备自动化都迫使你在以下两者之间做选择:
- 太简单: 硬编码的 cron 任务,缺乏协同
- 太复杂: Redis、RabbitMQ、Firebase —— 为一个简单的通知构建完整基础设施
我只想让我的云脚本说一句 “嘿,震动我的手机”。仅此而已。
工作原理
Intent Bus 是一个基于 SQLite 的小型 Flask 应用。它只有一个职责:让脚本发布任务,让工作者认领并执行这些任务。
步骤 1 — 云脚本发布意图
curl -X POST https://your-bus.pythonanywhere.com/intent \
-H "Content-Type: application/json" \
-H "X-API-Key: your_key_here" \
-d '{"goal":"send_notification","payload":{"message":"Scrape complete"}}'
步骤 2 — Termux 工作者认领任务
在手机上运行的 Bash 脚本每 10 秒轮询一次总线。当它发现任务时,会使用原子锁认领任务,执行后标记为已完成。
步骤 3 — 手机震动
termux-notification --title "System Update" --content "$MESSAGE"
这就是完整的流程。
可靠性的关键
- 原子锁定 – SQLite 的
UPDATE加行计数检查,确保即使有多个工作者同时运行,也只有一个工作者能够认领同一任务。 - 可见性超时 – 如果工作者在任务执行中崩溃,锁会在 60 秒后失效,任务会自动返回队列。
- 主题路由 – 工作者只会认领与其
goal匹配的任务(通过?goal=)。通知工作者永远不会误拿日志任务。
架构图
Cloud Scraper (PythonAnywhere)
|
| POST /intent
↓
Intent Bus (Flask + SQLite)
|
| claim + fulfill
↓
Termux Worker (Android Phone)
|
| termux-notification
↓
📱 Phone Notification
能做什么
因为总线仅是 HTTP,任何地方的脚本都可以发布或认领任务:
- 爬虫完成 → 通知手机
- 网站宕机 → 警报发送到 Discord
- GitHub 推送 → 触发防火墙后面的家用 Raspberry Pi 部署
- 旧 Android 手机 → 通过
termux-sms-send替代 Twilio
安全性
在公开此项目后,大家立刻对开放的端点进行压力测试。我加入了 API‑key 认证——密钥存放在 PythonAnywhere 的 WSGI 环境变量中,永不写入仓库。工作者从本地 .apikey 文件读取密钥。
试一试
完整代码、规范和示例均在 GitHub 上:
https://github.com/dsecurity49/Intent-Bus
它可以免费运行在 PythonAnywhere + 任意装有 Termux 的 Android 手机上。无需 Docker,也没有除 Flask 之外的依赖。
如果你为它编写了工作者脚本,欢迎提交 PR。