Перейти к содержанию

Обнаружение устройств Shelly через mDNS

Материал из База знаний Shelly
Версия от 13:07, 11 марта 2026; imported>Unknown user
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Устройства Shelly (как и многие современные устройства умного дома) объявляют себя в локальной сети, используя mDNS (многоадресный DNS). В этой статье мы объясним:

  1. Что такое mDNS и как устройства Shelly его используют
  2. Как обнаружить устройства Shelly через mDNS (включая утилиты командной строки)
  3. Автоматическое обнаружение с помощью Python (ссылка на наш пример скрипта)
  4. Устранение неполадок и советы

Что такое 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

  1. Просмотр служб Shelly:

КОД

dns-sd -B _shelly._tcp

Вы увидите устройства Shelly по мере их появления появляется.

  1. Разрешить конкретное устройство для просмотра подробных записей 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

  1. Установить при необходимости:

КОД

sudo apt-get update sudo apt-get install avahi-utils

  1. Просмотреть службы _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

и библиотеку rich

  1. Сканирует _shelly._tcp.local. в течение настраиваемого временного окна.
  1. Собирает имя хоста, IP-адреса, TXT-записи и т. д. каждого устройства.
  2. Сортирует их (необязательно) по поколению, версии прошивки, имени устройства и т. д.
  3. Выводит цветную таблицу со всеми обнаруженными устройствами 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

Устранение неполадок и советы

 

  1. Проверка многоадресного трафика
  • Некоторые маршрутизаторы или брандмауэры блокируют UDP-порт 5353 (используемый mDNS). Убедитесь, что ваш брандмауэр и сетевые настройки разрешают многоадресный трафик.
  1. Один сетевой сегмент
  • Убедитесь, что резолвер (ваш компьютер или скрипт) и устройства Shelly находятся в одной подсети уровня 2. Многоадресные пакеты обычно не проходят через VPN или сетевые сегменты, если это специально не настроено.
  1. Проверка с помощью других инструментов
  • Если скрипт Python не может найти устройства или вы хотите протестировать их с помощью других инструментов, попробуйте dns-sd (macOS) или avahi-browse (Linux), чтобы убедиться, что устройства Shelly действительно объявляют о себе через mDNS.
  1. Дайте время
  • Устройствам Shelly может потребоваться несколько секунд для ответа. Если вы подозреваете, что чего-то не хватает, сканируйте дольше (например, 15–30 секунд).

Мы ценим ваши отзывы!

Спасибо, что уделили время прочтению нашей статьи! Была ли она полезной или интересной? Ваши замечания помогут нам улучшить нашу работу. Мы будем благодарны за любые отзывы. Если у вас есть минутка, пожалуйста, поделитесь ею с нами по следующему адресу электронной почты: Integration@shelly.com