Mosquitto: Iniziare

Come iniziare con Mosquitto

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione Mosquitto MQTT cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:

  • Scambi e trasferimenti illimitati di messaggi.
  • Autenticazione illimitata dei dispositivi tramite un'API esterna.
  • ACL avanzate su argomenti, utenti e azioni.
  • Nome di dominio personalizzabile sicuro con HTTPS (ad esempio, https://mqtt.your-company.com).
  • Aggiornamenti semplificati con un solo clic.
  • Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.

Risparmiate tempo e semplificate la vostra vita: bastano 5 minuti per provare la soluzione Mosquitto MQTT cloud hosting di Stackhero!

Mosquitto è un broker MQTT, che implementa il protocollo MQTT (Message Queuing Telemetry Transport), specificamente progettato per una comunicazione leggera tra dispositivi IoT e server.

Su Stackhero, Mosquitto è configurato con crittografia TLS e autenticazione utente per fornire un ambiente di comunicazione sicuro.

È possibile trovare esempi di codice pratici che mostrano come utilizzare Mosquitto su https://github.com/stackhero-io/mosquittoGettingStarted.

MQTT organizza la comunicazione in "topic", che fungono da canali per pubblicare e sottoscrivere dati. I dispositivi pubblicano messaggi su topic specifici o si iscrivono a essi per ricevere aggiornamenti pertinenti.

I topic in MQTT sono case-sensitive, devono contenere caratteri UTF-8 e richiedono almeno un carattere. La gerarchia all'interno dei topic è definita utilizzando il carattere slash (/).

Ecco un esempio di configurazione per dispositivi IoT che raccolgono dati di temperatura e umidità, identificati dai loro indirizzi MAC:

  • Per un dispositivo con indirizzo MAC 00:00:00:00:00:00:

    • Temperatura: devices/00:00:00:00:00:00/temperature
    • Umidità: devices/00:00:00:00:00:00/humidity
  • Per un dispositivo con indirizzo MAC 11:11:11:11:11:11:

    • Temperatura: devices/11:11:11:11:11:11/temperature
    • Umidità: devices/11:11:11:11:11:11/humidity

Le applicazioni possono iscriversi a un topic specifico, come devices/00:00:00:00:00:00/temperature, per ricevere dati dal rispettivo dispositivo IoT.

MQTT supporta i caratteri jolly per una gestione efficiente dei topic:

  • Il carattere jolly + corrisponde a un singolo livello nella gerarchia dei topic. Ad esempio, iscriversi a devices/+/temperature cattura topic come devices/1/temperature ma non devices/1/2/temperature.

  • Il carattere jolly # corrisponde a più livelli. Ad esempio, devices/# corrisponde a topic come devices/1/temperature, devices/2/humidity e devices/1/2/somethingElse.

Gli strumenti CLI mosquitto_pub e mosquitto_sub sono eccellenti per testare le configurazioni MQTT. Prima di utilizzarli, assicurarsi che l'opzione "Consenti connessioni non sicure" sia disabilitata nella configurazione di Mosquitto sul dashboard di Stackhero.

Ecco come testare:

  1. Iscriviti a tutti i topic utilizzando il carattere jolly #:

    mosquitto_sub -L -d "mqtts://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT_TLS>/#"
    
  2. Apri un altro terminale per pubblicare un messaggio su un topic:

    mosquitto_pub -L -d "mqtts://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT_TLS>/sensor/a" -m "It works"
    

Nella prima console, dovresti vedere il messaggio pubblicato insieme ai log di debug abilitati dall'opzione -d.

È possibile connettersi direttamente al server Mosquitto da un browser web utilizzando WebSockets. Fare riferimento alla documentazione "WebSockets" per ulteriori dettagli.

Esempi che mostrano come utilizzare Mosquitto con Node.js sono disponibili su https://github.com/stackhero-io/mosquittoGettingStarted.

Per utilizzare Mosquitto con Python, si consiglia la libreria client Paho MQTT Python. Installala utilizzando:

pip install paho-mqtt

Di seguito è riportato un esempio di script Python per connettersi a un server Mosquitto utilizzando crittografia TLS e autenticazione:

import paho.mqtt.client as mqtt
import random
import string
from paho.mqtt.client import CallbackAPIVersion

def on_connect(client, userdata, flags, reason_code, properties=None):
    if reason_code == 0:
        print("Connected successfully")
    else:
        print(f"Connection failed with reason {reason_code}")

def on_message(client, userdata, msg, properties=None):
    print(f"Received message: {msg.payload.decode()} on topic {msg.topic}")

def generate_client_id(length=8):
    characters = string.ascii_letters + string.digits
    return "client_" + ''.join(random.choice(characters) for _ in range(length))

client_id = generate_client_id()
client = mqtt.Client(
    client_id=client_id,
    callback_api_version=CallbackAPIVersion.VERSION2
)

client.on_connect = on_connect
client.on_message = on_message

host = "<XXXXXX>.stackhero-network.com"
port = <PORT_TLS>
client.username_pw_set("<USER>", "<PASSWORD>")
client.tls_set()

try:
    print(f"Connecting to {host} with client ID: {client_id}")
    client.connect(host, port)
    client.loop_start()
    client.subscribe("$SYS/#")

    try:
        while True:
            pass
    except KeyboardInterrupt:
        print("\nDisconnecting...")
        client.loop_stop()
        client.disconnect()

except Exception as e:
    print(f"Error: {e}")

Con queste istruzioni, dovreste essere ben equipaggiati per iniziare a lavorare con Mosquitto su Stackhero. Buona esplorazione di MQTT!