
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/weewx/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/weewx/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.