本帖最后由 ttimasdf 于 2019-12-30 11:39 编辑
前言论坛首发哦~ 根据 HA官方文档,对连接OpenWRT路由器的设备跟踪,我们有三种方式,一个是基于ubus RPC的定时拉取,一个是基于luci API的定时拉取,还有一种是基于hostapd事件的推送。基于定时拉取的方式,坛子里有人提过( 基于RPC的, 基于MQTT的),缺点人家文档里也提过,查询对路由器来说,那就是 CPU负载哇。而且还要往路由器上装额外的库,占地方。 但文档里提的第三种方式,基于hostapd Wi-Fi连接事件的device tracker, 原版的脚本(位于Github:mueslo/openwrt_hass_devicetracker)有很多问题,我试了一下基本没法用。因为新Wifi设备连接事件触发时,IP地址还没有分配,而设备名字只有在设备发送DHCP request之后才能获取到,所以推送到Home Assistant的时候只有光秃秃一个mac。然而第二次连接的时候又能获取到mac了,最后我们就会拥有两个名字不一样的device tracker,一个是mac地址命名的,一个是hostname命名的…… 所以我对这个脚本做了一些改进,除了hostapd的事件之外,还监听了dnsmasq的事件。dnsmasq发的消息中,一定会告诉我们这个设备的MAC地址、IP地址和hostname,这样推过去的消息就完整了。 功能与优势继承自原版的优势: - 延迟极低,Wi-Fi连接后,在线状态实时推送。断开连接后3分钟报告设备断开(超时时间可配置)。
- 没有后台进程,推送时系统会拉起一个shell脚本,执行后退出
- 占用空间小,本体就是几个shell脚本。但这个说法不准确,因为依赖curl,如果你的HA服务器是https的话,还需要ustream-ssl。Github中有基于netcat的实现,还没merge进主仓库。
我实现的新功能: - 监听dnsmasq事件,即使IP变化也能获取到设备的hostname,原版这里会触发bug
- 增加whitelist白名单功能,只推送指定设备的事件,其他设备忽略
- 过滤无效事件,如果获取不到hostname就不推送,这样避免同一个设备在HA中出现两个device_tracker。
- 增加curl_insecure跳过SSL校验功能。因为我家内网和外网的域名是不一样的……不过后来我改hosts给绕过了。
使用方法安装原版的ipk。(见附件) 用下面的functions.sh 替换路由器中 /usr/lib/hass-tracker/functions.sh (劳资懒得打包……) 在Home Assistant中新建一个长期访问令牌,复制下来,粘贴到下面文件的token字段。 编辑 /etc/config/hass-tracker ,取消对应的注释就代表启用相应的功能。
config hass-tracker 'global'
option host 'http://your-ha-instance.lan:8123'
option token 'long-time-token'
option timeout_conn '24:00'
option timeout_disc '00:03'
#option whitelist 'phone1 phone2 laptop'
#option curl_insecure 1
解释一下参数。 - timeout_conn:Wi-Fi连接事件、DHCP连接事件会向HA报告一次设备的在线状态,比如上面的配置中,一个设备连接后,脚本会推送设备在线,持续24小时,24小时后,在线状态会自动转变为离开。
- timeout_disc:Wifi断开连接会向HA报告一次状态。脚本会推送一个持续3分钟的在线状态,3分钟后,设备状态转换为离开。
- whitelist:白名单,里面是空格隔开的,Wi-Fi主机名。这个主机名可以在Luci的DHCP/DNS那个页面获得。应该是区分大小写的吧,反正我的设备名字都是小写,没测试。
- curl_insecure:让curl不检查证书。过期呀、主机名不匹配啥的统统不管。
5. 注册dnsmasq事件。
echo "dhcp-script=/usr/lib/hass-tracker/push_event.sh" >> /etc/dnsmasq.conf
6. 启动
/etc/init.d/hass-tracker enable
/etc/init.d/hass-tracker start
/etc/init.d/dnsmasq restart
完成! 如果怕漏掉事件,想要增加轮询功能,可以参考 说明文档的最后一段,照着搞就行了。这里不再赘述。 然后在HA里就可以看到效果咯。
源代码:
https://github.com/ttimasdf/openwrt_hass_devicetracker
说好的论坛支持markdown呢……这格式改的我脑壳疼
|