leicht bewölkt 21,9 °C

Software

echte Wöllsdorfer Meßwerte für Döbeln und Umgebung
Mosquitto-Logo

Mosquitto

Mosquitto ist ein frei verfügbarer MQTT-Broker, der als Teil des Eclipse-Projekts entwickelt wird. Es ist ursprünglich von Roger Light in der Programmiersprache C geschrieben worden. MQTT ist ein einfach gehaltenes Protokoll zur Maschine-Maschine-Kommunikation. Es sieht die Verteilung von Informationen wie etwa Sensorzuständen vor, ohne daß die beteiligten Geräte voneinander wissen müssen. Alle kommunizieren nur mit einem zentralen Verteiler, dem Broker.

Vorbemerkungen

Für die Belchertown-Skin wird ein MQTT-Broker benötigt. Man kann einen öffentlichen Broker benutzen oder selbst einen aufsetzen. Die folgende Anleitung beschreibt die Installation und Konfiguration des MQTT-Brokers "Mosquitto" zur Verwendung mit der Belchertown-Skin.

Installation und Konfiguration von Mosquitto

Installation

Unter Linux-Systemen, die die Debian-Paketverwaltung apt nutzen, wird Mosquitto mit den folgenden Befehlen installiert:

sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients

Das Paket "mosquitto-clients" ist nur für Testzwecke nötig. Für den eigentlichen Betrieb ist es nicht erforderlich. Für die genannten Testzwecke kann es auch auf einem anderen Rechner installiert werden.

Websocket aktivieren

Web-Seiten können nur mit dem speziellen Protokoll "WebSocket" Daten abfragen. Eine direkte Kommunikation mittels des MQTT-Protokolls ist in Browsern nicht vorgesehen. Zum Glück versteht Mosquitto auch WebSocket. Es muß nur aktiviert werden.

Zur Aktivierung von WebSockets wird eine Konfigurationsdatei namens /etc/mosquitto/conf.d/myconfig.conf mit folgendem Inhalt angelegt:

persistence false

allow_anonymous true
password_file /etc/mosquitto/passwd

acl_file /etc/mosquitto/acl

# mqtt
listener 1883
protocol mqtt

# websockets
listener 9001
protocol websockets

Achtung!
Keine zusätzlichen Leerzeichen einfügen! Mosquitto ist diesbezüglich sehr empfindlich.

Benutzer- und Zugriffsrechte

Um Mißbrauch zu vermeiden, sollten nur autorisierte Quellen Daten an den Broker senden dürfen. Man kann das natürlich sehr detailliert einrichten, aber für die Verwendung mit der Belchertown-Skin genügen die folgenden Einstellungen.

Zunächst muß ein Paßwort angelegt werden. Dazu ist folgender Befehl auszuführen:

sudo mosquitto_passwd -c /etc/mosquitto/passwd <Benutzername>

Achtung!
Sollen weitere Paßwörter angelegt werden, muß die Option -c unbedingt weggelassen werden, sonst werden die bisherigen Paßwörter gelöscht.

Es muß eine Datei /etc/mosquitto/acl angelegt werden:

# Allow anonymous access to the sys
topic read $SYS/#

# Allow anonymous to read weather
topic read wetter/#

# weewx readwrite to the loop
user <Benutzername von oben>
topic wetter/#

Der Topic, hier "wetter", muß mit der Einstellung in weewx.conf übereinstimmen. Steht dort "weather", muß auch hier "weather" stehen. Um "loop" ergänzt wird der Topic nur in der Konfiguration der Belchertown-Skin, hier nicht.

Abschluß

Zum Schluß muß der Broker neu gestartet werden. Dazu sind folgende Befehle einzugeben:

sudo service mosquitto stop
sudo service mosquitto start

Danach empfiehlt es sich, die Meldungen in der Datei /var/log/syslog einzusehen. Sie darf keine Fehlermeldungen in Bezug auf Mosquitto enthalten.

MQTT-Ausgabe in WeeWX

Damit der MQTT-Broker Wetterdaten von WeeWX erhält, muß dort die Erweiterung weewx-MQTT installiert sein. Hierzu wird zusätzlich das Python-Paket paho-mqtt benötigt.

Installation von "paho-mqtt" unter Linux:

sudo apt-get install python3-paho-mqtt

Installation von "weewx-MQTT":

wget -O weewx-mqtt.zip https://github.com/matthewwall/weewx-mqtt/archive/master.zip
sudo wee_extension --install weewx-mqtt.zip

Beispielkonfiguration für MQTT in weewx.conf:

[StdRestful]
    ...
    [[MQTT]]
        server_url = mqtt://<Benutzer>:<Paßwort>@<IP-Adresse>:1883/
        topic = wetter
        unit_system = METRIC
        binding = loop, archive
        log_success = false
        [[[inputs]]]
            [[[[rainRate]]]]
                units = mm_per_hour
            [[[[rain]]]]
                units = mm
            [[[[hourRain]]]]
                units = mm
            [[[[rain24]]]]
                units = mm
            [[[[dayRain]]]]
                units = mm
            [[[[ET]]]]
                units = mm
            [[[[dayET]]]]
                units = mm
            [[[[ET24]]]]
                units = mm

<IP-Adresse> ist die Adresse des Rechners, auf dem der MQTT-Broker läuft. <Benutzer> und <Paßwort> sind die, die bei der Konfiguration von Mosquitto eingegeben wurden. Um die MQTT-Ausgabe in WeeWX zu aktivieren, muß WeeWX neu gestartet werden.

Funktionstest

Zum Funktionstest wird ein MQTT-Client benötigt. Neben dem Kommandozeilen-Tool mosquitto_sub gibt es auch viele Programme mit Fensteroberfläche. Das Programm muß nicht auf demselben Rechner aufgerufen werden, auf dem der Broker läuft.

mosquitto_sub -h <IP-Adresse> -t wetter/#

Wenn in der Konfiguration anstelle von "wetter" "weather" benutzt wurde, muß es auch hier benutzt werden. <IP-Adresse> ist die Adresse des Rechners, auf dem der Mosquitto-MQTT-Broker läuft. Bei funktionierender Konfiguration werden laufend neue Zahlen angezeigt. Die Anzeige wird durch Drücken von CTRL-C (STRG-C) beendet.

Weiterleiten an einen öffentlichen MQTT-Broker

Wenn der eigene MQTT-Broker nicht aus dem Internet erreichbar ist, bietet sich eine Weiterleitung (Bridge) an. Nur ein einziges Topic wird für die Belchertown-Skin benötigt, nicht alle, die der WeeWX-MQTT-Uploader bereitstellt. Als Beispiel wird hier eine Weiterleitung (Bridge) zum öffentlichen MQTT-Broker des Eclipse-Projekts gezeigt. Eine Liste öffentlicher MQTT-Broker ist hier zu finden.

Achtung! Die öffentlichen Broker des Eclipse- und des Mosquitto-Projekts sind nur für Testzwecke gedacht. Ihre Verfügbarkeit wird nicht garantiert. Es kann zu Ausfällen oder Funktionsstörungen kommen, insbesondere, weil diese Installationen auch zum Testen neuer Programmversionen verwendet werden.

Um den Broker des Eclipse-Projekts zu nutzen, muß eine Konfigurationsdatei /etc/mosquitto/conf.d/mqq_eclipseprojects_io.conf angelegt werden, die folgenden Inhalt hat:

# Bridge to mqtt.eclipseprojects.io
connection bridge-to-eclipse
address mqtt.eclipseprojects.io
topic "" out 0 wetter/loop <xxxxxxxxx>/loop

Dabei ist <xxxxxxxxx> durch eine längere, zufällige Zeichenfolge zu ersetzen, die identisch in der Konfiguration der Belchertown-Skin verwendet wird. Wenn anstelle von "wetter" zuvor "weather" genutzt wurde, muß auch hier "weather" anstelle von "wetter" stehen.

MQTT-Konfiguration der Belchertown-Skin

Wenn der selbst aufgesetzte MQTT-Broker genutzt werden soll, sieht der Abschnitt für MQTT in weewx.conf wie folgt aus:

[StdReport]
    ...
    [[Belchertown]]
        ...
        [[[Extras]]]
            ...
            mqtt_websockets_enabled = 1
            mqtt_websockets_host = <IP-Adresse>
            mqtt_websockets_port = 9001
            mqtt_websockets_ssl = 0
            mqtt_websockets_topic = wetter/loop

Wurde anstelle von "wetter" "weather" verwendet, muß es auch hier verwendet werden. <IP-Adresse> ist die Adresse des Servers, auf dem Moquitto läuft.

Wenn der Zugriff über die Weiterleitung an einen öffentlichen Broker erfolgen soll, sind die folgenden Einstellungen nötig:

[StdReport]
    ...
    [[Belchertown]]
        ...
        [[[Extras]]]
            ...
            mqtt_websockets_enabled = 1
            mqtt_websockets_host = mqtt.eclipseprojects.io/mqtt
            mqtt_websockets_port = 443
            mqtt_websockets_ssl = 1
            mqtt_websockets_topic = <xxxxxxxxx>/loop

Hierbei ist <xxxxxxxxx> durch die zufällige Zeichenfolge zu ersetzen, die bei der Konfiguration der Weiterleitung vergeben wurde. Die Angaben hinter "mqtt_websockets_host" und "mqtt_websockets_port" müssen entsprechend dem verwendeten Broker angepaßt werden.

Wichtig!
Wenn die Web-Site per HTTPS (verschlüsselt) zugänglich ist, muß auch MQTT auf Verschlüsselung eingestellt werden, sonst funktioniert es nicht.

Verweise

Quelle: How to setup your own MQTT Broker