Mosquitto: Aan de slag

Hoe te beginnen met Mosquitto

👋 Welkom bij de Stackhero-documentatie!

Stackhero biedt een kant-en-klare Mosquitto MQTT cloud oplossing die tal van voordelen biedt, waaronder:

  • Onbeperkte uitwisseling en overdracht van berichten.
  • Onbeperkte apparaatverificatie via een externe API.
  • Geavanceerde ACL's op onderwerpen, gebruikers en acties.
  • Aanpasbare domeinnaam beveiligd met HTTPS (bijvoorbeeld, https://mqtt.uw-bedrijf.com).
  • Moeiteloze updates met slechts één klik.
  • Optimale prestaties en robuuste beveiliging aangedreven door een privé en toegewijde VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Mosquitto MQTT cloud hosting oplossing van Stackhero te proberen!

Mosquitto is een MQTT-broker die het MQTT-protocol (Message Queuing Telemetry Transport) implementeert, specifiek ontworpen voor lichte communicatie tussen IoT-apparaten en servers.

Op Stackhero is Mosquitto geconfigureerd met TLS-versleuteling en gebruikersauthenticatie om een veilige communicatieomgeving te bieden.

U kunt praktische codevoorbeelden vinden die laten zien hoe u Mosquitto kunt gebruiken op https://github.com/stackhero-io/mosquittoGettingStarted.

MQTT organiseert communicatie in "topics", die fungeren als kanalen voor het publiceren en abonneren op gegevens. Apparaten publiceren berichten naar specifieke topics of abonneren zich erop om relevante updates te ontvangen.

Topics in MQTT zijn hoofdlettergevoelig, moeten UTF-8-tekens bevatten en vereisen ten minste één teken. De hiërarchie binnen topics wordt gedefinieerd met behulp van het schuine streep (/) teken.

Hier is een voorbeeldconfiguratie voor IoT-apparaten die temperatuur- en vochtigheidsgegevens verzamelen, geïdentificeerd door hun MAC-adressen:

  • Voor een apparaat met MAC-adres 00:00:00:00:00:00:

    • Temperatuur: devices/00:00:00:00:00:00/temperature
    • Vochtigheid: devices/00:00:00:00:00:00/humidity
  • Voor een apparaat met MAC-adres 11:11:11:11:11:11:

    • Temperatuur: devices/11:11:11:11:11:11/temperature
    • Vochtigheid: devices/11:11:11:11:11:11/humidity

Applicaties kunnen zich abonneren op een specifiek topic, zoals devices/00:00:00:00:00:00/temperature, om gegevens van het betreffende IoT-apparaat te ontvangen.

MQTT ondersteunt wildcards voor efficiënte topicbeheer:

  • De + wildcard komt overeen met één niveau in de topic-hiërarchie. Bijvoorbeeld, abonneren op devices/+/temperature vangt topics zoals devices/1/temperature maar niet devices/1/2/temperature.

  • De # wildcard komt overeen met meerdere niveaus. Bijvoorbeeld, devices/# komt overeen met topics zoals devices/1/temperature, devices/2/humidity en devices/1/2/somethingElse.

De mosquitto_pub en mosquitto_sub CLI-tools zijn uitstekend voor het testen van MQTT-configuraties. Zorg ervoor dat de optie "Allow clear connections" is uitgeschakeld in uw Mosquitto-configuratie op het Stackhero-dashboard voordat u ze gebruikt.

Hier is hoe u kunt testen:

  1. Abonneer u op alle topics met behulp van de # wildcard:

    mosquitto_sub -L -d "mqtts://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT_TLS>/#"
    
  2. Open een andere terminal om een bericht naar een topic te publiceren:

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

In de eerste console zou u het gepubliceerde bericht moeten zien samen met de debuglogs die zijn ingeschakeld door de -d vlag.

U kunt rechtstreeks verbinding maken met uw Mosquitto-server vanuit een webbrowser met behulp van WebSockets. Raadpleeg de "WebSockets" documentatie voor meer details.

Voorbeelden die laten zien hoe u Mosquitto met Node.js kunt gebruiken, zijn beschikbaar op https://github.com/stackhero-io/mosquittoGettingStarted.

Om Mosquitto met Python te gebruiken, wordt de Paho MQTT Python client library aanbevolen. Installeer het met:

pip install paho-mqtt

Hieronder staat een voorbeeld van een Python-script om verbinding te maken met een Mosquitto-server met behulp van TLS-versleuteling en authenticatie:

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}")

Met deze instructies zou u goed uitgerust moeten zijn om te beginnen met werken met Mosquitto op Stackhero. Veel plezier met het verkennen van MQTT!