找回密码
 立即注册
搜索
查看: 7057|回复: 7

[网络] OpenWRT上的Home Assistant+HomeKit真是神坑

[复制链接]
     
发表于 2022-1-14 12:14 | 显示全部楼层 |阅读模式
本帖最后由 EraserKing 于 2022-1-14 12:16 编辑

早年玩HomeKit的时候,接入米家设备需要自己抓包,或者从手机上想办法导出token,每次加一个设备都要折腾一番,于是就放弃了
最近听闻Home Assistant(以下简称HA)里的HACS有支持MIoT协议的集成了,全自动添加设备,于是就重新折腾一下
结果发现跑在Docker里的HA的HomeKit支持,因为网络的原因,也是个深坑,搞了半天才解决
搜遍中文互联网,发现基本都是一个套路,macvlan,但是这玩意解决了HomeKit的mDNS问题,又把容器的联外网搞坏了,也不知道最后怎么搞定的,反正我是没搜到
有的说是容器用host网络,我试了,也没用,一直转圈,而且我感觉吧,这方法不安全,跑在docker里就是为了隔离
自己折腾了几个小时,看了几十篇英文教程,自己实践了半天总算是搞定了

总结如下(以下内容均假定你有足够的动手能力,遇到常见的问题能自己解决)
环境是OpenWRT,有Docker支持
如果你是别的环境,自己能解决avahi-daemon,也可以

1. 安装avahi-daemon
水果采用mDNS来发现设备,docker上面bridge类型的容器需要把mDNS请求“转发”进去才能识别

opkg update
opkg install avahi-daemon

2. 配置avahi-daemon
编辑/etc/avahi/avahi-daemon.conf
找到[reflector]节
把enable-reflector=no改成yes

3. 启动dbus和avahi-daemon,并开启自启
/etc/init.d/dbus stop
/etc/init.d/dbus start
/etc/init.d/dbus enable

/etc/init.d/avahi-daemon start
/etc/init.d/avahi-daemon enable

4. 配置防火墙
网络-防火墙-通信规则-中部的打开路由器端口
名称=mDNS,协议=UDP,外部端口=5353,按“添加”
然后往上翻一点,找到刚刚添加的记录,点“修改”
协议=UDP
源区域=任意区域

源端口=5353
目标地址=224.0.0.251
目标端口=5353
按“保存&应用”

以上4步参照此文:https://blog.christophersmart.co ... h-avahi-on-openwrt/
也许还有更简单的方法但是我没找到,以及可能设置上可以更精确一些,但是我暂时没精力研究了

5. docker里面拉home-assistant镜像,新建容器
这个就不用我说了吧,不会的话也不用折腾了
网络就选bridge就行
暴露两个端口,8123(管理页面)和21064(HomeKit端口,如果你不想用21064那你自己看着办)
我是把/config挂到了volume上,方便修改,你随意


6. 启动容器
进管理页面,基础设置略过不谈
直奔 HA管理页面 - 配置 - 设备与服务 - 添加集成 - HomeKit
如果能正常在 通知 里看到二维码,先恭喜
然后在iOS设备上用Home app去扫二维码,如果能正常添加,那就差不多可以宣告搞定了
如果一直转圈……hmmm,那大概还是哪边不对

如果你看过HomeKit集成的文档,可能你会怀疑是不是要设置ip和advertise_ip
但是这个设置就很谜:
(1)改了configuration.yaml,没作用(比如你改了port,但是实际上它还是去监听21064)
(2)我这边实测全默认设置也能工作
连进容器
docker exec -it home-assistant bash

查看端口监听情况
netstat -an | grep "21064"

显示如下
tcp        0      0 172.17.0.x:21064        0.0.0.0:*               LISTEN

所以也并不是需要改成宿主机的IP之类的

如果HomeKit能工作,剩下的就很简单了

7. 安装HACS
连进容器
docker exec -it homeassistant bash

然后在容器里
wget -O - https://raw.githubusercontent.com/hacs/install/main/install | bash -

连不上github的问题请自行解决
装完自行重启HA

8. 安装HACS的Xiaomi Miot Auto
HA管理页面 - HACS - 集成 - 搜索“Xiaomi Miot Auto” - 安装
(如果你是刚装好的HACS,可能还看不到,过10分钟再看看,让它先把库拉下来)
装完自行重启HA

9. 安装Xiaomi Miot Auto集成
HA管理页面 - 配置 - 设备与服务 - 集成 - 添加集成
搜索Xiaomi Miot Auto,安装并登录
(如果搜不到,用这个链接装:https://my.home-assistant.io/red ... ?domain=xiaomi_miot
要加哪些设备自己看着加

装完自行重启HA

10. 检查Home
应该能看到设备了,看不到的话就重启HA,然后从Home app里把Bridge删了重加一下


回复

使用道具 举报

     
发表于 2022-1-14 19:26 | 显示全部楼层
有点意思啊,等春节有空玩一下
回复

使用道具 举报

     
发表于 2022-3-20 23:05 | 显示全部楼层
本帖最后由 奶疼乃藤 于 2022-3-20 23:06 编辑

最近apple watch某版本更新后,用siri触发米家场景指令竟然需要我按三次允许,遂开始找ha的解决方案了,最新的插件不用找token比之前方便太多了,一键导入米家设备好顶赞。
我使用RaspberryPi安装的docker镜像,倒是没出现在openwrt遇到的上述问题,平滑的设置好了。【辣鸡k2p除了跑个代理其他的不行的~

原生homekit真强,局域网下Apple Watch呼唤siri触发指令到设备完成基本没有延迟。连上ipad做家居中枢,远程访问反应也很快
回复

使用道具 举报

     
发表于 2022-3-21 14:27 | 显示全部楼层
macvlan是为了解决啥问题? 外网访问?

我这确实是照着HA的官方文档,docker装在QNAP的container里,然后装好Xiaomi Miot Auto,HomeKit就能发现了。 偶尔路由重启啥的, ip之类的也都可以自动更新过去(就是不够快)。

另外有一部分设备始终是无响应的,有没有人知道是啥原因?
截屏2022-03-21 下午2.26.38.png
回复

使用道具 举报

     
 楼主| 发表于 2022-3-21 15:35 | 显示全部楼层
13号 发表于 2022-3-21 14:27
macvlan是为了解决啥问题? 外网访问?

我这确实是照着HA的官方文档,docker装在QNAP的container里,然后 ...

macvlan是为了解决mDNS的问题,但是我用avahi解决了
未响应我就不知道了,出现过,直接重启docker container就好了
回复

使用道具 举报

     
发表于 2022-3-21 15:40 | 显示全部楼层
EraserKing 发表于 2022-3-21 15:35
macvlan是为了解决mDNS的问题,但是我用avahi解决了
未响应我就不知道了,出现过,直接重启docker contai ...

网上也没找到类似我这场景的。 关键我部分开关工作的很好,部分的设备又不响应,也看不出明显的规律。
回复

使用道具 举报

     
发表于 2022-3-21 15:44 | 显示全部楼层
我在群晖上通过docker搭Home Assistant+HomeKit倒是挺简单的,容器用host网络就能正常工作
当然我没有外网访问的需求,搞就图一个水果设备充电后自动插板断电
回复

使用道具 举报

     
 楼主| 发表于 2022-3-21 15:48 | 显示全部楼层
password 发表于 2022-3-21 15:44
我在群晖上通过docker搭Home Assistant+HomeKit倒是挺简单的,容器用host网络就能正常工作
当然我没有外网 ...

不是外网访问
是容器里没法访问外网导致拉不下来库
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-11-22 06:17 , Processed in 0.038275 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表