mosquitto mit Anbindung an MySQL

Diesen Beitrag schrieb ich 9 Jahre und 2 Monate zuvor; die nachfolgenden Ausführungen müssen heute weder genau so nach wie vor funktionieren, noch meiner heutigen Meinung entsprechen. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 2 Minuten

Um den RaspberryPi nicht über Gebühr zu strapazieren installierte ich den Broker auf meinem VPS.

Vorher habe ich ppa:mosquitto-dev/mosquitto-ppa (via „Mosquitto PPA“ team) hinzugefügt, um eine möglichst aktuelle Version (1.3.5) zu erhalten – in den Ubuntu-Quellen steckt derzeit eine 0.15! Nach einem apt-get update kann nun die benötigte Software installiert werden.

$ apt-get install mosquitto mosquitto-clients libmosquitto1

Dann folgen die für die Datenbankanbindung benötigten Pakete; MySQL ist dabei sicher nicht optimal, aber in meinem Fall lief sie halt schon, und die Ressourcen sind recht begrenzt.

$ apt-get install python-pip python-mysqldb
$ pip install paho-mqtt
$ pip install peewee
$ cd /opt
$ git clone https://github.com/owntracks/backend.git owntracks
$ cd owntracks/m2s/
$ cp settings.py.sample settings.py

In settings.py müssen wir Datenbanknamen (owntracks), Namen des berechtigten Datenbank-Users (owntracks) und sein Passwort ($YOUR_PASSWORD) hinterlegen – also all das innerhalb mySQL anlegen und dann das File bearbeiten:

mysql> create database owntracks;
Query OK, 1 row affected (0.00 sec)

mysql> create user 'owntracks'@'localhost' identified by '$YOUR\_PASSWORD';
Query OK, 0 rows affected (0.03 sec)

mysql> grant all privileges on owntracks.\* to 'owntracks'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.87 sec)

Nun kann das Datenbank-Schema installiert werden – bei mir passierte das sehr kommentarlos, so dass ich im ersten Moment dachte, es sei fehlgeschlagen.

$ cd /opt/owntracks/m2s/
$ python dbschema.py

Damit sind die Voraussetzungen für die Datenbankanbindung geschaffen; das SSL-Zertifikat hatten wir im vorherigen Schritt bereits erstellt. Also können wir uns nun der Konfiguration des Dienstes widmen:

## /etc/mosquitto/mosquitto.conf
pid_file /var/run/mosquitto.pid
persistence true
persistence_file mosquitto.db
persistence_location /var/lib/mosquitto/
password_file /etc/mosquitto/passwd
allow_anonymous false
log_dest file /var/log/mosquitto/mosquitto.log
log_type all
include_dir /etc/mosquitto/conf.d
listener 1883 127.0.0.1
## you have to set the tls stuff after the appropriate listener
## see	https://github.com/binarybucks/mqttitude/issues/320#issuecomment-43733936
listener 8883
tls_version tlsv1
cafile /etc/ssl/my/cacert.pem
certfile /etc/ssl/my/servercert.pem
keyfile /etc/ssl/my/serverkey.pem

Wie ihr sehen könnt, untersage ich anonymen Usern die Verbindung zum Dienst generell; erlaubte User werden in /etc/mosquitto/passwd verwaltet und ich muss sie nun anlegen. Wen also brauche ich? Als erstes lege ich den User mane an – das bin ich mit meinem iPhone, dessen „Spur“ aufgezeichnet werden soll.

$ mosquitto_passwd -c /etc/mosquitto/passwd mane
Password:
Reenter password:

Weiterhin brauchen wir einen User openhab – so darf sich später mein openHAB mit dem Dienst verbinden.

$ mosquitto_passwd /etc/mosquitto/passwd openhab

Und was man nicht vergessen sollte: auch die Datenbankverbindung m2s will sich verbinden! Also erstellen wir noch den User mzweis, dem es ebenfalls erlaubt sein wird, sich zu verbinden:

$ mosquitto_passwd /etc/mosquitto/passwd mzweis

Diesen User mit seinem Passwort müssen wir nun noch in /opt/owntracks/m2s/settings.py bekannt machen:

mqtt_username = 'mzweis'
mqtt_password = '$YOUR_PASSWORD'

Mit einem service mosquitto restart lässt sich der Dienst (re)starten und läuft dann extern nur auf Port 8883, von localhost ist er auch über 1883 zu erreichen.

tcp        0      0 0.0.0.0:8883            0.0.0.0:*               LISTEN      6489/mosquitto
tcp        0      0 127.0.0.1:1883          0.0.0.0:*               LISTEN      6489/mosquitto
tcp6       0      0 :::8883                 :::*                    LISTEN      6489/mosquitto

Und dann die Datenbankanbindung starten:

$ cd /opt/owntracks/m2s/
$ ./m2s.py &

Das ist nun spannend: in zwei Konsolen ließ ich mir die Logfiles offen; taucht beispielsweise ein penetrantes OOOOPS! auf, dann schlägt die Anbindung von m2s an mosquitto irgendwie fehl, dann ist schrittweises Debugging angesagt…

$ tail -f /var/log/mosquitto/mosquitto.log
$ tail -f /opt/owntracks/m2s/logfile
Alle Bilder dieser Seite: © Marianne Spiller – Alle Rechte vorbehalten
Hintergrundbild: 794x 340px, Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten

Eure Gedanken zu „mosquitto mit Anbindung an MySQL“

Ich freue mich über jeden Kommentar, es sei denn, er ist blöd. Deshalb behalte ich mir auch vor, die richtig blöden kurzerhand wieder zu löschen. Die Kommentarfunktion ist über GitHub realisiert, weshalb ihr euch zunächst dort einloggen und „utterances“ bestätigen müsst. Die Kommentare selbst werden im Issue-Tracker und mit dem Label „✨💬✨ comment“ erfasst – jeder Blogartikel ist ein eigenes Issue. Über GitHub könnt ihr eure Kommentare somit jederzeit bearbeiten oder löschen.