ONLINE

mosquitto mit Anbindung an MySQL

Dieser Beitrag schrieb ich vor 3 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

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 -u root -p
Enter password:
 
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 liess 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

Weiter zu Teil 3…

  1. Hallo Marianne,

    ich schaue desöfteren auf deinem Blog vorbei und habe mir schon wirklich viele Ideen abgeschaut. Nun wollte ich mich auch mal an das Thema mosquitto wagen und habe versucht mich genau an deine Vorgehensweise zu halten. Allerdings scheitere ich beim Einsatz des Befehls „mosquitto_passwd -c /etc/mosquitto/passwd mane“. Diesen gibt es nicht bei mir. Habe auch schon herausgefunden, daß das an der veralteten Version 0.15 liegt. Wie kann ich denn die neue Version 1.4.8.1 installieren? Wenn ich die Paketquellen angebe, bekomme ich immer die Version 0.15 von 2013. Muß dazu sagen, bin leider Linux Laie und habe einen Odroid U3 mit Ubuntu am laufen.
    Würde mich freuen, wenn du mir auf die Sprünge helfen kannst.

    Gruß Teasy

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.