ELX-MQTT Broker
Un broker MQTT completo con un'interfaccia web viva
MQTT 3.1.1 e 5.0 scritti da zero, senza librerie di protocollo altrui. Un unico file che porta già con sé interfaccia, archiviazione e TLS: lo si installa e funziona.
Entrambe le versioni del protocollo, per intero
MQTT 3.1.1 e 5.0 scritti seguendo la specifica: tutte le proprietà dei pacchetti, gli alias degli argomenti, le sottoscrizioni condivise, gli identificatori di sottoscrizione, No Local, Retain Handling, Will Delay, Message Expiry, i codici di motivo e il pacchetto AUTH.
Un'interfaccia che mostra il traffico
Ritmo dei messaggi, banda, client collegati, argomenti attivi e un flusso di eventi — trasmessi via WebSocket, senza ricaricare la pagina. Un dispositivo che sbanda si vede, invece di doverlo dedurre.
Permessi per argomento
Una regola è un filtro, un tipo di accesso e un verdetto — permettere o negare — e tutto ciò che non è scritto è negato. Una sola riga con il segnaposto $u chiude un client nel proprio ramo dell'albero.
Ponti verso altri broker
Inoltro degli argomenti nei due sensi a livello di server: direzione, prefissi, TLS, protezione dai cicli e riconnessione automatica. Per unire due installazioni non serve alcuno script in mezzo.
Pubblicazione differita e limitatori
Pubblicare su $delayed/60/argomento arriva un minuto dopo e sopravvive a un riavvio. Un secchio a gettoni per collegamento e regole per argomento diradano un sensore loquace invece di scollegarlo.
Tutto via REST
Ciò che sa fare l'interfaccia lo sa fare anche un token: creare dispositivi, concedere permessi, leggere statistiche. Per i sistemi di monitoraggio esistono token di sola lettura.
Schermate
Che cos'è
ELX-MQTT Broker è un server di messaggi per il protocollo MQTT, quello che parlano la maggior parte dei sensori, dei controllori e dei sistemi domotici. I dispositivi pubblicano messaggi su argomenti, altri dispositivi si iscrivono a quegli argomenti, e il broker sta in mezzo: decide chi può parlare con chi e fa in modo che per strada non si perda nulla.
Qui il protocollo non è un involucro attorno alla libreria di qualcun altro. Entrambe le versioni sono scritte direttamente dalla specifica, ed è per questo che le parti scomode — sottoscrizioni condivise, scadenza dei messaggi, testamento differito, controllo di flusso — si comportano come dice la specifica e non come è capitato che le implementasse una dipendenza.
Cosa sa fare
| Ambito | Cosa ottenete |
|---|---|
| Protocollo | MQTT 3.1.1 e 5.0, QoS 0/1/2, messaggi conservati, testamento, sessioni persistenti, code per client assenti |
| Trasporti | TCP semplice, TLS, MQTT su WebSocket e su WebSocket protetto |
| Interfaccia | Grafici dal vivo, elenco dei client, albero degli argomenti, flusso di eventi, modulo di pubblicazione, impostazioni — in sette lingue |
| Controllo degli accessi | Permessi per argomento, negazione predefinita, segnaposto per utente, lettura e scrittura separate |
| Credenziali | Elenco interno, MariaDB o MySQL, SQLite, CSV, JWT, servizio HTTP esterno |
| Instradamento | Regole di riscrittura degli argomenti, sottoscrizioni automatiche, ponti fra broker |
| Regolazione del traffico | Secchio a gettoni per collegamento, ritmi e scarti per schema di argomento |
| Pianificazione | Pubblicazione differita tramite $delayed, compatibile con EMQX, visibile e annullabile |
| Integrazione | API REST con token, token di sola lettura, endpoint di statistica |
| Persistenza | Messaggi conservati, sessioni, code e messaggi differiti in SQLite |
Metterlo in funzione
Su Linux il pacchetto installa un servizio systemd e lo avvia. Su Windows l'eseguibile funziona così com'è — avviatelo e aprite l'interfaccia.
sudo dpkg -i elxmqttbroker_*.deb
sudo systemctl status elxmqttbroker
# interfaccia: http://<server>:8567 MQTT: 1883, TLS: 8883
elxmqttbroker.exe
# interfaccia: http://127.0.0.1:8567
# accesso predefinito: admin / admin — da cambiare al primo ingresso
In breve
- Protocollo
- MQTT 3.1.1 e MQTT 5.0
- Sistemi operativi
- Debian, Ubuntu, Windows 10 e 11
- Architetture
- amd64, arm64, armhf
- Scritto in
- Go, senza CGO
- Archiviazione
- SQLite, un solo file
- Lingue dell'interfaccia
- Sette
- Porte predefinite
- 1883, 8883, 8567
- Dipendenze esterne
- Nessuna