Mosquitto: Erste Schritte

Wie man mit Mosquitto beginnt

👋 Willkommen in der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite Mosquitto MQTT Cloud Lösung, die zahlreiche Vorteile bietet, darunter:

  • Unbegrenzter Nachrichtenaustausch und -transfer.
  • Unbegrenzte Geräteauthentifizierung über eine externe API.
  • Erweiterte ACLs für Themen, Benutzer und Aktionen.
  • Anpassbarer Domainname gesichert mit HTTPS (zum Beispiel, https://mqtt.ihre-firma.com).
  • Mühelose Updates mit nur einem Klick.
  • Optimale Leistung und robuste Sicherheit durch eine private und dedizierte VM.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Mosquitto MQTT Cloud Hosting Lösung von Stackhero auszuprobieren!

Mosquitto ist ein MQTT-Broker, der das MQTT-Protokoll (Message Queuing Telemetry Transport) implementiert, das speziell für die leichte Kommunikation zwischen IoT-Geräten und Servern entwickelt wurde.

Auf Stackhero ist Mosquitto mit TLS-Verschlüsselung und Benutzerauthentifizierung konfiguriert, um eine sichere Kommunikationsumgebung zu bieten.

Praktische Codebeispiele zur Nutzung von Mosquitto finden Sie unter https://github.com/stackhero-io/mosquittoGettingStarted.

MQTT organisiert die Kommunikation in "Topics", die als Kanäle zum Veröffentlichen und Abonnieren von Daten dienen. Geräte veröffentlichen Nachrichten zu bestimmten Themen oder abonnieren diese, um relevante Updates zu erhalten.

Themen in MQTT sind groß- und kleinschreibungssensitiv, müssen UTF-8-Zeichen enthalten und erfordern mindestens ein Zeichen. Die Hierarchie innerhalb der Themen wird durch das Schrägstrich-Zeichen (/) definiert.

Hier ist ein Beispiel für die Einrichtung von IoT-Geräten, die Temperatur- und Feuchtigkeitsdaten sammeln, identifiziert durch ihre MAC-Adressen:

  • Für ein Gerät mit der MAC-Adresse 00:00:00:00:00:00:

    • Temperatur: devices/00:00:00:00:00:00/temperature
    • Feuchtigkeit: devices/00:00:00:00:00:00/humidity
  • Für ein Gerät mit der MAC-Adresse 11:11:11:11:11:11:

    • Temperatur: devices/11:11:11:11:11:11/temperature
    • Feuchtigkeit: devices/11:11:11:11:11:11/humidity

Anwendungen können ein spezifisches Thema abonnieren, wie z.B. devices/00:00:00:00:00:00/temperature, um Daten vom entsprechenden IoT-Gerät zu erhalten.

MQTT unterstützt Wildcards für eine effiziente Themenverwaltung:

  • Das +-Wildcard entspricht einer einzelnen Ebene in der Themenhierarchie. Zum Beispiel erfasst das Abonnieren von devices/+/temperature Themen wie devices/1/temperature, aber nicht devices/1/2/temperature.

  • Das #-Wildcard entspricht mehreren Ebenen. Zum Beispiel entspricht devices/# Themen wie devices/1/temperature, devices/2/humidity und devices/1/2/somethingElse.

Die CLI-Tools mosquitto_pub und mosquitto_sub sind hervorragend zum Testen von MQTT-Setups geeignet. Bevor Sie sie verwenden, stellen Sie sicher, dass die Option "Erlaube ungesicherte Verbindungen" in Ihrer Mosquitto-Konfiguration auf dem Stackhero-Dashboard deaktiviert ist.

So können Sie testen:

  1. Abonnieren Sie alle Themen mit dem #-Wildcard:

    mosquitto_sub -L -d "mqtts://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT_TLS>/#"
    
  2. Öffnen Sie ein weiteres Terminal, um eine Nachricht an ein Thema zu veröffentlichen:

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

In der ersten Konsole sollten Sie die veröffentlichte Nachricht zusammen mit den durch das -d-Flag aktivierten Debug-Logs sehen.

Sie können direkt über einen Webbrowser mit Ihrem Mosquitto-Server über WebSockets verbinden. Weitere Details finden Sie in der "WebSockets"-Dokumentation.

Beispiele, die zeigen, wie man Mosquitto mit Node.js verwendet, sind unter https://github.com/stackhero-io/mosquittoGettingStarted verfügbar.

Um Mosquitto mit Python zu verwenden, wird die Paho MQTT Python Client Library empfohlen. Installieren Sie sie mit:

pip install paho-mqtt

Nachfolgend ein Beispiel für ein Python-Skript, das sich mit einem Mosquitto-Server unter Verwendung von TLS-Verschlüsselung und Authentifizierung verbindet:

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

Mit diesen Anweisungen sollten Sie gut gerüstet sein, um mit Mosquitto auf Stackhero zu arbeiten. Viel Spaß beim Erkunden von MQTT!