Kbsa 通过 Mdns 发现 Shelly 设备

通过mDNS发现Shelly设备

mDNS.png

Shelly设备(如许多现代智能家居设备)通过mDNS(多播DNS)在本地网络上进行自我广播。在本文中,我们将解释:

  1. 什么是mDNS 以及 Shelly 设备如何使用它

  2. 如何通过mDNS发现Shelly设备(包括命令行工具)

  3. 使用 Python 进行自动发现(链接到我们的示例脚本)

  4. 故障排除与技巧

什么是mDNS?

mDNS(多播DNS)是一种在RFC 6762中定义的协议,允许设备在LAN(局域网)上相互发现无需中央 DNS 服务器。它通过在UDP 端口 5353 到一个多播组。常见的mDNS实现包括 上发送和接收类似 DNS 的查询来实现。苹果的 Bonjour和 Linux 上的Avahi

为什么这对 Shelly 设备很重要? 因为每个 Shelly 设备都会使用特定的服务类型(_shelly._tcp.local.),任何支持mDNS的工具都可以检测到这些广播,并显示如IP地址和固件版本等详细信息,而且由于mDNS通常与 DNS-SD(有时称为其“表亲”)提供了一种按类型(例如_shelly._tcp.local.),所以此功能对 Shelly 设备尤为重要。

如何通过mDNS发现Shelly设备

Shelly的mDNS服务类型

Shelly 设备会在此服务类型下进行广播:

)广告和浏览服务的结构化方法。
代码

默认情况下,每个 Shelly 设备会公告:

  • _shelly._tcp.local.实例名称(服务名称):通常看起来像

  • shelly2pmg4-7c2c67640b38._shelly._tcp.local.主机名(服务器)(例如)

  • Shelly2PMG4-7C2C67640B38.local.

  • IP 地址端口)

  • 80TXT 记录

    • 包含关键属性:gen:代数(例如)

    • 4app:设备名称/型号(例如)

    • ver: Firmware版本(例如,S2PMG4)

1.5.99

命令行发现工具

  1. macOS:dns-sd 对于 Shelly 服务:

浏览
代码

你会看到 Shelly 设备的显示。

  1. dns-sd -B _shelly._tcp解析

特定设备以查看详细的 TXT 记录:
代码

dns-sd -L "shelly2pmg4-7c2c67640b38" _shelly._tcp local

你会看到类似:
代码

Lookup shelly2pmg4-7c2c67640b38._shelly._tcp.local DATE: ---Fri 21 Feb 2025--- 10:38:08.309 ...STARTING... 10:38:08.611 shelly2pmg4-7c2c67640b38._shelly._tcp.local. can be reached at Shelly2PMG4-7C2C67640B38.local.:80 (interface 24) gen=4 app=S2PMG4 ver=1.5.99

  1. Linux:avahi-browse如有必要,安装:

代码
sudo apt-get update sudo apt-get install avahi-utils
  1. 浏览查找_shelly._tcp服务:

代码
avahi-browse --resolve --terminate --parsable _shelly._tcp | grep "^="

这会以表格形式显示每个 Shelly 设备的 IP、端口和 TXT 数据(包括 gen、app、ver)。你会看到类似如下内容:

代码
=;eth0;IPv4;ShellyWallDisplay-00A90BA7352B;_shelly._tcp;local;ShellyWallDisplay-00A90BA7352B.local;192.168.1.134;80;"discoverable=false" "ver=2.3.1" "gen=2" "app=WallDisplay" =;eth0;IPv4;ShellyWallDisplay-000822858F3D;_shelly._tcp;local;ShellyWallDisplay-000822858F3D.local;192.168.7.208;80;"discoverable=false" "ver=2.3.2" "gen=2" "app=WallDisplay" =;eth0;IPv6;shellypstripg4-7c2c67642200;_shelly._tcp;local;ShellyPStripG4-7C2C67642200.local;fd62:7244:6b44:daec:7e2c:67ff:fe64:2200;80;"ver=1.5.99-dev113814" "app=PowerStrip" "gen=4" =;eth0;IPv6;shelly2pmg4-7c2c677a0220;_shelly._tcp;local;Shelly2PMG4-7C2C677A0220.local;fd62:7244:6b44:daec:7e2c:67ff:fe7a:220;80;"ver=1.5.99-dev114895" "app=S2PMG4" "gen=4" =;eth0;IPv4;shelly2pmg4-7c2c677a0220;_shelly._tcp;local;Shelly2PMG4-7C2C677A0220.local;192.168.9.14;80;"ver=1.5.99-dev114895" "app=S2PMG4" "gen=4" =;eth0;IPv4;shellyhtg3-84fce63f8908;_shelly._tcp;local;ShellyHTG3-84FCE63F8908.local;192.168.9.209;80;"ver=1.1.0" "app=HTG3" "gen=3" =;eth0;IPv4;ShellyWallDisplay-00A90BA735AC;_shelly._tcp;local;ShellyWallDisplay-00A90BA735AC.local;192.168.2.7;80;"discoverable=false" "ver=2.3.0" "gen=2" "app=WallDisplay"

使用 Python 进行自动发现

对于完全自动化的方法,请尝试我们的示例 Python 脚本,它使用了zeroconf 库rich 库:

  1. 扫描在可配置的时间窗口内的_shelly._tcp.local.收集

  2. 每个设备的主机名、IP 地址、TXT 记录等。排序

  3. 它们(可选)按代数、固件版本、设备名称等。打印

  4. 示例用法 一个包含所有已发现 Shelly 设备的彩色表格。

代码:

python find_shelly_mdns_devices.py --scan-time 15 --sort gen
--scan-time 15
  • 表示扫描持续 15 秒。--sort gen

  • 按 TXT 记录中的gen字段排序结果。你会看到如下输出:

代码

故障排除与技巧
服务名称 服务器IP地址 端口 设备名称 版本 代数 其他属性 ----------------------- --------------------------- ----------------- ---- ----------- -------- --- ----------------- shelly2pmg4-7c2c67640b38 Shelly2PMG4-7C2C67640B38.local. 192.168.1.15 80 S2PMG4 1.5.99 4 N/A ... 发现的设备总数:1

检查组播流量

  1. 某些路由器或防火墙会阻止

  • UDP 端口 5353同一网络段(mDNS使用)。请确保您的防火墙和网络设置允许多播流量。

  1. 确保

  • 解析器(你的电脑或脚本)和处于Shelly 设备同一二层子网。组播数据包通常不会穿越 VPN或网络段,除非特别配置。测试其他工具

  1. 如果

  • Python 脚本找不到设备,或者你想用其他工具测试,试试dns-sd(macOS)或avahi-browse耐心等待(Linux)以确认Shelly设备确实通过mDNS进行自我广播。

  1. 扫描时间更长一些

  • Shelly 设备可能需要几秒钟才能响应。如果你怀疑有设备未显示,(例如 15–30 秒)。我们重视您的反馈!

感谢您花时间阅读我们的文章!它是否对您有帮助或有趣?

您的见解能帮助我们改进。我们非常感激任何反馈。如果您有时间,

请通过以下电子邮件与我们分享:

Integration@shelly.com

Integration@shelly.com