Beiträge zu dem Tag: “mqtt”

Owntracks mit Bildern

Bei Owntracks werden standardmäßig die “Kürzel” für die Geräte auf der Karte angezeigt. Man kann da aber auch Bilder hin bekommen. Der Prozess ist etwas “fusselig” aber man kann es hin bekommen.

Erklärt ist das ganze hier

Hier der Weg wie ich einfach vorhandene Bilder verwenden konnte.

Download des Scripts von hier und lokal abspeichern

 cd Daten/tools/
 vi owntracks-image2cards.sh
 chmod +x owntracks-image2cards.sh 
 ./owntracks-image2cards.sh 2016-hb-avatar.jpg "device-hb" > hb.json

“device-hb” ist dabei der Name mit dem das Gerät registriert ist.

Dann das ganze auf dem MQTT Broker registrieren. Ich verwende Letsencrypt für TLS. Wenn Ihr eigenen Zertifikate verwendet werdet Ihr einen anderen capath angeben müssen

mosquitto_pub -h your.server.de -p 8883 --capath /etc/ssl/certs/ --username USER -P PASSWORD -t 'owntracks/hbauer/<gerätename>/info' -f hb.json -r

Dann seht Ihr und die anderen Personen auf dem MQTT Broker das Bild

30.1.18
Weitere Beiträge zu: owntracks   mqtt  

Owntracksdaten mit Bridge hinter die Firewall holen

Ich hatte schon vor einigen Jahren mal einen Owntracks Server aufgebaut aber das ist irgendwie wieder eingeschlafen. Jetzt mit größeren Kindern (die freiwillig mitmachen) und weiteren Szenarien der Hausautomation wollte ich das noch mal aufleben lassen.

Im Gegensatz zu dem ersten Versuch allerdings nicht mit selbst signierten Zertifikaten sondern mit Letsencrypt. Die Standardinstallation des MQTT Brokers mit der Version im aktuellen Debian Repository hat nicht geklappt aber mit der aktuellen Version von hier war es dann kein Problem. Die TLS relevanten Einträge sind dann hier erläutert.

 cafile /etc/ssl/certs/DST_Root_CA_X3.pem
 certfile /etc/letsencrypt/live/your.server.de/fullchain.pem
 keyfile /etc/letsencrypt/live/your.server.de/privkey.pem

Der Broker im Internet ist natürlich abgesichert mit Usernamen und TLS. Innerhalb meines Heimnetzes möchte ich das nicht jedem potentiellen Client beibringen und deshalb wollte ich dort einen offenen Broker mit anonymem Zugriff einrichten.

Damit alle Owntracks Informationen auch “intern” verfügbar sind braucht man eine “Bridge Verbindung”. Aufgrund meines Troubleshootings mit TLS und der alten Mosquitto Verion hatte ich eine etwas unordentliche TSL Einrichtung. Mit dem Owntracks Client ging es aber die Bridgeverbindung kam nicht zustande.

 OpenSSL Error: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca

Am ende war es recht einfach. Die Bridge ist jetzt so konfiguriert

 connection lcl2extern
 address your.server.de:8883
 tls_version tlsv1.2
 bridge_cafile /etc/ssl/certs/DST_Root_CA_X3.pem
 bridge_insecure false
 remote_username user
 remote_password password
 topic owntracks/# in 0

Und die Owntracks Meldungen erscheinen jetzt auch schön im Heimnetzwerk und warten darauf jetzt ausgewertet zu werden.

28.1.18
Weitere Beiträge zu: owntracks   mqtt  

Keine Freude an Homematic mit mqtt

Bei meine ersten Gehversuchen mit Dashing und Homematic habe ich die Aktualisierung der Dashboard Elemente von der Homematic mit wget Aufrufen gegen die Rest API implementiert.

Das funktioniert zwar ist aber recht fusselig und wegen des Usability der Homematic Oberfläche auch sehr umständlich.

Um eine bessere Lösung zu finden habe ich mal hm2mqtt mit dieser Beschreibung ausprobiert.

Das ganze lässt sich zwar schnell und einfach installieren und man bekommt auch innerhalb kürzester Zeit “sichtbare” Ergebnisse aber ich werde diesen Pfad nicht weiter verfolgen.

Das hat im wesentlichen zwei Gründe. Die Nachrichten auf dem Bus müssen erst noch zerlegt werden damit der Dashboard mqtt job die darstellen kann. Das ist an sich kein Problem übersteigt jedoch meine Ruby Programmierkenntnisse. Das an sich wäre vielleicht noch machbar nur leider habe ich auf dem Bus keine Änderungen in den Systemvariablen gesehen. Und das ist genau das was ich eigentlich darstellen möchte. Man mag das ganze vielleicht noch hinbekommen aber den Aufwand mag ich momentan nicht treiben.

Es kommt noch ein dritter Aspekt dazu. Damit das ganze läuft brauche einen weiteren Service der gestartet und gepflegt werden muss.

Schade für die investierte Zeit aber da bleibe ich fürs erste lieber bei den fusseligen Aufrufen in der Homematic.

7.7.17
Weitere Beiträge zu: Homematic   mqtt  

Mosquitto Service started nicht im Hintergrund

Nach einem Neustart lies sich mein Mosquitto Dienst nicht starten. Auch die Logfiles gaben keine sinnvollen Informationen von sich.

Wenn ich den Dienst manuell als Root im Vordergrund gestartet habe ging es.

Durch Zufall bin ich auf diesen Hinweis gestossen. Irgendwas war mit der Datenbank nicht ok. In diese DB soll der Dienst eigentlich alle Nachrichten schreiben die noch nicht verarbeiten sind.

Nach dem Löschen der DB klappte es dann auch wieder.

cd /var/lib/mosquitto/
/var/lib/mosquitto# ls -ls
0 -rw-r--r-- 1 mosquitto nogroup 0 Apr 29 08:51 mosquitto.db
/var/lib/mosquitto# rm mosquitto.db 
/var/lib/mosquitto# /etc/init.d/mosquitto start
[ ok ] Starting network daemon:: mosquitto.

Jetzt geht es wieder.

21.6.14
Weitere Beiträge zu: mqtt  

Installation von Owntracks auf einem Raspberry Pi

Owntracks scheint eine gute Alternative zu sein um einem berechtigten Kreis von Bekannten Informationen über seinen Standort mitzuteilen. Mal sehen wie stabil und “einfach” das läuft. Hier die Schritte die notwendig waren um das System auf einem Pi und einem Androidgerät zu installieren

Die Installation eines Brokers ist an dieser stelle beschrieben. Um die Verbindung mit TLS abzusichern sind meine Schritte im wesentlichen an die Beschreibung von JPMens angelehnt. Nur das ich die Zertifikate bei Startssl erstellt habe und dann die server.crt, den key und das Bundles auf den Server hoch geladen habe. Dann noch die Anpassungen für den Broker

vi /etc/mosquitto/mosquitto.conf
    listener 1883 127.0.0.1
    listener 8883
    tls_version tlsv1
    cafile /etc/ssl/quo/ca-bundle.crt
    certfile /etc/ssl/quo/server.crt
    keyfile /etc/ssl/quo/server.key

Jetzt müssen wir noch das Zertifikat auf dem Android Gerät bekannt machen. Mir ist das mit der App Certificate Installer auf Android gelungen nachdem ich das Zertifikat auf das Gerät kopiert habe.

Jetzt haben wir die Verbindung zwischen Broker und dem Android gesichert. Jetzt die eigentliche Anwendung. Die Installation von Owntrack aus geht aus dem dem Appstore und in den Einstellungen müssen nur die Serverinformationen angepasst werden alternat-txt

Dann sollte man bereits seinen Standorte hoch laden können (Das mit dem Bild habe ich später noch geändert)

alternat-txt

Jetzt kommen zwar die Standortinformationen beim Server an. Nur brauchen wir jetzt noch ein Backend in das diese Daten regelmäßig und dauerhaft gespeichert werden. Ich habe den Weg über eine MySQL Datenbank gewählt.

Zuerst Datenbankserver installieren und Datenbank anlegen

apt-get install python-pip mysql-server
mysql -u root -p
create database owntrack;
CREATE USER 'owntrack_admin'@'localhost' IDENTIFIED BY 'geheim';
grant all on owntrack.* to 'owntrack_admin'@'localhost';

Dann weitere Voraussetzungen installieren und die “Backendschnittstelle” installieren:

pip install peewee
mkdir /opt/caserio
cd /opt/caserio/
git clone https://github.com/owntracks/backend.git owntrack
cd owntrack/m2s/
cp settings.py.sample settings.py
vi settings.py   # Datenbanknamen, user, Kennwort anpassen 

Der erste Versuch die Datenbankschemata zu installieren scheiterte:

python dbschema.py Traceback (most recent call last):
  File "dbschema.py", line 59, in <module>   mysql_db.connect()
  File "/opt/caserio/owntrack/m2s/peewee.py", line 1827, in connect **self.connect_kwargs)
  File "/opt/caserio/owntrack/m2s/peewee.py", line 2096, in _connect raise ImproperlyConfigured('MySQLdb must be installed.')
peewee.ImproperlyConfigured: MySQLdb must be installed

Nach einem:

apt-get install python-mysqldb

ging es dann und man konnte die “Datenbankimportroutine” starten. Im Logfile kann man auch sehen das “etwas” passiert

./m2s.py &
 tail -f logfile 
2014-05-13 16:36:28,795 ---- in storage: owntracks/hbauer/5bca35ae41cdcdc3
2014-05-13 16:36:28,813 ('INSERT INTO `location` (`batt`, `tst`, `waypoint`, `lat`, `username`, `

Um ganz sicher zu gehen kann man auch noch in der Mysql Datenbank noch mal nachsehen

mysql -u owntracks -p
use owntrack;
Reading table information for completion of table and column names
Database changed
select * from location;

So jetzt könnte man eigentlich loslegen (hoffe ich zu mindestens) Allerdings kann zu diesem Zeitpunkt jeder der den Server kennt mit einem mqtt Client mit hören was alles so passiert. Absichern kann man diesen Dienst dann so:

Zuerst legen wir eine neue Kennwortdatei an

mosquitto_passwd -c /etc/mosquitto/users hbauer
Password: 
Reenter password: 

und tragen diese dann in die Konfiguration ein und starten den Broker neu

vi /etc/mosquitto/mosquitto.conf
   allow_anonymous false
   password_file /etc/mosquitto/users
/etc/init.d/mosquitto restart

So damit ist erst mal die Basis gelegt. Mal sehen wie sich das ganze im “Livebetrieb” verhält und was man damit noch alles anstellen kann

13.5.14
Weitere Beiträge zu: raspberrypi   owntracks   mqtt  

Zentrale Verwaltung von Systembenachrichtigungen mit MQTTwarn

Für einige Dienste verwende ich verschiedene Benachrichtigungsverfahren. Nagios benachrichtigt mich wenn Festplatten überlaufen oder Backups nicht durchgeführt worden sind. Einige Kommandozeilen Programme überwachen meine Openvpn Verbindungen oder meine DynDNS Konfigurationen.

Jede Menge verschiedene Stellen an denen Benachrichtigungen konfiguriert sind. Wechsele ich von Pushover zu xyz kann ich an all diesen Stellen die Konfigurationen suchen und ändern.

Jan-Piet Mens hat an dieser Stelle einen Ansatz beschrieben, wie über einen zentralen Messaging Bus eine “Schaltzentrale” aufgebaut werden kann. Bisher habe ich mich daran nicht so richtig getraut aber dieses Wochenende kam ich mal dazu. Die Basisinstallation geht eigentlich recht einfach.

Zuerst die Installation von MQTT (auf einem Raspberry Pi)

curl -O http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
rm mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
sudo curl -O http://repo.mosquitto.org/debian/mosquitto-repo.list
sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients python-mosquitto

Da ich hier mit einem internen Raspberry Pi arbeite sind keine weiteren Einstellungen notwendig.

Dann die Voraussetzungen für mqttwarn installieren

apt-get install python-pip
pip install paho-mqtt

und dann das eigentliche mqttwarn Programm, die Beispielkonfiguration kopieren und osxnotify aus “launch” entfernen

cd /opt/caserio
git clone https://github.com/jpmens/mqttwarn mqttwarn
cd mqttwarn
cp mqttwarn.ini.sample mqttwarn.ini
vi mqttwarn.ini
launch	 = file, log ~~,osxnotify~~

In der sample.ini ist ein Beispiel enthalten das ich für den ersten Test verwendet habe.

[hello/1]
targets = log:info
format = u'{name}: {number} => {_dthhmm}'

Von der Kommandozeile kann man nun an das Ziel “Hello” die Nachricht “Hello” senden

mosquitto_pub -t hello/1 -m "Hello"

und diese Nachricht wird in das Logfile geschrieben.

tail mqttwarn.log 
DEBUG [mqttwarn] Connected to MQTT broker, subscribing to topics...
DEBUG [mqttwarn] Subscribing to hello/1 (qos=0)
DEBUG [mqttwarn] Subscribing to owntracks/+/+ (qos=0)
DEBUG [mqttwarn] Message received on hello/1: Hello
DEBUG [mqttwarn] Section [hello/1] matches message on hello/1. Processing...
DEBUG [mqttwarn] Message on hello/1 going to log:info
DEBUG [mqttwarn] New `log:info' job: hello/1
DEBUG [mqttwarn] Processor is handling: `log' for info
DEBUG [log] *** MODULE=services/log.pyc: service=log, target=info
INFO  [log] Hello

Ich weiß wirklich noch nicht so richtig wie hier was geht aber es sieht schon mal gut aus. Irgendetwas passiert. Ändere ich jetzt in der Beispieldatei die Bedeutung von info auf error

vi mqttwarn.ini

[hello/1]
targets = log:error
format = u'{name}: {number} => {_dthhmm}'

Dann wird nach einem Neustart von mqttwarn durch den Aufruf von

mosquitto_pub -t hello/1 -m "Hello"

dies auch in das Logfile geschrieben

DEBUG [mqttwarn] Section [hello/1] matches message on hello/1. Processing...
DEBUG [mqttwarn] Message on hello/1 going to log:error
DEBUG [mqttwarn] New `log:error' job: hello/1
DEBUG [mqttwarn] Processor is handling: `log' for error
DEBUG [log] *** MODULE=services/log.pyc: service=log, target=error
ERROR [log] Hello

Es klappt also schon mal was und die Installation scheint zu laufen. Das ganze ist alles noch recht langweilig und diente erst mal nur zum Test ob die Installation im Prinzip läuft.

Jetzt wollen wir unsere Nachricht aber nicht nur in einem Logfile sehen sondern über Pushover auf das Handy bekommen. In unsere Konfiguration sind dazu folgende Änderungen notwendig

launch   = file, log, pushover

[config:pushover]
targets = {
    'beispiel'      : [ 'userkey','appkey],
    	}

[hello/1]
targets = log:error,pushover:beispiel
format = u'{name}: {number} => {_dthhmm}'

Und dann bekommt man jetzt neben dem Eintrag im Logfile auch die Nachricht per Pushover zugestellt

DEBUG [mqttwarn] Message received on hello/1: Hallo hagen
DEBUG [mqttwarn] Section [hello/1] matches message on hello/1. Processing...
DEBUG [mqttwarn] Message on hello/1 going to log:error
DEBUG [mqttwarn] New `log:error' job: hello/1
DEBUG [mqttwarn] Processor is handling: `log' for error
DEBUG [mqttwarn] Message on hello/1 going to pushover:beispiel
DEBUG [mqttwarn] New `pushover:beispiel' job: hello/1
DEBUG [log] *** MODULE=services/log.pyc: service=log, target=error
ERROR [log] Hallo hagen
DEBUG [mqttwarn] Processor is handling: `pushover' for beispiel
DEBUG [pushover] *** MODULE=services/pushover.pyc: service=pushover, target=beispiel
DEBUG [pushover] Sending pushover notification to beispiel [{'priority': 0, 'retry': 60, 'expire': 3600, 'title': 'mqttwarn'}]...
DEBUG [pushover] Successfully sent pushover notification

So das sieht schon mal ganz nett aus. Mal sehen was man damit noch alles anstellen kann.

pushover mqttwarn

27.4.14
Weitere Beiträge zu: mqttwarn   mqtt  

Dies ist ein privater Blog von Hagen Bauer- berufstätiger Vater, Ehemann, Naturliebhaber, Läufer, Zelter, technikverliebt.


Creative Commons License
This blog is licensed under a Creative Commons License