IoT wireless - LoRaWAN, Zigbee mesh e MQTT - Anno 5 Modulo 4 Lezione 5
Anno 5 • Modulo 4 • Lezione 5
Prof Giagnotti • Sistemi e Reti

IoT wireless - LoRaWAN, Zigbee mesh e MQTT

Dalla serra dell'istituto agrario che misura umidità ogni 10 minuti al contatore dell'acqua che deve vivere 10 anni con una singola pila: scopri come LoRaWAN, MQTT e le reti LPWAN connettono migliaia di sensori senza Wi-Fi né 5G, con architetture leggere e protocolli pensati per il mondo reale.

📋 Obiettivi di apprendimento
✓Descrivere l'architettura LoRaWAN (end device, gateway, network server, application server) e le tre classi operative A/B/C
✓Spiegare il modello publish/subscribe di MQTT, il ruolo del broker, i livelli QoS 0/1/2 e i meccanismi retain e LWT
✓Descrivere come si protegge MQTT con TLS e autenticazione, e il modello di sicurezza a doppio livello di LoRaWAN (NwkSKey/AppSKey)
✓Confrontare LoRaWAN, Sigfox e NB-IoT identificando la tecnologia più adatta a uno scenario LPWAN dato

L'IoT e le sue esigenze di connettività

L'Internet of Things pone requisiti di rete radicalmente diversi rispetto alla connettività tradizionale. Un sensore di temperatura in un campo agricolo, un contatore dell'acqua in una città, un tracker GPS su un container — questi dispositivi non devono trasmettere video in streaming né scaricare aggiornamenti software ogni ora. Devono fare una cosa sola: inviare piccoli pacchetti di dati con grande affidabilità, a lungo raggio, consumando pochissima energia.

📖 Definizione — LPWAN

Low Power Wide Area Network: famiglia di tecnologie radio per dispositivi che inviano pochi byte, raramente, su chilometri, con batterie che durano anni. Rinunciano a velocità e latenza ultra-bassa in cambio di autonomia e copertura.

🔋
Autonomia anni
Batteria non sostituibile o difficilmente accessibile – sensore interrato, in quota
📡
Copertura km
Aree rurali, edifici industriali, zone senza Wi-Fi né cablaggio
📦
Payload piccolo
Decine o centinaia di byte per messaggio, una volta ogni minuti/ore
💰
Costo basso
Migliaia di dispositivi per progetto — costo unitario critico

Né il Wi-Fi (troppo energivoro e corto raggio) né il 4G/5G (costoso e ad alto consumo) rispondono a questi requisiti. La categoria progettata è la LPWAN.

💡 Tip docente — quando NON usare LPWAN

In aula capita di voler usare LoRa per tutto. Se devi trasmettere video, aggiornamenti OTA da 10 MB o controllo real-time sotto 100 ms, LPWAN è sbagliata: serve Wi-Fi/5G. LPWAN serve per telemetria lenta periodica.

🏫 Esempio istituto — contatore acqua e luci corridoio

Contatore acqua seminterrato: niente Wi-Fi, batteria 8 anni, 50 byte al giorno → LoRaWAN Classe A gateway tetto. Luci corridoio con sensore presenza: alimentate a rete ma mesh economica? Zigbee mesh sui portalampada fa da router: una lampadina offline, il mesh si riorganizza.

LoRaWAN: architettura, classi e sicurezza

LoRaWAN è lo standard LPWAN più diffuso. LoRa (Long Range) è la modulazione fisica Chirp Spread Spectrum (CSS) di Semtech. LoRaWAN è il protocollo MAC e di rete che definisce accesso al canale, autenticazione e organizzazione.

📌 Chirp Spread Spectrum

Segnale la cui frequenza aumenta/diminuisce nel tempo. Robustissimo al rumore: decodificabile anche 20 dB sotto rumore ambientale. Permette 10-15 km in campo aperto con pochi milliwatt.

Architettura LoRaWAN - Star of Stars Application Server - Decifra payload AppSKey Dashboard, integrazione MQTT, API Network Server - NwkSKey, deduplica, ADR Autenticazione, gestione gateway, frame counter IP / Internet UDP 1700 Gateway 1 Relay radio to IP Gateway 2 Relay radio to IP Gateway 3 Relay radio to IP Radio 868 MHz - stesso uplink ricevuto da piu GW Sensore A Classe A Contatore B Tracker C Classe C

Il Gateway LoRaWAN non è un router — è un relay

Il gateway LoRaWAN non prende decisioni. Riceve tutti i frame radio, li impacchetta in UDP/IP e li inoltra al Network Server. Un pacchetto può essere ricevuto da più gateway — il Network Server deduplica.

⚠️ Errore comune — gateway single point of failure?

No: overlapping di copertura. In laboratorio con 1 gateway Packet Tracer sembra SPOF, ma in produzione TTN usa decine di gateway sovrapposti. Non confondere star-of-stars con star semplice.

Le tre classi di dispositivi LoRaWAN

Classe A - Piu diffusa
TX → RX1 breve → RX2 breve
...sleep ore...
TX → RX1 → RX2

Consumo minimo — anni con singola batteria.

Es: sensori temperatura, contatori, tracker lenti
Classe B
TX → RX1 → RX2
Beacon sync → RX slot
Beacon → RX slot…

Finestre sincronizzate con beacon periodici. Server invia in orari prevedibili.

Es: attuatori con comandi programmabili
Classe C
TX → RX1
RX2 sempre aperto
(salvo TX)

Quasi sempre in ascolto, massima reattività, richiede alimentazione stabile.

Es: lampioni smart, attuatori industriali

Sicurezza LoRaWAN — doppio livello

Modello progettato per separare responsabilità operatore rete e fornitore applicazione. Due chiavi AES-128 distinte:

NwkSKey — Network Session Key

Condivisa dispositivo ↔ Network Server. Protegge integrità e autenticità livello rete.

Network Server verifica ma non legge payload.
AppSKey — Application Session Key

Condivisa dispositivo ↔ Application Server. Cifra payload (temperatura, GPS).

Solo Application Server decifra — operatore no.
Attivazione — OTAA vs ABP
OTAA — Over The Air Activation Consigliato

Join genera chiavi sessione uniche ad ogni attivazione. Chiavi non statiche, più sicuro.

ABP — Activation By Personalization

Chiavi hardcoded firmware. Semplice ma meno sicuro: se compromesso, chiavi recuperabili.

LoRaWAN OTAA — TTN device config
{
  "devEUI": "70B3D57ED0069A2F",
  "appEUI": "800000000000000C",
  "appKey": "2B7E151628AED2A6ABF7158809CF4F3C",
  "class": "A",
  "region": "EU868",
  "adr": true,
  "join": "OTAA"
}
🔧 Tip docente — demo OTAA

Con TTN Community + 1 gateway Dragino indoor (100 euro) mostrate join OTAA reale: frame Join Request in chiaro, Join Accept cifrato con AppKey. Con SDR vedete chirp su waterfall 868.1 MHz. ABP disabilitato in produzione: chiavi statiche nelle prove esame errore grave.

MQTT — Message Queuing Telemetry Transport

Se LoRaWAN risolve trasporto radio, MQTT risolve trasporto applicativo: come consegnare messaggi dai sensori alle applicazioni in modo efficiente e scalabile.

MQTT è protocollo messaggistica leggero publish/subscribe, IBM 1999 per telemetria satellitare bassa banda. Oggi standard de facto IoT applicativo, AWS IoT, Azure IoT Hub, sistemi industriali.

📌 MQTT nel modello OSI

Livello applicativo (7) su TCP/IP (1883 chiaro, 8883 TLS). Non legato a radio specifica: funziona sopra Wi-Fi, Ethernet, 4G o sopra LoRaWAN via Network Server.

MQTT Publish/Subscribe - Broker disaccoppia Publisher Sensore temperatura PUBLISH casa/salotto/temp 24.3 Sensore luminosita PUBLISH casa/salotto/luce 320lux BROKER MQTT :8883 TLS ACL topic, retain store, LWT casa/# - 2 subscriber Subscriber App smartphone SUBSCRIBE casa/salotto/# Dashboard Grafana SUBSCRIBE casa/+/temperatura Publisher e Subscriber non si conoscono - Disaccoppiamento spazio/tempo LWT: sensore 42 se crash broker pubblica sensori/42/stato offline

Topic — indirizzamento gerarchico

In MQTT i messaggi non vanno a destinatari specifici ma pubblicati su topic gerarchici separati da /.

Struttura gerarchica
edificio/piano2/stanza5/temperatura
fabbrica/linea3/motore7/rpm
citta/zona_est/lampione42/stato
Wildcard
+ = un livello -> edificio/+/temperatura
# = tutti successivi -> edificio/#

Quality of Service

QoS 0 — At most once
PUB - no ACK

Fire-and-forget, puo essere perso. Telemetria alta frequenza non critica.

QoS 1 — At least once
PUB - PUBACK
ritrasmette se no ACK

Duplicati possibili. Comandi dove duplicato tollerabile.

QoS 2 — Exactly once
PUBLISH - PUBREC - PUBREL - PUBCOMP

Handshake 4 fasi, massima affidabilita. Apri valvola, sblocca serratura.

Retain

Messaggio retain=true conservato dal broker. Nuovo subscriber riceve subito ultimo valore.

Stato attuale, ultima lettura, configurazione attuatore
LWT — Last Will

Messaggio testamento pubblicato se connessione cade in modo inaspettato.

Es: sensori/42/stato offline

Sicurezza MQTT

🔒
MQTT over TLS porta 8883

Cifra traffico, cert broker verificato, mutual TLS possibile. Mosquitto nativo.

🪪
Username/Password

Solo con TLS — in chiaro sniffabile.

🛡️
ACL sui topic

Sensore 42 solo publish su sensori/42/#, non su altri. Isolamento multi-tenant.

Mosquitto TLS + ACL
listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
allow_anonymous false
password_file /etc/mosquitto/passwd
acl_file /etc/mosquitto/acl
# acl
user sensore42
topic write sensori/42/#
topic read comandi/42/#
user dashboard
topic read sensori/#
Python paho-mqtt Pub/Sub
import paho.mqtt.client as mqtt, ssl, json
client = mqtt.Client(client_id="sensore-42")
client.username_pw_set("sensore42","pwd-sicura")
client.tls_set(ca_certs="ca.crt")
client.will_set("sensori/42/stato", payload="offline", qos=1, retain=True)
client.connect("broker.istituto.local", 8883, 60)
client.publish("sensori/42/stato", "online", qos=1, retain=True)
client.publish("sensori/42/temperatura", json.dumps({"t":24.3}), qos=1)

def on_message(c,u,msg):
    print(msg.topic, msg.payload.decode())
sub = mqtt.Client()
sub.tls_set(ca_certs="ca.crt")
sub.username_pw_set("dashboard","pwd")
sub.on_message = on_message
sub.connect("broker.istituto.local",8883)
sub.subscribe([("sensori/+/temperatura",1),("sensori/+/stato",1)])
sub.loop_forever()
Allerta sicurezza MQTT senza TLS

Username/password in chiaro su porta 1883 leggibili da Wireshark in 2 click. Usate sempre 8883 + ACL. Retain senza limite + client malizioso fa DoS saturando RAM. Impostate quota.

Confronto tecnologie LPWAN

LoRaWAN non e' l'unica LPWAN. Zigbee mesh, pur non essendo LPWAN, e' spesso complementare in locale e porta dati a gateway LoRaWAN/MQTT.

CaratteristicaLoRaWANSigfoxNB-IoTZigbee mesh
Frequenza868 MHz ISM868 MHz ISMBande LTE licenziate2.4 GHz ISM
Copertura2-15 km3-50 km1-10 km cellulare10-100 m per hop, mesh km
Velocita0.3-50 kbps100 bps UL / 600 DL20-250 kbps250 kbps
InfrastrutturaPrivata o pubblica TTNSolo operatore SigfoxOperatori 4G/LTECoordinatore + router locali
Messaggi/giornoIllimitati (duty 1%)140 UL / 4 DLIllimitatiIllimitati
BatteriaAnniAnniAnni (PSM)Anni end, router su rete
Punto forzaFlessibile, privata, openSemplicita, copertura EURoaming int., SIMMesh self-healing
Scelta tecnologia - dal requisito alla soluzione Serra campus 10 sensori, batteria Contatore citta Aula smart LoRaWAN Privato A NB-IoT / Sigfox Zigbee mesh + MQTT Cloud MQTT aggregator TTN - MQTT - Node-RED / Grafana istituto/serra/+/umidita QoS1 retain
Domanda corretta per progetto IoT

Non quale tecnologia e' migliore ma quali caratteristiche deve avere il sistema. LoRaWAN, Zigbee e MQTT svolgono ruoli differenti e possono coesistere.

Packet Tracer IoT cellular + MQTT
# Thing: Water Level Monitor
Thing: Water Level Monitor
- Server: iot.istituto.local 192.168.1.100
- Topic publish: istituto/seminterrato/acqua/livello
IoT Server Rules:
IF waterLevel > 80 THEN publish istituto/allarmi/acqua/allarme = critico QoS1 retain true
Smartphone PT subscribe istituto/# per test
Tip lab Packet Tracer

Nel .pkt troverete rete cellulare + smart home. Aggiungete regole IoT server retain. Fate crashare un thing scollegando alimentazione: mostrate come LWT mancante in PT richiede heartbeat applicativo. Occasione per spiegare differenza simulazione vs hardware reale.

Caso di studio: monitoraggio wireless di una serra

Immagina una serra con temperatura e umidita in punti diversi. Sensori a batteria devono funzionare mesi.

🌱Caso di studio — dal problema ai requisiti

Monitoraggio wireless di una serra

Prima di scegliere tecnologia veloce, individuare caratteristiche che sistema deve garantire.

Quali caratteristiche diventano prioritarie?

Individua requisiti wireless prima di scegliere soluzione.

🔋
Basso consumo
Batteria mesi, sleep 99%
📡
Copertura
Punti diversi serra
📊
Pochi dati
Piccoli msg periodici
🛡️
Affidabilita
Perdite gestite QoS
🔗
Molti sensori
Espansione futura
Dal problema ai requisiti: tecnologia scelta dopo requisiti: consumo, copertura, dati, affidabilita, dispositivi.
🧠 Esempio istituto agrario

Serra istituto 6 campate: ogni campata 1 sensore LoRaWAN Classe A batteria AA 2 anni, gateway tetto. Dati TTN → MQTT → Node-RED Raspberry Pi → Grafana aula. In parallelo Zigbee mesh per irrigazione elettrovalvole router alimentati con comando MQTT istituto/serra/irrigazione/campata3. Se Wi-Fi cade, Zigbee locale e LoRaWAN continuano: resilienza multidisciplinare agrario + informatica.

🌍 Caso reale — agricoltura e citta

Monnit agricoltura precisione: sensori LoRaWAN umidita suolo 15 min, ADR SF7-12, batteria 10 anni. Amsterdam smart city: 2000 sensori parcheggio NB-IoT rete KPN, roaming EU, payload JSON via MQTT AWS IoT. Stesso MQTT sopra, modelli rete privata vs operatore diversi.

🚨 Errore duty cycle EU 1%

868 MHz duty cycle legale 1%: non trasmettere continuamente. SF12 1.2 sec per 20 byte → max ~30 msg/ora per device. Classe C sempre RX ma TX comunque limitato.

Verifica / Esercizio guidato

🔬 Progetta la rete IoT per istituto: serra + contatori + aula smart

Hai: serra 6 sensori T/H batteria, 20 contatori acqua seminterrato senza Wi-Fi, 10 aule luci + sensori presenza alimentati, 1 broker MQTT Raspberry, 1 gateway LoRaWAN tetto. Progetta.

  1. Serra scegli classe LoRaWAN e OTAA/ABP, motiva consumo e sicurezza. Calcola msg/giorno con duty cycle 1%.
  2. Contatori acqua: LoRaWAN vs NB-IoT? Costo SIM vs gateway privato, roaming, ownership.
  3. Aula smart luci: perche Zigbee mesh meglio di Wi-Fi e LoRaWAN? Topologia coordinator/router/end device.
  4. MQTT: definisci topic hierarchy istituto → QoS per allarmi acqua vs telemetria temperatura vs comando luci. Dove retain e LWT?
✅ Soluzione ragionata

1) Serra Classe A OTAA: Sleep 99%, invio 10 min =144 msg/giorno, time-on-air SF7 60ms → 8.6 sec TX/giorno =0.01% duty ok anche SF12 ~1 sec →144 sec =0.16% ancora ok. OTAA chiavi sessione uniche, se rubato vecchie invalide. ABP vietato: chiave statica recuperabile flash.

2) Contatori: 20 contatori senza alimentazione, no LTE affidabile, dati sensibili → LoRaWAN privato: 1 gateway 120 euro vs 20 SIM 2 euro/mese*12*20=480euro/anno. Ownership interna. NB-IoT solo se roaming extra-istituto.

3) Aula Zigbee: Luci router mesh self-healing: se 1 brucia, AODV ricalcola. Latenza 50ms locale vs LoRaWAN >1 sec. Wi-Fi consumo 10x, batterie sensori presenza mesi vs anni. Topologia: 1 coordinator piano (Raspberry+ dongle), 10 router lampadine, 10 end device PIR batteria sleep.

4) MQTT topics:
istituto/serra/campataN/temperatura QoS1 retain true
istituto/seminterrato/contatoreID/allarme QoS2 retain true LWT offline su istituto/.../stato
istituto/aulaN/luce/comando QoS1 retain true + stato .../stato retain
ACL: sensore serra solo write istituto/serra/#, dashboard read istituto/#
LWT serra: se offline 30 min, broker pubblica offline → Node-RED Telegram.