FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: McCavity am 03 Dezember 2015, 14:40:32

Titel: Readingsgroup "Heizungsteuerung für HM Wand- und Heizkörperthermostate"
Beitrag von: McCavity am 03 Dezember 2015, 14:40:32
Hi,

im Wiki gibt es ein schönes Beispiel für eine Readingsgroup "Heizungsteuerung für HM Wand- und Heizkörperthermostate (http://www.fhemwiki.de/wiki/ReadingsGroup#Heizungsteuerung_f.C3.BCr_HM_Wand-_und_Heizk.C3.B6rperthermostate)", das ich bei mir umgesetzt habe. Als ich es um eine Anzeige für die Fenstersensoren erweitern wollte, fiel mir auf daß ich das Attribut "valueIcons" ziemlich aufblähen mußte, damit alle möglichen Kombinationen abgedeckt sind, da meine Fenstersensoren nicht nur mit FHEM gePAIRt, sondern auch mit ihrem jeweiligen Wandthermostaten gePEERt sind und deshalb bei Änderung mehre events (z.B.: "closed (to vccu)" und "closed (to Studio.Thermostat)") absetzen.

Deshalb habe ich besonders die Zeile valueIcons überarbeitet und verwende jetzt nicht mehr einen expliziten Hash fester Werte sondern nutze Perl Expressions. Dadurch wurde die Zeile auch insgesamt etwas kürzer :-)

So sieht meine komplette Definition aus (beim Übernehmen sind selbstverständlich eigene Devicenamen zu verwenden ;.)):

### Readingsgroup Heizungen (HomeMatic)
# basierend auf http://www.fhemwiki.de/wiki/ReadingsGroup#Heizungsteuerung_f.C3.BCr_HM_Wand-_und_Heizk.C3.B6rperthermostate
define rg_heatingInfo readingsGroup <%sani_heating>,<Soll>,<neu / Fenster>,<Ist>,<LF/Ventil>,<Modus>,<Sperrung>,<Batterie> Kind1.Thermostat_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@Kind1.Thermostat,batteryLevel@Kind1.Thermostat Kind1.StellantriebL_Clima:desired-temp,contact@Kind1.FenstersensorL,measured-temp,ValvePosition,controlMode,R-globalBtnLock@Kind1.StellantriebL,batteryLevel@Kind1.StellantriebL Kind1.StellantriebR_Clima:desired-temp,contact@Kind1.FenstersensorR,measured-temp,ValvePosition,controlMode,R-globalBtnLock@Kind1.StellantriebR,batteryLevel@Kind1.StellantriebR <>,<>,<>,<>,<>,<>,<>,<> Kind3.Thermostat_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@Kind3.Thermostat,batteryLevel@Kind3.Thermostat Kind3.Stellantrieb_Clima:desired-temp,contact@Kind3.Fenstersensor,measured-temp,ValvePosition,controlMode,R-globalBtnLock@Kind3.Stellantrieb,batteryLevel@Kind3.Stellantrieb <>,<>,<>,<>,<>,<>,<>,<> Kind2.Thermostat_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@Kind2.Thermostat,batteryLevel@Kind2.Thermostat Kind2.Stellantrieb_Clima:desired-temp,contact@Kind2.Fenstersensor,measured-temp,ValvePosition,controlMode,R-globalBtnLock@Kind2.Stellantrieb,batteryLevel@Kind2.Stellantrieb <>,<>,<>,<>,<>,<>,<>,<> Studio.Thermostat_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@Studio.Thermostat,batteryLevel@Studio.Thermostat Studio.Stellantrieb_Clima:desired-temp,contact@Studio.Fenstersensor,measured-temp,ValvePosition,controlMode,R-globalBtnLock@Studio.Stellantrieb,batteryLevel@Studio.Stellantrieb <>,<>,<>,<>,<>,<>,<>,<> BadAnbauOben.Thermostat_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@BadAnbauOben.Thermostat,batteryLevel@BadAnbauOben.Thermostat BadAnbauOben.Stellantrieb_Clima:desired-temp,contact@BadAnbauOben.Fenstersensor,measured-temp,ValvePosition,controlMode,R-globalBtnLock@BadAnbauOben.Stellantrieb,batteryLevel@BadAnbauOben.Stellantrieb <>,<>,<>,<>,<>,<>,<>,<> BadAnbauUnten.Thermostat_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@BadAnbauUnten.Thermostat,batteryLevel@BadAnbauUnten.Thermostat BadAnbauUnten.Stellantrieb_Clima:desired-temp,<>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@BadAnbauUnten.Stellantrieb,batteryLevel@BadAnbauUnten.Stellantrieb <>,<>,<>,<>,<>,<>,<>,<> FlurAnbau.Thermostat_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@FlurAnbau.Thermostat,batteryLevel@FlurAnbau.Thermostat FlurAnbau.Stellantrieb_Clima:desired-temp,<>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@FlurAnbau.Stellantrieb,batteryLevel@FlurAnbau.Stellantrieb <>,<>,<>,<>,<>,<>,<>,<> Garage.HygroThermometer:<>,<>,temperature,humidity,<>,<>,battery Aussen.HygroThermometer:<>,<>,temperature,humidity,<>,<>,battery
attr rg_heatingInfo mapping {'Kind1.Thermostat_Climate'=>"Kind1",'Kind1.StellantriebL_Clima'=>"&nbsp;;Regler links",'Kind1.StellantriebR_Clima'=>"&nbsp;;Regler rechts",'Kind3.Thermostat_Climate'=>"Kind3",'Kind3.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'Kind2.Thermostat_Climate'=>"Kind2",'Kind2.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'Studio.Thermostat_Climate'=>"Studio",'Studio.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'BadAnbauOben.Thermostat_Climate'=>"Bad oben",'BadAnbauOben.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'BadAnbauUnten.Thermostat_Climate'=>"Bad unten",'BadAnbauUnten.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'FlurAnbau.Thermostat_Climate'=>"Flur Anbau",'FlurAnbau.Stellantrieb_Clima'=>"&nbsp;;&nbsp;;&nbsp;;Regler",'Garage.HygroThermometer'=>"Garage",'Aussen.HygroThermometer'=>"Außentemperatur",'desired-temp' => ''}
attr rg_heatingInfo alias Heizung
attr rg_heatingInfo group Heizung
attr rg_heatingInfo room Technik
attr rg_heatingInfo commands { 'rg_heatingInfo.sollsetz'=>'desired-temp:5.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.0,25.0,26.0,27.0,28.0,29.0,30.0', "controlMode.manual"=>"set %DEVICE controlMode auto","controlMode.auto"=>"set %DEVICE controlMode manual", "R-globalBtnLock.on"=>"set %DEVICE regSet globalBtnLock off", "R-globalBtnLock.off"=>"set %DEVICE regSet globalBtnLock on"}
attr rg_heatingInfo cellStyle { "r:1"=>'style="font-weight:bold;;font-size:16px"', "r:2,c:0"=>'style="font-weight:bold"',"r:6,c:0" =>'style="font-weight:bold"',"r:9,c:0"=>'style="font-weight:bold"',"r:12,c:0"=>'style="font-weight:bold"',"r:15,c:0"=>'style="font-weight:bold"',"r:18,c:0"=>'style="font-weight:bold"',"r:21,c:0"=>'style="font-weight:bold"',"r:24,c:0"=>'style="font-weight:bold"',"r:25,c:0"=>'style="font-weight:bold"'}
attr rg_heatingInfo valueStyle {if($READING eq "measured-temp") {my $t=$VALUE;;my $d=ReadingsVal($DEVICE,'desired-temp',0);; if($t-$d>=1){'style="color:rgb(251,63,11);;"'}elsif($t-$d<=-1){'style="color:rgb(79,58,251);;"'} else{'style="color:rgb(12,251,12);;"'}}}
attr rg_heatingInfo valueFormat {if($READING eq "ValvePosition" && $VALUE ne "0"){$VALUE = int($VALUE/10)*10} elsif($READING eq "batteryLevel"){if($VALUE>=3){$VALUE=100} elsif($VALUE>=2.7){$VALUE=75}elsif($VALUE>=2.5){$VALUE=50}elsif($VALUE>=2.2){$VALUE=25} else{$VALUE=0}}}
attr rg_heatingInfo valueIcon {use Color;;if($READING eq "humidity"){return 'humidity@6FD9FB'}elsif($READING eq "controlMode" || $READING eq "R-globalBtnLock"){if ($VALUE =~ "set_") {return 'hourglass'}elsif($VALUE eq "on"){return 'secur_locked@F7301D'}elsif($VALUE eq "off"){return 'secur_open@0CFB0C'}elsif($VALUE eq "manual"){return 'sani_heating_manual@795CFF'}elsif($VALUE eq "auto"){return 'sani_heating_automatic@FFC13A'}elsif($VALUE eq "boost"){return 'sani_heating_boost@FB0C02'}}elsif($READING eq "ValvePosition"){return "sani_heating_level_".$VALUE."@".substr(Color::pahColor(0,50,100,$VALUE,[0,0,255, 140,0,255, 255,0,255, 255,0,140, 255,0,0]),0,6)}elsif($READING eq "batteryLevel"){return "measure_battery_".$VALUE."@".substr(Color::pahColor(0,50,100,$VALUE,[255,0,0, 255,140,0, 255,255,0, 140,255,0, 0,255,0]),0,6)}elsif($READING eq "window" || $READING eq "contact"){if($VALUE =~ "closed"){return 'fts_window_1w@lightgreen'}elsif($VALUE =~ "open"){return 'fts_window_1w_open@red'}elsif($VALUE =~ "tilted"){return 'fts_window_1w_tilt@yellow'}}}
attr rg_heatingInfo valueSuffix {"desired-temp"=>" °C", "measured-temp"=>" °C", "temperature"=>" °C", "ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)", "humidity"=>" ".ReadingsVal($DEVICE,$READING,0)." % RH", "batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"}


Das Ergebnis ist im Screenshot angehängt. Vielleicht kann's ja jemand brauchen...

LG
McCavity