Gateway con Node-RED (Raspberry Pi)
Guida passo passo per configurare un Raspberry Pi con Node-RED come gateway OPC UA a MQTT per Rela-ai.
Cosa ti serve
- Raspberry Pi 4 (2GB+ RAM) o qualsiasi Linux con Node.js
- Cavo ethernet per collegarlo alla rete del PLC
- Accesso a internet (WiFi o secondo cavo ethernet)
- Dati del PLC: IP, porta OPC UA, Node ID da monitorare
Passo 1: Installare Node-RED
Se usi Raspberry Pi OS, Node-RED si installa con un solo comando:
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)Rispondi "y" a tutte le domande. Al termine:
# Avviare Node-RED come servizio (si avvia automaticamente all'accensione)
sudo systemctl enable nodered
sudo systemctl start noderedAccedi a Node-RED dal browser: http://<IP-del-raspberry>:1880
A cosa serve
- Avviare un gateway con Node-RED su una Raspberry Pi in meno di 30 minuti.
- Tradurre OPC UA in MQTT quando il PLC parla solo OPC UA e vuoi inviare tramite MQTT.
- Avere un gateway programmabile visivamente (senza codice) per aggiungere trasformazioni.
Come funziona
Installi Node-RED e il plugin OPC UA su una Raspberry Pi. Crei un flow visuale: nodo OPC UA Client (legge dal PLC) → funzione di trasformazione (opzionale) → nodo MQTT Publisher (invia a Rela). Il flow gira 24/7 e si riavvia automaticamente con la Pi.
Passo 2: Installare il plugin OPC UA
Nell'interfaccia di Node-RED, vai su Menu (hamburger) → Manage Palette → Install e cerca:
node-red-contrib-opcuaClicca su "Install". Questo aggiunge i nodi OPC UA al pannello sinistro.
Passo 3: Creare il flusso OPC UA → MQTT
Trascina questi nodi sul canvas e collegali in ordine:
3.1 Nodo "OPC-UA Client"
- Endpoint:
opc.tcp://<IP-del-PLC>:4840(l'indirizzo del server OPC UA del PLC) - Action: Subscribe
- Node IDs: i nodi che vuoi monitorare (es:
ns=2;s=Temperature)
3.2 Nodo "Function" (trasformare in OPC UA Pub/Sub JSON)
Codice del nodo Function:
// Transforma data change de OPC UA a formato Pub/Sub JSON
var nodeName = msg.topic.split(";").pop() || "Unknown";
var value = msg.payload;
msg.payload = JSON.stringify({
"MessageType": "ua-data",
"PublisherId": "Gateway-" + env.get("HOSTNAME"),
"Messages": [{
"DataSetWriterId": 1,
"Payload": {}
}]
});
// Parsear para agregar el campo dinamico
var obj = JSON.parse(msg.payload);
obj.Messages[0].Payload[nodeName] = {
"Value": value,
"SourceTimestamp": new Date().toISOString(),
"StatusCode": 0
};
msg.payload = JSON.stringify(obj);
return msg;3.3 Nodo "MQTT Out"
- Server: URL del broker MQTT (es:
mqtt://broker.hivemq.com:1883) - Topic: il topic configurato in Rela-ai (es:
impianto-nord/gateway-linea1) - QoS: 0
3.4 Collegare
[OPC-UA Client] → [Function] → [MQTT Out]Clicca su Deploy (pulsante rosso in alto a destra).
Passo 4: Verificare
Apri un terminale e abbonati al topic per vedere se arrivano i messaggi:
mosquitto_sub -h broker.hivemq.com -t "impianto-nord/gateway-linea1" -vDovresti vedere messaggi JSON ogni volta che un valore cambia nel PLC.
Passo 5: Configurare Rela-ai
- Nel dashboard, crea una sorgente con protocollo OPC UA → Via Gateway MQTT
- Configura l'URL del broker e il topic che hai usato nel nodo MQTT Out
- Rela-ai inizia a ricevere i dati automaticamente
Monitorare piu nodi
Per monitorare piu nodi del PLC contemporaneamente, aggiungi piu nodi "OPC-UA Client" (uno per variabile) e collegali tutti allo stesso nodo Function. Il Function accumulera i campi nel Payload.
Alternativa: usa un solo nodo OPC-UA Client con Action "Subscribe" e configura piu Node ID separati da virgola.
Suggerimenti
- Riconnessione automatica: Node-RED si riconnette automaticamente se il PLC o il broker si disconnettono.
- Persistenza: Se il Raspberry Pi si riavvia, Node-RED parte automaticamente (se hai abilitato il servizio).
- Dashboard Node-RED: Puoi aggiungere un dashboard locale in Node-RED per visualizzare i dati in tempo reale dall'impianto.
- Sicurezza: Se il PLC richiede autenticazione OPC UA, configura utente/password nel nodo OPC-UA Client.
Benefici chiave
- Setup in meno di 30 minuti con passi riproducibili.
- Editor visuale — nessuna programmazione richiesta.
- Raspberry Pi + alimentazione = gateway completo per meno di $100.
- Flow riutilizzabili tra impianti dello stesso cliente.
- Riavvio automatico al boot della Pi.