Influxdb und Grafana

Aus meinem beruflichen Umfeld ist mir Grafana als Lösung zur grafischen Aufbereitung gut bekannt. Daten beziehen wir klassisch aus Graphite.

Für ein Projekt habe ich nun die Daten über öffentliches Netz (also das Internet) in die Datensenke einliefern müssen. Zunächst auch hier an Graphite gedacht, jedoch ergab sich schnell die Überlegung, das der Graphite Port 2003 (hier lauscht der Carbon Daemon) jedwede Daten ohne Authentifizierung annimmt. In einem  öffentlichen Netz sicher kein akzeptabler Zustand, da hier jeder mit Kenntnis von Port und IP beliebige Stördaten einlie. Also auf die Suche nach Alternativen.

InfluxDB bietet laut db-engines.com  als Berechtigungskonzept mit einer „einfache[n] Rechteverwaltung mit Benutzeraccounts“ mehr als Graphite. Auch verspricht die Implementierung in Go mehr Performance. Grund genug, sich InfluxDB näher anzusehen.

InfluxDB

Dank des offiziellen Docker Images ist InfluxDB schnell probeweise gestartet. Hinweise liefert die Seite des Docker-Hub. Zunächst wird die Standardkonfiguration extrahiert:

docker run --rm influxdb influxd config > influxdb.conf

In dieser Datei muss die Option auth-enabled nun aktiviert werden:

...
[http] 
...
auth-enabled = true
...

In Kombination mit meinen beiden Projekten docker_nginx_auto_proxy und docker_ssl_endpoint kann man nun einen Docker Container starten, der Daten über TLS abgesichert entgegen nimmt:

docker run --name=influxdb_1 -d \
 -e PROXY_DATA=server_names:$INFLUXDOMAIN,port:8086 \
 -v /data/influxdb/data:/var/lib/influxdb \
 -v /data/influxdb/conf:/etc/influxdb/influxdb.conf:ro \
 influxdb -config /etc/influxdb/influxdb.conf

Nun müssen wir mindestens einen Admin-Nutzer anlegen. Zunächst verbinden wir uns auf die InfluxDB-CLI:

docker run --rm --link=influxdb_1 -it influxdb influx -host influxdb_1

Anschließend legt folgendes Statement den Admin-Nutzer bofh an:

CREATE USER bofh WITH PASSWORD 'rrzs42' 
  WITH ALL PRIVILEGES

Anschließend die CLI beenden und beim Neuverbinden zusätzlich die Parameter username und password zur Authentifizierung verwenden. Weitere Informationen zur Nutzerverwaltung von InfluxDB findet man in der offiziellen Dokumentation.

Eine Datenbank sollte in der CLI ebenfalls erstellt werden:

CREATE DATABASE datensenke

Testweise können nun bereits Daten eingeliefert werden:

curl -X POST -u bofh:rrzs42 \
  --data-binary 'wert,key=value wert=42.23'\
  'https://$INFLUXDOMAIN/write?db=datensenke'

Die genaue Beschreibung über das Schreiben von Daten findet man in der offiziellen Dokumentation.

Grafana

Für Grafana gibt es ebenfalls ein offizielles Docker-Image. Der erste Schritt ist das Extrahieren der Konfiguration:

docker run --rm --name grafana grafana/grafana
docker cp grafana:/etc/grafana/grafana.ini .

Die wichtigste Anpassung der Konfiguration bezieht sich auf das Abschalten des selbständigen Anmeldens neuer Nutzer (allow_sign_up = false in der Kategorie users). Somit ist nur noch der Administrator (Login: admin) in der Lage, neue Nutzer anzulegen.

Gestartet wird der Grafana-Container mit folgendem Kommando:

docker run --name=grafana -d \
    -e PROXY_DATA=server_names:$GRAFANADOMAIN,port:3000 \
    -v /data/grafana/lib:/var/lib/grafana/ \
    -v /data/grafana/conf:/etc/grafana/grafana.ini \ 
    -e "GF_SERVER_ROOT_URL=https://$GRAFANADOMAIN" \
    -e "GF_SECURITY_ADMIN_PASSWORD=s3cr3t" \
    grafana/grafana

Nun kann die Grafana-Instanz unter  https://$GRAFANADOMAIN aufgerufen werden und der Login funktioniert mit den Credentials admin:s3cr3t.

Der nächste Schritt sollte das Ändern des Passworts des Administrators sein und das Anlegen neuer Nutzer sein. Dies geschieht unter Grafana-MenuAdminGlobal Users.

Um wie die Daten aus InfluxDB in Grafana nutzen zu können, legt man eine Datenquelle unter Grafana-MenuData Sources an. Die Einstellungen für InfluxDB sind in unserem Fall:

  • Type: InfluxDB
  • URL: https://$INFLUXDOMAIN
  • Access: Proxy
  • Http Auth: With Credentials
  • InfluxDB Details:
    • Database: datensenke
    • User: bofh
    • Password: rrzs42

Jetzt sind wir in der Lage, über Dashboards wie gewohnt Graphen an zu legen. Beispielsweise:Et voilà, flexible und ansehnliche graphische Aufbereitung von Zeitseriendaten.

ioBroker: Ergänzung zu Open Source Hausautomatisierung im Vergleich

Im Artikel zu Open Source Hausautomatisierungslösungen wurden bereits einige Lösungen verglichen. Auf der diesjährigen 17. Gulaschprogrammiernacht  hat Bluefox ein weiteres System vorgestellt: ioBroker

ioBroker soll nun an den gleichen Kriterien wie die anderen 7 Systeme gemessen werden:

  1. Die Software muss quell-offen und frei sein (OpenSource)
  2. Dokumentation auf Englisch bzw. Deutsch und in ausreichenden Qualität und Detailtiefe vorhanden (Dokumentation)
  3. Größe der Community
  4. Support für Komponenten von eQ-3 für Homematic und Homematic IP (Hardware-Unterstützung), da diese bereits vorhanden ist.
  5. Apps für iOS bzw. Android (Apps)
  6. Verwendete Programmiersprachen & Technologien (Technologie)
  7. Die Software muss Graphen zur historischen Analyse von Messwerten bieten (Graphen)
  8. Die Software muss über Regeln erweiterbar sein, z.B. Verknüpfung von Schalter, Reaktion aufs Verlassen der Wohnung (Regeln)

ioBroker ist ein bei Github gehostetes OpenSource-Projekt unter MIT-Lizenz und basiert auf Node.js, einer Server-seitigen Implementierung von JavaScript.

Anleitungen zur Installation sind auf Deutsch, Englisch und Russisch vorhanden. Allerdings sollten die Autoren hier noch etwas Zeit investieren und Fehler ausbessern, da diese den Lesefluss beeinflussen.

Laut dem Vortrag von Bluefox (Videomitschnitt exisitiert) wächst die Community von ioBroker rasant an. Dazu trägt sicher auch bei, dass bereits eine Integration für Amazon Alexa existiert, was das Gesamtsystem deutlich smarter erscheinen lässt.

Homematic und Homematic-IP werden laut Forum unterstützt. Auch scheint Anwesenheitserkennung über Fritz!Box und das Steuern von Samsung TV Geräten unterstützt zu werden.

Wichtig sind natürlich auch Apps für:

Da ioBroker auf Node.js basiert kann beim Entwickeln sowohl Front- als auch Backend  in einer Sprache entwickelt werden. Daten werden sowohl in relationalen Datenbanken (MySQL, PostgreSQL oder SQLite) als auch in InfluxDB für zeitbasierte Daten abgelegt. Die transparenten Verbindungen über TCP erlauben es hierbei, Teile der Software modular auf mehreren Hosts zu betreiben.

Zur Visualisierung bietet ioBroker einen Editor, der komplett im Browser läuft. Hierbei werden unterschiedliche Darstellungen für Zielgeräte angeboten.  Diese Funktionalität wird über den VIS-Adapter bereit gestellt. Graphen stellt das System hierbei über den Flot-Adapter dar.

Zur Eigentlichen Automatisierung bietet ioBroker das Definieren von Szenen über den Szenen-Adapter aber auch das Erstellen komplexer über Adapter für Blockly und node-red.

Zusätzlich zu den, für den Vergleich wichtigen, Punkten bietet eine Integration in Apples Homekit. Diese ist ebenso ein Pluspunkt wie auch der optionalen Clound-Zusatz, der einen Zugriff aus der Ferne auch ohne eigenes VPN ermöglicht.

Alles in Allem ist ioBroker eine weitere Software mit guten Ansätzen, die ich aber aus Zeitgründen und da ich weder mit Node.js noch Javascript besonders viel Erfahrung besitze, nicht weiter betrachten werde.

Open Source Hausautomatisierung im Vergleich

Inzwischen sind alle Heizkörper und auch fast alle Lichter in der heimischen Wohnung über die Weboberfläche der eQ-3 CCU2 fernbedienbar und auch die @Home App funktioniert soweit gut. Die Produktpflege und Dokumentation von eQ3 würde ich vorbildlich nennen: auf der Downloads-Seite findet man sowohl die jeweils aktuelle CCU2 Firmware (inklusive Change Log) als auch die Dokumentation der Schnittstellen (HomeMatic XML-RPC).

Vorhandene Komponenten

Folgende Homematic und Homematic  IP Produkte sind aktuell im Einsatz:

  • HM-CC-RT-DN – Funk-Heizkörperthermostat
  • HM-LC-SW1-FM – Schalt-Aktor 1-fach Unterputz (ohne Taster)
  • HM-LC-SW2-FM – Schalt-Aktor 2-fach Unterputz (ohne Taster)
  • HM-LC-Sw1PBU-FM – Schalt-Aktor 1-fach Unterputz (für Markenschalter)
  • HM-PB-2-WM55 – 2-fach-Funk-Wandtaster
  • HmIP-BSM – Schalt-Aktor 1-fach Unterputz (Homematic IP, für Markenschalter)
  • HMIP-PSM – Schalt- und Messsteckdose (Homematic IP)

Allerdings kann man (ohne Kritik an eQ-3 zu üben) naturgegeben nur deren Produkte verknüpfen und steuern. Weitere bereits vorhandene Geräte sollten ebenso angesprochen werden können:

Zum Glück gibt es ausreichend Softwarelösungen für dieses Problem. Vor dem Aufzählen der Kandidaten sollen allerdings Vergleichskriterien festgelegt werden.

Vergleichskriterien

  1. Die Software muss quell-offen und frei sein (OpenSource)
  2. Dokumentation auf Englisch bzw. Deutsch und in ausreichenden Qualität und Detailtiefe vorhanden (Dokumentation)
  3. Größe der Community
  4. Support für Komponenten von eQ-3 für Homematic und Homematic IP (Hardware-Unterstützung), da diese bereits vorhanden ist.
  5. Apps für iOS bzw. Android (Apps)
  6. Verwendete Programmiersprachen & Technologien (Technologie)
  7. Die Software muss Graphen zur historischen Analyse von Messwerten bieten (Graphen)
  8. Die Software muss über Regeln erweiterbar sein, z.B. Verknüpfung von Schalter, Reaktion aufs Verlassen der Wohnung (Regeln)

openHAB

openHAB basiert auf Java und OSGi (Equinox) und ist somit auf allen Plattformen lauffähig, auf denen Java angeboten wird (Linux, Windows, OS X,…). Laut Wiki sind auch ARM SBCs ausreichend.

openHAB verwendet intern einen Event Bus, um alle anderen Komponenten zu verbinden. Weitere wichtige Komponenten sind das openHAB Repository, welches den aktuell bekannten Zustand aller bekannten Items vorhält, und die Bindings, die als Abstraktionsschicht zwischen openHAB und den anzubindenden Geräten fungiert.

Über das openHAB Repository werden sowohl die diversen User Interfaces (WebUI, Apps für iOS, Android, Windows Phone, …) als auch die Verarbeitung der Automatisierungsregeln angebunden.

URLhttp://www.openhab.org/
OpenSourcehttps://github.com/openhab/openhab (EPL)
Dokumentationhttps://github.com/openhab/openhab/wiki
Dokumentation ausführlich für alle Module auf Englisch vorhanden, über github Wiki gut erweiterbar.
CommunityHohe Aktivität
Hardware-
Unterstützung
Breite Unterstützung für diverse Hardware und externe Software
Appsverfügbar für iOS, Android, Windows Phone und sogar Pebble
TechnologieJava / OSGi
GraphenCharts sind über Persistenzen für fast alle messbaren Größen möglich.
RegelnopenHAB ist über Regeln steuerbar. Diese sind in einer DSL zu erstellen und integrieren Java.

Home Assistant

Python 3 bildet die Basis für Home Assistant. Entsprechend bietet auch Home Assistant einen breiten Support für die gängigsten Betriebssysteme (Video-Tutorials existieren für Windows 10, OS X und Ubuntu). Auch Hinweise zum Durchführen einer Aktualisierung sind vorhanden. Installationshinweise für Raspberry Pi, Docker, Vagrant und auch Synology NAS sind vorhanden.

Auch Home Assistent nutzt architektonisch einen Bus, um die einzelnen Komponenten zu verbinden, eine Service Registry und eine State Machine zum Verwalten der Zustände der einzelnen Komponenten.

URLhttps://home-assistant.io/
OpenSourcehttps://github.com/home-assistant/home-assistant (MIT)
DokumentationCookbook für Anwender und Dokumentation für Entwickler
CommunitySehr hohe Aktivität
Hardware-Unterstützungüber 470 (Stand Version 0.33.0) verschiedene Komponenten (Hard- und Software), Homematic ist unterstützt, Homematic IP jedoch nicht
Appskeine, iOS App in Vorbereitung
TechnologiePython
GraphenGraphen sind an messenden Objekten vorhanden
Regelnmöglich, können in YAML definiert werden

fhem

fhem wird in Perl entwickelt und schont daher die benötigten Ressourcen  (sogar auf Fritz!Boxen ist ein Betrieb möglich). Eine Installation ist auch hier wieder auf den 3 großen Betriebssystemen möglich.

Für die Freunde eines Handbuchs hält die Community eine ausführliche Einführung bereit.

URLhttp://fhem.de//
OpenSourcehttps://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/ (GPL v2)
DokumentationAusführliches deutschsprachiges PDF, ausführliches gemischtsprachiges Wiki
CommunitySehr hohe Aktivität
Hardware-UnterstützungÜbersicht über unterstützte Hardware HmIP-Geräte noch nicht offiziell gelistet aber laut Forum möglich
Appsu.a. FHEMobile für iOS und andFHEM für Android
TechnologiePerl
GraphenGraphen sind über gnuplot möglich
RegelnRegeln in Perl geschrieben möglich

calaos

calaos ist ein französisches Projekt und setzt für die Steuerung auf KNX und DMX. Als Hardware wird hauptsächlich Wago unterstützt. Leider ist die Dokumentation hauptsächlich in Französisch und auch das Datum des letzten Eintrags aus dem Entwickler-Blog aus dem Februar 2015 lässt nichts gutes hoffen.

URLhttps://calaos.fr
OpenSourcehttps://github.com/calaos (GPL v3)
Dokumentationfranzösischsprachiges Forum, Wiki in Französisch und Englisch
Communitymoderate Aktivität
Hardware-UnterstützungEingeschränkt, lediglich WAGO, OneWire Komponenten, Zibase, GPIO und IoT Devices werden unterstützt (Quelle)
AppsCalaos Mobile für iOS, Calaos Home für Android
TechnologieC/C++
Graphenunbekannt
Regelnintegrierter LUA Support

domoticz

domoticz ist in C/C++ geschrieben und nativ verfügbar für Raspberry Pis, Windows, Linux, OS X und für einige NAS-Syteme. Als Scripting-Engine wird Lua verwendet, über die mit Blockly die Automatisierung vorgenommen wird. Leider Homematic nicht unterstützt, jedoch ist die Liste an unterstützter Hardware recht umfangreich.

URLhttps://domoticz.com/
OpenSourcehttps://github.com/domoticz/domoticz (GPL v3)
Dokumentationenglischsprachiges Handbuch und Wiki
Communityhohe Aktivität
Hardware-UnterstützungModerat, leider kein Homematic (Quelle)
AppsImperiHome für iOS und Android
TechnologieC/C++
GraphenJa, als Log in der UI
Regelnintegrierter Support für LUA, Bash, Perl, PHP und Python, Support für Blockly

openmotics

openmotics vereint ein Angebot von Soft- und Hardware, die unter eine OpenSource Lizenz gestellt wurde. Die Hardware wird auch im Shop verkauft. Allerdings existieren nur Module zum Einbau in Schaltschränke auf Hutschienen. openmotics eignet sich somit kaum zum nachträglichen Einbau sondern eher für Neubauten. Aber auch dann ist keine Integration weitere, fremder Komponenten vorgesehen.

URLhttps://www.openmotics.com/
OpenSourcehttps://github.com/openmotics (MIT)
Dokumentationenglischsprachiges Wiki
Communitykeine Aktivität (Quelle)
Hardware-Unterstützungnur spezielle openmotics Hardware (siehe Shop)
Appskeine bekannt
TechnologiePython
GraphenJa
RegelnJa

freedomotic

freedomotic bezeichnet sich als Open Iot Framework, versteht sich also nicht nur zur Heimautomatisierung, sondern versucht weiter zu gehen. Technologisch ist wie bei openHAB in Java Grundlage, es wird aber wohl auf OSGi verzichtet. Die verfügbaren Plugins sind im Marketplace verzeichnet.

Installationsanleitungen sind leider bisher nicht wirklich vorhanden, lediglich eine kurze Seite zum Raspberry Pi und Docker (Zugang über guest/guest, nur REST API) enthalten Text.

Der Einsatz von 2 getrennten Messaging Bussen ermöglicht hier zusätzlich noch das Clustering mehrerer freedomotic-Instanzen. Die verschiedenen Hardwaretypen und externen Services werden über Module angebunden.

URLhttp://freedomotic.com/
OpenSourcehttps://github.com/freedomotic/freedomotic (GPL v2)
Dokumentationenglischsprachiges Benutzerhandbuch
Communityunbekannt (Quelle)
Hardware-Unterstützungdiverse Hardware (siehe Shop), keine Hinweise auf Homematic
Appsunbekannt
TechnologieJava
Graphenunbekannt
RegelnÜber XML möglich

Bewertung

Eine abschließende Bewertung fällt schwer, jedoch werde ich freedomotic (fehlende Unterstützung für Homematic), openmotics (nur spezielle Hardware), domoticz (fehlende Unterstützung für Homematic, verwendete Programmiersprache) und calaos (stark eingeschränkte Hardwareunterstützung) aus den jeweilig genannten Gründen nicht weiter verfolgen.

Für

  • openHAB,
  • Home Assistant und
  • fhem

wird es weitere Artikel geben. Diese werden dann von hier verlinkt.

Ergänzung 7. Januar

Inhaltsverzeichnis eingefügt.