mosquitto mit Anbindung an MySQL
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
Hintergrundbild: 794x 340px, Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten