mosquitto mit Anbindung an MySQL

Diesen Beitrag schrieb ich 6 Jahre und 10 Monate zuvor; die nachfolgenden Ausführungen müssen heute nicht unbedingt noch genau so funktionieren. 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