HA + Pi 系列从公开至今,群众反响热烈,成功者不少,但挫败者亦有。考虑到版面的整洁性,我已经关闭系列的评论权限,特别在此以文章的形式呈现一篇答疑篇,开启此篇文章的评论区,集中大家的问题,并给出 HA + HB 日常维护的建议。

求人不如求己

希望大家在遇到问题时,先进行自力救济,穷尽力所能及的渠道后,再去询问别人。以下是我整理的常见的参考资源,配合一定的搜索技巧和英语能力,基本上都能解决疑问:


系统更新

Home Assistant

HA 的更新方法跟随安装方法各不相同,我在安装篇中均有涉及,这里特别提取出来,方便大家参考。

注意:为了保证国内用户的更新速度,我特别在更新指令中明确了 Pypi 源,海外的派友可以忽略。此外以下命令均使用 sudo 权限。

All-in-One

sudo systemctl stop home-assistant.service
sudo su -s /bin/bash homeassistant
source /srv/homeassistant/homeassistant_venv/bin/activate
pip3 install --upgrade homeassistant -i https://pypi.doubanio.com/simple/
exit
sudo system start home-assistant.service

Hassbian

sudo systemctl stop home-assistant@homeassistant.service
sudo su -s /bin/bash homeassistant
source /srv/homeassistant/bin/activate
pip3 install --upgrade homeassistant -i https://pypi.doubanio.com/simple/ 
exit
sudo systemctl start home-assistant@homeassistant.service

Hass.io

系统有更新时,将自动出现如下提示:

null

小手一点 UPDATE,等转圈完,就更新成功了。

Homebridge

HB 及其组件的更新是在 Node.js 框架内进行的,使用 sudo npm upgrade -g 包名 相关命令即可完成,常用的包有:

  • homebridge
  • homebridge-yeelight
  • homebridge-mi-aqara
  • homebridge-homeassistant
  • homebridge-mi-acpartner
  • homebridge-mi-airpurifier
  • homebridge-mi-philips-light

具体的配置方法可在 Github 里直接搜索插件名获取。

国内派友可以转用淘宝镜像源:

npm config set registry https://registry.npm.taobao.org

日志监测

系统日志是 Debug 的核心参考文件,希望大家遇到问题学会第一时间查看 Log,定位问题。同时在向人提问时,附上相关的 log,也是良好的提问习惯。

当我们把 HB&HA 添加进系统后台自启项目后,便可以直接通过 systemctl 命令进行打开、关闭、重启、查询系统服务日志等一系列操作,常见的命令有:

  • 启动:systemctl start 服务名
  • 终止:systemctl stop 服务名
  • 重启:systemctl restart 服务名
  • 查询服务状态:systemctl status 服务名 -l
  • 查询日志:journalctl -u 服务名
  • 列出所有服务:systemctl list-unit-files --type=service

经常使用的服务有:

  • homebridge
  • home-assistant.service (Raspbian)
  • home-assistant@homeassistant.service (Hassbian)
  • appdaemon@appdaemon.service (HADashborad)
  • samba (SMB)

另外还可以使用下述指令追踪所有服务日志: tail -F /var/log/daemon.log

(再讲下去要变成 Linux 大讲堂了)

除了通过 systemctl 查询日志,HA 查看日志的方法比较多样,最直观的就是在系统前端的 dev-info 面板查看。日志文件存放在配置文件所在的文件夹中,home-assistant.log文件便是。HB 如若手动开启,默认在终端中滚动显示实时日志。


Q&A

  1. HB 端口被占用

    events.js:160 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE :::51826 at Object.exports._errnoException

    出现上述错误的原因是用户在添加 HB 为自启任务的情况下,手动开启 HB。通俗来说就是你在同一端口试图开启 2 个 HB,因此显示端口被占用。

    解决办法就是无需重复开启 HB,直接使用上面提及的指令重启已开启的 HB 服务即可;或者关闭已开启的 HB,再使用 homebridge 手动开启新的 HB 服务。

  2. 成功安装 HB + HA 并在家庭 app 添加“桥”后,显示无设备

    这是由于 HB-HA 插件更新导致的,最新的插件中,HB 的 config.json配置文件增加了一项设置 "default_visibility":"visible",在 2.3.1 版本前默认是隐藏的,因此就出现了所有设备被隐藏的情况。解决方法非常简单,将 HB-HA 插件更新到最新版本即可,默认会自动添加以上指令,大家也可以手动添加。

  3. HA 配置文件格式错误

    需要再次提醒的是,yaml文档非常强调代码的格式,因此请大家额外重视空格、换行、-号的使用。一般来说,在最新 HA 系统中,如果配置文件格式出现错误,首页中会出现如下提示:

    null

    同时结合 Log,可以快速定位出错的位置。

  4. 格式正确,无法添加小米网关

    很多情况下,这表明你的格式并不正确 :( ,常见的错误有:

    • key 大小写问题
    • mac 的 : 号问题

      另,小米平台在 0.53 之后的更新中统一为 2 个 接入方式:Zigbee 设备统一使用 xiaomi_aqara;WiFi 设备统一使用 xiaomi_miio,请注意区别。

  5. 设备在家庭 app 中重复出现

    出现此错误的原因是用户将同一设备同时接入了 HA 和 HB,那么 Homekit 就会通过 HB-HA 插件识别一次设备,后再通过 HB 的其他相关插件识别一次设备,最终导致重复识别添加。

    解决方法就是在 HA 配置文件 configuration.yamlcustomize模块中找到对应设备,添加 homebridge_hidden: true 设置,之后重启 HA、HB 服务即可。如果仍未生效,请清除 HB 缓存后重试。 更具体的设置方法,欢迎参考系列的"个性化配置篇"

  6. 平面图在 iOS 及 macOS 中显示 script error

    由于之前代码未跟进 Polymer 2.0 框架,导致 Apple Webkit 载入错误。目前作者已经修复了这个问题,请大家前往 Github 下载最新的源码。

  7. HA 或者 HB 配置文件进行改动后,没有生效
    如果你在 HA 进行了有关 HB 的配置变更,如设置 homebridge_hidden 等属性或者对 HB 的 config.json 文件进行了修改。修改后首先需要做的是重启 HB,清除 iOS 家庭 app 的后台。重新打开 app,如若发现配置尚未生效,就需要考虑清除 HB 的缓存:

    sudo rm -rf /home/pi/.homebridge/persist/
    

    需要注意的是清除缓存将导致先前所有在家庭 app 内的分组命名等操作失效。
    之后重启 HB,配置应该就如期生效了。

  8. 在 HB 中删除“桥”后无法再添加或嗅探到
    发生此问题的原因是,系统已经对你的设备和配置有了记忆,因此需要删除有关缓存。
    首先,使用和 『问题7』同样的操作,清理 HB 缓存,重开 APP,确认是否可以添加。
    如果该方法依旧不能解决问题,则打开 HB 的配置文件 config.json,将开头的 username 项类似 mac 地址的字符串更改几个数字,之后同样清除缓存,重启 HB,重开 app。

  9. Apple Home 可以实现外网控制吗?
    可以,实现外网控制需要一台处于内网环境下的 Apple TV (3代及以上)或者 iPad 当做『家庭中枢』。如果需要使用 家庭 App 自带的『自动化设置』功能,则只有 第 4 代 Apple TV 支持。

  10. 安装不完整导致 dns 服务器错误
    如果启动 HB 后遇到如下错误:

module.js:328
    throw err;
    ^

Error: Cannot find module '../build/Release/dns_sd_bindings'
    at Function.Module._resolveFilename (module.js:326:15)
    at Function.Module._load (module.js:277:25)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/homebridge/node_modules/mdns/lib/dns_sd.js:32:22)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Module.require (module.js:354:17)

请操作如下指令:

cd /usr/local/lib/node_modules/homebridge
sudo npm install --unsafe-perm mdns
sudo npm rebuild --unsafe-perm

以上是比较普遍出现在派友中的问题,我也将不断更新,大家亦可通过评论及其他渠道反映个人遇到的困难。


更新日志

  • 12月09日:添加『问题10』
  • 10月30日:添加『问题9』
  • 10月20日:添加『问题7』与『问题8』

作者的话

距离我发布本系列首篇文章至今已经快半年了,系列至今已有 10 篇教程。无独有偶,JailbreakHum在 《少数派季度作者颁奖礼开场发言》所阐述的『内容调整』的观点恰恰与我的初衷十分契合。可以说从一开始,我就在整个系列中尽量保证内容的入门性,也在现实中帮助了很多派友成功搭建系统。

在和派友的互动中我意识到碍于英文水平的局限,很多人无法进一步地享受 Home Assistant 带来的便利。鉴于此,我个人独立制作了一份更接地气的 中文文档 ,目前仍处于雏形阶段,还在快马加鞭中,希望可以帮助到更多的人,欢迎大家阅读+收藏。

良好的体验需要良性的互动维持,为了保持版面的整洁,请大家不要在系列所有文章下方评论区 PO 整段的错误代码。遇到问题请至本篇集中评论。


最后,欢迎大家关注【少数派】的最新专栏 —— 《明明白白玩派》,之后我的相关文章都将投稿至此专栏,也期待新专栏能够给大家玩派带来启发与收获~