本帖最后由 小灰 于 2019-5-6 18:24 编辑
上一次折腾homeassistant之后,由于比较忙,就没管过了,最近再来折腾,系统已经由0.8+变成0.9+了,很多都用不了,折腾了好几天,插件陆陆续续开始用起来,DLNA音箱一直无法接入,直到看到huex在一个贴子里的回复,但是有点简略,看了一些博客资料,才把这个弄清楚,并成功的把斐讯R1接入hass,先把它放出来供大家参考,理论上是可用于大部分的DLNA设备吧。需要用抓包的方法解决。
前言:官方DLNA使用方法
通常情况下,在configuration.yaml配置文件中加入如下代码就可以发现一部分的DLNA设备,详情见官方文档
discovery:
enable:
- dlna_dmr
当有的设备发现不了,可以通过增加dlna_dmr的方式解决:
media_player:
- platform: dlna_dmr
url: http://192.168.0.10:9197/description.xml
其中的url我尝试过使用ip加端口,但是只成功一次,过一会儿就没了,就像huex说的那样,url通常是不固定的,需要的是DLNA的通告地址,这个是固定的,所以,下边的教程都是关于获取DLNA的通告地址的。
第一步:抓包
首先确认DLNA设备IP地址,在路由器里将其固定,例如我给它设定的IP是 222.222.222.6 ,抓包工具挺多的,我用的是路由器抓包,使用tcpdump,putty进入路由器系统,输入指令: tcpdump host 222.222.222.6 -w r1.pcap 其中 222.222.222.6替换成你自己的DLNA设备ip,r1.pcap中r1为你保存的包的名字,后缀为pcap。输入指令过了一段时间就可以通过 Ctrl 加 C 结束,我大概是十多二十秒就结束这个了,这样抓包就完成了。(tcpdump功能很强大,我只会简单的使用,大神可以自定义,可以获取指定端口,指定大小的包等等)
第二步:wireshark分析包文件
首先使用winscp等工具从路由器里把保存的r1.pcap文件拷出来,也可以通过其他途径,自己整。
然后直接把r1.pcap文件拖到wireshark就可以了。
从中可以看到各种通信协议,选择其中一个SSDP协议的,选中后下边的框框中选择Simple Service Discovery Protocol,往下可以看到Location,那个就是通信地址。
另外还可以在SSDP那一条右键,选择追踪流,UDP流,然后就可以看到通告地址,即Location。
所以,我的DLNA设备通告地址为: http://222.222.222.6:39620/description.xml
我的配置文件如下:
discovery:
media_player:
- platform: dlna_dmr
url: http://222.222.222.6:39620/description.xml
因为我直接使用通告地址,没开启自动发现,所以,discovery那里不用配置。
这次时间不够,写的有点乱,大家将就看看,后边再整理,我做实验去了。。。。。。
|