ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

我给 Home Assistant 写了个墙上的平板

我给 Home Assistant 写了个墙上的平板

小新Pad 2022,6+128。买回来就想让它一直开着家里的 Home Assistant。路过看一眼:几点了,天气怎么样,电费还剩多少,摄像头有没有在录。

官方 App 和 Fully Kiosk 都能开网页。我要的是这块屏自己管自己:全屏、人来亮、人走暗、页面别死在旧缓存里,人在别的房间还能看见它还活着。Fully Kiosk都能实现,但是要钱,在AI加持的今天,用AI撸一个出来多方便,所以我就写了一个。名字叫 HA 智能面板(HAPanel)。

它是一个全屏浏览器,专门拿来常驻显示 Home Assistant。状态栏和导航栏藏起来,屏幕保持亮着。第一次打开先填地址,旁边可以扫一下家里谁开着 8123,点结果就填进去。地址没填对之前,进不了页面。

下面按我家里实际在用的几件事说。每张设置卡片右上角有个问号,点开就是这项怎么用。

墙上平时看到的

人在旁边的时候,全屏就是我自己做的家居页。登录框、输入框还能打字。其余地方捏合缩放、长按出菜单、选中文字,都关掉了,免得擦屏幕的时候把页面拉变形。页面如果是按固定像素排的,会缩进屏幕里,不会有一块跑到外面。

网页打不开时,不白屏干等。本机会出一张等待页,分开告诉你:没网、地址没开、还是证书不被信任。证书有问题就停在那里,不会偷偷忽略。网络恢复后马上再试。连上以后回到刚才那一页。

从画面顶部往下拉,页面会跟着挪开一条缝。拉够了松手,清掉缓存,重新加载当前这一页,已经保存的首页地址不动。拉不够就弹回去。登录留下的 Cookie 和本地存储,刷新时都留着。

没人之后

没人持续到设定的秒数,我这里是 60 秒,亮度降到待机,再盖上屏保。屏保上是时间、日期、农历。天气从 Home Assistant 里已有的天气拿,读不到就不画,不编一个温度。农历和天气可以单独关掉,时间和日期一直在。屏保亮度单独拉,只有屏保盖着的时候才用这个亮度。

点一下只把屏保揭掉,点不到下面的灯和空调。把「无人后降亮度」填成 0,就一直保持观看亮度,也不出屏保。屏保总开关关掉之后,不再盖这一层,变暗和夜间熄屏还按原来的规则走。

设置藏在左边缘

设置不放按钮在页面上。手指贴着屏幕最左边,向右滑一段,才出来。轻轻点一下左边缘,还是交给网页,不会误开。点面板外面,或者在面板上向左滑,就关上。

设了 4 到 8 位数字密码的话,滑出来要先输入。这个密码只挡本机设置,MQTT 和局域网接口不用它。不设密码就直接进。改密码或取消密码,都要点「保存密码」,离开输入框不会自己存。已经设过的,不会回填到框里。

面板顶上是这块屏现在的状态:亮没亮、有没有人、当前亮度、电量、MQTT 通不通、锁定开没开,还有 CPU、内存、存储、应用内存、电池温度。CPU 刚开机那一下还没百分比,过几秒采样完才有。

下面是首页网址。可以手填,也可以扫局域网,还可以用长期访问令牌把 Home Assistant 里的仪表盘列出来,点一个就设成首页。

页面什么时候自己刷新,也在这张卡片里。

空闲重新加载按小时算。这段时间没人碰,就清缓存重载一次;一直没人碰,就按同样的间隔继续。我默认想的是 12 小时,填 0 就关掉,最长 720 小时。

加载失败重试是页面打不开之后隔多少秒再试,默认 30 秒。填 0 的话,等待页仍大约每 30 秒试一次。

页面无响应后重载是看门狗。页面一直转圈,或者打开之后脚本不再回应,超过设定的秒数就清缓存回到首页。默认关着。设置开着的时候不触发。

每天固定时刻刷新默认关着。打开后选小时和分钟,到点刷新一次,同一天只刷一次。我留的默认时刻是凌晨 3 点。设置开着的那一分钟不会刷。

「立即刷新」清缓存重载当前页,然后把设置收起来。「回到首页」打开已经保存的那个地址,不改首页本身。从 HA 或局域网发「打开页面」,也是临时打开一个网址,不动首页。

大部分项离开输入框就保存,开关一拨就保存。百分比是拖动条,松手才存。小时不能手打,点一下弹出 0 到 23,确认才写入。填错的数字会标出来,不会写进去。MQTT 那张卡例外,要点「保存并同步」才生效。

设置可以导出成一个 JSON,再导回来。文件里有 MQTT 密码、局域网密码、设置密码和访问令牌,只能放在自己机器上。

亮度、人来人走、夜里熄屏

亮度只压这个 App 的窗口,不去改系统亮度。有人看的时候用观看亮度,1 到 100。没人之后用待机亮度,0 是最暗。

还可以按钟点换。打开「按时间切换亮度」之后,有人时白天用一个亮度,夜里用另一个。白天几点开始、夜里几点开始,各选一个小时。人走了、也过了降亮度的时间,还是回到待机亮度。我自己没开这一项,屏保和待机亮度已经够用。

有没有人,靠前置摄像头看画面变不变。分辨率很低,算完就丢,不保存,不上传,也没有一个实时画面给你看。灵敏度 0 到 100,0 就是关掉,数字越大越容易被带着走。检测到之后,还会把「有人」再保持几秒,免得人站着不动立刻被当成离开。打开设置时摄像头暂停。左上角那个绿点是系统自己的指示,关不掉。

夜里可以再加一段熄屏。在开始小时到结束小时之间,没人、设置也关着,就把屏幕灭掉。离开这个时段会重新点亮。开始和结束选同一个小时,等于不熄。开始比结束晚,就是跨过午夜,比如 23 点到 7 点。熄屏之后摄像头还在看,有人就再点亮。

这件事要本应用已经是设备所有者才灭得掉。还不是的话,开关可以存着,屏幕不会灭。

说话,以及让它出声

语音助手默认关着。打开并允许麦克风之后,本机听唤醒词 okay nabu,会面添加支持中文唤醒词。听到了就点亮屏幕,把接下来那一句交给首页地址上的 Home Assistant Assist。右下角有个按钮,不想说唤醒词就点一下直接说。灵敏度拉到 0,就不听唤醒词,只留这个按钮。

唤醒词在平板上判断。只有后面那一句才送出去。回答下载下来用媒体音量播。正在播的时候暂停听唤醒词,免得它听见自己的声音又唤醒一次。说话和等待回答的这段时间,屏幕保持亮,待机往后推。

它能控什么,看 Home Assistant 里语音助手能看见什么。我先用暴露出来的模拟设备试过开关和温度。令牌要先在「选择仪表盘」里存好,没有令牌它不会听。

媒体音量是 0 到 100 的拖动条,松手就写进系统的媒体音量。远程让它播一段音频、或者念一句文字,出声用的也是这个音量。

画面上还可以弹一条通知,出在应用里面的顶部,大约 8 秒自己消失。用来从别的房间丢一句「饭好了」这类短话。

从 Home Assistant 里管这块屏

MQTT 连的是代理,不是网页地址。网页地址在上面的首页里。主机填代理那台机器,不要写 http://。端口默认 1883。用户名密码是代理账号。打开开关之后,要点「保存并同步」,下面会告诉你正在连哪里,成功还是失败。

Home Assistant 官方那个 Mosquitto,我踩过一次。选项里加了账号,只点添加,一切到别的页面那一行就丢了。必须滑到最底下点保存。平板里填的要和这一行一样,日志里出现这台平板的用户名连上,HA 里才持续有数。

连上之后,到「设置 → 设备与服务 → MQTT」,能看到一台设备。中文界面下名字是「HA 智能面板」。

能看到的状态:亮没亮、有没有人靠近、在不在充电、是不是在待机、内存紧不紧、电量、充电状态、当前亮度、当前打开的网址、平板自己的地址、应用版本、型号、安卓版本。允许读取 Wi-Fi 名称之后,还有 Wi-Fi 名字和信号。另外有 CPU、内存、存储、应用占用了多少内存、电池温度。

能改的数:观看亮度、待机亮度、无人后再过多久降亮度、白天亮度、夜间亮度、媒体音量、每天几点几分刷新、熄屏从几点到几点、页面看门狗多少秒。

能拨的开关:人体检测、锁定模式、按时间换亮度、每天刷新、夜间熄屏。

能按的按钮:马上刷新、把屏幕唤醒、熄屏、回到首页、截一张屏。截图是当前窗口压成的 JPEG,送到 MQTT 的摄像头主题,HA 里当一张相机图看。还有重启平板,这一项只有设备所有者才会出现。

能发的文字:打开一个页面、在画面上显示一行通知、念一句语音、播放一个 http 或 https 的音频。网址和音频地址最长大约 2000 字,通知和念的那句最长大约 200 字。空的、太长的,直接丢掉。

状态有变化会马上报。另外可以按秒再报一次,默认 60 秒,填 0 就只在变化时报。平板断线之后,HA 里会看到它离线。HA 自己重启上线时,平板会把注册信息再发一遍。

家里电脑直接喊它

同一局域网里,也可以不经过 MQTT。设置里打开局域网管理,设一个至少 8 位的密码,默认端口 2323。密码放在请求头里,不写在网址上。只接受本机和家里的局域网地址,外面的地址拒绝。这是明文 HTTP,只适合自己家里。

这样做的事和 MQTT 那一头大体一样:看状态、刷新、点亮、回首页、打开页面、调亮度、熄屏、截屏、弹通知、念一句、改音量、放音频、改刷新和熄屏、重启。熄屏和重启同样要设备所有者,否则它会拒绝。

把它钉在这块平板上

开机、或者应用更新之后,它会自己起来。还不是设备所有者时,要在系统那一组里点「允许开机自动打开」,并给「显示在其他应用上层」。电池优化没有设备所有者接口,第一次仍要在系统提示里手动允许一次,后台的 MQTT 和局域网才不容易被杀掉。

设成设备所有者之后,多出来这几件:锁定任务,把它固定成桌面,自动给摄像头权限,关掉系统锁屏,夜里用系统的方式熄屏,以及远程重启。前提是平板上没有登录任何账号,也没有别的设备所有者。

锁定打开时,Home、多任务、下拉状态栏进不去,系统设置也进不去。要进系统设置,先把锁定关掉。我自己设完所有者之后,别的 App 一度打不开,所以面板里有「解除锁定」。它会退出锁定、取消固定桌面,并试着取消设备所有者。系统如果不肯取消,锁定仍然解开,别的应用可以打开。再打开锁定,又会固定回去。

设置标题旁边有一个语言按钮,中文界面写「中文」,英文界面写「EN」,点一下换成另一种。选定之后只换已经打开的设置面板上的字,不重载网页。主界面和语音要等下次启动再用新语言。还没选过的时候跟系统:系统是英语就用英语,否则用简体中文。

设置里可以对照 GitHub 上的最新正式包检查更新。锁定开着的时候,安装前要先关掉锁定。

代码

这些都是给我自己这块屏用的。代码在 GitHub,仓库叫 ha-kiosk-browser:

https://github.com/YyyQq-C/ha-kiosk-browser

更多资料说明都在github上,喜欢或者对你有帮助的就点个星星吧。

最低安卓 11。我是对着这台小新 Pad 2022 调的,别的牌子我没逐台试过。

往期推荐:

我把家里的控客接进了 Home Assistant:空调、地暖、新风,终于能在一个屏幕上控制了

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进