Code-Quickie: Heizung visualisieren mit Grafana

Heizung visualisieren mit Grafana


Einleitung

Nach dem InfluxDB und Grafana schon eine ganze Weile erfolgreich bei mir läuft und kräftig Daten sammelt sowie visualisiert, dachte ich mir, ich statte meinen Heizraum mit einem Display aus, auf dem ich alle wichtigen Werte zentral darstellen bzw. ablesen kann.


Dieser Code-Quickie umfasst nicht nur das reine Visualisierungthema, sondern holt etwas weiter aus und behandelt auch die Komponenten die die Visualisierung erst möglich machen.
Neben der hauptsächlichen Visualisierung in Grafana werde ich auch kurz auf die Visualisierung in FHEM und auf externen Geräte eingehen.

Die Heizung

Im Folgenden zuerst eine Zusammenstellung von welchen Geräten und Sensoren ich Daten für die Visualisierung sammle. Generell können natürlich alle Arten von Heizungen verwendet werden, aber die Daten müssen in irgendeiner Form in FHEM oder einem anderen Smart-Home-System bzw. in der InfluxDB/MariaDB landen, damit sie später visualisiert werden können.

Meine Heizung besteht in Grunde genommen aus 3 Teilen, welche ich im Folgenden näher darstellen werde.

Buderus Ölheizung

Zuerst die Buderus Ölheizung. Ein G115 Kessel mit der Logamatic 2107 Steuerung.



Nichts besonderes und an sich langweilig wäre da nicht das KM271 Kommunikationsmodul. Mit diesem Kommunikationsmodul und passendem FHEM-Modul lassen sich fast alle Parameter und Temperaturen auslesen und das besondere auch einstellen bzw. fernsteuern. Super!




Daneben ist das KM271-Modul ein wichtiger Datenlieferant für die spätere Visualisierung mit Grafana.
Das KM271-Modul und FHEM passen sehr gut zusammen und diese Konstellation funktioniert seit ca. 1,5 Jahren ziemlich problemlos bei mir.



Für eine schnelle Übersicht habe ich auch einige Plots in FHEM dazu erstellt.

Zuerst die Einbindung in FHEM:

Code
  1. define SVG_DbLog_KM271 SVG DbLog_KM271:SVG_DbLog_KM271:HISTORY
  2. attr SVG_DbLog_KM271 fixedrange 30days
  3. attr SVG_DbLog_KM271 label "Buderus Ölbrenner - Aktuelle Temps.: Aussentemp: $data{currval1}°C (min: $data{min1}°C / max: $data{max1}°C) / Kesseltemp Ist $data{currval2}°C / WWtemp Ist: $data{currval4}°C / HK2 Ist: $data{currval6}°C"
  4. attr SVG_DbLog_KM271 plotsize 1900,480
  5. attr SVG_DbLog_KM271 room KM271


Code
  1. define SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik1 SVG DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC:SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik.1:HISTORY
  2. attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik1 fixedrange 7days
  3. attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik1 label sprintf("Buderus Ölbrenner - Statistik1: Brenner-Starts heute: %0.0fx / Betriebsstunden heute: %0.1fh / Letzte Einschaltdauer: %0.1fh", $data{currval2},$data{currval3},$data{currval4})
  4. attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik1 plotsize 1900,480
  5. attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik1 room KM271
Code
  1. define SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik2 SVG DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC:SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik.2:HISTORY
  2. attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik2 fixedrange 90days
  3. attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik2 label "Buderus Ölbrenner - Statistik2"
  4. attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik2 plotsize 1900,480
  5. attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik2 room KM271

Gefolgt von den dazugehörigen gplot-Defintionen:

Das KM271-Modul überträgt unter anderem folgende interessante Werte zur späteren Visualisierung:

  • Betriebsart
  • Warmwassertemperatur über einen eigenen Sensor im Speicher.1 Ist/Soll
  • Kesseltemperatur Ist/Soll
  • Heizkreistemperatur Ist/Soll
  • Außentemperatur





Die Buderus Logamatic 2107 steuert desweiteren eine Pumpe für die Fußboden- und Dachschrägenheizung (Heizkreis2). Hier greife ich Vorlauf- und Rücklauftemperatur mittels KM271-Modul und 1-Wire-Sensoren ab.







Offtopic, aber für alle Interessierten: Ich lasse mir eine Warnung zukommen falls das WarmWasser aus irgendeinem Grund mal kalt bleiben sollte:

Code
  1. define WW.bleibt.kalt.Info.pushover.not notify KM271:WW_Betriebswerte1.* {if (ReadingsVal("KM271","WW_Betriebswerte1","") eq "Fehler WW bleibt kalt") {fhem ("set PushoverReinhardfhemheizung msg 'fhem-heizung Info' 'Fehler WW bleibt kalt' '' 0 ''")}}
  2. attr WW.bleibt.kalt.Info.pushover.not room KM271

Atmos Holzvergaser

Als nächstes Element steht der Atmos DC 30 GSE Holzvergaser im Mittelpunkt. Ein Sahnestück an osteuropäischer Heiztechnik. Im Normalzustand robuste Technik aber leider ziemlich ineffizient.


Erweitert man die Fähigkeiten des Holzvergasers mit einer "Flammtronik" ergeben sich ganz neue Möglichkeiten der Steuerung, Datengewinnung und natürlich auch der Effizienz.



Praktischersweise lässt sich die Flammtronik auch in FHEM inkl. diverser Plots einbinden.



Zuerst wieder die Einbindung in FHEM:

Code
  1. define DbLog_Atmos_Holzvergaser DbLog ./contrib/dblog/db_extern.conf Atmos_Holzvergaser:(Abgas|Brennkammer|Kesseltemp|O2|Primaerluefter|Sekundaerluefter|Verlust|status|Pumpe|CAN_T1|CAN_T2|CAN_T3|CAN_T4).*
  2. attr DbLog_Atmos_Holzvergaser asyncMode 1
  3. attr DbLog_Atmos_Holzvergaser room FlammTronik
  4. define SVG_DbLog_Atmos_Holzvergaser SVG DbLog_Atmos_Holzvergaser:SVG_DbLog_Atmos_Holzvergaser:HISTORY
  5. attr SVG_DbLog_Atmos_Holzvergaser fixedrange 1days
  6. attr SVG_DbLog_Atmos_Holzvergaser label sprintf("Atmos Holzvergaser - Aktuelle Werte: Abgas: %0.0f°C / Brennkammer: %0.0f°C / Kessel: %0.0f°C / Rest O2: %0.1f%%",$data{currval1},$data{currval2},$data{currval3},$data{currval4})
  7. attr SVG_DbLog_Atmos_Holzvergaser plotsize 1900,800
  8. attr SVG_DbLog_Atmos_Holzvergaser room FlammTronik

Gefolgt von der dazugehörigen gplot-Defintion:

Zu beachten ist, das die Flammtronik nur Werte liefern kann. Ein Einstellen ist nur an der Flammtronik selbst möglich. Absolut in Ordnung, da einmal richtig eingestellt nichts mehr an der Flammtronik gemacht werden muss.

Die Flammtronik ist ebenfalls ein wichtiger Datenlieferant für die spätere Visualisierung mit Grafana.

Was wird gesteuert und welche Sensoren werden ausgelesen:

Die beiden Belimo Stellantriebe zur Steuerung der Primär- und Sekundärluft:



Der Lüfter inkl. Flammtronik-Drehzahlmodul:

 

Restsauerstoff (RestO2) mit einem Lamdasensor (aus dem KFZ-Bereich):



Abgastemperatur mit einem PT1000-Sensor:



Kesseltemperatur mit einem PT1000-Sensor:



Brennkammertemperatur mit einem Thermoelement Typ K (NiCr/Ni - bis 1200°C):



Laddomat-Temperaturen mit 3x PT1000-Sensoren:



Eine textbasierte Visualisierung habe ich mit einem Witty-Board (ESP8266, ESPEasy) und einem 2004 LC-Display realisiert. Damit ich nicht immer auf das Handy oder auf den Bildschirm schauen muss, um die wichtigsten Holzvergaserwerte außerhalb des Heizraums ablesen zu können. Das Display wird später per Akku betrieben und mobil sein.



Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Sehr günstig und mit ein paar Zeilen Code in FHEM eingefügt:

Die IP-Adressen bitte durch eigene ersetzen.

Noch ein Hinweis zum Display: Nach Ausführung des Codes neigt FHEM bzw. das Linux-System dazu zu blockieren, inbesondere wenn das Display ausgeschaltet ist. Mögliche Lösung: Bei mir läuft ein eigenes FHEM isoliert in einem Docker-Container extra für dieses Display. Da stören solche Blockaden dann nicht weiter. Sollte jemand eine bessere Lösung haben, bitte in jeden Fall in den Kommentaren eintragen.

Update 12.12.2017: Hätte ich auch früher darauf kommen können, denn mit Hilfe des presence-Modul lässt sich das Blockieren verhindern, in dem in regelmäßigen Abständen geprüft wird, ob das kleine Infodisplay noch erreichbar ist. Wenn es nicht mehr erreichbar ist, werden die Zeilen-DOIFs mit Hilfe eines weiteren DOIF deaktiviert:

Code
  1. define Atmos.HV.Info.Display.ESP.presence PRESENCE lan-ping 192.168.178.108 120 600
  2. attr Atmos.HV.Info.Display.ESP.presence devStateIcon present:general_an@green absent:general_aus@red
  3. attr Atmos.HV.Info.Display.ESP.presence event-on-change-reading state,presence
  4. attr Atmos.HV.Info.Display.ESP.presence group presence
  5. attr Atmos.HV.Info.Display.ESP.presence room InfoDisplay
  6. define Atmos.HV.Info.Display.ESP.presence.Schalter.doif DOIF ([Atmos.HV.Info.Display.ESP.presence] eq "absent") (set Atmos.HV.Info.Display.ESP.Zeile.1.doif disable;;set Atmos.HV.Info.Display.ESP.Zeile.2.doif disable;;set Atmos.HV.Info.Display.ESP.Zeile.3.doif disable;;set Atmos.HV.Info.Display.ESP.Zeile.4.doif disable) DOELSEIF ([Atmos.HV.Info.Display.ESP.presence] eq "present") (set Atmos.HV.Info.Display.ESP.Zeile.1.doif enable;;set Atmos.HV.Info.Display.ESP.Zeile.2.doif enable;;set Atmos.HV.Info.Display.ESP.Zeile.3.doif enable;;set Atmos.HV.Info.Display.ESP.Zeile.4.doif enable)
  7. attr Atmos.HV.Info.Display.ESP.presence.Schalter.doif group DOIF
  8. attr Atmos.HV.Info.Display.ESP.presence.Schalter.doif room InfoDisplay

Ein bisschen Offtopic aber ich möchte es hier trotzdem erwähnen: Die Daten der Flammtronik können auch für verschiedene Aktionen verwendet werden. So war es ohne die Flammtronik z.B. nicht möglich den perfekten Zeitpunkt zum Holz nachlegen zu finden. Man konnte ihn zwar mittels analoger Abgastemperaturanzeige erahnen, aber dazu musste man auch in den Heizraum gehen um ihn dort ablesen zu können. Allzu gerne habe ich diesen Zeitpunkt verpasst und das Feuer war dann leider schon aus.

Mittlerweile lasse ich mir eine Nachlegewarnung mittels pushover auf mein Handy schicken - RestO2-gesteuert.

Code
  1. define Atmos_Holzvergaser.cD.Nachlegewarnung.pushover.doif DOIF ([Atmos_Holzvergaser.cD:O2] > 10 and [Atmos_Holzvergaser.cD:O2] <= 10.2 and [06:00-22:00] and [Atmos_Holzvergaser.cD:Kesseltemp] >= 75 and [Anwesenheit.Reinhard] eq "on") ({my $O2 = sprintf "%.1f %%", ReadingsVal("Atmos_Holzvergaser.cD","O2",0) ;;;; fhem ("set PushoverReinhardFHEMMain msg 'fhem-main Alarm' 'Nachlegewarnung: O2 ist bei $O2' '' 1 ''")})
  2. attr Atmos_Holzvergaser.cD.Nachlegewarnung.pushover.doif repeatcmd 300
  3. attr Atmos_Holzvergaser.cD.Nachlegewarnung.pushover.doif room Heizung

Noch ein bisschen mehr Offtopic: Ich lasse mir auch einen Hinweis meiner Heizung geben, wann ich mit dem Feuer machen im Holzvergaser starten sollte, damit das Wasser im Speicher nicht zu kalt wird und die Ölheizung unnötig anspringen muss.

Code
  1. define Atmos_Holzvergaser.starten.pushover.doif DOIF ([UG.Heizraum.Speicher.1.Tempsensor.2:temperature] < 61 and [KM271:Aussentemperatur_gedaempft] < 15) ({my $temp1 = sprintf "%.1f °C", ReadingsVal("UG.Heizraum.Speicher.1.Tempsensor.1","temperature",0) ;;;; my $temp2 = sprintf "%.1f °C", ReadingsVal("UG.Heizraum.Speicher.1.Tempsensor.2","temperature",0) ;;;; my $temp3 = sprintf "%.1f °C", ReadingsVal("UG.Heizraum.Speicher.1.Tempsensor.3","temperature",0) ;;;; my $temp4 = sprintf "%.1f °C", ReadingsVal("UG.Heizraum.Speicher.1.Tempsensor.4","temperature",0) ;;;; fhem ("set PushoverReinhardfhemheizung msg 'fhem-heizung Info' 'Holzvergaser jetzt starten : UG.Heizraum.Speicher.1.Tempsensor.1 ist bei $temp1<br> UG.Heizraum.Speicher.1.Tempsensor.2 ist bei $temp2<br>UG.Heizraum.Speicher.1.Tempsensor.3 ist bei $temp3 <br>UG.Heizraum.Speicher.1.Tempsensor.4 ist bei $temp4' '' 0 ''")}) DOELSE
  2. attr Atmos_Holzvergaser.starten.pushover.doif repeatcmd 1200
  3. attr Atmos_Holzvergaser.starten.pushover.doif repeatsame 5
  4. attr Atmos_Holzvergaser.starten.pushover.doif room FlammTronik

Solar

Die Solarsteuerung findet hauptsächlich über den Solar-Speicherregler PS 5511 SZ statt.



Der Regler hat eine EBus-Anbindung, die ich leider, auch wegen schlechter Dokumentation, nicht zum laufen gebracht habe. Ich hätte gerne z.B. die Kollektortemperatur ausgelesen und in FHEM integriert. Wer mir hier vielleicht Tipp hat, sollte sich bitte über die Kommentarfunktion bei mir melden.

Die Temperaturen in der Solarpumpeneinheit lese ich über günstige 1-wire Temperatursensoren aus.



Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API

1-wire

Wie man bisher vielleicht erkennen kann, verwende ich einige Sensoren die über einen 1-wire-Bus angebunden sind.
Zusätzlich zu den oben beschrieben Sensoren verwende ich noch 10x weitere in meinen beiden 1000L Speichern.



Desweitern befinden sich 2x 1-wire-Sensoren an einem WarmWasser-Pumpenkreislauf - einer im Heizraum und einer im Holzlagerraum.



Für die Verabelung verwende ich, wo möglich, normale Brandmeldekabel. Die einzelnen Käbelchen bestehen aus festen Drähten, was von Vorteil ist, denn man benötigt keine Adernhülsen mehr. Das Kabel enthält ebenso eine Abschirmung.

Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API

VOC-Mischgas- und PM-Sensor

VOC-Mischgas-Sensor

Im Heizraum herrscht durch die Ölheizung, Öltanks und Holzvergaser ziemlich dicke Luft. Ich möchte mich hier immer nur so kurz wie möglich aufhalten.
Deswegen ist bei mir im Heizraum ein VOC-Mischgas-Sensor neu hinzugekommen.



Vorab vielen Dank an Tobias Müller für die Entwicklung des 1-wire VOC-Moduls und das gute Feedbacks zu meinen Fragen. Kaufen könnt Ihr das VOC-Modul hier https://www.tm3d.de

Ein VOC-Sensor wird zur Bestimmung der Luftgüte verwendet. Der VOC-Sensor reagiert dabei auf verschiedene schlechte Stoffe in der Luft und verändert so seinen Widerstand je nach Belastung, der wiederum gemessen werden kann. Der Messwert korreliert dabei ziemlich gut mit dem CO2-Wert, weswegen ich ihn auch dafür nun einsetze.

Daneben besitzt das gezeigte Modul einen Temperatur- und Feuchtesensor, welche ich für die Messungen im Heizraum verwende.



Meine eigentliche Idee war den VOC-Sensor als CO-Sensor (Kohlenmonoxid) zu verwenden. Der VOC-Sensor reagiert stark auf CO, aber es lässt sich keine gute Korrelation zwischen Sensormesswert und CO herstellen, was mir dann doch zu ungenau bzw. unsicher ist. In Zukunft plane ich dennoch eine direkte Messung des CO-Wertes mit einem anderen Sensor.

Die FHEM-Integration inkl. InfluxDB-Anbindung sieht dabei wie folgt aus:

Der VOC-Sensor gibt sich erst einmal als normaler DS18B20 Temperatursensor aus. Den Ausgabewert muss man mit 2 multiplizieren um den eigentlichen VOC-Wert zu bekommen. Dies erledigt man am besten über die "userReadings". Um einen ungefähren CO2-Wert in ppm zu bekommen muss man den VOC-Wert mit dem Faktor 75 (Die Wahrheit liegt irgendwo zwischen dem Faktor 50 und 100) multiplizieren und 400 dazu addieren.

PM-Sensor

Aus Spaß und inspiriert durch das "luftdaten.info – Feinstaub selber messen"-Projekt werde ich noch einen PM-Sensor in den Heizraum und in die Visualisierung mit Grafana einbauen.

 

Bis jetzt liegt der Sensor nur auf meinem Schreibtisch und misst dort, aber wenn es soweit ist und ich mit dem Einbau in den Heizraum starte werde ich den Blogbeitrag aktualisieren. Ich bin gespannt, was der Holzvergaser so für Feinstaubmengen im Heizraum erzeugt.







Die FHEM-Integration inkl. InfluxDB-Anbindung sieht dabei wie folgt aus:

Code
  1. #########################################################################
  2. ## PM-Sensor/LuftdatenInfo
  3. #########################################################################
  4. define Heizraum.PM.Sensor.1 LuftdatenInfo local 192.168.178.38
  5. attr Heizraum.PM.Sensor.1 event-on-change-reading PM10,PM2.5
  6. attr Heizraum.PM.Sensor.1 group Heizraum.PM.Sensor.1
  7. attr Heizraum.PM.Sensor.1 room PM-Sensor
  8. define InfluxDBLog_Heizraum.PM.Sensor.1 InfluxDBLog 192.168.178.143 8186 fhem_environment dbuser passwort Heizraum.PM.Sensor.1:.*
  9. attr InfluxDBLog_Heizraum.PM.Sensor.1 group InfluxDBLog
  10. attr InfluxDBLog_Heizraum.PM.Sensor.1 room PM-Sensor

Wie üblich vorher ein Update von FHEM machen um das "LuftdatenInfo"-Modul zu laden und die IP-Adressen, User, Datenbanknamen, Passwörter durch die eigenen Werte ersetzen.

Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API

Das Display

Als Display verwende ich ein älteren Dell U2410, den ich sonst nicht mehr in Verwendung hatte. Das Display hat ein matte Displayoberfläche und ist kalbriert was man auch nicht alle Tage in einem Heizraum findet :mrgreen:



Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API

Prinzipell kann jedes Display verwendet werden, aber es sollte sich an einen RaspberryPi anschließen lassen.
Ich verwende eine recht einfache Monitorhalterung ohne viel Schnickschnack für kleines Geld.



Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Zum Einschalten verwende ich einen Jung Aufputztaster. Die Wippe habe ich von einem Aufputzschalter genommen.



Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Der Taster schaltet einen Homematic-Aktor, an den das Display und der RaspberryPi angeschlossen sind.

Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Der FHEM-Code dazu sieht wie folgt aus:

Oben Zuerst die übliche Definition des Aktors in FHEM.
Danach einen watchdog der mich nach 30 Minuten darauf hinweist, das das Display noch an ist.
Zuletzt ein DOIF, welches das Display um 2 Uhr nachts abschaltet, sollte es doch mal aus Versehen an bleiben.

Der RaspberryPi im Kiosk-Modus

Die spätere Visualisierung mit Grafana wird in der Regel über einen Webbrowser aufgerufen wofür ein Rechner benötigt wird. Für mein Display verwende ich dafür, wie soll es auch anders sein, einen RaspberryPi3.

Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Der RaspberryPi3 ist bei mir etwas schwer erreichbar hinter dem Display professionell mit Heißkleber platziert. Aus diesem Grund verwende ich ein microSD-Extender Flex-Kabel mit der Besonderheit das ich hier normale SD-Karten verwenden kann.



Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Da der RaspberryPi stets manuell (über den Jung-Taster) gebootet werden muss und das möglichst schnell, verwende ich hier eine 16GB Sandisk Extreme Pro (refurbished) SD-Karte, die man aber kaum noch bekommt. 32GB sind mittlerweile Standard, welche selbstverständlich auch funktionieren.



Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Als Netzteil kommt wieder ein 5V Hutschienennetzteil von Meanwell zum Einsatz.

Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Auf die SD-Karte wird dann das ganz normale Raspbian Stretch mit Desktop installiert inkl. aktiviertem SSH und eingerichtetem WLAN.
Damit nachher der RaspberryPi3 direkt in den Fullscreen Browser (Kiosk-Modus) bootet, müssen dazu noch einige Schritte in der Kommandozeiledurchgeführt werden.

Wer mag, kann zuerst das Passwort des Benutzers "pi" wie folgt ändern:

Code
  1. passwd

Danach am besten das System auf den neuesten Stand bringen:

Code
  1. sudo apt-get -y autoremove && sudo apt-get -y clean && sudo apt-get update && sudo apt-get -y dist-upgrade

Danach müssen noch einige Abhängigkeiten installiert werden:

Code
  1. sudo apt-get install -y chromium-browser ttf-mscorefonts-installer unclutter x11-xserver-utils
  • chromium-browser installiert den Googls Chrome Browser
  • ttf-mscorefonts-installer Fügt ein paar allgemeine Schriftarten hinzu
  • unclutter versteckt den Mauszeiger
  • x11-xserver-utils Deaktiviert das Ausschalten des Displays

Jetzt muss noch das Desktop-Autostartscript und Google Chrome konfiguriert werden:

Code
  1. sudo nano .config/lxsession/LXDE-pi/autostart

Es erscheint der Inhalt der Konfigurationsdatei, welche ungefähr so aussehen müsste:


Code
  1. @lxpanel --profile LXDE-pi
  2. @pcmanfm --desktop --profile LXDE-pi
  3. # @xscreensaver -no-splash
  4. @point-rpi

Nach der letzten Zeile muss man folgenden Inhalt einfügen:


Code
  1. @/usr/bin/chromium-browser --incognito --start-maximized --kiosk http://192.168.178.143:3000/dashboard/db/heizung?refresh=10s&orgId=1
  2. @unclutter
  3. @xset s off
  4. @xset s noblank
  5. @xset -dpms

Die meisten Parameter sprechen für sich selbst:

  • --incognito Inkognitomodus für Chrome um Warnungen zu unterdrücken
  • --start-maximized Chrome startet maximiert
  • --kiosk Chrome startet ohne Navigationsleiste
  • @unclutter Versteckt den Mauszeiger
  • @xset s off Schaltet den Bildschirmschoner ab
  • @xset s noblank Deaktiviert das Ausschalten des Displays
  • @xset -dpms Deaktiviert das Display Power Management Signaling (DPMS)

Weitere nützliche Parameter bei Bedarf:

  • --allow-running-insecure-content Erlaubt https Seiten http Inhalte anzuzeigen
  • --remember-cert-error-decisions Erlaubt Chrome Zertifikate zu speichern

IP-Adresse und Link zum eigenen Dashboard müssen noch angepasst werden.

An den Link zum Dashboard gelangt man in Grafana so:



Wichtiger Shortcut: möchte man aus dem Fullscreen-Modus heraus, kann man dies mit folgender Tastenkombination machen: Umschalttaste+Strg+Q

Nach einem Neustart sollte das System nun direkt in den Fullscreen Browser mit Grafana booten.



An diesem Punkt angelangt, kann der Stand der SD-Karte eingefroren werden, da man ab jetzt keine Daten mehr im System anpassen muss. Das Einfrieren hat auch den Vorteil, das bei einem direkten Ausschalten ohne sauberes Herunterfahren das Dateisystem nicht beschädigt wird.

Früher konnte man bei der SD-Karte über den seitlichen Schiebeschalter den Schreibschutz aktivieren. Der RaspberryPi ignoriert diesen Schalter leider komplett und so kann, egal in welcher Position der Schalter sich befindet, munter auf die SD-Karte geschrieben werden.

Eine andere Lösung musste her.

Wenig dokumentiert ist, das SD-Karten ein elektronisches Schreibschutzsystem besitzen.

Mit einem kleinen Tool kann dieser Schreibschutz aktiviert werden.

Zuerst muss man in der Konsole das Tool installieren:

Code
  1. wget "https://github.com/BertoldVdb/sdtool/blob/master/static/arm-sdtool?raw=true" -O arm-sdtool

Dann die Schreib-/Leserechte anpassen:

Code
  1. chmod +x arm-sdtool

Jetzt kann man schon den Schreibschutz der SD-Karte aktivieren:

Code
  1. sudo ./arm-sdtool /dev/mmcblk0 lock

Folgende Kommandos sind möglich

  • status Zeigt die aktuellen Schreibschutzeinstellungen
  • unlock Deaktiviert den Schreibschutz
  • lock Aktiviert den Schreibschutz
  • permlock Aktiviert den Schreibschutz für immer - Vorsicht!
  • reset Sendet ein "go_idle_state"-Kommando um eine abgeschmierte Karte ohne aus- und wiedereinschalten des RaspberryPis wieder ins System zu bekommen

Die Steuerung

Gesteuert wird der RaspberryPi bzw. Grafana nur bei Bedarf. Falls dies der Fall ist, verwende ich dafür eine Logitech K400 Plus Tastatur.



Diese hat den Vorteil das man sie bei Nichtverwendung Ausschalten kann. Desweiteren hat sie links oben eine Taste für den (Maus-)Linksklick - sehr praktisch bei Zweihandbedienung im Stehen auch wenn man sich als Rechtshänder kurz an das Klicken mit der linken Hand gewöhnen muss.

Geschützt, vor allem vor dem Staub im Heizraum, wird sie durch eine Schutzhülle.


Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API


Bild des Amazon-Artikels
Bei Amazon.de kaufen
Affiliate Links / Bilder von der Amazon Product Advertising API

Visualisierung mit Grafana

Nach dem installieren der Geräte, Schnitstellen, Module, Sensoren usw. und dem Sammeln der Daten in der InfluxDB kann mit der Visualisierung von selbigen in Grafana begonnen werden. Das schöne an Grafana ist, das man seine Plots schön anordnen, hin- und herschieben und kopieren kann, sodass man zügig seine Dashboards zusammen gestelltt bekommt.

Meine aktuelle Visualisierung für den Heizraum sieht wie folgt aus:


Download

Links oben der Bereich für dem Atmos Holzvergaser, recht oben für die Buderus Heizung. Unten die Speicher - und Solartemperaturen sowie weitere Messwerte aus dem Heizraum. PM-Sensor ist bereits integriert liefert aber noch nicht die korrekten Werte, er sich noch im Büro befindet.

In meiner Temperatur- und Luftfeuchteansicht, welche ich bereits in anderen Beiträgen gezeigt habe, befinden sich auch einige Werte der Heizung:


Download

Hier noch ein Screenshot mit laufendem Holzvergaser:



Schön ist das die singlestats auch plots anzeigen. Auch die Farbgebung, je nach Zustand oder Temperatur macht optisch etwas her.
Meine Standardeinstellung für die Heizung zur Anzeige der Plots sind 6h mit 10Sekunden Updatezyklus:



ausgenommen individuelle Zeiteinstellungen:



Einzelne Plots können auch zur Vollansicht vergrößert werden:





In den Plots kann auch ein Zeitbereich ausgewälht werden, in den dann sozusagen hineingezommt wird:



Update 29.01.2018:

Was ich immer schon wissen wollte war zu wie viel Prozent meine beiden Speicher gefüllt sind um z.B. Abschätzen zu können wie viel Holz ich nachlegen muss. Um dies zu bewerkstelligen bzw. zu berechnen füge ich zuerst für jeden Speicher ein Berechnungs-DOIF hinzu:

Die Berechnung liest meine 4 Temperatursensoren pro Speicher aus, zählt sie zusammen und berechnet den Prozentwert. In meiner Berechnung gehe ich davon aus, das bei 30°C die Speicher leer und bei 80°C voll sind. Es können auch Werte kleiner 0% und größer 100% entstehen.

Am Ende noch die Definition für die InfluxDB, um die berechneten Werte später in Grafana auslesen zu können:

 
Die oben verlinkten JSON-Files sind geupdatet und beinhalten bereits die Speicherladung.

Import

Ganze Dashboards lassen sich über "Dashboars->Import" importieren:



Hier kann dann ein JSON-File direkt per Datei (siehe Downloads oben) oder in Textform geladen werden.



Meine oben verlinkten JSON-Files können so importiert und dann an die eigenen Datenbanken, Sources, Namen usw. angepasst werden.

    Über den Autor

    Autor von worldoftech.de. Smart-Home-Verrückter.


    Nutzt Zuhause FHEM zusammen mit HomeMatic, JeeLink, 1-Wire, Flammtronik / Atmos HV, Buderus KM271, Philips HUE, Xiaomi Yeelight, Alexa, Sonos, FritzBox, Ubiquiti UniFi APs, APC UPS, APC PDU, IPMI. MariaDB, InfluxDB und Grafana zur Auswertung. Als Hardware-Untersatz kommen mehrere RaspberryPis und Supermicro Serverhardware zum Einsatz. Softwareseitig werden hauptsächlich Raspbian, Ubuntu, ESXi und Docker verwendet.

    Reinhard Team