# Broker MQTT

> Il broker MQTT della stazione stessa: la sua riga nella colonna Comunicazione, come accenderlo e spegnerlo, la porta e i dispositivi connessi, l'autenticazione del client, la voce Questa stazione che dà al driver MQTT, e che cosa non fa.

Il **Broker MQTT** riceve i messaggi MQTT dei dispositivi della rete, così un banco di prova o un piccolo laboratorio legge le sue schede ESP32, i gateway e i sensori senza installare un broker proprio. È la terza riga della cartella Server, dopo il [server Modbus](connector-modbus-server), e non è un driver: i dispositivi si connettono a lui e pubblicano, e la stazione legge ciò che pubblicano attraverso il [driver MQTT](driver-mqtt), come legge qualsiasi broker. Il suo pannello lo dice sotto il titolo: « Riceve i messaggi MQTT dei dispositivi della rete, che così non hanno bisogno di un broker proprio. Riceve le connessioni e non ne apre mai. » Chi può vedere il Connector legge la pagina; chi può configurarlo la cambia.

## La riga nella colonna {#the-row-in-the-column}

La riga si trova nella cartella Server dell'albero della colonna Comunicazione, sotto il server Modbus, con un'icona di concentratore dove i driver mostrano una spina. Una stazione ne ha esattamente uno, che non viene mai creato né eliminato. La casella di ricerca lo trova per nome, e le pillole di stato lo classificano secondo il suo stato: spento finché è spento, problemi finché la sua porta è occupata o non è riuscito ad ascoltare, in ordine negli altri casi. Accanto al nome dice che cosa sta facendo il broker, e un punto lo riassume:

| La riga dice | Punto | Quando |
| --- | --- | --- |
| « Spento » | grigio | Il broker è spento, ed è così che comincia ogni stazione. |
| « In ascolto sulla porta 1883 », poi quanti dispositivi sono connessi: « Nessun client connesso », « 1 client connesso », « 3 client connessi » | verde | Il broker è acceso e il runtime è in esecuzione: la porta è aperta. |
| « La porta 1883 è occupata » | rosso | Il broker è acceso, ma un altro programma occupa la porta. |
| « Impossibile restare in ascolto sulla porta 1883 » | rosso | Il broker è acceso, ma Windows ha rifiutato di aprire la porta per un altro motivo. |
| « Runtime fermo » | grigio | Il broker è acceso e il runtime è fermo: la porta resta chiusa finché il runtime non riparte. |

Il punto appartiene solo al broker: non entra nel riepilogo della cartella Driver né nella barra di stato, che parlano delle apparecchiature che la stazione legge.

## Accenderlo e spegnerlo {#turning-it-on-and-off}

| Comando | Che cosa fa | In grigio quando |
| --- | --- | --- |
| **Abilita** | Accende il broker: « Accendere il broker: resta in ascolto sulla porta 1883 finché il runtime è in esecuzione, e il driver MQTT riceve la voce con cui questa stazione lo legge. » Il registro delle azioni dice « Broker MQTT acceso. » | Il broker è già acceso (« Il broker è già acceso. »), una prova occupa la stazione, oppure il runtime è fermo. |
| **Disabilita** | Spegne il broker: « Spegnere il broker: chiude la sua porta e scollega tutti i client. » Il registro delle azioni dice « Broker MQTT spento. » | Il broker è già spento (« Il broker è già spento. »), una prova occupa la stazione, oppure il runtime è fermo. |

A un ruolo che non può configurare il Connector i due comandi non vengono disegnati. Essere acceso è un'impostazione che la stazione conserva, e l'ascolto segue il runtime: il broker apre la sua porta appena il runtime parte, la chiude e scollega ogni dispositivo quando il runtime si ferma, e la riapre quando il runtime torna. Una porta che non riesce ad aprire è uno stato suo, mostrato sulla riga e sotto il campo della porta, e la stazione continua a funzionare senza di lui.

## La scheda Porta e client {#the-port-and-clients-card}

| Campo | Che cosa fa | Valori e predefinito |
| --- | --- | --- |
| **Porta TCP** | La porta su cui il broker ascolta, su ogni indirizzo di questo computer, IPv4 e IPv6, senza TLS. Cambiarla mentre il broker ascolta chiude la porta vecchia e apre quella nuova, il che scollega ogni dispositivo; il registro delle azioni dice « Broker MQTT spostato sulla porta 1884. » | Da 1 a 65535. Predefinito 1883, la porta MQTT senza TLS. |
| **Client connessi** | Quanti dispositivi sono connessi ora. Finché ce n'è almeno uno, una tabella elenca ciascuno con **ID client**, **Indirizzo del client** (il suo indirizzo IP e la sua porta) e **Connesso da**. | Sola lettura. |

Una porta su cui il broker non può spostarsi viene rifiutata prima di salvare qualsiasi cosa, detta sotto il campo, e il campo torna alla porta in vigore: un numero fuori dall'intervallo (« La porta deve essere compresa tra 1 e 65535. »), la porta del server web, dell'accesso agente, del server OPC UA o del [server Modbus](connector-modbus-server) (« La porta N è già del server Modbus. Scegliere un'altra porta oppure spostare prima il server Modbus. »), e una porta che un altro programma occupa (« La porta N è occupata su questa macchina. Chiudere ciò che la tiene occupata oppure scegliere un'altra porta. »). Gli altri campi di porta della stazione rifiutano la porta del broker allo stesso modo: « La porta N è già del broker MQTT. Scegliere un'altra porta oppure spostare prima il broker MQTT. »

Sotto la scheda, una nota dice: « Senza TLS: i dispositivi si connettono in MQTT semplice, al massimo 100 alla volta. Le altre macchine raggiungono questo broker solo se Windows Firewall lascia entrare la porta TCP 1883: consentirlo è una decisione dell'operatore, e questa stazione non lo fa mai da sola. I messaggi conservati restano finché la stazione non si riavvia. »

Al massimo 100 dispositivi sono connessi alla volta, compresa la sessione della stazione stessa: uno in più viene rifiutato con il motivo MQTT di quota superata, e un dispositivo che si riconnette con il proprio ID client riprende il suo posto. I messaggi conservati restano in memoria: tornano dopo che il runtime si ferma e riparte, e spariscono quando la stazione si riavvia.

### Firewall di Windows {#windows-firewall}

La stazione non modifica mai il Firewall di Windows da sola. Sotto la nota, un punto e una frase dicono se la sua regola in entrata per il broker lascia entrare la porta: « Le connessioni MQTT in entrata sono consentite sulla porta 1883 per le reti private e di dominio. », « I client di rete potrebbero essere bloccati perché nessuna regola di proprietà dell'applicazione consente la porta 1883. » oppure, su un avvio che non può gestire il firewall, come un profilo isolato o una copia che non è il programma installato, « Questo avvio non può gestire il Firewall di Windows. Configurare l'accesso in entrata nel sistema operativo se necessario. » Solo finché la regola manca, **Consenti la rete locale** chiede a Windows, con l'approvazione dell'operatore, una regola chiamata « Ganter Lab MQTT broker »: TCP in entrata sulla porta, reti private e di dominio, la sottorete locale, questo programma. Si preme dall'app della stazione stessa (« La regola del firewall può essere applicata solo dall'applicazione desktop della stazione. »), e il registro delle azioni dice « Richiesta di accesso al Firewall di Windows per la porta MQTT 1883… », poi « Il Firewall di Windows ora consente le connessioni MQTT sulla porta 1883. »

## Autenticazione del client {#client-authentication}

La scheda **Autenticazione del client** decide chi può connettersi:

| Scelta | Chi si connette |
| --- | --- |
| **Anonima** | « Qualsiasi dispositivo si connette, con o senza nome utente e password. » Ogni stazione comincia così. |
| **Nome utente e password** | « Ogni dispositivo accede con l’unico nome utente e l’unica password qui sotto. » Un dispositivo con qualsiasi altro nome utente o password viene rifiutato, e il diario tecnico lo registra, raggruppato come ogni errore ripetuto. |

Sotto la scelta stanno **Nome utente** e la password, la cui etichetta dice solo se ce n'è una salvata: **Password del server (salvata)** oppure **Password del server (nessuna salvata)**. La password salvata non viene mai ridisegnata nella pagina: il campo comincia vuoto, e « Lasciare il campo vuoto per mantenere la password salvata. » La scelta, il nome utente e la password si applicano insieme con **Applica**, in grigio finché nulla è cambiato (« Modificare l'autenticazione per applicarla. »); il registro delle azioni dice allora « Autenticazione del broker MQTT salvata. », e, come avverte la riga accanto al pulsante, « Un dispositivo già connesso che la nuova autenticazione non ammette viene scollegato. »

| Inserimento | Rifiutato con |
| --- | --- |
| Nome utente e password scelto con il nome utente o la password vuoti | « Inserire un nome utente e una password prima che il broker li richieda. » |
| Il nome utente cancellato mentre è in vigore Nome utente e password | « Il broker chiede un nome utente a ogni dispositivo, quindi non può essere vuoto. Scegliere prima Anonima per cancellarlo. » |
| Un nome utente o una password di più di 128 caratteri | « Un nome utente ha al massimo 128 caratteri. » |

Con Anonima, il nome utente e la password restano salvati per la volta successiva. La password è conservata come quella di un broker che la stazione legge, protetta per questo account Windows: un backup aperto su un'altra macchina o un altro account arriva senza di essa, nessun dispositivo accede finché non viene inserita di nuovo, e la scheda dice « Non è leggibile su questo account Windows: si apre solo sulla macchina e sull'account Windows che l'hanno inserito. Reinserirlo qui. »

## Questa stazione {#this-station}

L'ultima scheda del pannello, **Questa stazione**, dice che cosa il broker dà al driver MQTT: « Acceso, il broker crea la voce Questa stazione sotto il driver MQTT, attraverso cui questa stazione legge i dispositivi che pubblicano qui: su 127.0.0.1, con la porta e l'autenticazione del broker. Aggiungere quei dispositivi sotto Questa stazione, con una scansione o a mano. Spegnere il broker lascia Questa stazione e i suoi dispositivi al loro posto, scollegati. »

| Momento | Che cosa succede |
| --- | --- |
| Il broker viene acceso e la stazione non ha la voce | Il driver MQTT viene aggiunto alla stazione e riceve il broker **Questa stazione**: 127.0.0.1, la porta del broker, senza TLS, abilitato, con il nome utente e la password del broker quando l'autenticazione è Nome utente e password. |
| La porta o l'autenticazione cambiano | La voce segue: host, porta e autenticazione diventano quelli del broker. Il nome, l'ID client, il keep-alive e se è abilitata restano quelli scelti. Il suo pannello dice « Questa voce è il modo in cui questa stazione legge il proprio broker MQTT (Server, Broker MQTT): host, porta e autenticazione seguono quel broker, e la voce resta finché il broker è acceso. » |
| Il broker è acceso | La voce non si può eliminare: **Elimina broker** resta in grigio nella barra dei comandi, nel menu del clic destro e nella tabella del driver, e dice « Il broker 'Questa stazione' è il modo in cui questa stazione legge il proprio broker MQTT, quindi resta finché quel broker è acceso. Spegnere prima il broker MQTT in Server. » |
| Il broker viene spento | La voce e i suoi dispositivi restano dove sono, scollegati. Eliminata allora, viene ricreata la prossima volta che il broker viene acceso. |

Sotto la voce non si aggiunge nulla da solo: aggiungere i dispositivi che pubblicano sul broker con la scansione del broker o a mano, come sotto qualsiasi [broker del driver MQTT](driver-mqtt#the-broker). La sessione della stazione stessa aspetta di più tra un tentativo e l'altro finché il broker è spento, quindi, dopo che il broker viene acceso, la voce può impiegare fino a 30 secondi per risultare in linea. Questa stazione ha anche la [scheda Pubblicare](driver-mqtt#the-publish-card) di ogni broker: ciò che la stazione pubblica dei propri dati sul proprio broker.

## Accesso agente {#agent-access}

| Strumento | Che cosa fa |
| --- | --- |
| `station_broker_status` | Riporta il broker: acceso o spento, la porta, lo stato, l'autenticazione senza la password, i dispositivi connessi e la voce Questa stazione. Continua a funzionare con il runtime fermo. |
| `station_broker_configure` | Accende o spegne il broker, sposta la sua porta e cambia l'autenticazione, con le regole del pannello. |

Nessuno dei due nomi comincia con `mqtt_broker_`, gli strumenti dei broker che la stazione legge; entrambi sono descritti con tutti gli altri strumenti in [Strumenti](agent-tools).

## Che cosa non fa {#what-it-does-not-do}

- Niente TLS e niente WebSocket: i dispositivi si connettono in MQTT semplice su TCP.
- Un solo nome utente e una sola password per tutti i dispositivi, mai uno per dispositivo.
- Niente sessioni persistenti, e nessun messaggio conservato sopravvive a un riavvio della stazione.
- Si ferma con la stazione: i dispositivi che continuano a pubblicare mentre la stazione è spenta hanno bisogno di un broker proprio ([Installare un broker](driver-mqtt#installing-a-broker)).
