Panificio italiano — flotta di camere di lievitazione (Modbus TCP + VPN)
Un panificio industriale italiano collega 3 camere di lievitazione Carel pCO5+ a Rela AI con un solo tunnel VPN. Setup completo, mappatura Modbus reale, alert WhatsApp in pochi minuti.
Panificio italiano — flotta di camere di lievitazione
Un panificio industriale italiano di medie dimensioni vuole monitorare le sue 3 camere di lievitazione sotto un unico tunnel VPN. Tutti e 3 i PLC sono Carel pCO5+ con scheda pCOWeb (la combinazione dominante nelle camere di lievitazione di fabbricazione italiana). Obiettivo: AHI per camera, alert su WhatsApp quando temperatura/umidità escono dal range, e ordine di lavoro automatico al tecnico di turno.
Riassunto esecutivo
Il punto di svolta: un solo
.confdi WireGuard copre tutte e 3 le camere. Ogni PLC resta un asset indipendente in Rela con il suo AHI, la sua finestra di manutenzione e il suo responsabile, ma il cliente configura la rete una volta sola.
| Prima | Dopo |
|---|---|
| 3 camere = 3 visite tecniche per aprire 3 VPN | 1 visita, 1 tunnel, 3 fonti |
| L'operatore controlla fisicamente ogni camera ogni 2 ore | Avviso WhatsApp in meno di 5 min quando qualcosa esce dal range |
| Sonda guasta scoperta solo quando si perde un impasto | L'Health Index rileva la deriva giorni prima del guasto |
| Nessuna tracciabilità di chi ha gestito quale camera | Ogni allarme genera un task con SLA per camera |
A cosa serve
- Sorvegliare 3 camere di lievitazione distinte (linee A, B, C) senza sovraccaricare l'operatore.
- Catturare il ciclo completo di ogni camera: setpoint contro valore misurato di temperatura, umidità, fase attiva, porta aperta.
- Associare ogni lettura all'asset corretto (camera A, B, C) cosicché AHI e Remaining Useful Life siano per macchina, non aggregati.
- Generare alert e ordini di lavoro diversi a seconda della camera in guasto, senza duplicare le regole.
Prima di iniziare — perché sei tu a configurare il peer
Il tuo team IT potrebbe proporre: "vi diamo le credenziali della nostra VPN aziendale, collegatevi con quelle". La risposta è ferma: no.
Tre ragioni critiche (le 9 complete sono in Perché un tunnel dedicato):
- Principio del minimo privilegio: la tua VPN aziendale apre l'intera rete (ERP, mail, SharePoint, OT). Rela ha bisogno solo della subnet del PLC. Una violazione lato Rela colpisce una subnet OT, non tutta l'azienda.
- Revoca in pochi secondi: elimini il peer dal tuo router quando vuoi, senza ticket né coordinamenti con noi. La chiave privata vive nel tuo apparato e non esce mai.
- Conformità (IEC 62443, NIST SP 800-82, SOC 2, ISO 27001): tutte richiedono la separazione IT/OT tramite tunnel dedicato. Condividere credenziali aziendali è un findable diretto in qualsiasi audit.
Condividere le credenziali della VPN aziendale esce dal modello self-service ed entra nel deployment enterprise custom (prezzo diverso, tunnel IPsec site-to-site dedicato).
Come funziona
flowchart LR
PLC_A["Carel pCO5 plus<br/>Camera Linea A<br/>192.168.10.50"] --> R[("Router del cliente<br/>WireGuard + DNAT")]
PLC_B["Carel pCO5 plus<br/>Camera Linea B<br/>192.168.10.51"] --> R
PLC_C["Carel pCO5 plus<br/>Camera Linea C<br/>192.168.10.52"] --> R
R -- "WireGuard tunnel" --> CONC[("Concentratore<br/>Rela VPN")]
CONC --> WORKER[("Cloud Run worker<br/>3 modbus_listener tasks")]
WORKER --> PIPE[("Pipeline predittiva<br/>anomaly + health + RUL")]
PIPE --> AST_A[Asset Linea A]
PIPE --> AST_B[Asset Linea B]
PIPE --> AST_C[Asset Linea C]Il flusso in una frase: ogni PLC parla Modbus TCP sulla sua LAN; il router del cliente riscrive indirizzi VPN in indirizzi LAN; il worker di Rela legge i registri come se le 3 camere fossero sulla sua stessa rete; la pipeline attribuisce ogni evento all'asset corretto.
Parametri / Configurazione
Mappatura Modbus tipica del Carel pCO5+ (firmware standard di lievitazione; gli OEM possono variare gli indirizzi — confermare sempre con il manuale del costruttore):
| Variabile | Tipo | Funzione | Indirizzo | Range realistico |
|---|---|---|---|---|
| Setpoint temperatura | float32 R/W | Holding (FC 3) | 1 | 2 a 35 °C |
| Temperatura misurata | float32 RO | Holding (FC 3) | 2 | -5 a 45 °C |
| Setpoint umidità | float32 R/W | Holding (FC 3) | 3 | 60 a 90 % |
| Umidità misurata | float32 RO | Holding (FC 3) | 4 | 0 a 100 % |
| Velocità ventilatore | uint16 R/W | Holding (FC 3) | 5 | 0 a 100 % |
| Fase di ciclo (1=blocco, 2=conservazione, 3=risveglio, 4=lievitazione, 5=mantenimento) | uint16 RO | Holding (FC 3) | 10 | 1 a 5 |
| Porta aperta | bool RO | Discrete (FC 2) | 1 | 0 o 1 |
| Allarme sonda T | bool RO | Discrete (FC 2) | 20 | 0 o 1 |
Indirizzi di rete (esempio realistico):
| Piano | Camera A | Camera B | Camera C |
|---|---|---|---|
| LAN del cliente | 192.168.10.50 | 192.168.10.51 | 192.168.10.52 |
| Indirizzo VPN (DNAT) | 10.200.7.50 | 10.200.7.51 | 10.200.7.52 |
| Subnet assegnata | 10.200.7.0/24 (stessa /24 per tutte e 3) |
Limite di connessioni concorrenti: la scheda pCOWeb del Carel accetta al massimo 4 client Modbus TCP simultanei. Se l'impianto ha già SCADA + HMI + tablet operatore che leggono il PLC, l'aggiunta di Rela può saturare la quota e far cadere la connessione più vecchia. Coordinare il rollout con il team di automazione.
Come usarlo
Passo 1 — Creare il tunnel VPN (una sola volta)
- Sidebar → Settings → Connectivity.
- Inserire l'etichetta:
Panificio - Produzione. - Cliccare Crea peer. Il backend assegna
10.200.7.0/24, IP del cliente10.200.7.2. - Scaricare il
.confdi WireGuard. Importarlo nel router del cliente (Mikrotik, pfSense, OPNsense — qualsiasi router con WireGuard nativo).
Passo 2 — DNAT delle 3 camere sul router
Il cliente apre il router e aggiunge 3 regole NAT (sintassi Mikrotik):
/ip firewall nat
add chain=dstnat dst-address=10.200.7.50 dst-port=502 \
protocol=tcp action=dst-nat to-addresses=192.168.10.50 to-ports=502
add chain=dstnat dst-address=10.200.7.51 dst-port=502 \
protocol=tcp action=dst-nat to-addresses=192.168.10.51 to-ports=502
add chain=dstnat dst-address=10.200.7.52 dst-port=502 \
protocol=tcp action=dst-nat to-addresses=192.168.10.52 to-ports=502
/ip firewall filter
add action=accept chain=forward in-interface=rela-vpn src-address=10.200.0.0/16Perché è importante: il worker di Rela "vede" le camere come 10.200.7.50/.51/.52. Il router traduce questi indirizzi all'IP reale del PLC in LAN. Saltando questo passo, le 3 camere restano irraggiungibili anche con il tunnel attivo.
Passo 3 — Creare i 3 asset in Rela
Sidebar → Asset → + Nuovo. Ripetere 3 volte:
| Campo | Camera A | Camera B | Camera C |
|---|---|---|---|
| Nome | Camera Lievitazione Linea A | Camera Lievitazione Linea B | Camera Lievitazione Linea C |
| Asset code | LIE-A | LIE-B | LIE-C |
| Asset type | fermentation_chamber | fermentation_chamber | fermentation_chamber |
| Criticità | high | high | high |
| Plant | Panificio Centrale | Panificio Centrale | Panificio Centrale |
| Area | Produzione | Produzione | Produzione |
| Linea | Linea A | Linea B | Linea C |
Passo 4 — Creare l'agente macchina
Sidebar → Allarmi → Agenti macchina → + Nuovo.
Nome: Sorvegliante Lievitazione
Modello: gemini-3.1-pro-preview
Auto-assign task: sì → Reparto "Produzione"
Auto-notify WhatsApp: sì → Numero del capo turno
Escalation: sì
Step 1: 5 min → Operatore di turno
Step 2: 15 min → Capo turno
Step 3: 30 min → Direttore di produzione
RCA enabled: sì → Min severity: criticalUn solo agente copre le 3 camere; le regole possono filtrare per source_id se serve un routing diverso per camera.
Passo 5 — Creare le 3 fonti Modbus
Sidebar → Allarmi → Sources → + Nuova fonte. Ripetere 3 volte, una per camera:
Source ID: lievitazione-linea-a (...-b, ...-c)
Agente: Sorvegliante Lievitazione
Protocollo: Modbus TCP
Modbus host: 10.200.7.50 (.51 per B, .52 per C)
Modbus port: 502
Unit ID: 1
Connect timeout: 5 s
Registri:
- temperatura_misurata addr=2 type=float32 fc=3 unit="°C"
emit=data_change deadband=0.5
- umidita_misurata addr=4 type=float32 fc=3 unit="%"
emit=data_change deadband=2.0
- fase_ciclo addr=10 type=uint16 fc=3
emit=data_change deadband=0
- porta_aperta addr=1 type=bool fc=2
emit=bit_flip
- allarme_sonda_t addr=20 type=bool fc=2
emit=bit_flip
Min interval: 10 s
Min severity: warningPasso 6 — Collegare ogni fonte al suo asset
Sidebar → Asset → cliccare su Camera Lievitazione Linea A → Modifica → campo event_source_ids: aggiungere lievitazione-linea-a. Salvare. Ripetere per B e C.
Perché è importante: senza questo collegamento, gli eventi arrivano dal PLC ma AHI, RUL e KPI non sanno a quale camera attribuirli. Con il collegamento, l'intera pipeline predittiva funziona per camera individuale.
Passo 7 — Verificare che le 3 connessioni siano attive
Tornare a Allarmi → Sources. Le 3 righe devono mostrare una spia verde lampeggiante. In meno di 60 secondi devono iniziare ad apparire eventi in Allarmi → Live con event_type=DATA_CHANGE e i registri decodificati (temperatura, umidità, fase).
Se una camera resta rossa, vedi Troubleshooting.
Casi d'uso reali
Allarme porta dimenticata aperta
L'operatore lascia la porta della Camera B aperta a fine turno notte. In 30 secondi:
- Il Carel pCO5+ flippa la coil 1 a
1. - Il worker riceve
bit_flip→MachineEventRequest{event_type: "DATA_CHANGE", metadata: {porta_aperta: true}}. - La pipeline elabora; l'agente Sorvegliante Lievitazione genera il task "Chiudere porta camera B" assegnato all'operatore di turno.
- Il messaggio WhatsApp arriva all'operatore in meno di 1 minuto.
- Se non viene chiusa entro 5 min, escala al capo turno.
Deriva della sonda di umidità
La Camera A riporta umidità 80% ma il setpoint era 78%. Il rilevatore di anomalie ML (IsolationForest + LOF) impara il pattern normale in 7 giorni. Quando la sonda inizia a deviare di +5% in modo costante, prima che l'impasto venga compromesso, l'AHI scende da A a B e il RUL suggerisce ricalibrazione entro 2 settimane. Il task di manutenzione preventiva viene generato automaticamente.
Guasto elettrico parziale
Una caduta di tensione sulla Linea C spegne il ventilatore. La coil di allarme della sonda non si attiva (la sonda funziona), ma la temperatura inizia a salire di 0,3 °C/min. Le regole deterministiche rilevano temperatura_misurata > setpoint + 3°C per 3 campioni consecutivi (configurazione di recurrence) e generano severity critical. Escalation diretta al capo turno.
Limitazioni e ipotesi
- Gli indirizzi Modbus dipendono dal firmware OEM. La mappatura della tabella è il pattern Carel standard, ma ogni costruttore di camera (Climaset, Forni Fiorini e gli altri OEM italiani tipici) personalizza il firmware. Chiedere sempre il manuale all'integratore prima di configurare i registri.
- Le 3 camere devono essere sulla stessa LAN del cliente. Se sono in sedi diverse, servono 3 tunnel VPN distinti (un peer per sito). Il modello "1 tunnel = 1 sito fisico" resta valido.
- Modbus TCP è in chiaro. Modbus non ha credenziali native — la sicurezza la fornisce il tunnel WireGuard. Il firewall del router deve accettare traffico solo da
10.200.0.0/16verso i PLC, mai da Internet aperto. - Il listener gira su un solo worker. Un riavvio del worker (deploy o crash) riavvia tutti e 3 i listener insieme con backoff esponenziale. Il circuit breaker apre per 5 minuti in caso di fallimenti sostenuti. Perdita tipica di dati a un riavvio: 30-60 secondi.
Troubleshooting
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| 1 camera verde, 2 rosse | DNAT mal configurato su 2 IP | Verificare le 3 regole Mikrotik rispetto al Passo 2 |
| Tutte e 3 rosse, timeout | WireGuard giù o filter rule che blocca | wg show sul router; verificare che forward in-interface=rela-vpn sia accettato |
| Verde ma 0 eventi in 5 min | Indirizzo Modbus errato del registro | Confrontare addr con il manuale del costruttore; testare con mbpoll dalla LAN del cliente |
| Eventi arrivano ma niente AHI | Manca il collegamento event_source_ids nell'asset | Passo 6 |
| Eventi OK ma niente alert WhatsApp | min_severity della fonte maggiore della severity reale | Abbassare a info per debug, controllare i log dell'agente |
Vantaggi chiave
- Setup VPN unico: 1 cliente, 1 router, 1
.conf— indipendentemente da quante camere ci siano. - Tracciabilità per asset: AHI, RUL, KPI e task sono calcolati per camera individuale.
- Manutenzione predittiva dal giorno 7: il modello impara i pattern normali in una settimana e inizia a rilevare la deriva.
- Escalation differenziata: una camera critica (Linea A, lievito madre) può avere un'escalation più aggressiva di una camera di backup.
- Zero hardware aggiuntivo: non si vende né si installa gateway, sensore o datalogger. Si riusa il PLC e la rete esistenti.
Vedi anche
- Flotta eterogenea — 3 marche di PLC, un solo tunnel VPN — quando le camere sono di marche diverse.
- Perché un tunnel dedicato — le 9 ragioni per cui non condividiamo la VPN aziendale del cliente.
App Mobile (PWA)
Progressive Web App con cache IndexedDB, azioni in sospeso, indicatore di connessione e pulsante di azione flottante.
Panificio — Monitoraggio Catena del Freddo
Caso d'uso: un panificio collega un freezer via Modbus, configura il monitoraggio della catena del freddo e riceve allerte WhatsApp