Skip to content

Releases: Xixixiao2007/Android_HA_Viewer

Release list

v1.4

Choose a tag to compare

@Xixixiao2007 Xixixiao2007 released this 21 Sep 03:37

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

安装与配置

  1. 下载 APK,拷到手机,开启「未知来源」后安装
  2. 在 HA 网页版 → 个人资料 → 安全 → 长期访问令牌 → 创建令牌,复制那串 eyJ...
    (普通权限用户即可,不需要管理员)
  3. 首次启动 App 会自动弹出设置页,填入:
    • 服务器地址:如 http://homeassistant.local:8123
    • 长期访问令牌
    • 实体名:如 sensor.xxx
  4. 点「测试连接」验证,再点「保存」

校验值

文件    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