Repository navigation
Releases: Xixixiao2007/Android_HA_Viewer
Releases · Xixixiao2007/Android_HA_Viewer
Release list
v1.4
Android_HA_Viewer v1.4
把 Home Assistant 里某一个实体的状态变化,做成 Android 手机上的实时流水列表。
为 Android 6.0 老设备设计:不经过 WebView、不依赖 Google 服务、零第三方依赖。
下载
Android_HA_Viewer-v1.4.apk—— 36.7 KB,minSdk 23 / targetSdk 23(Android 6.0+)- 桌面上显示的名字是 HA Viewer
v1.4 更新内容
修复:同一条消息显示两遍(真正的根因)
前两个版本都没修对,这次找到了根因。
Home Assistant 的历史接口会在响应开头塞一条「期初状态」 —— 也就是该时间区间开始时
仍然生效的那个值 —— 并且把它的 last_changed 设成我们请求的起始时刻,而不是这个
状态真正变更的时间。实测:
请求 start = 12:20:53
返回首条 last_changed = 12:20:53 ← 就是我请求的起始时刻
而该状态真正的变更时间是 12:19:46
而 App 的增量对账用的是 start = 最新一条变化的秒。于是这条期初状态(内容其实是
上一条消息)会顶着「最新那条消息的时间」再被插入一次 —— 表现就是:
同一段文本出现两行,时间戳不同,其中一个正好等于新消息的时间。
修法:丢弃历史响应里的首个条目。判据见 HaClient.isSyntheticStartState
(是首条 + 带完整字段 + 时间戳落在请求的起始秒上)。末条同样带完整字段,但它是真实变化,
靠「是首条」这一条排除。
对照验证(对真实 HA 跑完整的"24 小时回溯 + 3 轮增量对账"):
| 条目数 | 同名文本重复 | |
|---|---|---|
| 修之前 | 45 | 1 组(时间戳分别是真实时间与最新消息时间) |
| 修之后 | 43 | 0 组 |
去重键改回原始字符串
v1.3 曾假设「WebSocket 的时间戳带微秒、数据库会抹掉微秒」,因此把去重键改成
「秒级时间戳 + 值」。实测证明这个假设不成立:对真实 HA 抓取三条实时消息逐字段比对,
两条通道给出的 last_changed 与 state 逐字节完全相同,数据库也保留微秒。
所以去重键改回原始的 last_changed 字符串 —— 最精确,也不会把同一秒内的两次不同变化误合并。
功能
- WebSocket 实时推送,延迟约 50~150 毫秒(局域网)
- 实时断线自动重连(指数退避 1→2→4→…→30 秒),重连期间自动降级为 REST 轮询,列表不中断
- 实时在线时每 60 秒做一次 REST 对账,兜住重连空档
- 按时间倒序的变化流水,最新在最上,新记录到达自动置顶
- 关键词黑白名单:一个开关切换模式,关键词列表可增删,大小写不敏感的子串匹配
- 提示音:跟随筛选结果,用系统通知铃声(静音模式下不响),2 秒节流防连环炸响
- 纯原生界面(
ListView/EditText),不经过 WebView
安装与配置
- 下载 APK,拷到手机,开启「未知来源」后安装
- 在 HA 网页版 → 个人资料 → 安全 → 长期访问令牌 → 创建令牌,复制那串
eyJ...
(普通权限用户即可,不需要管理员) - 首次启动 App 会自动弹出设置页,填入:
- 服务器地址:如
http://homeassistant.local:8123 - 长期访问令牌
- 实体名:如
sensor.xxx
- 服务器地址:如
- 点「测试连接」验证,再点「保存」
校验值
文件 Android_HA_Viewer-v1.4.apk
大小 37,590 字节 (36.7 KB)
SHA256 7622a3224bc2135c91742ff72912d654db8fbd24ebe40ff4237c22b29a87549b
签名证书(后续版本应保持一致):
DN CN=Android Debug, O=Android, C=CN
证书 SHA-256 ee05c91196fbe605559ab77f667e936a943b19c3298a72ab92f7f914279421d9
证书 SHA-1 07f5e99b3a5ac7d7d8d637c8eccaec67fcbdac0a
环境要求
- Android 6.0 及以上
- Home Assistant 需启用
recorder组件(默认开启)——历史回溯依赖它;实时推送不依赖 - 权限:仅
INTERNET
说明
- 本应用不收集任何数据,所有通信只发生在你的手机与你的 Home Assistant 之间
- 令牌保存在手机本地的
SharedPreferences中。建议只在局域网内使用明文http://;
如需公网访问,请配置 SSL 或使用 WireGuard / Tailscale 等 VPN - 完整说明见仓库内
docs/USAGE.md
完整更新日志:CHANGELOG.md