Mosquitto: Pierwsze kroki

Jak zacząć z Mosquitto

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Mosquitto MQTT cloud, które zapewnia wiele korzyści, w tym:

  • Nieograniczoną wymianę i transfer wiadomości.
  • Nieograniczoną autoryzację urządzeń za pomocą zewnętrznego API.
  • Zaawansowane ACL na tematy, użytkowników i działania.
  • Dostosowywalną nazwę domeny zabezpieczoną za pomocą HTTPS (na przykład, https://mqtt.twoja-firma.com).
  • Łatwe aktualizacje za pomocą jednego kliknięcia.
  • Optymalną wydajność i solidne bezpieczeństwo dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj swoje życie: wystarczy 5 minut, aby wypróbować rozwiązanie Mosquitto MQTT cloud hosting Stackhero!

Mosquitto to broker MQTT, implementujący protokół MQTT (Message Queuing Telemetry Transport), specjalnie zaprojektowany do lekkiej komunikacji między urządzeniami IoT a serwerami.

Na Stackhero, Mosquitto jest skonfigurowany z szyfrowaniem TLS i uwierzytelnianiem użytkowników, aby zapewnić bezpieczne środowisko komunikacyjne.

Praktyczne przykłady kodu pokazujące, jak korzystać z Mosquitto, można znaleźć na https://github.com/stackhero-io/mosquittoGettingStarted.

MQTT organizuje komunikację w "tematy", które działają jako kanały do publikowania i subskrybowania danych. Urządzenia publikują wiadomości na określonych tematach lub subskrybują je, aby otrzymywać odpowiednie aktualizacje.

Tematy w MQTT są wrażliwe na wielkość liter, muszą zawierać znaki UTF-8 i wymagać co najmniej jednego znaku. Hierarchia w tematach jest definiowana za pomocą znaku ukośnika (/).

Oto przykład konfiguracji dla urządzeń IoT zbierających dane o temperaturze i wilgotności, identyfikowanych przez ich adresy MAC:

  • Dla urządzenia z adresem MAC 00:00:00:00:00:00:

    • Temperatura: devices/00:00:00:00:00:00/temperature
    • Wilgotność: devices/00:00:00:00:00:00/humidity
  • Dla urządzenia z adresem MAC 11:11:11:11:11:11:

    • Temperatura: devices/11:11:11:11:11:11/temperature
    • Wilgotność: devices/11:11:11:11:11:11/humidity

Aplikacje mogą subskrybować konkretny temat, taki jak devices/00:00:00:00:00:00/temperature, aby otrzymywać dane z odpowiedniego urządzenia IoT.

MQTT obsługuje symbole wieloznaczne dla efektywnego zarządzania tematami:

  • Symbol + pasuje do jednego poziomu w hierarchii tematów. Na przykład, subskrybując devices/+/temperature, obejmuje tematy takie jak devices/1/temperature, ale nie devices/1/2/temperature.

  • Symbol # pasuje do wielu poziomów. Na przykład, devices/# obejmuje tematy takie jak devices/1/temperature, devices/2/humidity i devices/1/2/somethingElse.

Narzędzia CLI mosquitto_pub i mosquitto_sub są doskonałe do testowania konfiguracji MQTT. Przed ich użyciem upewnij się, że opcja "Zezwól na niezaszyfrowane połączenia" jest wyłączona w konfiguracji Mosquitto na pulpicie Stackhero.

Oto jak można przetestować:

  1. Subskrybuj wszystkie tematy, używając symbolu #:

    mosquitto_sub -L -d "mqtts://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT_TLS>/#"
    
  2. Otwórz inny terminal, aby opublikować wiadomość na temat:

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

W pierwszej konsoli powinieneś zobaczyć opublikowaną wiadomość wraz z włączonymi logami debugowania przez opcję -d.

Możesz bezpośrednio połączyć się z serwerem Mosquitto z przeglądarki internetowej, używając WebSockets. Odwołaj się do dokumentacji "WebSockets" po więcej szczegółów.

Przykłady pokazujące, jak używać Mosquitto z Node.js, są dostępne na https://github.com/stackhero-io/mosquittoGettingStarted.

Aby używać Mosquitto z Pythonem, zalecana jest biblioteka klienta Paho MQTT Python. Zainstaluj ją za pomocą:

pip install paho-mqtt

Poniżej znajduje się przykładowy skrypt Python do łączenia się z serwerem Mosquitto przy użyciu szyfrowania TLS i uwierzytelniania:

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

Dzięki tym instrukcjom powinieneś być dobrze przygotowany do rozpoczęcia pracy z Mosquitto na Stackhero. Życzymy przyjemnej eksploracji MQTT!