Ich habe seit einigen Jahren FHEM auf einem Raspberry Pi 3B im Einsatz. Ein zentraler Bereich ist hier meine Heizung von WOLF (CGB-2 20 mit BM-2), mit einem
ISM8i Schnittstellenmodul. Dieses habe ich mit dem Device
WOLF_ISM8I eingebunden.
Hier möchte ich gerne Beschreiben, wie ich Informationen ermittle bzw. berechne, die vom ISM8i nicht geliefert werden und wie ich diese Informationen darstelle.
Inhaltsverzeichnis
1. | Voraussetzungen |
2. | Besonderheiten meiner Heizung |
3. | Fehlende Informationen des ISM8I |
3.1. | Betriebsart der Heizung ermitteln |
3.2. | Sollvorlauftemperaturen berechnen |
3.3. | Status des Mischers ermitteln |
4. | Darstellung der Heizungsinformationen |
4.1. | Aufbau des FLOORPLANS |
A) | Oberer Bereich des FLOORPLANS |
B) | Linker Bereich des FLOORPLANS |
C) | Rechter Bereich des FLOORPLANS |
4.2. | Änderungen an der stylesheet-Datei des Floorplans |
1. VoraussetzungenWOLF-Heizung mit ISM8i Schnittstellenmodul und das FHEM Modul 49_ISM8I.pm. Das FHEM Modul gibt es in zwei Varianten. Modul und Server (https://tips-und-mehr.de/wolf-heizanlagen-mit-ism8i-schnittstellenmodul-ueberwachen-und-in-fhem-auswerten/) getrennt und alles in einem Modul (https://github.com/qyqsoft/ISM8I). Ich habe mittlerweile die zweite Variante im Einsatz. Die Installation und Konfiguration ist auf der Projektseite beschrieben.
2. Besonderheiten meiner HeizungIch habe ein Solarmodul (SM1-2) für das Brauchwasser, diese Werte werden vom ISM8i alle bereitgestellt. Die Heizung läuft mit einem Außenfühler. Mein Heizkreis (Fußbodenheizung) ist hinter einem Wärmeplattentauscher und hat eine Mischerkreispumpe und einen Mischer als Einspritzer (MM-2). Am Wärmeplattentauscher ist ein Sammlerfühler. Dadurch gibt es bei mir nur eine Heizkurve für den Mischerkreis und den Heizkurvenabstand für die Vorlauftemperatur des Heizgeräts.
3. Fehlende Informationen des ISM8IDas ISM8I liefert keine Informationen über die aktuellen Sollvorlauftemperaturen, ob sich die Heizung im Sparbetrieb befindet (zumindest beim Zeitprogramm im Automatikbetrieb) und den Status des Mischers im Mischerkreis.
3.1. Betriebsart der Heizung ermittelnDas Modul
WOLF_ISM8I (MyWolf) liefert das aktive Zeitprogramm, aber nicht die jeweiligen Schaltzeiten. Da diese normalerweise nur selten geändert werden, habe ich sie in einem weekprofile (http://www.fhemwiki.de/wiki/Weekprofile) hinterlegt (Topiks für Heizkreis und Warmwasser mit je 3 Zeitprogrammen). Wenn sich das Zeitprogramm im
WOLF_ISM8I ändert, werden die Schaltzeiten des Zeitprogramms durch ein notifi an einen
WeekdayTimer gesendet. Dieser sendet dann zu den Schaltzeiten den Status des Zeitprogramms an einen
dummy. Welcher in einem userReading die tatsächliche Betriebsart der Heizung ermittelt (Normalbetrieb, Sparbetrieb oder Frostschutz).
Es folgen die Definitionen der Devices je für Heizkreis und Warmwasser, das
weekprofile teilen sich beide.
define n_Zeitprogramme_HK notify MyWolf:Mischerkreis_1_Warmwasser_1.IO.Mischer_Zeitprogramm:.* { fhem "set Zeitprogramme_WOLF send_to_device Heizkreis:$EVTPART1 Zeitprogramme_HK" }
define n_Zeitprogramme_WW notify MyWolf:Direkter_Heizkreis_direktes_Warmwasser.IO.Warmwasser_Zeitprogramm:.* { fhem "set Zeitprogramme_WOLF send_to_device Warmwasser:$EVTPART1 Zeitprogramme_WW" }
define Zeitprogramme_WOLF weekprofile
attr Zeitprogramme_WOLF comment Warmwasser:1 Zeitprogramme_WW\
Heizkreis:3 Zeitprogramme_HK
attr Zeitprogramme_WOLF room WolfZeitWW,WolfZeitHK
attr Zeitprogramme_WOLF tempMap off:1.0,on:2.0
attr Zeitprogramme_WOLF useTopics 1
attr Zeitprogramme_WOLF widgetTempRange 1:2:1
attr Zeitprogramme_WOLF widgetWeekdays Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag
define Zeitprogramme_HK WeekdayTimer HK_Betriebsart weekprofile:Zeitprogramme_WOLF
attr Zeitprogramme_HK userattr weekprofile
attr Zeitprogramme_HK commandTemplate set $NAME $EVENT
attr Zeitprogramme_HK devStateIcon {my $onl = ReadingsVal($name,'currValue','NA');;my $weather_night = FW_makeImage('weather_night');;my $weather_sun = FW_makeImage('weather_sun');;if ($onl eq 'off') {$onl = $weather_night} elsif ($onl eq 'on') {$onl = $weather_sun} else {$onl = '<div>Fehler: '.$onl.'</div>'};;my $ZP = ReadingsVal($name,'weekprofiles','0');;$ZP = substr($ZP,length($ZP)-1,1);;my $UD = ReadingsVal($name,'nextUpdate','Fehlt');;qq($onl<div>Zeitprogramm: $ZP</div><div>Update: $UD</div>)}
define Zeitprogramme_WW WeekdayTimer WW_Betriebsart weekprofile:Zeitprogramme_WOLF
attr Zeitprogramme_WW userattr weekprofile
attr Zeitprogramme_WW commandTemplate set $NAME $EVENT
attr Zeitprogramme_WW devStateIcon {my $onl = ReadingsVal($name,'currValue','NA');;my $weather_night = FW_makeImage('weather_night');;my $weather_sun = FW_makeImage('weather_sun');;if ($onl eq 'off') {$onl = $weather_night} elsif ($onl eq 'on') {$onl = $weather_sun} else {$onl = '<div>Fehler: '.$onl.'</div>'};;my $ZP = ReadingsVal($name,'weekprofiles','0');;$ZP = substr($ZP,length($ZP)-1,1);;my $UD = ReadingsVal($name,'nextUpdate','Fehlt');;qq($onl<div>Zeitprogramm: $ZP</div><div>Update: $UD</div>)}
define HK_Betriebsart dummy
attr HK_Betriebsart devStateIcon Normalbetrieb:weather_sun@red Sparbetrieb:weather_night@blue Frostschutz:weather_frost@blue
attr HK_Betriebsart fp_Heizung 87,62,0,
attr HK_Betriebsart stateFormat Betriebsart
attr HK_Betriebsart userReadings Betriebsart {\
my $Betrieb = ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.57.IO.Programmwahl_Heizkreis",0);;\
my $State = ReadingsVal($name,"state",0);;\
if ($Betrieb eq 'Automatikbetrieb') {$Betrieb = $State eq 'off'?'Sparbetrieb':'Normalbetrieb'}\
elsif($Betrieb eq 'Heizbetrieb') {$Betrieb = 'Normalbetrieb'}\
elsif($Betrieb eq 'Standby') {$Betrieb = 'Frostschutz'}\
else {$Betrieb = $Betrieb};;\
return $Betrieb;;\
}
define WW_Betriebsart dummy
attr WW_Betriebsart devStateIcon Normalbetrieb:weather_sun Sparbetrieb:weather_night Frostschutz:weather_frost
attr WW_Betriebsart fp_Heizung 275,850,0,
attr WW_Betriebsart stateFormat Betriebsart
attr WW_Betriebsart userReadings Betriebsart {\
my $Betrieb = ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.58.IO.Programmwahl_Warmwasser",0);;\
my $State = ReadingsVal($name,"state",0);;\
if ($Betrieb eq 'Automatikbetrieb') {$Betrieb = $State eq 'off'?'Sparbetrieb':'Normalbetrieb'}\
elsif($Betrieb eq 'Permanent') {$Betrieb = 'Normalbetrieb'}\
elsif($Betrieb eq 'Standby') {$Betrieb = 'Frostschutz'}\
else {$Betrieb = $Betrieb};;\
return $Betrieb;;\
}
Noch nicht unterstützt werdn der Urlaubs- und der Partymodus.
3.2. Sollvorlauftemperaturen berechnenIm Modul
WOLF_ISM8I (MyWolf) habe ich die Parameter, die die eingestellte Heizkurve festlegen, als userAttribute hinterlegt.
attr MyWolf userattr Mischerkreis_Normaussentemperatur_Heizkurve Mischerkreis_Sockeltemperatur_Heizkurve Mischerkreis_Startpunkt_Heizkurve Mischerkreis_Vorlauftemperatur_Heizkurve Systembedienmodul_Winter_Sommer_Umschaltung Systembedienmodul_A12_Absenkstopp Systembedienmodul_ECO_Abs Systembedienmodul_Heizkurvenabstand
attr MyWolf Mischerkreis_Normaussentemperatur_Heizkurve -12
attr MyWolf Mischerkreis_Sockeltemperatur_Heizkurve 23
attr MyWolf Mischerkreis_Startpunkt_Heizkurve 16
attr MyWolf Mischerkreis_Vorlauftemperatur_Heizkurve 36
attr MyWolf Systembedienmodul_A12_Absenkstopp -16
attr MyWolf Systembedienmodul_ECO_Abs 10
attr MyWolf Systembedienmodul_Heizkurvenabstand 4
attr MyWolf Systembedienmodul_Winter_Sommer_Umschaltung 20
Die Sollvorlauftemperaturen werden in den userReadings
Custom.911.Mischerkreis_Soll und
Custom.912.Heizgeraet_Soll berechnet. Dazu werden die zuvor angelegten userAttribute und die tatsächliche Betriebsart der Heizung verwendet. Die userReadings
*_Zeitprogramm ermitteln das aktive Zeitprogramm und sind für die
notifis der Betriebsart der Heizung wichtig.
attr MyWolf userReadings
Custom.911.Mischerkreis_Soll {\
if(ReadingsVal("HK_Betriebsart","Betriebsart",0) eq 'Normalbetrieb') {return Mischerkreis_Soll()}\
elsif(ReadingsVal("HK_Betriebsart","Betriebsart",0) eq 'Sparbetrieb') {return Mischerkreis_Spar_Soll()}\
else {return 5};;},\
Custom.912.Heizgeraet_Soll {\
my $wert;;\
if(ReadingsVal("HK_Betriebsart","Betriebsart",0) eq 'Normalbetrieb') {$wert = Mischerkreis_Soll()}\
elsif(ReadingsVal("HK_Betriebsart","Betriebsart",0) eq 'Sparbetrieb') {$wert = Mischerkreis_Spar_Soll()}\
else {$wert = 5};;\
if ($wert > 5) {$wert = $wert + AttrVal("MyWolf","Systembedienmodul_Heizkurvenabstand",10)}\
else { $wert = $wert};;\
return $wert;;},\
Direkter_Heizkreis_direktes_Warmwasser.IO.Heizkreis_Zeitprogramm {ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.59.IO.Heizkreis_Zeitprogramm_1",0) eq "An" ? "1" : ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.60.IO.Heizkreis_Zeitprogramm_2",0) eq "An" ? "2" : ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.61.IO.Heizkreis_Zeitprogramm_3",0) eq "An" ? "3" : "Err"},\
Direkter_Heizkreis_direktes_Warmwasser.IO.Warmwasser_Zeitprogramm {ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.62.IO.Warmwasser_Zeitprogramm_1",0) eq "An" ? "1" : ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.63.IO.Warmwasser_Zeitprogramm_2",0) eq "An" ? "2" : ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.64.IO.Warmwasser_Zeitprogramm_3",0) eq "An" ? "3" : "Err"},\
Mischerkreis_1_Warmwasser_1.IO.Mischer_Zeitprogramm {ReadingsVal("MyWolf","Mischerkreis_1_Warmwasser_1.72.IO.Mischer_Zeitprogramm_1",0) eq "An" ? "1" : ReadingsVal("MyWolf","Mischerkreis_1_Warmwasser_1.73.IO.Mischer_Zeitprogramm_2",0) eq "An" ? "2" : ReadingsVal("MyWolf","Mischerkreis_1_Warmwasser_1.74.IO.Mischer_Zeitprogramm_3",0) eq "An" ? "3" : "Err"}
Die Funktionen
Mischerkreis_Soll() und
Mischerkreis_Spar_Soll() sind in einer eigenen Programmdatei (https://wiki.fhem.de/wiki/99_myUtils_anlegen) (99_myUtils.pm) gespeichert.
sub
Mischerkreis_Soll () {
my $Normaussentemperatur = AttrVal("MyWolf","Mischerkreis_Normaussentemperatur_Heizkurve",0);
my $Sockeltemperatur = AttrVal("MyWolf","Mischerkreis_Sockeltemperatur_Heizkurve",0);
my $Startpunkt = AttrVal("MyWolf","Mischerkreis_Startpunkt_Heizkurve",0);
my $Vorlauftemperatur = AttrVal("MyWolf","Mischerkreis_Vorlauftemperatur_Heizkurve",0);
my $W_S_Umschaltung = AttrVal("MyWolf","Systembedienmodul_Winter_Sommer_Umschaltung",20);
my $Absenkstopp = AttrVal("MyWolf","Systembedienmodul_A12_Absenkstopp",-16);
my $ECO = AttrVal("MyWolf","Systembedienmodul_ECO_Abs",10);
my $Aussentemperatur = ReadingsVal("MyWolf","Systembedienmodul.54.O.Aussentemperatur.C",0);
my $Sollwertkorrektur = ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.65.IO.Sollwertkorrektur.K",0);
my $Sparfaktor = ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.66.IO.Sparfaktor.K",4);
my $Steigung = -($Vorlauftemperatur - $Sockeltemperatur) / ($Normaussentemperatur - $Startpunkt);
my $T_vl = ($Vorlauftemperatur - $Sockeltemperatur) / ($Normaussentemperatur - $Startpunkt) * ($Aussentemperatur - $Startpunkt) + $Sockeltemperatur;
if($Aussentemperatur > $W_S_Umschaltung){$T_vl = 5}
elsif($Aussentemperatur > $Startpunkt){$T_vl = $Sockeltemperatur};
my $wert = $T_vl + ($Vorlauftemperatur - $Sockeltemperatur) / 10 * $Sollwertkorrektur;
if($Aussentemperatur > $W_S_Umschaltung){$wert = 5}
elsif($Aussentemperatur > $Startpunkt){$wert = $Sockeltemperatur + ($Vorlauftemperatur - $Sockeltemperatur) / 10 * $Sollwertkorrektur};
return sprintf ("%0.1f",$wert);
}
sub
Mischerkreis_Spar_Soll () {
my $Normaussentemperatur = AttrVal("MyWolf","Mischerkreis_Normaussentemperatur_Heizkurve",0);
my $Sockeltemperatur = AttrVal("MyWolf","Mischerkreis_Sockeltemperatur_Heizkurve",0);
my $Startpunkt = AttrVal("MyWolf","Mischerkreis_Startpunkt_Heizkurve",0);
my $Vorlauftemperatur = AttrVal("MyWolf","Mischerkreis_Vorlauftemperatur_Heizkurve",0);
my $W_S_Umschaltung = AttrVal("MyWolf","Systembedienmodul_Winter_Sommer_Umschaltung",20);
my $Absenkstopp = AttrVal("MyWolf","Systembedienmodul_A12_Absenkstopp",-16);
my $ECO = AttrVal("MyWolf","Systembedienmodul_ECO_Abs",10);
my $Aussentemperatur = ReadingsVal("MyWolf","Systembedienmodul.54.O.Aussentemperatur.C",0);
my $Sollwertkorrektur = ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.65.IO.Sollwertkorrektur.K",0);
my $Sparfaktor = ReadingsVal("MyWolf","Direkter_Heizkreis_direktes_Warmwasser.66.IO.Sparfaktor.K",4);
my $T_vl = ($Vorlauftemperatur - $Sockeltemperatur) / ($Normaussentemperatur - $Startpunkt) * ($Aussentemperatur - $Startpunkt) + $Sockeltemperatur;
if($Aussentemperatur > $W_S_Umschaltung){$T_vl = 5}
elsif($Aussentemperatur > $Startpunkt){$T_vl = $Sockeltemperatur};
my $wert = $T_vl + ($Vorlauftemperatur - $Sockeltemperatur) / 10 * $Sollwertkorrektur;
if($Aussentemperatur > $W_S_Umschaltung) {$wert = 5}
elsif($Aussentemperatur > $Startpunkt){$wert = $Sockeltemperatur + ($Vorlauftemperatur - $Sockeltemperatur) / 10 * $Sollwertkorrektur};
if($Aussentemperatur > $ECO) {$wert = 5}
elsif($Aussentemperatur < $Absenkstopp) {$wert = $wert}
else {$wert = $wert - ($Vorlauftemperatur - $Sockeltemperatur) / 10 * $Sparfaktor};
return sprintf ("%0.1f",$wert);
}
3.3. Status des Mischers ermittelnDen Mischer musste ich etwas umbauen, da die Heizung selbst nur Impulse zum Öffnen und Schließen an ihn sendet. Somit kennt sie auch den Status des Mischers nicht. Ich habe in die Mitte der Anzeigeblende ein kleines Loch gemacht und einen Potentiometer (5kOhm) befestigt. Dessen Stellung lese ich mit einem Wemos D1 mini aus. Der Wemos D1 mini ist mit EasyESP geflasht und hat noch weitere Sensoren. An FHEM angebunden ist er mit einer ESPEasy bridge (https://fhem.de/commandref.html#ESPEasy).
Das Potentiometer ist als
Analog input – internal (Task 1) am Analogeneingang des Wemos angeschlossen. Über eine Rule wird aus dem Wert des Potentiometer (
Analog input) ein Prozentwert für den Status des Mischers berechnet und in einem
Generic - Dummy Device (Task 6) gesetzt. Dieses Device sendet den Wert dann an FHEM. Es gibt neben dem Prozentwert noch ErrLessMin und ErrGreaterMax, falls der Wert des Potentiometer die eingestellten Begrenzungen von 283 (100%) und 716 (0%) über- bzw. unterschreitet. Diese Werte sind natürlich individuell zu ermitteln.
Im Screenshot sind noch weitere Analoggeräte zu sehen. Diese habe ich mit einem 74HC4051 (https://www.instructables.com/How-to-Use-Multiple-Analog-Sensors-on-Your-ESP8266/) gemeinsam an den einzigen analogen Eingang des Wemos angeschlossen. Die Ansteuerung erfolgt auch mit Rules, ist aber ein anderes Thema und wird für den Mischer nicht benötigt.
Rule in EasyESP
On System#Boot do
timerSet,1,5
endon
On Rules#Timer=1 do
Let,1,255 //100% Auf 283
Let,2,688 //0% Zu 716
Let,3,([VAR#2]-[VAR#1])/100 //1%
Let,4,100-([Analog#Analog]-[VAR#1])/[VAR#3] //Prozentwert berechnet
if [VAR#4]<0 //Prozent unter 0
Let,4,0 //0 zuweisen
if [Mischermotor#ErrLessMin]>[Analog#Analog]
TaskValueSet,6,2,[Analog#Analog] //ErrLessMin
endif
endif
if [VAR#4]>100 //Prozent ueber 100
Let,4,100 //0 zuweisen
if [Mischermotor#ErrGreaterMax]<[Analog#Analog]
TaskValueSet,6,3,[Analog#Analog] //ErrGreaterMax
endif
endif
TaskValueSet,6,1,[VAR#4] //Uebergabe an Device Dummy
timerSet,1,1
endon
4. Darstellung der HeizungsinformationenDie Informationen meiner Heizung stelle ich auf einem FLOORPLAN (https://fhem.de/commandref_DE.html#FLOORPLAN) dar, den ich über einen weblink (https://fhem.de/commandref.html#weblink) in das FHEM-Menü eingebunden habe. An der Datei
darkfloorplanstyle.css musste ich noch Änderungen vornehmen, damit diese Konstellation funktioniert. Diese sind an Ende beschrieben.
define Heizung FLOORPLAN
attr Heizung fp_arrange 0
attr Heizung fp_noMenu 1
attr Heizung stylesheet darkfloorplanstyle.css
define Heizung_Schema weblink iframe https://<IP-ADRESSE>/fhem/floorplan/Heizung" width="1320" height="1890" frameborder="0"
attr Heizung_Schema nodetaillink 1
attr Heizung_Schema room <ROOM>
4.1. Aufbau des FLOORPLANSA) Im oberen Bereich Bereich des FLOORPLANS ist eine schematische Darstellung meiner Heizung mit allen aktuellen Temperaturen, Mischerstellungen und anderen Statusinformationen. Diese Informationen werden mittels readingsProxys (https://fhem.de/commandref.html#readingsProxy) angezeigt. Die dargestellten Symbole wechseln zwischen An (Grün) und Aus (Schwarz), der Mischer hat unterschiedliche Symbole in 10%-Schritten (0-4%, 5-14%, ...). Die Namen der zugehörigen Symbole sind MM_0, MM_10, ... .
Siehe die Beispiele der readingsProxy unter der Tabelle
B) Darunter sind auf der linken Seite SVG-Plots, die die meisten Informationen der Heizung im zeitlichen verlauf darstellen.
C) Auf der rechten Seite sind aktuelle Infos in einer readingsGroup (https://fhem.de/commandref_DE.html#readingsGroup), die nicht in die schematische Darstellung passten.
Eine Liste mit Devices, die auf dem FLOORPLAN dargestellt sind.
Device | X | Y | Style | DeviceTyp |
ESPEasy_Heizung_HK_Druck | 400 | 80 | 0 (Icon only) | readingsProxy |
ESPEasy_Heizung_Mischermotor | 268 | -24 | 0 (Icon only) | readingsProxy |
ESPEasy_Heizung_Temp | 42 | 146 | 0 (Icon only) | readingsProxy |
HK_Betriebsart | 87 | 62 | 0 (Icon only) | dummy |
MyWolf_3WegeUmschaltventil | 333 | 359 | 0 (Icon only) | readingsProxy |
MyWolf_Abgastemperatur | 90 | 460 | 0 (Icon only) | readingsProxy |
MyWolf_Anlagendruck | 268 | 386 | 0 (Icon only) | readingsProxy |
MyWolf_Aussentemperatur | 516 | 1255 | 0 (Icon only) | readingsProxy |
MyWolf_Brenner_Flamme | 184 | 407 | 0 (Icon only) | readingsProxy |
MyWolf_Heizkreispumpe | 266 | 486 | 0 (Icon only) | readingsProxy |
MyWolf_Kesseltemperatur | 167 | 369 | 0 (Icon only) | readingsProxy |
MyWolf_Mischerkreis | 41 | -1 | 0 (Icon only) | readingsProxy |
MyWolf_Mischerkreispumpe | 146 | -4 | 0 (Icon only) | readingsProxy |
MyWolf_Modulationsgrad_Brennerleistung | 214 | 435 | 0 (Icon only) | readingsProxy |
MyWolf_Ruecklauftemperatur | 168 | 484 | 0 (Icon only) | readingsProxy |
MyWolf_Ruecklauftemperatur_Solar | 435 | 962 | 0 (Icon only) | readingsProxy |
MyWolf_Sammlertemperatur | 461 | 130 | 0 (Icon only) | readingsProxy |
MyWolf_Solarkreispumpe | 252 | 975 | 0 (Icon only) | readingsProxy |
MyWolf_Temperatur_Kollektor | 33 | 964 | 0 (Icon only) | readingsProxy |
MyWolf_Warmwassertemperatur | 237 | 734 | 0 (Icon only) | readingsProxy |
MyWolf_Warmwassertemperatur_Solar | 507 | 809 | 0 (Icon only) | readingsProxy |
SVG_1_Heizung_Abgastemperatur | 645 | 2 | 0 (Icon only) | SVG |
SVG_2_Heizung_Brenner | 830 | 2 | 0 (Icon only) | SVG |
SVG_3_Heizung_Aussentempertatur | 997 | 2 | 0 (Icon only) | SVG |
SVG_4_Heizung_Solarmodul | 1159 | 2 | 0 (Icon only) | SVG |
SVG_5_Heizung_CGB_2_Temperaturen | 1321 | 2 | 0 (Icon only) | SVG |
SVG_6_Heizung_Pumpenstartus | 1523 | 2 | 0 (Icon only) | SVG |
SVG_7_Heizung_Raumtemperatur | 1685 | 2 | 0 (Icon only) | SVG |
WW_Betriebsart | 275 | 850 | 0 (Icon only) | dummy |
Wolf | 645 | 781 | 0 (Icon only) | readingsGroup |
Zu A) Hier sind drei unterschiedliche readingsProxys aus dem oberen Bereich des FLOORPLANS als Beispiele.
readingsProxy - ESPEasy_Heizung_Mischermotor
define ESPEasy_Heizung_Mischermotor ESPEasy 192.168.178.44 80 ESPEasy_1 Heizung_Mischermotor
attr ESPEasy_Heizung_Mischermotor IODev ESPEasy_1
attr ESPEasy_Heizung_Mischermotor Interval 300
attr ESPEasy_Heizung_Mischermotor devStateIcon ^[0-4][%]$:MM_0 ^[5-9][%]$|^[1][0-4][%]$:MM_10 ^[1][5-9][%]$|^[2][0-4][%]$:MM_20 ^[2][5-9][%]$|^[3][0-4][%]$:MM_30 ^[3][5-9][%]$|^[4][0-4][%]$:MM_40 ^[4][5-9][%]$|^[5][0-4][%]$:MM_50 ^[5][5-9][%]$|^[6][0-4][%]$:MM_60 ^[6][5-9][%]$|^[7][0-4][%]$:MM_70 ^[7][5-9][%]$|^[8][0-4][%]$:MM_80 ^[8][5-9][%]$|^[9][0-4][%]$:MM_90 ^[9][5-9][%]$|^[1][0][0][%]$:MM_100
attr ESPEasy_Heizung_Mischermotor event-on-change-reading Prozent
attr ESPEasy_Heizung_Mischermotor fp_Heizung 268,-24,0,ESPEasy_Heizung_Mischermotor,
attr ESPEasy_Heizung_Mischermotor group ESPEasy Device
attr ESPEasy_Heizung_Mischermotor presenceCheck 1
attr ESPEasy_Heizung_Mischermotor readingSwitchText 1
attr ESPEasy_Heizung_Mischermotor setState 3
attr ESPEasy_Heizung_Mischermotor stateFormat Prozent%
readingsProxy - MyWolf_Aussentemperatur
define MyWolf_Aussentemperatur readingsProxy MyWolf:Heizgeraet_1_TOB_CGB2_MGK2.8.O.Aussentemperatur.C
attr MyWolf_Aussentemperatur fp_Heizung 516,1255,0,MyWolf_Aussentemperatur,
attr MyWolf_Aussentemperatur stateFormat state°C<br>\
(gemittelt)°C)
attr MyWolf_Aussentemperatur userReadings gemittelt {ReadingsVal("MyWolf","Systembedienmodul.54.O.Aussentemperatur.C",0)}
readingsProxy - MyWolf_Mischerkreispumpe
define MyWolf_Mischerkreispumpe readingsProxy MyWolf:Mischermodul_1.117.O.Status_Mischerkreispumpe
attr MyWolf_Mischerkreispumpe devStateIcon Aus.*:MK-Pumpe_Aus An.*:MK-Pumpe_An
attr MyWolf_Mischerkreispumpe fp_Heizung 146,-4,0,MyWolf_Mischerkreispumpe,
Zu C) Die readingsGroup auf der rechten Seite des FLOORPLANS hat folgenden Aufbau.
define Wolf readingsGroup <>,<<b><u><a href="../../fhem?detail=MyWolf" target="_parent"><img src="../../../fhem/images/heizung/MyWolf.png" alt="MyWolf" height="50"></a></u></b>>,<>\
MyWolf:state,_WOLF_LAST_READING\
Wolf:!Update,!Restart\
<hr>\
<<b><u>Heizgerät</u></b>>,<>,<<u><a href="../../../fhem/Anleitungen/BM-2_montageanleitung_experte.pdf" target="_blank">Bedienmodul BM-2.pdf</a></br><a href="../../../fhem/Anleitungen/CGB-2_K_Montageanleitung_Fachhandwerker.pdf" target="_blank">CGB-2 20.pdf</a></u>>\
MyWolf_Betriebsart:state,<>\
MyWolf_Sollwertkorrektur:state,!SollwertkorrekturSetzen@MyWolf\
MyWolf_Sparfaktor:state,!SparfaktorSetzen@MyWolf\
<hr>\
<<b><u>Warmwasser</u></b>>,<>,<>\
MyWolf_Warmwassersolltemperatur:state,!WarmwassersolltemperaturSetzen@MyWolf\
MyWolf_Programmwahl_Warmwasser:state,!Programmwahl_WarmwasserSetzen@MyWolf\
MyWolf_1x_Warmwasserladung_gobal:state,!Warmwasserladung_gobalSetzen@MyWolf\
MyWolf_Warmwasser_Zeitprogramm:state,<>\
<hr>\
<<b><u>Mischerkreis</u></b>>,<>,<<u><a href="../../../fhem/Anleitungen/MM-2_mischermodul.pdf" target="_blank">MM-2.pdf</a></u>>\
MyWolf_Programmwahl_Heizkreis:state,!Programmwahl_HeizkreisSetzen@MyWolf\
MyWolf_Mischer_Zeitprogramm:state,<>\
<hr>\
<<b><u>Solarkreis</u></b>>,<>,<<u><a href="../../../fhem/Anleitungen/SM1_Solarmodul_WRS_Montage-und_Bedienungsanleitung.pdf" target="_blank">SM 1-2.pdf</a></u>>\
MyWolf_SolarDurchfluss:state,<>\
MyWolf_Solaraktuelle_Leistung:state,<>\
MyWolf_SolarTagesertrag:state,<>\
MyWolf_SolarGesamtertrag:state,<>\
<hr>\
<<b><u>Stoerung</u></b>>,<>,<>\
MyWolf_Systembedienmodul_Stoerung:state,<>\
MyWolf_Heizgeraet_TOB_CGB2_MGK2_Stoerung:state,<>\
MyWolf_Mischermodul_Stoerung:state,<>\
MyWolf_Solarmodul_Stoerung:state,<>\
MyWolf_Mischerkreis_Warmwasser_Stoerung:state,<>
attr Wolf cellStyle {"r:1,c:2" => 'style="text-align:center;; font-size:20px;; color:red"',\
"r:5,c:2" => 'style="text-align:right;; font-size:12px"',\
"r:5,c:3" => 'style="text-align:right;; font-size:12px"',\
"r:16,c:3" => 'style="text-align:right;; font-size:12px;;"',\
"r:20,c:3" => 'style="text-align:right;; font-size:12px;;"'\
}
attr Wolf commands {\
'Wolf.Update' => "set MyWolf GetAllDate",\
'Wolf.Restart' => "set MyWolf Reconnect",\
'SollwertkorrekturSetzen' => 'Direkter_Heizkreis_direktes_Warmwasser.65.Sollwertkorrektur.K:',\
'SparfaktorSetzen' => 'Direkter_Heizkreis_direktes_Warmwasser.66.Sparfaktor.K:',\
'WarmwassersolltemperaturSetzen' => 'Direkter_Heizkreis_direktes_Warmwasser.56.Warmwassersolltemperatur.C:',\
'Programmwahl_WarmwasserSetzen' => 'Direkter_Heizkreis_direktes_Warmwasser.58.Programmwahl_Warmwasser:Automatikbetrieb,Permanent,Standby',\
'Warmwasserladung_gobalSetzen' => 'Systembedienmodul.194.1x_Warmwasserladung_gobal:Aus,An',\
'Programmwahl_HeizkreisSetzen' => 'Direkter_Heizkreis_direktes_Warmwasser.57.Programmwahl_Heizkreis:Automatikbetrieb,Permanent,Standby,Sparbetrieb'\
}
attr Wolf fp_Heizung 645,781,0,Wolf,
attr Wolf mapping {'Wolf' => '',\
'MyWolf' => ''}
attr Wolf nameStyle style="text-align:left"
attr Wolf noheading 1
attr Wolf nolinks 1
attr Wolf notime 1
attr Wolf room hidden
attr Wolf style style="font-size:16px;;color:lightgray"
attr Wolf valueIcon {state => '%devStateIcon',\
'Wolf.Restart' => 'refresh@orange',\
'Wolf.Update' => 'audio_repeat'\
}
attr Wolf valuePrefix {'MyWolf_Warmwasser_Zeitprogramm.state' => '<a href="../../fhem?room=WolfZeitWW" target="_parent">',\
'MyWolf_Mischer_Zeitprogramm.state' => '<a href="../../fhem?room=WolfZeitHK" target="_parent">'}
attr Wolf valueSuffix {'MyWolf_Warmwasser_Zeitprogramm.state' => '</a>',\
'MyWolf_Mischer_Zeitprogramm.state' => ' </a>'}
4.2. Änderungen an der stylesheet-Datei des FloorplansIch habe an der Datei
darkfloorplanstyle.css noch folgende Änderungen vorgenommen und sie im Attribut
stylesheet des Floorplans eingetragen. Bei anderen Styls könnten die Änderungen vielleicht etwas abweichen.
Die Änderungen in Zeile 1 und 4 sind für die Verwendung des Floorplans im FHEM-Menü mittels
weblink.
In Zeile 1 habe ich
background-image:url(../images/default/fhemicon_dark.png); entfernt.
body { background-color: #444444; font-family:Arial, Helvetica, sans-serif; font-size:13px; background-repeat:no-repeat; }
In Zeile 4 habe ich die Werte für top und left auf 0 gesetzt.
#backimg {position:absolute; top:0px; left:0px;}
Damit die SVG-Plots funktionieren, müssen die folgenden Zeilen am Ende der Datei
darkfloorplanstyle.css angefügt werden. Die ersten drei Zeilen sind für das Kontextmenü der SVG-Plots. Die restlichen Zeilen blenden die Menüleisten (Plus, Minus, Zurück, Vor) der einzelnen SVG-Plots aus, so dass nur noch die vom Obersten SVG-Plot dargestellt wird. Da alle SVG-Plots gemeinsam auf die Menübefehle reagieren, reicht eine Menüleiste aus.
Zeilen am Ende angefügt.
ul#fwmenu { position: absolute; z-index: 1005; text-align: left; max-width: 600px; font-weight: normal; font-size: 100%; background: black; border: 1px solid white;}
div#svgmarker {position: absolute; z-index: 1005; padding: 6px 10px; text-align: left; max-width: 600px; color: white; background: black; border: 2px solid white; border-radius: 4px;}
#fwmenu li a {color: white;}
#SVG_2_Heizung_Brenner svg.Zoom-in { height:0px; width:0px; }
#SVG_2_Heizung_Brenner svg.Zoom-out { height:0px; width:0px; }
#SVG_2_Heizung_Brenner svg.Prev { height:0px; width:0px; }
#SVG_2_Heizung_Brenner svg.Next { height:0px; width:0px; }
#SVG_3_Heizung_Aussentempertatur svg.Zoom-in { height:0px; width:0px; }
#SVG_3_Heizung_Aussentempertatur svg.Zoom-out { height:0px; width:0px; }
#SVG_3_Heizung_Aussentempertatur svg.Prev { height:0px; width:0px; }
#SVG_3_Heizung_Aussentempertatur svg.Next { height:0px; width:0px; }
#SVG_4_Heizung_Solarmodul svg.Zoom-in { height:0px; width:0px; }
#SVG_4_Heizung_Solarmodul svg.Zoom-out { height:0px; width:0px; }
#SVG_4_Heizung_Solarmodul svg.Prev { height:0px; width:0px; }
#SVG_4_Heizung_Solarmodul svg.Next { height:0px; width:0px; }
#SVG_5_Heizung_CGB_2_Temperaturen svg.Zoom-in { height:0px; width:0px; }
#SVG_5_Heizung_CGB_2_Temperaturen svg.Zoom-out { height:0px; width:0px; }
#SVG_5_Heizung_CGB_2_Temperaturen svg.Prev { height:0px; width:0px; }
#SVG_5_Heizung_CGB_2_Temperaturen svg.Next { height:0px; width:0px; }
#SVG_6_Heizung_Pumpenstartus svg.Zoom-in { height:0px; width:0px; }
#SVG_6_Heizung_Pumpenstartus svg.Zoom-out { height:0px; width:0px; }
#SVG_6_Heizung_Pumpenstartus svg.Prev { height:0px; width:0px; }
#SVG_6_Heizung_Pumpenstartus svg.Next { height:0px; width:0px; }
#SVG_7_Heizung_Raumtemperatur svg.Zoom-in { height:0px; width:0px; }
#SVG_7_Heizung_Raumtemperatur svg.Zoom-out { height:0px; width:0px; }
#SVG_7_Heizung_Raumtemperatur svg.Prev { height:0px; width:0px; }
#SVG_7_Heizung_Raumtemperatur svg.Next { height:0px; width:0px; }