
Urządzenia Shelly (jak wiele nowoczesnych urządzeń smart home) ogłaszają swoją obecność w sieci lokalnej za pomocą mDNS (Multicast DNS). W tym artykule wyjaśnimy:
Czym jest mDNS i jak urządzenia Shelly go używają
Jak wykrywać urządzenia Shelly przez mDNS (w tym narzędzia wiersza poleceń)
Automatyczne wykrywanie z użyciem Pythona (link do naszego przykładowego skryptu)
Rozwiązywanie problemów i wskazówki
Czym jest mDNS?
mDNS (Multicast DNS) to protokół zdefiniowany w RFC 6762 który umożliwia urządzeniom w LAN (Local Area Network) wzajemne wykrywanie się bez centralnego serwera DNS. Działa to poprzez wysyłanie i odbieranie zapytań podobnych do DNS przez UDP port 5353 do grupy multicast. Popularne implementacje mDNS to Apple’s Bonjour oraz Avahi w systemie Linux.
Dlaczego ma to znaczenie dla urządzeń Shelly? Ponieważ każde urządzenie Shelly ogłasza się przy użyciu określonego typu usługi (_shelly._tcp.local.), co pozwala dowolnemu narzędziu obsługującemu mDNS wykryć te komunikaty i wyświetlić szczegóły, takie jak adresy IP i wersje firmware, a ponieważ mDNS jest często łączony z DNS-SD (czasem nazywanym jego „kuzynem”) w celu zapewnienia uporządkowanej metody ogłaszania i przeglądania usług według typu (np. _shelly._tcp.local.), ta funkcjonalność jest szczególnie ważna dla urządzeń Shelly.
Jak wykrywać urządzenia Shelly przez mDNS
Typ usługi mDNS Shelly
Urządzenia Shelly publikują się pod tym typem usługi:
_shelly._tcp.local.
Domyślnie każde urządzenie Shelly ogłasza:
Nazwa instancji (nazwa usługi): Często wygląda jak
shelly2pmg4-7c2c67640b38._shelly._tcp.local.Nazwa hosta (serwer) (np.
Shelly2PMG4-7C2C67640B38.local.)Adres(y) IP
Port (
80)-
Rekordy TXT zawierające kluczowe właściwości:
gen: Generacja (np.
4)app: Nazwa/model urządzenia (np.
S2PMG4)ver: Wersja firmware (np.
1.5.99)
Narzędzia wiersza poleceń do wykrywania
macOS: dns-sd
Przeglądaj usługi Shelly:
dns-sd -B _shelly._tcp Zobaczysz urządzenia Shelly, gdy się pojawią.
Rozwiąż konkretne urządzenie, aby zobaczyć szczegółowe rekordy TXT:
dns-sd -L "shelly2pmg4-7c2c67640b38" _shelly._tcp local Zobaczysz coś takiego:
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
Linux: avahi-browse
Zainstaluj w razie potrzeby:
sudo apt-get update sudo apt-get install avahi-utils Przeglądaj usługi
_shelly._tcp:
avahi-browse --resolve --terminate --parsable _shelly._tcp | grep "^=" Wyświetla to adres IP, port i dane TXT każdego urządzenia Shelly (w tym gen, app, ver) w tabeli. Zobaczysz coś takiego:
=;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" Automatyczne wykrywanie z użyciem Pythona
Jeśli chcesz w pełni zautomatyzowanego podejścia, wypróbuj nasz przykładowy skrypt Python który korzysta z biblioteki zeroconf oraz biblioteki rich:
Skanuje _shelly._tcp.local. w konfigurowalnym oknie czasowym.
Zbiera nazwę hosta każdego urządzenia, adresy IP, rekordy TXT itd.
Sortuje je (opcjonalnie) według generacji, wersji firmware, nazwy urządzenia itd.
Wyświetla kolorową tabelę ze wszystkimi wykrytymi urządzeniami Shelly.
Przykładowe użycie:
python find_shelly_mdns_devices.py --scan-time 15 --sort gen --scan-time 15uruchamia skanowanie przez 15 sekund.--sort gensortuje wyniki według polagenw rekordzie TXT.
Zobaczysz wynik podobny do:
Service Name Server IP Address(es) Port Device Name Version Gen Other Properties ----------------------- --------------------------- ----------------- ---- ----------- -------- --- ----------------- shelly2pmg4-7c2c67640b38 Shelly2PMG4-7C2C67640B38.local. 192.168.1.15 80 S2PMG4 1.5.99 4 N/A ... Total Devices Discovered: 1 Rozwiązywanie problemów i wskazówki
Sprawdź ruch multicast
Niektóre routery lub firewalle blokują UDP port 5353 (używany przez mDNS). Upewnij się, że zapora i ustawienia sieci zezwalają na ruch multicast.
Ten sam segment sieci
Upewnij się, że resolver (Twój komputer lub skrypt) oraz urządzenia Shelly znajdują się w tej samej podsieci warstwy 2. Pakiety multicast zwykle nie przechodzą przez VPN-y ani segmenty sieci, chyba że zostało to specjalnie skonfigurowane.
Przetestuj inne narzędzia
Jeśli skrypt Python nie może znaleźć urządzeń albo chcesz przetestować inne narzędzia, spróbuj
dns-sd(macOS) lubavahi-browse(Linux), aby potwierdzić, że urządzenia Shelly rzeczywiście ogłaszają się przez mDNS.
Daj mu trochę czasu
Urządzenia Shelly mogą potrzebować kilku sekund, aby odpowiedzieć. Jeśli podejrzewasz, że czegoś brakuje, skanuj przez dłuższy czas (np. 15–30 sekund).
Cenimy Twoją opinię!
Dziękujemy za poświęcenie czasu na przeczytanie naszego artykułu! Czy był pomocny lub interesujący?
Twoje uwagi pomogą nam się ulepszać. Będziemy wdzięczni za każdą opinię. Jeśli masz chwilę,
podziel się nią z nami, wysyłając wiadomość na adres: