Обнаружение устройств Shelly через mDNS
Устройства Shelly (как и многие современные устройства умного дома) объявляют себя в локальной сети, используя mDNS (многоадресный DNS). В этой статье мы объясним:
- Что такое mDNS и как устройства Shelly его используют
- Как обнаружить устройства Shelly через mDNS (включая утилиты командной строки)
- Автоматическое обнаружение с помощью Python (ссылка на наш пример скрипта)
- Устранение неполадок и советы
Что такое mDNS?
[править]mDNS (Multicast DNS) — это протокол, определенный в RFC 6762
который позволяет устройствам в LAN (локальной сети) обнаруживать друг друга без центрального DNS-сервера. Это достигается путем отправки и получения DNS-подобных запросов через UDP-порт 5353 в многоадресную группу. Популярные реализации mDNS включают Bonjour от Apple
и Avahi
в Linux.
Почему это важно для устройств Shelly?
Поскольку каждое устройство Shelly объявляет о себе, используя определенный тип службы ( _shelly._tcp.local.
), что позволяет любому инструменту с поддержкой mDNS обнаруживать эти широковещательные сообщения и отображать такие сведения, как IP-адреса и версии прошивки, и поскольку mDNS часто используется в паре с DNS-SD
(иногда называемым его «родственником») для обеспечения структурированного метода рекламы и просмотра служб по типу (например, _shelly._tcp.local.
), эта функциональность особенно важна для устройств Shelly.
Как обнаружить устройства Shelly через mDNS
[править]Тип службы mDNS для Shelly
[править]Устройства Shelly, осуществляющие широковещательную рассылку под этим типом службы:
КОД
_shelly._tcp.local.
По умолчанию каждое устройство Shelly объявляет следующее:
- Имя экземпляра (имя службы) : Часто выглядит как shelly2pmg4-7c2c67640b38._shelly._tcp.local.
- Имя хоста (сервера) (например, Shelly2PMG4-7C2C67640B38.local.)
- IP-адрес(а)
- Порт (80)
- TXT-записи, содержащие ключевые свойства: gen: Поколение (например, 4) app: Имя/модель устройства (например, S2PMG4) ver: Версия прошивки (например, 1.5.99)
Инструменты обнаружения из командной строки
[править]
==== macOS: dns-sd ====\n
- Просмотр служб Shelly:
КОД
dns-sd -B _shelly._tcp
Вы увидите устройства Shelly по мере их появления появляется.
- Разрешить конкретное устройство для просмотра подробных записей TXT:
КОД
dns-sd -L "shelly2pmg4-7c2c67640b38" _shelly._tcp local
Вы увидите что-то вроде:
КОД
Поиск shelly2pmg4-7c2c67640b38._shelly._tcp.local ДАТА: ---Пт 21 фев 2025--- 10:38:08.309 ...НАЧАЛО... 10:38:08.611 shelly2pmg4-7c2c67640b38._shelly._tcp.local. Доступен по адресу Shelly2PMG4-7C2C67640B38.local.:80 (интерфейс 24) gen=4 app=S2PMG4 ver=1.5.99
==== Linux: avahi-browse ====\n
- Установить при необходимости:
КОД
sudo apt-get update sudo apt-get install avahi-utils
- Просмотреть службы _shelly._tcp:
КОД
avahi-browse --resolve --terminate --parsable _shelly._tcp | grep "^="
Эта команда отображает IP-адрес, порт и данные TXT каждого устройства Shelly (включая 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
- Сканирует _shelly._tcp.local. в течение настраиваемого временного окна.
- Собирает имя хоста, IP-адреса, TXT-записи и т. д. каждого устройства.
- Сортирует их (необязательно) по поколению, версии прошивки, имени устройства и т. д.
- Выводит цветную таблицу со всеми обнаруженными устройствами Shelly.
Пример использования:
[править]КОД
python find_shelly_mdns_devices.py --scan-time 15 --sort gen
- --scan-time 15 запускает сканирование на 15 секунд.
- --sort gen сортирует результаты по полю gen в TXT-записи.
Вы увидите вывод, подобный следующему:
КОД
Имя службы IP-адрес(а) сервера Порт Имя устройства Версия Gen Другие свойства
--------------------------- ----------------- ---- ----------- -------- --- -----------------
shelly2pmg4-7c2c67640b38 Shelly2PMG4-7C2C67640B38.local. 192.168.1.15 80 S2PMG4 1.5.99 4 N/A ... Всего обнаружено устройств: 1
Устранение неполадок и советы
[править]
- Проверка многоадресного трафика
- Некоторые маршрутизаторы или брандмауэры блокируют UDP-порт 5353 (используемый mDNS). Убедитесь, что ваш брандмауэр и сетевые настройки разрешают многоадресный трафик.
- Один сетевой сегмент
- Убедитесь, что резолвер (ваш компьютер или скрипт) и устройства Shelly находятся в одной подсети уровня 2. Многоадресные пакеты обычно не проходят через VPN или сетевые сегменты, если это специально не настроено.
- Проверка с помощью других инструментов
- Если скрипт Python не может найти устройства или вы хотите протестировать их с помощью других инструментов, попробуйте dns-sd (macOS) или avahi-browse (Linux), чтобы убедиться, что устройства Shelly действительно объявляют о себе через mDNS.
- Дайте время
- Устройствам Shelly может потребоваться несколько секунд для ответа. Если вы подозреваете, что чего-то не хватает, сканируйте дольше (например, 15–30 секунд).
Мы ценим ваши отзывы!
[править]Спасибо, что уделили время прочтению нашей статьи! Была ли она полезной или интересной? Ваши замечания помогут нам улучшить нашу работу. Мы будем благодарны за любые отзывы. Если у вас есть минутка, пожалуйста, поделитесь ею с нами по следующему адресу электронной почты: Integration@shelly.com