FHEM visualisieren

Code-Quickie: Heizung visualisieren mit Grafana

FHEM visualisieren

Die kalte Jahreszeit rückt näher und so bekommt meine Heizung ein paar schöne Updates. Heute also ein kleiner Code-Quickie zur Visualisierung meiner Heizung mit Grafana.

Es gibt ein Update bezüglich der Grafana-Visualisierung. Ich habe die Ladung meiner meiner beiden Speicher hinzugefügt.

Kleines Update bezüglich des Blockierens meiner FHEM-Instanz, wenn der PM-Sensor nicht erreichbar war.

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.

FHEM visualisieren

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!

FHEM visualisieren

 

 

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.

 

FHEM visualisieren

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

Zuerst die Einbindung in FHEM:

define SVG_DbLog_KM271 SVG DbLog_KM271:SVG_DbLog_KM271:HISTORY
attr SVG_DbLog_KM271 fixedrange 30days
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"
attr SVG_DbLog_KM271 plotsize 1900,480
attr SVG_DbLog_KM271 room KM271define 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
attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik1 fixedrange 7days
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})
attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik1 plotsize 1900,480
attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik1 room KM271define 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
attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik2 fixedrange 90days
attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik2 label "Buderus Ölbrenner - Statistik2"
attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik2 plotsize 1900,480
attr SVG_DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC.Statistik2 room KM271

Gefolgt von den dazugehörigen gplot-Defintionen:

# Created by FHEM/98_SVG.pm, 2016-03-18

set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ytics
set y2tics
set grid ytics
set ylabel "Temperatur [°C]"
set y2label "Temperatur [°C]"
set yrange [-10:110]
set y2range [-10:90]
#DbLog_KM271 KM271:Aussentemperatur_gedaempft
#DbLog_KM271 KM271:Kessel_Vorlaufisttemperatur
#DbLog_KM271 KM271:Kessel_Vorlaufsolltemperatur
#DbLog_KM271 KM271:WW_Isttemperatur
#DbLog_KM271 KM271:WW_Solltemperatur
#DbLog_KM271 KM271:HK2_Vorlaufisttemperatur
#DbLog_KM271 KM271:HK2_Vorlaufsolltemperatur

plot "<IN>" using 1:2 axes x1y1 title 'Aussentemperatur [°C]' ls l1 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Kesseltemperatur_Ist [°C]' ls l3 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Kesseltemperatur_Soll [°C]' ls l4 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Warmwassertemperatur_Ist [°C]' ls l5 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Warmwassertemperatur_Soll [°C]' ls l6 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Heizkreis2-Temperatur_Ist [°C]' ls l8 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Heizkreis2-Temperatur_Soll [°C]' ls l7 lw 1 with steps
# Created by FHEM/98_SVG.pm, 2016-03-22

set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ytics "EIN" -5, "AUS" -19,"0" 0,"10" 10,"20" 20,"30" 30,"40" 40,"50" 50,"60" 60,"70" 70
set y2tics
set grid y2tics
set ylabel "Brenner-Starts [Anzahl] / Auslastung [%]"
set y2label "Betriebsstunden [h] / Einschaltdauer [h]"
set yrange [-20:80]
set y2range [-15:15]

#DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC:value:::$val=($val=~"1"?-5:-19)
#DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC:countsPerDay
#DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC:pulseTimePerDay:::$val=($val/3600)
#DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC:pulseTimeIncrement:::$val=($val/3600)
#DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC:appUtilizationTemp

plot "<IN>" using 1:2 axes x1y1 title 'Brenner [EIN/AUS]' ls l0 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Brenner-Starts [Anzahl]' ls l1 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 title 'Betriebsstunden [h]' ls l2 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 title 'Letzte Einschaltdauer [h]' ls l3 lw 1 with fsteps,\
     "<IN>" using 1:2 axes x1y1 title 'Auslastung [%]' ls l4 lw 1 with lines# Created by FHEM/98_SVG.pm, 2016-09-25

set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ytics
set y2tics
set grid ytics
set ylabel "Laufzeit [h] / Brenner-Starts [Anzahl]"
set y2label "Auslastung [%]"
set yrange [0:15]
set y2range [0:33]

#DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC:appOpHoursPerDay
#DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC:appCountsPerDay
#DbLog_UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC UG.Heizraum.Buderus.Oelbrenner.Einschaltverhalten.HC:appUtilization

plot "<IN>" using 1:2 axes x1y1 title 'Laufzeit [h/Tag]' ls l0fill_stripe lw 1 with ibars,\
     "<IN>" using 1:2 axes x1y1 title 'Brenner-Starts [Anzahl/Tag]' ls l1 lw 2 with fsteps,\
     "<IN>" using 1:2 axes x1y2 title 'Auslastung [%/Tag] ' ls l2 lw 1 with fsteps

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

 

FHEM visualisieren

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.

 

FHEM visualisieren

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

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 ''")}}

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.

FHEM visualisieren
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.

 

FHEM visualisieren

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

FHEM visualisieren

Zuerst wieder die Einbindung in FHEM:

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).*
attr DbLog_Atmos_Holzvergaser asyncMode 1
attr DbLog_Atmos_Holzvergaser room FlammTronik
define SVG_DbLog_Atmos_Holzvergaser SVG DbLog_Atmos_Holzvergaser:SVG_DbLog_Atmos_Holzvergaser:HISTORY
attr SVG_DbLog_Atmos_Holzvergaser fixedrange 1days
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})
attr SVG_DbLog_Atmos_Holzvergaser plotsize 1900,800
attr SVG_DbLog_Atmos_Holzvergaser room FlammTronik

 

Gefolgt von der dazugehörigen gplot-Defintion:

# Created by FHEM/98_SVG.pm, 2016-12-09

set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ytics "EIN" -50, "AUS" -190,"0" 0,"100" 100,"200" 200,"300" 300,"400" 400,"500" 500,"600" 600,"700" 700,"800" 800,"900" 900
set y2tics
set grid
set ylabel "Temperatur [°C]"
set y2label "Rest O2, Primärluft, Sekundärluft [%]"
set y2range [0:100]

#DbLog_Atmos_Holzvergaser Atmos_Holzvergaser:Abgas
#DbLog_Atmos_Holzvergaser Atmos_Holzvergaser:Brennkammer
#DbLog_Atmos_Holzvergaser Atmos_Holzvergaser:Kesseltemp
#DbLog_Atmos_Holzvergaser Atmos_Holzvergaser:O2
#DbLog_Atmos_Holzvergaser Atmos_Holzvergaser:Primaerluefter
#DbLog_Atmos_Holzvergaser Atmos_Holzvergaser:Sekundaerluefter
#DbLog_Atmos_Holzvergaser Atmos_Holzvergaser:Pumpe:::$val=($val=~"1"?-50:-190)

plot "<IN>" using 1:2 axes x1y1 title 'Abgastemperatur [°C]' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Brennerkammertemperatur [°C]' ls l1 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Kesseltemperatur [°C]' ls l2fill lw 2 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Rest O2 [%]' ls l7 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Primärluft [%]' ls l3fill lw 0.2 with steps,\
     "<IN>" using 1:2 axes x1y2 title 'Sekundärluft [%]' ls l5fill lw 0.2 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Pumpe [EIN/AUS]' ls l4 lw 1 with steps,

 

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:

 

FHEM visualisieren

Der Lüfter inkl. Flammtronik-Drehzahlmodul:

FHEM visualisieren

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

 

FHEM visualisieren

Abgastemperatur mit einem PT1000-Sensor:

 

FHEM visualisieren

Kesseltemperatur mit einem PT1000-Sensor:

 

FHEM visualisieren

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

 

FHEM visualisieren

Laddomat-Temperaturen mit 3x PT1000-Sensoren:

 

FHEM visualisieren

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.

 

FHEM visualisieren

SainSmart IIC/I2C/TWI Serial 2004 Character 20x4 LCD Display Modul Shield für Arduino UNO Mega2560...*
  • 100% nagelneu und qualität.
  • Zeigt zeichen von 4 zeilen mit jeweils 20 zeichen an.
ZkeeShop ESP8266 Seriell WIFI Witty Wolke ESP-12F Entwicklung Board Modul MINI Serie*
  • Brand New High Quality
  • Das ESP-12-Modul ist eines der komplettesten Module der ESP-Familie. Es erlaubt Ihnen, die größte Menge von Pins von allen von ihnen zu verwenden. Sie können dieses Modul programmieren, um mit der Arduino IDE oder mit LUA als NodeMCU zu arbeiten.

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

#########################################################################
## Atmos Holzvergaser InfoDisplay
#########################################################################

define Atmos_Holzvergaser.Info.Display.cD cloneDummy Atmos_Holzvergaser
attr Atmos_Holzvergaser.Info.Display.cD room InfoDisplay
attr Atmos_Holzvergaser.Info.Display.cD event-on-change-reading Abgas,Brennkammer,Kesseltemp,O2
attr Atmos_Holzvergaser.Info.Display.cD suppressReading (Ra|Rt|Ruecknahme|Sponta|state2|status|Primaerluefter|Pumpe|Sekundaerluefter|Verlust|CAN_T1|CAN_T2|CAN_T3|CAN_T4|Sponta).*

define Atmos.HV.Info.Display.ESP.Zeile.1.doif DOIF ([Atmos_Holzvergaser.Info.Display.cD:Abgas]) ({my $value = sprintf "%0.fC", ReadingsVal("Atmos_Holzvergaser.Info.Display.cD","Abgas",0) ;; system("wget -q -O- 'http://192.168.178.108/control?cmd=lcd,1,1,Abgastemp       $value'")})
attr Atmos.HV.Info.Display.ESP.Zeile.1.doif do always
attr Atmos.HV.Info.Display.ESP.Zeile.1.doif room InfoDisplay
attr Atmos.HV.Info.Display.ESP.Zeile.1.doif verbose 0
define Atmos.HV.Info.Display.ESP.Zeile.2.doif DOIF ([Atmos_Holzvergaser.Info.Display.cD:Brennkammer]) ({my $value = sprintf "%0.fC", ReadingsVal("Atmos_Holzvergaser.Info.Display.cD","Brennkammer",0) ;; system("wget -q -O- 'http://192.168.178.108/control?cmd=lcd,2,1,Brennkammertemp $value'")})
attr Atmos.HV.Info.Display.ESP.Zeile.2.doif do always
attr Atmos.HV.Info.Display.ESP.Zeile.2.doif room InfoDisplay
attr Atmos.HV.Info.Display.ESP.Zeile.2.doif verbose 0
define Atmos.HV.Info.Display.ESP.Zeile.3.doif DOIF ([Atmos_Holzvergaser.Info.Display.cD:Kesseltemp]) ({my $value = sprintf "%0.fC", ReadingsVal("Atmos_Holzvergaser.Info.Display.cD","Kesseltemp",0) ;; system("wget -q -O- 'http://192.168.178.108/control?cmd=lcd,3,1,Kesseltemp      $value'")})
attr Atmos.HV.Info.Display.ESP.Zeile.3.doif do always
attr Atmos.HV.Info.Display.ESP.Zeile.3.doif room InfoDisplay
attr Atmos.HV.Info.Display.ESP.Zeile.3.doif verbose 0
define Atmos.HV.Info.Display.ESP.Zeile.4.doif DOIF ([Atmos_Holzvergaser.Info.Display.cD:O2]) ({my $value = sprintf "%0.1f%%", ReadingsVal("Atmos_Holzvergaser.Info.Display.cD","O2",0) ;; system("wget -q -O- 'http://192.168.178.108/control?cmd=lcd,4,1,Rest O2        $value'")})
attr Atmos.HV.Info.Display.ESP.Zeile.4.doif do always
attr Atmos.HV.Info.Display.ESP.Zeile.4.doif room InfoDisplay
attr Atmos.HV.Info.Display.ESP.Zeile.4.doif verbose 0

 

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:

define Atmos.HV.Info.Display.ESP.presence PRESENCE lan-ping 192.168.178.108 120 600
attr Atmos.HV.Info.Display.ESP.presence devStateIcon present:general_an@green absent:general_aus@red
attr Atmos.HV.Info.Display.ESP.presence event-on-change-reading state,presence
attr Atmos.HV.Info.Display.ESP.presence group presence
attr Atmos.HV.Info.Display.ESP.presence room InfoDisplay
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)
attr Atmos.HV.Info.Display.ESP.presence.Schalter.doif group DOIF
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.

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 ''")})
attr Atmos_Holzvergaser.cD.Nachlegewarnung.pushover.doif repeatcmd 300
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.

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
attr Atmos_Holzvergaser.starten.pushover.doif repeatcmd 1200
attr Atmos_Holzvergaser.starten.pushover.doif repeatsame 5
attr Atmos_Holzvergaser.starten.pushover.doif room FlammTronik

FHEM visualisieren

 

Solar

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

FHEM visualisieren

 

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.

 

FHEM visualisieren

Vktech 10x 3M Wasserdicht Digital Temperaturfühler Temperatur Sensor DS18b20*
  • Hochwertige Edelstahl Rohr Kapselung wasserdichte feuchtigkeitsfesten verhindern Rost
  • Edelstahl-Rohr-Größe: Approx.6*50mm(Diameter*Length)

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.

 

FHEM visualisieren

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

 

FHEM visualisieren

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.

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.

 

FHEM visualisieren

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.

 

FHEM visualisieren

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:

define UG.Heizraum.VOC.Sensor OWTHERM DS18B20 XXXXXXXXXXXXXXXXX
attr UG.Heizraum.VOC.Sensor IODev OneWire
attr UG.Heizraum.VOC.Sensor event-min-interval VOC:3600,CO2:3600
attr UG.Heizraum.VOC.Sensor event-on-change-reading VOC: 1,CO2: 1
attr UG.Heizraum.VOC.Sensor interval 120
attr UG.Heizraum.VOC.Sensor model DS18B20
attr UG.Heizraum.VOC.Sensor room OWX
attr UG.Heizraum.VOC.Sensor userReadings VOC {ReadingsNum("UG.Heizraum.VOC.Sensor","temperature",0)*2}, CO2 {ReadingsNum("UG.Heizraum.VOC.Sensor","VOC",0)*75+400}
define InfluxDBLog_UG.Heizraum.VOC.Sensor InfluxDBLog 192.168.178.143 8186 fhem_environment dbuser passwort UG.Heizraum.VOC.Sensor:.*
attr InfluxDBLog_UG.Heizraum.VOC.Sensor group InfluxDBLog
attr InfluxDBLog_UG.Heizraum.VOC.Sensor room OWX

 

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.

FHEM visualisieren

FHEM visualisieren

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.

 

FHEM visualisieren

 

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

#########################################################################
## PM-Sensor/LuftdatenInfo
#########################################################################
define Heizraum.PM.Sensor.1 LuftdatenInfo local 192.168.178.38
attr Heizraum.PM.Sensor.1 event-on-change-reading PM10,PM2.5
attr Heizraum.PM.Sensor.1 group Heizraum.PM.Sensor.1
attr Heizraum.PM.Sensor.1 room PM-Sensor
define InfluxDBLog_Heizraum.PM.Sensor.1 InfluxDBLog 192.168.178.143 8186 fhem_environment dbuser passwort Heizraum.PM.Sensor.1:.*
attr InfluxDBLog_Heizraum.PM.Sensor.1 group InfluxDBLog
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.

Bluelover Nova PM Sensor SDS011 Hochpräzisions Laser PM2.5 Luftqualitäts Erkennungs Sensor Modul...*
  • Die SDS011 mit dem Prinzip der Laserstreuung, kann die Partikelkonzentration zwischen 0,3 und 10um in der Luft.Es mit Digitalausgang und eingebautem Lüfter ist stabil und zuverlässig.
  • Präzise und zuverlässig: Laser-Erkennung, stabil, gute Konsistenz, schnelle Antwort: Reaktionszeit ist weniger als 10 Sekunden, wenn sich die Szene ändert.
6 mm x 9 mm, Farbe: Transparent, Schlauch aus PVC, 5 m*
  • Durchmesser innen: 6 mm x 9 mm, Außen Diamter 5 m
  • für vielfältige, Länge 5 m, hinzufügen, Anzahl von erforderlichen Maßnahmen, um die Anzahl Behälter kaufen.

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

 

FHEM visualisieren

Dell U2410 61 cm (24 Zoll) TFT Monitor (VGA,DVI,HDMI, Kontrastverhältnis 80000:1, Reaktionszeit...*
  • Erleben Sie beeindruckende Farbtreue, Präzision und Leistung
  • Erweiterte digitale Anschlussmöglichkeiten
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.

 

FHEM visualisieren

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

FHEM visualisieren

Angebot
Jung 606W Wippschalter Universal aus-Wechsel*
  • Jung, die perfekte Lösung für Ihre Installation
  • Schalterprogramm
Angebot
Jung AP-Taster 631W 1S, 250 V*
  • Jung, die perfekte Lösung für Ihre Installation
  • Schalterprogramm

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

HomeMatic Funk-Schaltaktor 1fach, Unterputzmontage*
  • Kleiner und kompakter Funk-Schaltaktor zum verdeckten Einbau in Abzweig- und Schalterdosen; Programmierung über CCU2/CCU3
  • Anschlüsse für konventionelle Taster; Bedienung am Gerät mit Hilfe von Tastern möglich.
Homematic 141378A0 Funk-Schaltaktor, Hutschienenmontage*
  • Die Installation und der Betrieb des Gerätes sind ausschließlich am 230 V/50 Hz-Wechselspannungsnetz zulässig und Arbeiten hieran dürfen nur von einer Elektrofachkraft vorgenommen werden.
  • Schaltet angeschlossene Verbraucher ein und aus.

Der FHEM-Code dazu sieht wie folgt aus:

#########################################################################
## Disyplayanzeige + RaspberryPi Aktor
#########################################################################
define UG.Heizraum.Infodisplay.Aktor CUL_HM XXXXXX
attr UG.Heizraum.Infodisplay.Aktor IODev HomematicLANGateway2
attr UG.Heizraum.Infodisplay.Aktor IOgrp VCCU:HomematicLANGateway2
attr UG.Heizraum.Infodisplay.Aktor autoReadReg 4_reqStatus
attr UG.Heizraum.Infodisplay.Aktor devStateIcon on:general_an@orange off:general_aus@blue
attr UG.Heizraum.Infodisplay.Aktor event-on-change-reading .*
attr UG.Heizraum.Infodisplay.Aktor expert 2_raw
attr UG.Heizraum.Infodisplay.Aktor firmware 2.5
attr UG.Heizraum.Infodisplay.Aktor group UG.Heizraum
attr UG.Heizraum.Infodisplay.Aktor icon it_television
attr UG.Heizraum.Infodisplay.Aktor model HM-LC-SW1-FM
attr UG.Heizraum.Infodisplay.Aktor peerIDs 00000000,
attr UG.Heizraum.Infodisplay.Aktor room Heizung
attr UG.Heizraum.Infodisplay.Aktor serialNr XXXXXXXXXXXX
attr UG.Heizraum.Infodisplay.Aktor subType switch
attr UG.Heizraum.Infodisplay.Aktor webCmd :

define UG.Heizraum.Displayanzeige.Aktor.watchdog watchdog UG.Heizraum.Displayanzeige.Aktor:on 00:30:00 UG.Heizraum.Displayanzeige.Aktor:off set PushoverReinhardFHEMMain msg 'fhem-main Info' 'UG.Heizraum.Displayanzeige wurde angelassen' '' 0 '';; setstate UG.Heizraum.Displayanzeige.Aktor.watchdog defined

attr UG.Heizraum.Displayanzeige.Aktor.watchdog room Heizung
define UG.Heizraum.Displayanzeige.Aktor.AutoAus.DOIF DOIF ([02:00]) (set UG.Heizraum.Infodisplay.Aktor off)
attr UG.Heizraum.Displayanzeige.Aktor.AutoAus.DOIF do always
attr UG.Heizraum.Displayanzeige.Aktor.AutoAus.DOIF room Heizung

 

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.

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.

 

FHEM visualisieren

Micro-SD Karte auf SD Karte,LANMU SD Adapter Verlängerung Kabel Extender SD/SDHC/MMC für...*
  • Mit diesem Micro-SD zu SD Verlängerungskabel kann eine SD Schnittstelle verlängert werden,ab sofort ist die Datenübertragung bequemer geworden
  • Unterstützt Sie alle 16GB, 32GB, 64GB, 128GB SD/SDHC Karte

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.

 

FHEM visualisieren

Angebot
SanDisk Extreme PRO 32GB SDHC Speicherkarte bis zu 95MB/s, Class 10, U3, V30*
  • Die SD UHS-I, unsere bisher leistungsstärkste Speicherkarte, bietet aufnahmegeschwindigkeiten von bis zu 90 MB/Sek. und Übertragungsgeschwindigkeiten von bis zu 95 MB/Sek.
  • Konzipiert zur Aufnahme von Videos in 4K Ultra High Definition und für Reihenaufnahmen (im Burstmodus)

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

Angebot

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 Kommandozeile durchgeführt werden.

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

passwd

Danach am besten das System auf den neuesten Stand bringen:

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:

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:

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

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

@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
# @xscreensaver -no-splash
@point-rpi

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

@/usr/bin/chromium-browser --incognito --start-maximized --kiosk http://192.168.178.143:3000/dashboard/db/heizung?refresh=10s&orgId=1
@unclutter
@xset s off
@xset s noblank
@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:

FHEM Grafana

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.

 

FHEM Grafana

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:

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

Dann die Schreib-/Leserechte anpassen:

chmod +x arm-sdtool

 

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

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.

 

FHEM visualisieren

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.

FHEM visualisieren

Angebot
Logitech K400 Plus Touch Wireless Tastatur schwarz (QWERTZ, deutsches Tastaturlayout)*
  • All-In-One-Design: Mit der kabellosen K400 USB-Tastatur mit Touchpad steuern Sie Ihren an den Fernseher angeschlossenen PC Mühelos ohne den Aufwand und Kabelsalat durch unterschiedliche Geräte
  • Plug und Play: Dank des Unifying Empfängers können Sie die kabellose Tastatur mit QWERTZ-Tastenlayout entweder sofort verwenden oder zuerst die Einstellungen für Tasten- und Touchpad-Funktionen mithilfe der Logitech Options Software personalisieren
easywisdom - Schwarz Color Soft Neue Neopren, der Fall Schutz Hülle Cover Tasche Taschen für...*
  • Speziell Design für Logitech Wireless Touch Keyboard K400/K400r/K400 Plus und Ihr Zubehör wie z.B. Kabel
  • Kann direkt durch Wasser gespült werden und dann duplizieren verwendet. Einfach anzubringen und zu entfernen (zur Reinigung oder Desinfektion.

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:

FHEM Grafana

 

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:

FHEM Grafana

 

Download

Hier noch ein Screenshot mit laufendem Holzvergaser:

 

FHEM Grafana

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:

 

FHEM visualisieren

ausgenommen individuelle Zeiteinstellungen:

 

FHEM Grafana

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

FHEM Grafana

 

FHEM Grafana

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

 

FHEM visualisieren

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:

#########################################################################
## Speicher.1.Ladung in Prozent
#########################################################################
define UG.Heizraum.Speicher.1.Ladung DOIF
attr UG.Heizraum.Speicher.1.Ladung event-min-interval .*:3600
attr UG.Heizraum.Speicher.1.Ladung event-on-change-reading .*
attr UG.Heizraum.Speicher.1.Ladung group Speicherladung
attr UG.Heizraum.Speicher.1.Ladung room OWX
attr UG.Heizraum.Speicher.1.Ladung state {(sprintf("%.2f %%",(((100*(1-(80-(([UG.Heizraum.Speicher.1.Tempsensor.1:temperature]+[UG.Heizraum.Speicher.1.Tempsensor.2:temperature]+[UG.Heizraum.Speicher.1.Tempsensor.3:temperature]+[UG.Heizraum.Speicher.1.Tempsensor.4:temperature])/4))/50))))))}
attr UG.Heizraum.Speicher.1.Ladung userReadings prozent {ReadingsVal("UG.Heizraum.Speicher.1.Ladung","state","")=~ m/^-?[0-9]\d*(\.\d+)?/;;;; return @@@WCF_PRE_BACKUP_25@@@amp;;;;;}
define InfluxDBLog_UG.Heizraum.Speicher.1.Ladung InfluxDBLog 192.168.178.143 8186 fhem_thd user passwort UG.Heizraum.Speicher.1.Ladung:(prozent).*
attr InfluxDBLog_UG.Heizraum.Speicher.1.Ladung group InfluxDBLog
attr InfluxDBLog_UG.Heizraum.Speicher.1.Ladung room OWX#########################################################################
## Speicher.2.Ladung in Prozent
#########################################################################
define UG.Heizraum.Speicher.2.Ladung DOIF
attr UG.Heizraum.Speicher.2.Ladung event-min-interval .*:3600
attr UG.Heizraum.Speicher.2.Ladung event-on-change-reading .*
attr UG.Heizraum.Speicher.2.Ladung group Speicherladung
attr UG.Heizraum.Speicher.2.Ladung room OWX
attr UG.Heizraum.Speicher.2.Ladung state {(sprintf("%.2f %%",(((100*(1-(80-(([UG.Heizraum.Speicher.2.Tempsensor.1:temperature]+[UG.Heizraum.Speicher.2.Tempsensor.2:temperature]+[UG.Heizraum.Speicher.2.Tempsensor.3:temperature]+[UG.Heizraum.Speicher.2.Tempsensor.4:temperature])/4))/50))))))}
attr UG.Heizraum.Speicher.2.Ladung userReadings prozent {ReadingsVal("UG.Heizraum.Speicher.2.Ladung","state","")=~ m/^-?[0-9]\d*(\.\d+)?/;;;; return @@@WCF_PRE_BACKUP_26@@@amp;;;;;}
define InfluxDBLog_UG.Heizraum.Speicher.2.Ladung InfluxDBLog 192.168.178.143 8186 fhem_thd user passwort UG.Heizraum.Speicher.2.Ladung:(prozent).*
attr InfluxDBLog_UG.Heizraum.Speicher.2.Ladung group InfluxDBLog
attr InfluxDBLog_UG.Heizraum.Speicher.2.Ladung room OWX

 

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:

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

Import

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

FHEM Grafana

 

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

 

FHEM Grafana

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

Letzte Aktualisierung am 1.10.2019 / Affiliate Links / Bilder von der Amazon Product Advertising API