Und noch ein Projekt: MQTT! Also: „Die Wetterstation spricht mit dem Raspberry damit ich auf dem Tablet sehe ob es draußen Wetter ist. Und in der Garage die Wasserleitung aufdrehen kann.“ Oder so ähnlich.
Installieren auf dem Raspberry:
> sudo apt-get install mosquitto mosquitto-clients
Das kann ich gar nicht empfehlen, dann bekommt man (Stand 2017) nämlich eine Version, die eher … rustikal ist. Und sich nicht mit der PubSub-Bibliothek für den WLAN-Chip ESP8266 verträgt. Da habe ich einige Zeit damit verbraten, weil der Datentausch mit allem (PC, Mac, Tablet) funktionierte, nur nicht mit dem, mit dem es eigentlich geplant war.
Dank diesem Post (auch schon von 2013!) hat es aber dann sofort mit dem nächsten Anlauf geklappt. Bis ich vom Schreibtisch wegging, war das Schlafzimmer-Klima schon auf dem Tablet zu lesen.
Hier die Vollständigkeit:
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key add mosquitto-repo.gpg.key cd /etc/apt/sources.list.d/ # je nach Debian-Version wählen: wheezy oder jessie ... sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list sudo apt-get update sudo apt-get install mosquitto
Desktop-Programm zum Ausprobieren ob der bzw. was durch den Server läuft: http://mqttfx.org/
Shell/Bash Befehle auf dem Raspberry:
Daten-Push vom Client zum Server/Broker:
> mosquitto_pub -h SERVERIP -t "haus/zimmer/sensor123456/T" -m "Wert oder Nachricht" -r
- -h = Host
- -t = Topic (jederzeit frei aussuchbar vom Client)
- -m = Message (String)
- -n = Null-Message (leerer Meldung, siehe unten)
- -r = Retain, liefere bei Anfragen von Abonnenten den letzten gemeldeten Wert zurück
- Um ein retained Topic zu löschen: Leere Retain-Nachricht an das Topic mit den Flags -r -n
Abonnieren auf beliebigem Client: (hält eine TCP-Verbindung offen die ganze Zeit!)
> mosquitto_sub -h SERVERIP -t "#" -v
- -t = Topic
- # = Alle bzw. als letzter Joker für eine oder mehrere Ebenen darunter: "haus/#"
- + = Joker für eine Ebene: "haus/zimmer/+/T"
- -v = verbose: Gib den Topic vor dem Wert aus (wichtig bei Joker-Sachen, damit man sieht was wozu gehört ... )
Integration mit Python durch Shell-Aufruf in Subprozess, Beispielcode:
import subprocess dummy = subprocess.check_output('mosquitto_pub -r -h localhost -t \"arbeitszimmer/pi/humi\" -m ' + '{0:0.1f}'.format(humidity), shell=True );
Oder als Python-Modul: https://pypi.python.org/pypi/paho-mqtt
Am ESP8266: Suche nach PubSubLibrary in der Bibliotheksverwaltung.
Nächste Schritte: Zug um Zug die Sensoren damit erweitern …