homee Metriken

Über Metriken in homee und wie man sie exportiert in andere Systeme

Einführung in Metriken

Einführung in Metriken

Was sind Metriken im Kontext von homee?

Im Bereich der Hausautomation gibt es viele Geräte, welche wir für dieses Buch in Aktoren und Sensoren aufteilen.

Sensoren

Sensoren messen Umstände und Veränderungen in der Umgebung. Dabei kann es sich um Werte mit individuellem Spektrum z. B. den Stromverbrauch, Helligkeit und Temperatur handeln, aber auch um binäre Werte, wie z. B. Bewegung, an/aus oder Rauch- und Wassermelder.

Aktoren

Aktoren handeln auf Basis von Befehlen, z. B. homeegrammen oder direkter Interaktion. Schalter, Motoren, etc. zählen zu dieser Kategorie. Manchmal sind Aktoren auch Sensoren und umgekehrt, wie z. B. bei einem Zwischenstecker, der die Steckdose schaltbar macht und gleichzeitig den Stromverbrauch misst.

Einführung in Metriken

Welche Metriken sind interessant für den Export?

Viele Geräte senden mehr als eine Metrik zum Controller (in unserem Fall über den jeweiligen Network Cube zum Brain Cube). Wir unterscheiden den Typ der Metrik danach, was er darstellt.

Der "ist-Zustand"

Die für uns interessanteste Form der Metrik stellt einen Messung zum Zeitpunkt der Abfrage dar. Beispiel: Der in dieser Sekunde aktuelle Stromverbrauch. Der englische, fachlich korrekte Begriff für diesen Typ Metrik ist "Gauge". Eine Messung dieser Metrik besteht immer aus dem Wert, einem Zeitstempel (Tag, Monat, Jahr, Stunde, Minute, Sekunde, evtl. auch Millisekunde) und sogenannten Tags oder Labels, welche den Messwert in den richtigen Kontext setzen. Ein Tag kann z. B. geraet='Rolladen Küche' oder type='energy'. Diese Tags helfen uns später bei der korrekten Gruppierung und Abfrage von Metriken.

Summen

Manche Geräte summieren Metriken über Zeit. Diese Akkumulationen können bei Bedarf durch den Nutzer wieder auf 0 zurückgesetzt werden. Dies ist keine für den Export interessante Metrik, weil der zeitliche Bezug zur Messung fehlt. Einzig die Differenz zwischen zwei Messungen kann eine nutzbare Information abwerfen, ist aber durch die Gauge Messungen ausreichend präzise summierbar. Es gilt: summe(gauge_messung_ueber_zeit) == diff(gerate_summe2 - gerate_summe1), sofern man den selben Zeitraum betrachtet.

Sonstiges

Es gibt noch weitere Typen von Metriken, welche uns im Kontekt von homee weniger interessieren. Zur Vollständigkeit seien hier noch Counter, also einfache Zähler und Histogramme, also eine Kombination von Countern und Gauges genannt. Histrogramme könnten z. B. eingesetzt werden um eine Signallaufzeit von der App zu einem Schalter zu bestimmen. Hier fehlt uns jedoch die Möglichkeit der Erhebung und daher sind Histrogremme nur von geringem Interesse.

homee-eigene Metriken

homee-eigene Metriken

Welche Metriken sammelt homee und wie?

Der Brain Cube sammelt von sich aus schon Metriken, z. B. den Stromverbrauch oder die Helligkeit, sofern die Sensoren im Netz vorhanden sind.

Diese Metriken werden (nach Einschätzung des Autors) in rrdtool Dateien abgelegt. Der Vorteil von rrd liegt in der Vorhersagbarkeit des benötigten Speicherplatzes, da rrd in feste "Buckets" (z. B. Sekundenweise pro Tag, Stundenweise pro Woche, etc) sortiert. Diese Methode ist Speicher- und Resourceneffizient, hat jedoch den Nachteil, dass die Granularität über Zeit darunter leidet. Es ist mit dieser Methode nicht möglich den Verbrauch z. B. am letzten Dienstag zwischen 15:00 und 16:00 mit dem vom Dienstag vom Vormonat zu vergleichen.

Software zur Metrik Sammlung

Software zur Metrik Sammlung

Einleitung

Software zur Metrik Sammlung kommt eigentlich aus dem Bereich der Systemadministration, kann aber in vielen verschiedenen Bereichen zur Anwendung kommen.

Im Bereich der Hausautomation können wir diese Software verwenden um die Werte, die ein Sensor oder Akteur von sich aus aufzeichnet, über lange Zeiträume zu beobachten. Die meisten mitgelieferten Lösungen haben entweder nur eine geringe Auflösung, beispielsweise können wir nur minutengenau die Werte betrachten, oder länger zurückliege Datenpunkte werden aggregiert, so dass wir nur noch tageweise oder stundenweise auf die gesammelten Daten blicken können. 

Wer sich mehr wünscht muss auf eine professionellere Lösung zurückgreifen, was jedoch auch erhöhten Aufwand in den Gebieten der Einarbeitung und des Betriebs bedeutet.

Im Weiteren betrachten wir Software um Metriken zu Sammeln und eben welche, um Metriken zu visualisieren. Im letzen Kapitel betrachten wir noch Komponenten, die Benachrichtigungen und Alarme senden können, wenn sich Metriken nicht in den definierten Grenzen bewegen.

Die Komponenten

Wir greifen unsere Metriken nicht einfach aus der Luft sondern benötigen Software, die die Daten aus den Systemen, hier also homee, extrahiert. Nach der Extraktion werden die Daten entweder im Push- oder Pull-Verfahren an einen zentralen Speicherort weitergeleitet.

Wir betrachten hier drei Komponenten:

Der brain cube ist der kleine, weiße Würfel, auf dem das ganze homee System aufbaut. Dieser ist per WLAN im eigenen Netz erreichbar und durch eine undokumentierte API ansprechbar.

Der homee exporter ist eine Software, die sich mit dem homee verbindet und die Metriken aus dem brain cube ausliest. Diese Metriken werden dann per HTTP Schnittstelle in einem für Prometheus verarbeitbaren Format bereitgestellt. 

Auf die Installation und Konfiguration von Prometheus gehen wir in einem späteren Kapitel im Detail ein.

Mit Prometheus arbeiten wir standardmäßig immer im Pull-Verfahren, wobei die Kette der Anfragen durch die Pfeilrichtung im Bild oben angezeigt wird.

Prometheus

Prometheus ist eine Software, die von Freiwilligen entwickelt und kostenfrei zur Verfügung gestellt wird. 

homee Exporter

In der Terminologie von Prometheus heißen die Dienste, die Metriken bereitstellen, häufig "Exporter". Exporter gibt es für eine Reihe von Anwendungen, angefangen von Prometheus selbst, über Server Dienste wie Datenbanken, bis hin zu OpenWeatherMap. Eine Liste, die keinen Anspruch auf Vollständigkeit hegt, findet sich hier: https://prometheus.io/docs/instrumenting/exporters/. Der homee Exporter verbindet sich über die selbe Verbindung wie die homee Webseite zum brain cube und nutzt die selben Befehle um sich eine Liste aller im Netz verfügbaren Geräte zu beschaffen. Aus dieser Liste werden dann die aktuellen Werte extrahiert und für einen Abruf durch Prometheus bereitgestellt. Die Ausgabe sieht dann z. B. wie folgt aus:

# HELP current_energy Tracks the current energy level of a meter
# TYPE current_energy gauge
current_energy{node_id="21",attribute_id="237",name="Rollade Wohnzimmer Links",unit="W",} 0.0
current_energy{node_id="17",attribute_id="188",name="Rolladen Küche",unit="W",} 0.0
current_energy{node_id="22",attribute_id="250",name="Rollade Wohnzimmer Rechts ",unit="W",} 0.0
current_energy{node_id="16",attribute_id="175",name="Treppen",unit="W",} 0.0
current_energy{node_id="17",attribute_id="181",name="Rolladen Küche",unit="kWh",} 1.379
current_energy{node_id="22",attribute_id="243",name="Rollade Wohnzimmer Rechts ",unit="kWh",} 0.029
current_energy{node_id="18",attribute_id="192",name="Wallplug Küche Kühlschrank",unit="kWh",} 726.859
current_energy{node_id="18",attribute_id="195",name="Wallplug Küche Kühlschrank",unit="W",} 189.699
current_energy{node_id="16",attribute_id="172",name="Treppen",unit="kWh",} 9.27
current_energy{node_id="21",attribute_id="230",name="Rollade Wohnzimmer Links",unit="kWh",} 0.029
# HELP current_temperature Tracks the current state of a thermometer
# TYPE current_temperature gauge
current_temperature{node_id="1",attribute_id="17",name="Motion Sensor Küche",unit="°C",} 22.7
current_temperature{node_id="8",attribute_id="116",name="Dachterrasse",unit="°C",} 16.7
current_temperature{node_id="9",attribute_id="122",name="FRITZ!DECT Rep 100 #1",unit="°C",} 23.5
current_temperature{node_id="3",attribute_id="53",name="Motion Sensor Kinderschlafzimmer",unit="°C",} 18.899
current_temperature{node_id="4",attribute_id="71",name="Motion Sensor Office",unit="°C",} 19.6
current_temperature{node_id="7",attribute_id="110",name="xenji-home",unit="°C",} 22.7
current_temperature{node_id="5",attribute_id="89",name="Motion Sensor Flur Kinderzimmer",unit="°C",} 21.5
current_temperature{node_id="2",attribute_id="35",name="Motion Sensor Flur Schlafzimmer",unit="°C",} 22.6
current_temperature{node_id="6",attribute_id="107",name="Motion Sensor Wohnzimmer",unit="°C",} 20.799
current_temperature{node_id="11",attribute_id="147",name="Motion Sensor Vorratskeller",unit="°C",} 22.1
Software zur Metrik Sammlung

Prometheus

Übersicht

Funktionsweise

Installation

Betrieb

Beispielkonfiguration

Software zu Metrik Visualisierung

homee Verlaufsdaten FTP Export autom. in mySQL importieren

homee Verlaufsdaten FTP Export autom. in mySQL importieren

Einleitung

Mit dem Core Update 2.20 ist es möglich die homee Verlaufsdaten auf einem FTP-Server zu exportieren. Dieser Dienst ist sogar automatisiert, so das jeden Tag kurz nach Mitternacht die Verlaufsdaten des Vortages exportiert werden. Dabei wird für jedes Gerät ein Ordner angelegt (=Gerätename) und in diesem Unterordner (Gerätedienst) wie z.B. Schalter, Aktueller Verbrach, Temperatur usw. Dabei werden für jeden Gerätedienst täglich neue CSV-Dateien exportiert.

Ein Export findet nur statt, wenn es für das Gerät, bzw. Gerätedienst auch eine Statusänderung für diesen Tag gab. D.h. wenn ein Schalter den ganzen Tag nicht geschaltet wurde, gibt es für diesen Schalter für diesen Tag auch keinen Export.

Das heißt, über die Zeit werden ganz schön viele CSV-Dateien erzeugt. In meinem Fall bei 89 Geräten und im Durchschnitt 3 Gerätediensten je Gerät sind es 267 Dateien pro Tag, 1869 pro Woche, über 8000 pro Monat und knapp 100.000 pro Jahr.

Damit gestalten sich die Auswertung und Analyse der Daten sehr schwierig.

Was liegt da näher, als die Daten in einer Datenbank zusammenzufassen.

 

Dieses Tutorial beschreibt wie ihr die CSV-Dateien täglich automatisiert in eine Datenbank schreibt.

Ich beschreibe es an meinem Setup:

  • FTP Server auf Synology DS214 play
  • MariaDB auf Synology DS214 play

Das Tutorial ist zum größten Teil auch auf andere DS Modele anwendbar.

Weiter geht es mit FTP Server auf der DiskStation einrichten

homee Verlaufsdaten FTP Export autom. in mySQL importieren

FTP Server auf der DiskStation einrichten

Eine Ausführliche Anleitung zur Einrichtung des FTP Dienstes findet Ihr in der Synology Wissensdatenbank

Über FTP auf Dateien auf dem Synology NAS zugreifen

Ich habe einen User homee und einen Ordner homee (/volume1/homee) erstellt. Und dem User homee Schreib/-und Leserechte für den Ordner homee erteilt.

Desweiteren habe ich ich im Ordner homee einen Order "Verlaufsdaten" für die Verlaufsdaten erstellt.

Ihr könnt euch natürlich einen beliebigen User anlegen, sowie den Speicherort der Verlaufsdaten beliebig festlegen.

Berechtigung User homee.JPG

Damit die Umlaute richtig dargestellt werden ist es wichtig noch folgende Einstellung vorzunehmen. UTF-8 Codierung -> Erzwingen

UTF-8-Codierung.JPG

 

Habt Ihr den FTP Dienst auf der Synology eingerichtet, könnt Ihr den automatischen Verlaufsdaten Export im homee einrichten.

Weiter mit FTP in homee einrichten

 

homee Verlaufsdaten FTP Export autom. in mySQL importieren

FTP in homee einrichten

Nach erfolgreicher Einrichtung des FTP Server, können wir damit starten den FTP Dienst in homee einzurichten.

Dazu öffnet Ihr die homee App eures Vertrauens, navigiert zu den Einstellung und scrolt runter bis Ihr die Dienste findet und wählt FTP-Server aus.

homee-FTP-Einstellungen.JPG

Protokoll: Das unterstützte Protokoll des FTP-Server

Hostname: die IP-Adresse der DiskStation

Port: Port des FTP-Servers

Benutzername: Bentzername welchen wir zuvor bei Einrichtung des FTP-Servers auf der Synolgy erstellt haben

Passwort: Passwort welches wir zuvor bei Einrichtung des FTP-Servers auf der Synolgy vergeben haben

Pfad: der Pfad zum Ordner den wir zur Speicherung der Verlaufsdaten erstellt haben.

Anschließend können wir die Einstellungen mit einemklick auf Testen testen.

Damit ist aber nur der FTP Dienst seitens homee eingerichtet. Was über FTP gesichert werden soll müssen wir an einer anderen Stelle festlegen.

Im Falle der Verlaufsdaten, scrollen wir nach oben und klicken auf Verlaufsdaten und dan auf Automatischer Export

Automatischer-Export.JPG

Hier aktivieren wir diesen, wählen als Ziel FTP-Server und geben einen Order an, wo die Verlaufsdaten gespeichert werden sollen.

In unseren Fall Verlaufsdaten, das entspricht den Speicherort /volume1/homee/Verlaufsdaten auf der DiskStation.

Ist dies getan, werden die Verlaufsdaten täglich um ca. 00:15 in der Ornder Verlaufsdaten als CSV-Dateien Exportiert.

Weiter geht es mit Datenbank MariaDB anlegen

 

homee Verlaufsdaten FTP Export autom. in mySQL importieren

Datenbank MariaDB anlegen

Zuerst müssen wir noch 2 Packete im Packet Zentrum der Synolgy installieren

MariaDB und phpMyAdmin

Packetzentrum.JPG

Nach der Erfolgreichen Installation der beiden Packete wählen wir im Hauptmenü MariaDB aus.

Hier können wir das Passwort für den root user anlegen/ändern.

Hier notieren wir uns den Port, den werden wir später wieder brauchen.

MariaDB.JPG

Nachfolgend müssen wir noch eine Datenbank und einen User anlegen, welcher berechtigt ist die Datenbank zu befüllen.

Dazu wählen wir im Hauptmenü phpMyAdmin und melden uns mit dem Benutzer root und dem zuvor festgelegten Passwort an.

phpMyAdmin.JPG

Nach der Anmeldung erstellen wir zuerst einen neuen Benutzer "homee"

INCBenutzer-anlegen.JPG

Mit dem Hacken bei "Erstelle eine Datenbank mit gleichen Namen und gewähre alle Rechte"

Estellen wir gleich eine neue Datenbankt und weisen dem User homee die entsprechende Rechte zu.

Das ganze mit OK bestätigen, ganz unten auf der rechten Seite.

Danach sollten wie eine neue Datenbank auf der Linke Seite aufgelistet sehen.

DB-homee.JPG

Sollte Ihr schon bereit eine DB angelegt haben und möchtet dem User homee nur noch die notwendige Rechte zuweisen,

könnt ihr dies nach Auswahl der DB im Reiter Rchte tun.

Rechte-homee.JPG

Das wars schon, die DB und der User "homee" ist angelegt.

Jetzt gilt es die von homee exportierten Verlaufsdaten in die DB zu importieren.

Weiter geht es mit homee_csv_to_mysql ausführen auf einer DiskStation

 

 

 

homee Verlaufsdaten FTP Export autom. in mySQL importieren

homee_CSV_to_mysql ausführen auf einer DiskStation

Zum Download der aktuellen Version von homee_csv_to_mysql besuchen wir die die Github Seite von xenji

und laden uns die entsprechende Version herunter. Welche Version benötigt wird könnt Ihr entweder hier anhand des Prozessor Typ der Synology entnehmen oder imTerminal folgenden Befehl eingeben uname -a

Wir entpacken die datei und speichern diese im Ordner homee.

Zur Ausführung de Programms homee_csv_to_mysql verwenden wir ein Shell Skript, welches wr zuvor noch erstellen müssen. Ich benutze heirzu Notepad++

Wir erstellen eine neue .sh Datei mit folgen Inhalt

#!/bin/sh/volume1/homee/homee_csv_to_mysql import --mysql-dsn "Benutzername:Passwort@tcp(192.168.178.41:3307)/homee" --input-dir /volume1/homee/Verlaufsdaten --force-all

Und speichern diese z.B unter update_homee_to_mysql.sh auf der DiskStation im Order homee ab.

/volume1/homee/homee_csv_to_mysql:  Speicherort der Ausführbaren Datei home_csv_to_mysql

Benutzername: dieser wird ersetzt durch Benutzernamen, welchen wir in phpMyAdmin angelegt haben

Passwort: Passwort für den Benutzer

192.168.178.41:3307: IP-Adresse eurer DiskStation und der Port von mariaDB

/volume1/homee/Verlaufsdaten: Speicherort der Verlaufsdaten

--force all wird einmalig benötigt um bereits alle vorhandene Verlaufsdaten in die DB zu importieren.

Zur Ausführung des Shell Skriptes nutzen wir den Aufgabenplaner der Synology.

Ihr könnt zur initialen Erzeugung der Tabellen und den erstmaligen Import aller CSV-Dateien aus dem Ordner Verlaufsdaten auch den Befehl im Terminal eingeben:

/volume1/homee/homee_csv_to_mysql import --mysql-dsn "Benutzername:Passwort@tcp(192.168.178.41:3307)/homee" --input-dir /volume1/homee/Verlaufsdaten --force-all

 

Öffnet die Systemsteuerung eurer DiskStation und wählt Aufgabenplaner aus.

Dort legen wir eine neue Aufgabe an.

Aufgabe-Bearbeiten1.JPG

Legen einen Zeitplan an:

Aufgabe-Bearbeiten2.JPG

Und geben an was Ausgeführt werden soll. In unserem fall das Shell Skript