Mosquitto: Erste Schritte
Wie man mit Mosquitto beginnt
👋 Willkommen in der Stackhero-Dokumentation!
Stackhero bietet Ihnen eine vollständig verwaltete Mosquitto MQTT Cloud-Umgebung, die auf Zuverlässigkeit und Flexibilität ausgelegt ist:
- Unbegrenzter Nachrichtendurchsatz und unbegrenzte Datenübertragungen, damit Ihre Workflows niemals auf künstliche Grenzen stoßen.
- Unbegrenzte Geräteauthentifizierung über Ihre eigene externe API, um Onboarding und Zugriffsverwaltung nahtlos zu gestalten.
- Erweiterte ACLs für eine feingranulare Steuerung von Topics, Benutzern und Aktionen.
- Ein individueller Domainname mit integriertem HTTPS für sichere, markenkonforme Endpunkte (zum Beispiel: https://mqtt.your-company.com).
- Updates ohne Aufwand: Verbesserungen oder Sicherheitspatches mit nur einem Klick anwenden.
- Gleichbleibende Performance und hohe Sicherheit, da jede Instanz auf einer privaten, dedizierten Infrastruktur läuft.
Beschleunigen Sie Ihre IoT-Projekte und reduzieren Sie den Betriebsaufwand. Sie können in nur wenigen Minuten eine sichere, produktionsreife Mosquitto MQTT Cloud Hosting-Instanz bereitstellen.
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.
Verständnis von MQTT-Themen
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.
Struktur von MQTT-Themen
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
- Temperatur:
-
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
- Temperatur:
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.
Verwendung von Wildcards in MQTT-Themen
MQTT unterstützt Wildcards für eine effiziente Themenverwaltung:
-
Das
+-Wildcard entspricht einer einzelnen Ebene in der Themenhierarchie. Zum Beispiel erfasst das Abonnieren vondevices/+/temperatureThemen wiedevices/1/temperature, aber nichtdevices/1/2/temperature. -
Das
#-Wildcard entspricht mehreren Ebenen. Zum Beispiel entsprichtdevices/#Themen wiedevices/1/temperature,devices/2/humidityunddevices/1/2/somethingElse.
Testen mit mosquitto_pub und mosquitto_sub
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:
-
Abonnieren Sie alle Themen mit dem
#-Wildcard:mosquitto_sub -L -d "mqtts://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT_TLS>/#" -
Ö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.
Verbindung zu MQTT über WebSockets
Sie können direkt über einen Webbrowser mit Ihrem Mosquitto-Server über WebSockets verbinden. Weitere Details finden Sie in der "WebSockets"-Dokumentation.
Node.js und MQTT
Beispiele, die zeigen, wie man Mosquitto mit Node.js verwendet, sind unter https://github.com/stackhero-io/mosquittoGettingStarted verfügbar.
Python und MQTT
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!