Sensorlogger
Voraussetzungen
Vorausgesetzt wird ein System, das mindestens 64-Bit Integer-Datentypen (C++ uint64_t) unterstützt; normalerweise ist dies auch auf 32-Bit-Architekturen erfüllt, z.B. für den Raspberry Pi oder den Tinkerforge Red Brick. Anderenfalls zeigt der Sensorlogger undefiniertes Verhalten, weil UNIX-Zeitstempel mit Millisekundenauflösung gespeichert und verarbeitet werden müssen.
Bekannte Software-Voraussetzungen unter Linux:
- C++17-Compiler, z.B. GCC 7 oder höher
- Für die MQTT-Option: Paho MQTT C- und C++-Bibliotheken (und deren Abhängigkeiten)
- Für die HTTP-Option: Libcurl und ihre Entwicklerwerkzeuge für C++
Download
Die Software ist bei Github verfügbar, oder hier als Download.
Der Quellcode für den Sensorlogger steht unter der MIT-Lizenz. Im Folgenden wird gezeigt, wie kompiliert und installiert wird.
sensorlogger.tar.gz Version 1.2 / 400 KB
Für eine korrekte Funktionsweise kann keine Gewähr übernommen werden.
Kompilieren
Die Software kann mit Unterstützung für verschiedene Bibliotheken und Schnittstellen kompiliert werden. Welche davon benötigt werden, kann selbst entschieden werden. Die ersten Zeilen im makefile enthalten die drei verfügbaren Optionen, die je nach Wunsch aktiviert (true) oder deaktiviert (false) werden können.
# Options to choose which interfaces and libraries should be supported: OPTION_CURL = true OPTION_MQTT = true OPTION_TINKERFORGE = true
- OPTION_CURL wird gebraucht, um HTTP(s)-Verbindungen herzustellen. So können JSON-Strukturen aus dem Internet geladen werden. Außerdem wird dieser Modus benötigt, um mit einer HomeMatic-CCU zu kommunizieren.
- OPTION_MQTT ist notwendig, um mit einem MQTT-Broker zu kommunizieren.
- OPTION_TINKERFORGE aktiviert die Unterstützung für Tinkerforge-Bricklets.
Curl-Unterstützung
Die Software kann mit Unterstützung für libcurl kompiliert werden. Diese wird nur dann benötigt, wenn HTTP(s)-Verbindungen aufgebaut werden sollen (für JSON-Strukturen, die von Webservern ausgelesen werden sollen, und zur Kommunikation mit einer HomeMatic-API).
apt-get install libcurl4
Außerdem werden die Entwicklungswerkzeuge für libcurl benötigt:
apt-get install libcurl-dev
Das virtuelle Paket libcurl-dev bietet verschiedene Implementierungen zur Auswahl. Alle sollten funktionieren; getestet wurde:
apt-get install libcurl4-gnutls-dev
MQTT-Unterstützung
Wenn die Software mit Unterstützung für MQTT kompiliert werden soll, müssen die Paho-MQTT-Bibliotheken für C und C++ installiert sein. Für Arch-basierte Linux-Distributionen existieren hier bereits fertige Pakete über das AUR: paho-mqtt-c-git und paho-mqtt-cpp-git. Für Debian-basierte Systeme (wie den Tinkerforge Red Brick) müssen wir die Bibliotheken selbst kompilieren und installieren. Hierfür werden einige Pakete vorausgesetzt:
apt-get install libssl-dev build-essential gcc make apt-get install cmake cmake-gui cmake-curses-gui
Anschließend laden wir zunächst die Eclipse Paho MQTT C-Bibliothek, kompilieren und installieren sie entsprechend der Dokumentation:
git clone https://github.com/eclipse/paho.mqtt.c cd paho.mqtt.c sudo make install cd ..
Nun folgt die Eclipse Paho MQTT C++-Bibliothek. Wenn auch die Dokumentation installiert werden soll bzw. die Beispiele kompiliert werden sollen, müssen die entsprechenden Flags hier in der dritten Zeile auf TRUE gesetzt werden.
git clone https://github.com/eclipse/paho.mqtt.cpp cd paho.mqtt.cpp cmake -Bbuild -H. -DPAHO_BUILD_DOCUMENTATION=FALSE -DPAHO_BUILD_SAMPLES=FALSE sudo cmake --build build/ --target install sudo ldconfig cd ..
Tinkerforge-Unterstützung
Der notwendige Code für die Tinkerforge-C/C++-Bindings ist bereits enthalten. Für die Tinkerforge-Unterstützung müssen keine zusätzlichen Schritte unternommen werden.
Sensorlogger kompilieren
Um den Sensorlogger zu kompilieren, genügt ein Aufruf von make. Der Quellcode muss vorher entweder von GitHub geladen werden oder manuell von dieser Seite.
git clone https://github.com/davidplotzki/sensorlogger cd sensorlogger make
Start
Beim Aufrufen kann der Pfad zu einer Konfigurationsdatei als Parameter übergeben werden:
./sensorlogger /home/username/my_sensors.json
Wenn keine Konfigurationsdatei übergeben wird, sucht das Programm nach einer Datei unter dem Namen sensorlogger.json im aktuellen Verzeichnis. Schlägt auch dies fehl, wird das Programm beendet.
Sensorlogger als Hintergrunddienst
Es wird empfohlen, den Sensorlogger mit beschränkten Nutzerrechten auszuführen. Die Einrichtung eines automatischen Starts beim Booten hängt von der Distribution ab. Für Debian/Raspbian könnte z.B. folgende Konfiguration für systemd verwendet werden, wenn sich die ausführbare Datei sensorlogger im Home-Verzeichnis des Benutzers unter /home/username befindet und dort auch eine Konfigurationsdatei namens config.json liegt.
# /etc/systemd/system/sensorlogger.service # ------------------------------------------ # systemctl daemon-reload # systemctl enable sensorlogger [Unit] Description=Sensorlogger [Service] WorkingDirectory=/home/username ExecStart=/home/username/sensorlogger /home/username/config.json User=username Group=users [Install] WantedBy=multi-user.target
Mit den folgenden beiden Befehlen würde man den Dienst anschließend laden und beim Start verfügbar machen:
systemctl daemon-reload systemctl enable sensorlogger