Kbsa Scoperta dei dispositivi Shelly tramite Mdns

Scoprire i dispositivi Shelly tramite mDNS

mDNS.png

I dispositivi Shelly (come molti dispositivi smart-home moderni) si annunciano su una rete locale utilizzando mDNS (Multicast DNS). In questo articolo spiegheremo:

  1. Cos'è mDNS e come i dispositivi Shelly lo utilizzano

  2. Come scoprire i dispositivi Shelly tramite mDNS (inclusi strumenti da riga di comando)

  3. Scoperta automatizzata con Python (link al nostro script di esempio)

  4. Risoluzione problemi e consigli

Cos'è mDNS?

mDNS (Multicast DNS) è un protocollo definito in RFC 6762 che permette ai dispositivi su una LAN (Local Area Network) di scoprirsi reciprocamente senza un server DNS centrale. Lo fa inviando e ricevendo query simili a DNS tramite porta UDP 5353 a un gruppo multicast. Implementazioni popolari di mDNS includono Bonjour di Apple e Avahi su Linux.

Perché è importante per i dispositivi Shelly? Perché ogni dispositivo Shelly si annuncia usando un tipo di servizio specifico (_shelly._tcp.local.), permettendo a qualsiasi strumento compatibile con mDNS di rilevare queste trasmissioni e mostrare dettagli come indirizzi IP e versioni firmware, e poiché mDNS è spesso abbinato a DNS-SD (a volte chiamato il suo “cugino”) per fornire un metodo strutturato di pubblicizzare e navigare i servizi per tipo (es., _shelly._tcp.local.), questa funzionalità è particolarmente importante per i dispositivi Shelly.

Come scoprire i dispositivi Shelly tramite mDNS

Tipo di servizio mDNS di Shelly

I dispositivi Shelly trasmettono sotto questo tipo di servizio:

CODICE
_shelly._tcp.local.

Di default, ogni dispositivo Shelly annuncia:

  • Nome istanza (Nome servizio): Spesso appare come shelly2pmg4-7c2c67640b38._shelly._tcp.local.

  • Nome host (Server) (es., Shelly2PMG4-7C2C67640B38.local.)

  • Indirizzo(i) IP

  • Porta (80)

  • Record TXT contenenti proprietà chiave:

    • gen: Generazione (es., 4)

    • app: Nome/modello dispositivo (es., S2PMG4)

    • ver: Versione firmware (es., 1.5.99)

Strumenti da riga di comando per la scoperta

macOS: dns-sd

  1. Naviga per servizi Shelly:

CODICE
dns-sd -B _shelly._tcp

Vedrai i dispositivi Shelly man mano che appaiono.

  1. Risolvi un dispositivo specifico per vedere i record TXT dettagliati:

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

Vedrai qualcosa del tipo:

CODICE
Lookup shelly2pmg4-7c2c67640b38._shelly._tcp.local DATA: ---Ven 21 Feb 2025--- 10:38:08.309 ...AVVIO... 10:38:08.611 shelly2pmg4-7c2c67640b38._shelly._tcp.local. è raggiungibile a Shelly2PMG4-7C2C67640B38.local.:80 (interfaccia 24) gen=4 app=S2PMG4 ver=1.5.99

Linux: avahi-browse

  1. Installa se necessario:

CODICE
sudo apt-get update sudo apt-get install avahi-utils
  1. Naviga per servizi _shelly._tcp:

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

Questo mostra IP, porta e dati TXT di ogni dispositivo Shelly (inclusi gen, app, ver) in una tabella. Vedrai qualcosa del tipo:

CODICE
=;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"

Scoperta automatizzata con Python

Per un approccio completamente automatizzato, prova il nostro script Python di esempio che utilizza la libreria zeroconf e la libreria rich:

  1. Scansiona per _shelly._tcp.local. in una finestra temporale configurabile.

  2. Raccoglie nome host, indirizzi IP, record TXT, ecc. di ogni dispositivo.

  3. Ordina (opzionalmente) per generazione, versione firmware, nome dispositivo, ecc.

  4. Stampa una tabella colorata con tutti i dispositivi Shelly scoperti.

Esempio di utilizzo:

CODICE
python find_shelly_mdns_devices.py --scan-time 15 --sort gen
  • --scan-time 15 esegue la scansione per 15 secondi.

  • --sort gen ordina i risultati per il campo gen nel record TXT.

Vedrai un output simile a:

CODICE
Nome servizio Server Indirizzo(i) IP Porta Nome dispositivo Versione Gen Altre proprietà ----------------------- --------------------------- ----------------- ---- ----------- -------- --- ----------------- shelly2pmg4-7c2c67640b38 Shelly2PMG4-7C2C67640B38.local. 192.168.1.15 80 S2PMG4 1.5.99 4 N/D ... Totale dispositivi scoperti: 1

Risoluzione problemi e consigli

  1. Controlla il traffico multicast

  • Alcuni router o firewall bloccano la porta UDP 5353 (usata da mDNS). Assicurati che il firewall e le impostazioni di rete permettano il traffico multicast.

  1. Stesso segmento di rete

  • Assicurati che il resolver (il tuo computer o script) e i dispositivi Shelly siano nello stesso sottorete Layer‑2. I pacchetti multicast di solito non attraversano VPN o segmenti di rete a meno che non siano configurati appositamente.

  1. Prova altri strumenti

  • Se lo script Python non trova dispositivi o vuoi testare con altri strumenti, prova dns-sd (macOS) o avahi-browse (Linux) per confermare che i dispositivi Shelly si annunciano effettivamente tramite mDNS.

  1. Dai tempo

  • I dispositivi Shelly possono impiegare qualche secondo per rispondere. Se sospetti che manchi qualcosa, esegui la scansione per un tempo più lungo (es., 15–30 secondi).

Apprezziamo il tuo feedback!

Grazie per aver dedicato del tempo a leggere il nostro articolo! È stato utile o interessante?

Le tue opinioni possono aiutarci a migliorare. Saremmo grati per qualsiasi feedback. Se hai un momento,

per favore condividilo con noi al seguente indirizzo email:

Integration@shelly.com