Edge Computing con Azure IoT: Esempio Pratico

Introduzione

L’Edge Computing è una tecnologia che permette di elaborare i dati direttamente sul dispositivo, riducendo la latenza e il traffico verso il cloud. Questo approccio è particolarmente utile in scenari in cui la connessione Internet non è sempre disponibile o quando è necessario un tempo di risposta rapido. In questo tutorial, vedremo come configurare un dispositivo IoT Edge con Azure IoT Hub utilizzando un esempio pratico. Il nostro progetto è composto da due applicazioni:

1️⃣ Device App → Un’applicazione Docker eseguita sul dispositivo Edge, che simula un sensore di temperatura e invia dati a Azure IoT Hub.

2️⃣ Event Consumer → Un’applicazione Python eseguita sul PC, che legge i dati da Azure Event Hub e li elabora.

Questa guida è pensata per essere chiara anche per chi non ha mai lavorato con Azure IoT! 🚀


🔍 Caso d’Uso

Immaginiamo di avere un sistema di monitoraggio della temperatura in una fabbrica. Ogni dispositivo IoT Edge misura la temperatura dell’ambiente e invia i dati al cloud solo quando la temperatura supera una certa soglia. Questo approccio permette di:

  • ✅ Ridurre il traffico di rete inviando solo dati rilevanti.
  • ✅ Inviare notifiche di allarme in caso di valori anomali.
  • ✅ Processare i dati in tempo reale sul dispositivo senza doverli trasferire continuamente al cloud.
  • ✅ Diminuire il carico sui server e migliorare la scalabilità.

🌐 Cos’è Azure IoT Hub?

Azure IoT Hub è un servizio gestito di Microsoft che funge da ponte tra dispositivi IoT e il cloud. Permette di connettere, monitorare e controllare milioni di dispositivi in modo scalabile e sicuro.

✨ Funzionalità principali:

  • Comunicazione bidirezionale tra dispositivi e cloud.
  • Autenticazione e sicurezza avanzata per proteggere i dispositivi con chiavi di accesso e certificati.
  • Gestione e monitoraggio remoto dei dispositivi IoT con log e telemetria.
  • Scalabilità per gestire migliaia o milioni di dispositivi senza problemi di prestazioni.
  • Integrazione con Azure Event Hub, Azure Functions e AI per elaborazioni avanzate.

In questa guida, Azure IoT Hub raccoglierà i dati dal dispositivo Edge e li inoltrerà a Azure Event Hub, dove potranno essere letti e processati.


🏢 Provisioning del Dispositivo Edge

Prima di poter eseguire il Device App, il dispositivo che lo ospita deve essere configurato e registrato su Azure IoT Hub.

Nel nostro esempio, abbiamo simulato il dispositivo utilizzando Ubuntu 20.04 LTS.

Microsoft fornisce una guida ufficiale per il provisioning di un singolo dispositivo Linux con autenticazione simmetrica, disponibile qui: 👉 Guida Ufficiale Microsoft

Una volta terminata la configurazione, il dispositivo è pronto per eseguire Device App tramite Docker.


📡 Device App: Simulazione del Sensore IoT

Dove viene eseguito? 🔜 Sul dispositivo Edge (Docker)

Cosa fa?

  • Simula un sensore di temperatura che genera valori casuali.
  • Se la temperatura supera una soglia, invia un messaggio di allarme ad Azure IoT Hub.

📝 Codice del Sensore (main.py)

import json
import random
import time
import os
from azure.iot.device import IoTHubDeviceClient

# Connection string from environment variable
CONNECTION_STRING = os.getenv("IOT_HUB_CONNECTION_STRING")

if not CONNECTION_STRING:
    raise ValueError("IOT_HUB_CONNECTION_STRING is not set!")

client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)

def monitor_temperature():
    while True:
        temperature = random.uniform(-10, 10)
        threshold = 2

        if temperature < -threshold or temperature > threshold:
            message = {
                "temperature": temperature,
                "alert": "⚠️ Temperature out of range!"
            }
            print("⚠️ ALERT:", message)
            client.send_message(json.dumps(message))
        else:
            print(f"🌡 Temperature OK: {temperature:.2f}°C")

        time.sleep(5)

if __name__ == "__main__":
    try:
        client.connect()
        print("✅ Connected to IoT Hub!")
    except Exception as e:
        print(f"❌ Connection error: {e}")
    monitor_temperature()

🚀 Deploy dell’Immagine Docker

Dopo aver creato l’immagine Docker, è necessario caricarla su un Azure Container Registry (ACR) e successivamente configurare il deploy automatico tramite il portale di Azure.

Ecco i comandi per caricare l’immagine su ACR:

docker tag iot-edge-device myacr.azurecr.io/iot-edge-device
az acr login --name myacr
docker push myacr.azurecr.io/iot-edge-device

Dopo aver caricato l’immagine, accedi alla sezione Device di IoT Hub nel portale di Azure e compila il modulo per specificare l’immagine da deployare automaticamente sul dispositivo. Qui puoi anche impostare le variabili di ambiente necessarie.

Una volta completato questo passaggio, Azure distribuisce automaticamente l’immagine sul dispositivo Edge, senza necessità di interventi manuali.


📥 Event Consumer: Lettura dei Dati

Dove viene eseguito? 🔜 Sul PC o su un server

Cosa fa?

  • Riceve i dati inviati dal dispositivo Edge tramite Azure Event Hub.
  • Legge solo i nuovi messaggi per evitare duplicati.

📝 Codice del Consumer (main.py)

import os
from azure.eventhub import EventHubConsumerClient

# Connection string and Event Hub name from environment variables
CONNECTION_STR = os.getenv("EVENT_HUB_CONNECTION_STRING")
EVENTHUB_NAME = os.getenv("EVENT_HUB_NAME")
CONSUMER_GROUP = "$Default"

if not CONNECTION_STR or not EVENTHUB_NAME:
    raise ValueError("Environment variables EVENT_HUB_CONNECTION_STRING and EVENT_HUB_NAME must be set!")

def on_event(partition_context, event):
    print(f"📰 Message received from Partition {partition_context.partition_id}: {event.body_as_str()}")
    partition_context.update_checkpoint(event)

client = EventHubConsumerClient.from_connection_string(CONNECTION_STR, CONSUMER_GROUP, eventhub_name=EVENTHUB_NAME)

with client:
    print("📰 Listening for messages from Event Hub...")
    client.receive(on_event=on_event, starting_position="@latest")

Per avviare il consumer:

cd event-consumer
python main.py

🔍 Cosa aspettarsi dopo l’avvio del Consumer

Una volta avviato il consumer, questo si metterà in ascolto degli eventi provenienti da Azure Event Hub. Ogni volta che il Device App invia un messaggio di temperatura, il consumer lo riceverà e lo elaborerà.

Se tutto funziona correttamente, dovresti vedere un output simile nel terminale:

📰 Listening for messages from Event Hub...
📰 Message received from Partition 0: {"temperature": 5.6, "alert": "Temperature OK"}
📰 Message received from Partition 0: {"temperature": -3.2, "alert": "⚠️ Temperature out of range!"}
📰 Message received from Partition 0: {"temperature": 7.8, "alert": "Temperature OK"}

Se la temperatura supera la soglia impostata nel Device App, verrà generato un messaggio di allerta (⚠️ Temperature out of range!). Al contrario, se la temperatura rientra nei limiti, verrà visualizzato un semplice messaggio di conferma (Temperature OK).


✅ Conclusione

📂 Codice completo su GitHub 👉 DevAccelerateCom/azure-iot-edge-example

💡 Iscriviti al canale YouTube per altri tutorial! 🚀

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Torna in alto