Sensorlogger

  1. Übersicht
  2. Download, Installation & Start
  3. Konfiguration & komplettes Beispiel

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:

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

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

Konfiguration & komplettes Beispiel>>