Ich wollte in meinen Reading-Groups nicht nur stumpf den Batteriezustand darstellen, sondern wenn die HM-CC-RT-DN schon eine Spannung liefern, diese etwas aufbereiteter darstellen.
Definition sieht dann zB so aus:
<%sani_heating>,<Soll>,<Ist>,<Regler>,<Modus>,<Lock>,<Bat>
.*_Clima:desired-temp,measured-temp,ValvePosition,controlMode,R-globalBtnLock@{getDevice($DEVICE)},<{batAverageLevel($DEVICE)}>
sub batToLevel($) {
    my $device = shift;
    $device = InternalVal($device,"device",$device);
    my $val = ReadingsVal($device,"batteryLevel",0 );
    return '%measure_battery_100@green' if $val > 3.0;
    return '%measure_battery_75@green'  if $val > 2.7;
    return '%measure_battery_50@green'  if $val > 2.4;
    return '%measure_battery_25@orange' if $val > 2.1;
    return '%measure_battery_0@red';
}
Da gelegentlich, gerade im Grenzbereich die Werte auch gerne mal zappeln, nutze ich die myAverage-Funktion die ich irgendwo aus dem Wiki gezogen habe, um das Ergebnis etwas zu glätten.
sub batAverageLevel($) {
    my $device = shift;
    $device = InternalVal($device,"device",$device);
    my $val = myAverage("10800", "FileLog_Battery", "4:$device\\sbatteryLevel::");
    return '%measure_battery_100@green' if $val > 3.0;
    return '%measure_battery_75@green'  if $val > 2.7;
    return '%measure_battery_50@green'  if $val > 2.4;
    return '%measure_battery_25@orange' if $val > 2.1;
    return '%measure_battery_0@red';
}
Ein Beispiel wie es ausschaut ist angehängt.
			
			
			
				Hi moemoe,
sieht hut aus  ;)
woher hast Du di ecoolen icon´s 
könntest Du nach die restlichen attr... posten ?
danke
kvo
			
			
			
				Die Icons sind mitgeliefert ;)
Ich habe hier gerade leider keinen weiteren Zugriff auf die Config und auswendig weiß ich weitere attrs auch nicht.
			
			
			
				Danke für den Anstoss, nette Idee, gleich mal umgesetzt (aber ohne myUtils  :) )
			
			
			
				ZitatDie Icons sind mitgeliefert ;)
wo liegen diese den ?   :'(
Kannst ja die config später mal posten !
gruss 
kvo1
			
 
			
			
				Scroll mal in fhem in einem device ganz nach unte und klick mal 'select icon'  :)
http://www.fhemwiki.de/wiki/Icons
oder im fhem ordner www/images
			
			
			
				Cool sieht das aus moemoe,
ob das mit meinen Stellreglern auch geht? Wo gibst Du den Code eigentlich ein? In der myUtils?
Gruß
Micha
			
			
			
				Zitat von: chris1284 am 19 Dezember 2014, 16:09:09
Scroll mal in fhem in einem device ganz nach unte und klick mal 'select icon'  :)
http://www.fhemwiki.de/wiki/Icons
oder im fhem ordner www/images
schon klar ...... ich habe wohl das falsche Verzeichnis / den falsche Path ... aber in Default stehen die nicht ! ???
attr WEB iconPath default:kvo
			
 
			
			
				scheinbar nicht klar: http://www.fhemwiki.de/wiki/Icons#Mehr_Icons_zur_Auswahl (http://www.fhemwiki.de/wiki/Icons#Mehr_Icons_zur_Auswahl)
			
			
			
				Hallo Andre
danke, ich vermute das es sich hier um  svg-Datei handelt und 
diese kann ich nicht , wie vom Chris1284 beschrieben (Scroll mal in fhem in einem device ganz nach unte und klick mal 'select icon')
auswählen (liegt sicher an mir , nur woran).?
kvo1
			
			
			
				hast du den link gelesen? da steht was du tun musst um die SVG icons zu bekommen ...
			
			
			
				laut wiki müste er die schon haben 
ZitatGrundsätzlich sind bei aktuellen fhem-Installationen die meisten Icons standardmäßig aktiviert. Die Ordner default, openautomation und fhemSVG sind standardmäßig aktiviert,
wie bei mir auch zb. die batterie liegt auch in fhemSVG...
da seine clima-channels auch noch climart tr heissen vermute ich eine sehr alste fhem version. ich hatte ja schon in readingsgroup zu einem update geraten.
weisst du obman 2 farben für icons definieren kann? der schwarze rand der oben genommenen batterie ist etwas doof bei schwarzem background. ich habe im svg selbst schon die randfarbe auf weiss gesetzt, wird aber offensichtlich durch fhem überschrieben
			
				Zitatda seine clima-channels auch noch climart tr heissen vermute ich eine sehr alste fhem version. ich hatte ja schon in readingsgroup zu einem update geraten.
sorry , aber die Fhem Version ist aktuell.
Das mit dem clima-channels  wird beim Update ja nicht automatisch umgestellt !? nur wenn Du neue RT´s anlegst !
			
 
			
			
				@chris1284: er hat die icons aber sein iconPath ist falsch:
Zitatattr WEB iconPath default:kvo
man kann nur eine farbe setzen und das ist auch die der umrandung die sonst automatisch style abhängig gesetzt wird.
ich sehe gerade das das bei diesen 5 batterie icons nicht so ist sondern hier die füllfarbe automatisch angepasst wird. das 25% icon wird gar nicht gefüllt. das habe ich eben korrigiert.
wenn die rahmenfarbe nicht zu deinem style passt musst du dir die icons kopieren und die farben anpassen.
gruss
  andre
			
				Hallo Andre, chris1284
Zitat von: justme1968 am 19 Dezember 2014, 16:52:57
hast du den link gelesen? da steht was du tun musst um die SVG icons zu bekommen ...
klar hatte ich den Link gelesen, hat das Problem auch erkannt.
Ich habe meine WEB-Definitionen (auch WEBphone  und WEBtablet) in einen web.cfg ausgelagert und 
per include geladen.
Dort steht        attr WEB iconPath fhemSVG:openautomation:default:icons_small    ... was aber nicht geladen wird.
Wenn ich das in die fhem.cfg packe, dann tut´s !
Danke nochmal !
Klaus
			
				danke andre! noch besser war die Kontur in Pfad umzuwandeln, nun passt sich das ganze icon an.
ich habe die geänderten mal angehängt
			
			
			
				Hi chris1284,
das sieht echt Super COOL aus , ich bin begeistert , hätte ich auch gern so.
Würdest Du die RG hier bereitstellen ?
gruss
kvo1
			
			
			
				@chris1284: dafür war ich zu faul :). habe deine version eingecheckt.
gruss
  andre
			
			
			
				@andre: danke
@kv01: gerne. hier der auszug aus der fhem.cfg da ich keine myUtils nutze ist der define recht "komplex" oder auch unübersichtlich  ;D
define HeizungRg readingsGroup <%sani_heating>,<>,<Soll>,<>,<Soll neu>,<>,<Ist>,<>,<Ventil>,<>,<Modus>,<>,<Batterie>,<>,<Boost>,<>,<Auto On>,<>,<Manu On>\
.*._Clima:,<>,desired-temp,<>,<sollsetz>,<>,measured-temp,<>,ValvePosition,<>,controlMode,<>,<{if(ReadingsVal(substr("$DEVICE",0,length("$DEVICE")-6),"batteryLevel","0")>=3.0){"%my_battery_100\@green"}elsif(ReadingsVal(substr("$DEVICE",0,length("$DEVICE")-6),"batteryLevel","0")>=2.7){"%my_battery_75\@green"}elsif(ReadingsVal(substr("$DEVICE",0,length("$DEVICE")-6),"batteryLevel","0")>=2.5){"%my_battery_50\@green"}elsif(ReadingsVal(substr("$DEVICE",0,length("$DEVICE")-6),"batteryLevel","0")>=2.2){"%my_battery_25\@orange"}else{"%my_battery_0\@red"}}>,<>,<%sani_heating_boost>,<>,<%sani_heating_automatic>,<>,<%sani_heating_manual>
attr HeizungRg commands {'HeizungRg.sollsetz'=>'desired-temp:5.0,16.0,18.0,19.0,20.0',"HeizungRg.sani_heating_boost"=>"set %DEVICE controlMode boost","HeizungRg.sani_heating_automatic"=>"set %DEVICE controlMode auto","HeizungRg.sani_heating_manual"=>"set %DEVICE controlMode manual"}
attr HeizungRg fp_02_Heizung 75,125,0,
attr HeizungRg mapping {az_hz_Clima => "Büro",bz_hz_Clima => "Bad",ku_hz_Clima=> "Küche",sz_hz_Clima=> "SZ",wz_hz_Clima=> "WZ",'desired-temp' => ''}
attr HeizungRg nameStyle style="text-align:left;;"
attr HeizungRg noheading 1
attr HeizungRg nolinks 1
attr HeizungRg room 30_Heizung,99_Floorplans
attr HeizungRg valueFormat {if(($READING eq "measured-temp")or( $READING eq "desired-temp") ){ "$VALUE °C"}elsif(($READING eq "ValvePosition" && $VALUE ne "0")){$VALUE = 1}}
attr HeizungRg valueIcon {'controlMode.manual' => 'sani_heating_manual','controlMode.auto' => 'sani_heating_automatic','ValvePosition.0' => 'sani_heating@blue','ValvePosition.1' => 'sani_heating@red'}
			
			
				@chris1284
herzlichen Dank!
kvo1
			
			
			
				Zitat von: chris1284 am 19 Dezember 2014, 19:47:33
danke andre! noch besser war die Kontur in Pfad umzuwandeln, nun passt sich das ganze icon an.
ich habe die geänderten mal angehängt
Guten Abend,
habe die RG gleich mal bei mir eingepflegt und sieht schon ganz gut aus. Funktionieren tut alles soweit. Das einzige was fehlt sind die Bezeichnungen der Thermostate. Habe das og. Script meiner Knorrig angepasst. Hab ich etwas falsch gemacht.
define HeizungRg readingsGroup <%sani_heating>,<>,<Soll>,<>,<Soll neu>,<>,<Ist>,<>,<Ventil>,<>,<Modus>,<>,<Batterie>,<>,<Boost>,<>,<Auto On>,<>,<Manu On>\
.*._Clima:,<>,desired-temp,<>,<sollsetz>,<>,measured-temp,<>,ValvePosition,<>,controlMode,<>,<{if(ReadingsVal(substr("$DEVICE",0,length("$DEVICE")-6),"batteryLevel","0")>=3.0){"%my_battery_100\@green"}elsif(ReadingsVal(substr("$DEVICE",0,length("$DEVICE")-6),"batteryLevel","0")>=2.7){"%my_battery_75\@green"}elsif(ReadingsVal(substr("$DEVICE",0,length("$DEVICE")-6),"batteryLevel","0")>=2.5){"%my_battery_50\@green"}elsif(ReadingsVal(substr("$DEVICE",0,length("$DEVICE")-6),"batteryLevel","0")>=2.2){"%my_battery_25\@orange"}else{"%my_battery_0\@red"}}>,<>,<%sani_heating_boost>,<>,<%sani_heating_automatic>,<>,<%sani_heating_manual>
attr HeizungRg commands {'HeizungRg.sollsetz'=>'desired-temp:5.0,16.0,18.0,19.0,20.0,21.0,22.0',"HeizungRg.sani_heating_boost"=>"set %DEVICE controlMode boost","HeizungRg.sani_heating_automatic"=>"set %DEVICE controlMode auto","HeizungRg.sani_heating_manual"=>"set %DEVICE controlMode manual"}
attr HeizungRg mapping {HZ.Kueche_Clima => "Küche", HZ.Wohnzimmer_Clima => "Wohnzimmer", HZ.TV_Clima=> "TV", HZ.Bad_Clima=> "Bad", HZ.Marvin_Clima=> "Marvin", 'desired-temp' => ''}
attr HeizungRg nameStyle style="text-align:left;;"
attr HeizungRg noheading 1
attr HeizungRg nolinks 1
attr HeizungRg room Heizung
attr HeizungRg valueFormat {if(($READING eq "measured-temp")or( $READING eq "desired-temp") ){ "$VALUE °C"}elsif(($READING eq "ValvePosition" && $VALUE ne "0")){$VALUE = 1}}
attr HeizungRg valueIcon {'controlMode.manual' => 'sani_heating_manual','controlMode.auto' => 'sani_heating_automatic','ValvePosition.0' => 'sani_heating@blue','ValvePosition.1' => 'sani_heating@red'}
			 
			
			
				Wie schaut es denn aus , wenn Du 
Zitatattr HeizungRg mapping {HZ.Kueche_Clima => "Küche", HZ.Wohnzimmer_Clima => "Wohnzimmer", HZ.TV_Clima=> "TV", HZ.Bad_Clima=> "Bad", HZ.Marvin_Clima=> "Marvin", 'desired-temp' => ''}
mal wegläst ?
Du kannst ja auch ein alias für jeden Kanal (hier 4) definieren
also ein alias Namens Küche für HZ.Kueche_Clima.
gruss
kvo1
			
				Guten Morgen,
danke die Namen sind jetzt drin doch leider auch desired Temp. Bekomme ich das irgendwie weg?
			
			
			
				über das mapping 
attr HeizungRg mapping {'desired-temp' => ''}
			
			
			
				Perfekt. Danke.
			
			
			
				@coolice:
Zitatattr HeizungRg mapping {HZ.Kueche_Clima => "Küche", HZ.Wohnzimmer_Clima => "Wohnzimmer", HZ.TV_Clima=> "TV", HZ.Bad_Clima=> "Bad", HZ.Marvin_Clima=> "Marvin", 'desired-temp' => ''}
die keys (das was jeweils links vom => operator steht) müssen in anführungszeichen stehen. also so:
attr HeizungRg mapping {'HZ.Kueche_Clima' => "Küche", 'HZ.Wohnzimmer_Clima' => "Wohnzimmer", 'HZ.TV_Clima'=> "TV", 'HZ.Bad_Clima'=> "Bad", HZ.Marvin_Clima=> "Marvin", 'desired-temp' => ''}die einzige ausnahme ist wenn dort ein string steht der mit einem buchstaben beginnt und nur buchstaben und zahlen enthält.
gruss
  andre
			
				Hallo Andre,
danke für den Tipp, hätte ich letztens brauchen können , habe das dann halt über die alias gelöst, nicht sooo elegant!
klaus
			
			
			
				gibt es auch noch andere Devices bei denen man die Spannung der Batterie bekommt?
... oder ist das Heizkörperthermostat bisher das einzige?
			
			
			
				Mindestens Wandthermostate liefern auch die aktuelle Spannung. 
			
			
			
				und der Universal-Sensor von Dirk !
			
			
			
				Danke für die Ideen ;)
Ich habe etwas weitergebastelt, um auch meine Wandthermostate miteinbeziehen.
Bei Interesse poste ich auch den Code.
(http://forum.fhem.de/index.php?action=dlattach;topic=27399.0;attach=24068;image)
			
			
			
				ab ins wiki damit :)
			
			
			
				Ach, herrje... Na für so gelungen habe ich es auch nicht gehalten. ???
Aber gut, mache ich. Die (eigenerstellten) Icons soll ich dann wohl am besten einchecken... Unter fhemSVG?
			
			
			
				auch ohne gelungen zu sein zeigt es was alles geht :)
im ernst: ich glaube es ist ein gutes beispiel weil es ganz unterschiedlcihe dinge mischt. 
			
			
			
				Bitt' schön ;)
http://www.fhemwiki.de/wiki/ReadingsGroup#Heizungsteuerung_f.C3.BCr_HM_Wand-_und_Heizk.C3.B6rperthermostate
Icons checke ich noch ein.
			
			
			
				danke 
			
			
			
				Super
			
			
			
				Zitat von: hexenmeister am 30 Dezember 2014, 23:11:21
Bitt' schön ;)
http://www.fhemwiki.de/wiki/ReadingsGroup#Heizungsteuerung_f.C3.BCr_HM_Wand-_und_Heizk.C3.B6rperthermostate
Icons checke ich noch ein.
Sehr hübsch, um das erweitert, wofür ich bisher noch keine Zeit gefunden habe ;)
(Nebenbei finde ich es interessant, dass der Thread 3 Monate gammelt und dann auf einmal so Leben bekommt. Dachte schon das interessiert keinen...)
			
 
			
			
				Hi Alex,
super Beispiel, und danke auch für den Wiki-Eintrag. 
 @moemoe: manchmal braucht´s eben nur einen keinen Anstoss (von Dir und chris1284)
                    und so tolle Dinge wir Andre´s readingsGroup.
werd dann meine Konfig auch noch etwas aufhübschen ;) 
Da geht bestimmt noch vieles andere !
gruss
klaus
			
			
			
				Danke für die Blümen ;)
Ich will bei Gelegenheit noch Fensterstatus einbauen und Boost-Befehl. Werde ggf. WIKI aktualisieren.
			
			
			
				Hi Alex
eines ist mir noch unklar. Schaltest Du mit 
"controlMode.manual"=>"set %DEVICE controlMode auto","controlMode.auto"=>"set %DEVICE controlMode manual",
jeweils zwischen manual und auto um ?
gruss
klaus 
			
			
			
				Frohes Neues! :)
Zitat von: kvo1 am 31 Dezember 2014, 18:03:32
Schaltest Du mit 
[...]
jeweils zwischen manual und auto um ?
Genau so ist es. Immer von aktuellem zum jeweils anderen Zustand wechseln. 
Zunächst hatte ich noch vor, hier auch noch Boost mit einzubeziehen, dann war mir dass dann doch zu unübersichtlich.
Grüße,
Alexander
			
				Hi Alex,
Die und allen anderen hier ..ebenfalls frohes Neues Jahr und viele gute Ideen.
Ich hatte / habe das bisher so wie es Chris1284 vorgestellt hat, aber Deine Variante ist 
im Hinblick auf die Übersichtlichkeit vielleicht besser. Boost brauche ich eigentlich nicht, zumindest
fällt mir da kein Anwendungsfall ein.
Gruß klaus
			
			
			
				Zitat
"controlMode.manual"=>"set %DEVICE controlMode auto","controlMode.auto"=>"set %DEVICE controlMode manual",
Danke Hexenmeister, dank dem snipped konnte ich 2 spalten bei mir rausnehmen. manchmal denkt man doch etwas kompliziert.
@kv01: dann nimm einfach boost raus :-)
			
 
			
			
				Zitat@kv01: dann nimm einfach boost raus :-)
habe / hatte ich garnicht erst drin ;-)
klaus
			
 
			
			
				Hallo zusammen,
der Wiki Artikel, hat das sogar für einen Newbi verständlich gemacht, auch wenn ich die Details nicht verstehe :-(
Wäre es sehr kompliziert das ganze auch für Max Stellantriebe zu nutzen? Ich vermute allerdings das diese nicht so komfortabel den Batteriestand übersenden ? Ich habe auch noch keine Möglichkeit gefunden ein lock zu setzen :-( Vielleicht sollte ich doch von MAX auf HM umsteigen?
Gruß
Micha
			
			
			
				Hallo,
ich habe mal versucht, das nachzubauen und bekomme es für Ventilstellungen unter 10% einfach nicht hin. Sobald ich für diesen Fall eine 0 zurückgebe, steht der vom Ventil gelieferte Wert drin. Gebe ich testweise für diesen Fall einen String "slkdlaskj" zurück, so wird dieser korrekt dargestellt, aber mit der 0 klappt's irgendwie nicht :-( (War das verständlich?)
Ronny
			
			
			
				Ist dein Fhem aktuell?
			
			
			
				Zitat von: mfeske am 01 Januar 2015, 21:14:15
Wäre es sehr kompliziert das ganze auch für Max Stellantriebe zu nutzen? 
Vemutlich nicht (evtl. mit Einschränkungen), ich habe jedoch keine Max und kenne die Dinger nicht. Kann daher keinen Vorschlag machen.
Grüße,
Alexander
			
 
			
			
				Zitat von: RoBra81 am 01 Januar 2015, 23:18:38
ich habe mal versucht, das nachzubauen und bekomme es für Ventilstellungen unter 10% einfach nicht hin.
Kann ich nachstellen... Ist ja lustig, scheinbar ein Bux im ReadingsGroup. Verstehe nicht wirklich, was da passieren kann.
Also, wenn der Wert aus dem Aktor z.B. 7 ist (also kleiner 10 aber größer 0), dann funktioniert valueFormat {$VALUE=1} wunderbar und setzt brav 1. Ein {$VALUE=0} funktioniert dagegen nicht. Daher klappt meine Rundung (int($VALUE/10)*10) auch nicht und somit auch nicht die Icon-Zuordnung.
Andre, hast Du eine Idee?
Grüße,
Alexander
			
 
			
			
				Hier klappt das bei 0 % mit dem Icon
			
			
			
				Bei mir auch, aber nicht bei 1 bis 9.
			
			
			
				Wegen der Ventilstellung von 1-9 habe ich mir mit $VALUE = int(($VALUE+10)/10)*10 geholfen. 
Weil ich 0% und 100% explizit (also als separtes Icon) angezeigt bekommen möchte, brauche ich insgesamt 11 unterschiedliche Icons. 
Für 90-99%: Ventilstellung benutze ich 'ValvePosition.100' => 'sani_heating_level_100@E50005'
und für 100% Ventilstellung: 'ValvePosition.110' => 'sani_heating_level_100@ff0006'  
Den Code von hexenmeister (Herzlichen Dank dafür!!!) habe ich etwas modifiziert, damit automatisch meine Heizkörperthermostate HM-CC-RT-DN als auch teilweise vorhandenen Wandthermostate HM-TC-IT-WM-W-EU dargestellt werden. 
Nun suche ich noch nach einer Möglichkeit, dass bei den Räumen, in denen zusätzlich ein Wandthermostat vorhanden ist, bei den zugehörigen Heizkörperthermostate kein Auswahldialog für <Soll neu> erscheint (siehe Kreise im Screenshot). Ich habe schon einiges ausprobiert, aber leider nicht mal annäherungsweise Erfolge erzielt. 
Hat jemand vielleicht eine Idee? Danke!
define heatingInfo readingsGroup <Ferienwohnung>,<Ist>,<Soll>,<Soll neu>,<Ventil/RH>,<Modus>,<Lock>,<Batterie>,<Kommando>,<> \
(CUL_HM_|)HM_(CC_RT_DN_......_Clima|TC_IT_WM_W_EU_......_Climate):measured-temp,desired-temp,<sollsetz>,humidity,ValvePosition,controlMode,R-btnLock@{rg($DEVICE."§device")},batteryLevel@{rg($DEVICE."§device")},state@{rg($DEVICE."§device")},<%getConfig> \
<>,<>,<>,<>,<>,<>,<>,<>
attr heatingInfo cellStyle { "r:1"=>'style="font-weight:bold;;font-size:16px;;color:yellow"',"c:0"=>'style="font-weight:bold"',"c:1"=>'style="font-weight:bold"'}
attr heatingInfo commands {'controlMode' => 'trigger ntfy_rg $DEVICE controlMode', 'R-btnLock' => 'trigger ntfy_rg $DEVICE R-btnLock','heatingInfo.getConfig' => 'set $DEVICE getConfig','heatingInfo.sollsetz'=>'desired-temp:5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,15.0,15.5,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,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0'}
attr heatingInfo mapping { 'desired-temp' => ''}
attr heatingInfo room Ferienwohnung
attr heatingInfo sortDevices 1
attr heatingInfo valueFormat {if($READING eq "ValvePosition" && $VALUE ne "0"){$VALUE = int(($VALUE+10)/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 heatingInfo valueIcon {'controlMode.manual' => 'sani_heating_manual@795CFF', 'controlMode.auto' => 'sani_heating_automatic@FFC13A', 'controlMode.boost' => 'sani_heating_boost@FB0C02', 'humidity'=>'humidity@6FD9FB', 'R-btnLock.on'=>'secur_locked@F7301D', 'R-btnLock.off'=>'secur_open@0CFB0C', 'ValvePosition.0' => 'sani_heating_level_0@002AE0', 'ValvePosition.10' => 'sani_heating_level_10@F8D53D', 'ValvePosition.20' => 'sani_heating_level_20@FF9341','ValvePosition.30' => 'sani_heating_level_30@F17F3F','ValvePosition.40' => 'sani_heating_level_40@E46C3C','ValvePosition.50' => 'sani_heating_level_50@DE3B3A','ValvePosition.60' => 'sani_heating_level_60@A30D2D','ValvePosition.70' => 'sani_heating_level_70@B40A23','ValvePosition.80' => 'sani_heating_level_80@C40619','ValvePosition.90' => 'sani_heating_level_90@D4030F','ValvePosition.100' => 'sani_heating_level_100@E50005','ValvePosition.110' => 'sani_heating_level_100@ff0006','batteryLevel.100' => 'measure_battery_100@0CFB0C','batteryLevel.75' => 'measure_battery_75@42BC0A','batteryLevel.50' => 'measure_battery_50@F5FF10','batteryLevel.25'=>'measure_battery_25@FB5909','batteryLevel.0'=>'measure_battery_0@E50005','controlMode.set_boost' => 'hourglass','controlMode.set_auto' => 'hourglass','controlMode.set_manual' => 'hourglass','R-btnLock.set_on' => 'hourglass','R-btnLock.set_off' => 'hourglass'}
attr 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 heatingInfo valueSuffix {"desired-temp"=>" °C", "measured-temp"=>" °C","ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)","humidity"=>" ".ReadingsVal($DEVICE,$READING,0)." % RH","batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"}
Grüße, Heiko
			
			
			
				Genau deswegen (und noch wegen der Reihenfolge) habe ich die Devices manuell angegeben.  :)
			
			
			
				schaut mal bitte ob sich bei den problematischen werten 1-9 ein leerzeichen im reading eingeschlichen hat.
ein device wird dann ausgeblendet wenn valueFormat undef zurück gibt. d.h. du kannst dein dein valueFormat so bauen das es bei den HM-CC-RT-DN schaut ob es einen HM-TC-IT-WM-W-EU im gleichen raum gibt und gibst dann undef zurück. wenn du das device trotzdem anzeigen und nur das eine reading auslassen möchtest gibts du z.b.   zurück.
sortieren kannst du die devices dann per passendem sortDevices attribut.
			
			
			
				Man kann den Fehler auch provozieren in dem man aus 
 int($VALUE/10)*10
für Werte zwischen 11 und 19 macht
 int(($VALUE-10)/10)*10
Es wird dan valueFormat nicht ausgewertet wenn $VALUE=0 als ergebnis raus kommt
			
			
			
				Ich habe jetzt erstmal
$VALUE = int($VALUE/10)*10
gegen
$VALUE = sprintf("%d0",$VALUE/10)
ausgetauscht, dadurch wird von 0 bis 9 eine 00 zurückgegeben und die sani_heating_level_0.svg in sani_heating_level_00.svg umbenannt
			
			
			
				ich hab es eben im readingGroup modul repariert.
gruss
  andre
			
			
			
				bekommt man diese tolle Anzeige mit den Icons mit Boardmitteln auch ohne Readingsgroup hin? Also Definition im Device (Hier MAX) selbst
			
			
			
				readingsGroup sind bordmittel :)
es geht nur mit readingGroup.
gruss
  andre
			
			
			
				Habe neue Version aus dem SVN geholt (# $Id: 33_readingsGroup.pm 7403 2015-01-02 10:55:09Z justme1968 $)
Leider habe ich immer noch das gleiche Problem.
Habe zum Testen ein Dummi angelegt und die notwendigen Readings gesetzt:
fhem> l test
Internals:
   NAME       test
   NR         1110
   STATE      ???
   TYPE       dummy
   Readings:
     2015-01-01 23:34:30   R-globalBtnLock on
     2015-01-01 23:32:48   ValvePosition   7
     2015-01-01 23:34:11   batteryLevel    3.0
     2015-01-01 23:34:49   controlMode     boost
     2015-01-01 23:35:34   desired-temp    30.0
     2015-01-01 23:41:29   humidity        0
     2015-01-01 23:35:23   measured-temp   18.0
Attributes:
Im ReadingsGroup habe ich entsprechend eine Zeile ergänzt:
test:desired-temp,<>,measured-temp,ValvePosition,controlMode,R-globalBtnLock,batteryLevel
Es wird leider Zahl 7 angezeigt. valueFormat wird wohl immer noch nicht korrekt ausgewertet :(
Leerzeichen sind im Reading nicht drin.
Grüße,
Alexander
			
			
			
				Habe auch einmal meine Heizung verwurstet ...
dargestellt wurden: Wandthermostat (Alt und Neu); alter Stellentrieb (letzte Zeile); neue Stellthermostate (Standalone als auch Autonom); Fensterkontakte
(http://forum.fhem.de/index.php?action=dlattach;topic=27399.0;attach=24204)
meine Definition sieht folgendermaßen aus:
DEF
<%sani_heating>,<Soll>,<Soll neu>,<Ist>,<Ventil / RH>,<Modus>,<G-Lock>,<B-Lock>,<Bat>,<Fenster> 
hm.thermo.5.climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@hm.thermo.5,R-btnLock@hm.thermo.5,batteryLevel@hm.thermo.5,state@hm.sec.1
hm.thermo.6.clima:desired-temp,<>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.6,R-btnLock@hm.thermo.6,batteryLevel@hm.thermo.6,<>
hm.thermo.7.clima:desired-temp,<>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.7,R-btnLock@hm.thermo.7,batteryLevel@hm.thermo.7,<>
hm.thermo.4.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.4,R-btnLock@hm.thermo.4,batteryLevel@hm.thermo.4,state@hm.sec.3
hm.thermo.10.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.10,R-btnLock@hm.thermo.10,batteryLevel@hm.thermo.10,state@hm.sec.6
hm.thermo.9.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.9,R-btnLock@hm.thermo.9,batteryLevel@hm.thermo.9,state@hm.sec.5
hm.thermo.1.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.1,R-btnLock@hm.thermo.1,batteryLevel@hm.thermo.1,<>
hm.thermo.2.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.2,R-btnLock@hm.thermo.2,batteryLevel@hm.thermo.2,<>
hm.thermo.8.clima:desired-temp,<sollsetz>,measured-temp,ValvePosition,controlMode,R-globalBtnLock@hm.thermo.8,R-btnLock@hm.thermo.8,batteryLevel@hm.thermo.8,state@hm.sec.4
hm.thermo.3.climate:desired-temp,<sollsetz>,measured-temp@hm.thermo.3,humidity@hm.thermo.3,controlMode@hm.thermo.3,<>,R-btnLock@hm.thermo.3,<>,<>
hm.stellantrieb.2:ValveDesired,<>,<>,ValvePosition@hm.stellantrieb.2,<>,<>,<>,battery@hm.stellantrieb.2,<>
Attribute:
commands
{ 'HeizungInfo.sollsetz'=>'desired-temp:5.0,12.0,17.0,18.0,19.0,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.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", "R-btnLock.on"=>"set %DEVICE regSet btnLock off", "R-btnLock.off"=>"set %DEVICE regSet btnLock on"}
mapping
{'hm.thermo.1.clima'=>"Dusche",'hm.thermo.2.clima'=>"Badezimmer",'hm.thermo.3.climate'=>"Keller",'hm.thermo.4.clima'=>"Küche",'hm.thermo.5.climate'=>"Wohnzimmer",'hm.thermo.6.clima'=>" Regler Fenster",'hm.thermo.7.clima'=>" Regler Tür",'hm.thermo.8.clima'=>"Schlafzimmer",'hm.thermo.9.clima'=>"Arbeit Mitte",'hm.thermo.10.clima'=>"Arbeit Links",'hm.stellantrieb.2'=>"Regler Keller",'desired-temp'=> ""}
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}}}
valueIcon
{'controlMode.manual' => 'sani_heating_manual@795CFF', 'controlMode.auto' => 'sani_heating_automatic@FFC13A', 'controlMode.boost' => 'sani_heating_boost@FB0C02', 'humidity'=>'humidity@6FD9FB', 'R-btnLock.on'=>'secur_locked@F7301D', 'R-btnLock.off'=>'secur_open@0CFB0C', 'R-globalBtnLock.on'=>'secur_locked@F7301D', 'R-globalBtnLock.off'=>'secur_open@0CFB0C','ValvePosition.0' => 'sani_heating_level_0@002AE0', 'ValvePosition.10' => 'sani_heating_level_10@F8D53D','ValvePosition.20' => 'sani_heating_level_20@FF9341', 'ValvePosition.30' => 'sani_heating_level_30@F17F3F','ValvePosition.40' => 'sani_heating_level_40@E46C3C', 'ValvePosition.50' => 'sani_heating_level_50@DE3B3A','ValvePosition.60' => 'sani_heating_level_60@A30D2D', 'ValvePosition.70' => 'sani_heating_level_70@B40A23','ValvePosition.80' => 'sani_heating_level_80@C40619', 'ValvePosition.90' => 'sani_heating_level_90@D4030F','ValvePosition.100' => 'sani_heating_level_100@E50005', 'batteryLevel.100'=>'measure_battery_100@0CFB0C','batteryLevel.75'=>'measure_battery_75@42BC0A', 'batteryLevel.50'=>'measure_battery_50@F5FF10','batteryLevel.25'=>'measure_battery_25@FB5909', 'batteryLevel.0'=>'measure_battery_0@E50005','controlMode.set_boost' => 'hourglass', 'controlMode.set_auto' => 'hourglass','controlMode.set_manual' => 'hourglass', 'R-globalBtnLock.set_on' => 'hourglass','R-globalBtnLock.set_off' => 'hourglass', 'R-btnLock.set_on' => 'hourglass','R-btnLock.set_off' => 'hourglass','state.closed' => 'fts_window_1w','state.open'=>'fts_window_1w_open@F7301D'}
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);;"'}}}
valueSuffix
{"desired-temp"=>" °C", "measured-temp"=>" °C", "ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)", "humidity"=>" ".ReadingsVal($DEVICE,$READING,0)." % RH", "batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"}
			
			
			
				sorry. habe es jetzt richtig gefixed...
			
			
			
				@justme1968: Vielen Dank für deine Hinweise. Die von dir vorgeschlagene Vorgehensweise, zu prüfen ob in einem Raum neben dem HM-CC-RT-DN zusätzlich ein HM-TC-IT-WM-W-EU existiert, habe ich zwar nicht hinbekommen, stattdessen habe ich es vorerst über eine alias-Abfrage realisiert: In den Räumen in den sowohl HM-CC-RT-DN als auch HM-TC-IT-WM-W-EU installiert sind, gebe ich dem HM-CC-RT-DN alias den String 'Regler' mit an. Anhand diesem Kriterium erfolgt dann die Ausblendung des Pull-Down-Dialogs. 
define heatingInfo readingsGroup <%sani_heating@green>,<Ist>,<Soll>,<Soll neu>,<Ventil/RH>,<Modus>,<Lock>,<Batterie>,<Kommando>,<> \
(CUL_HM_|)HM_(CC_RT_DN_......_Clima|TC_IT_WM_W_EU_......_Climate):measured-temp,desired-temp,<{if(($DEVICE=~/HM_CC_RT_DN/)&&(AttrVal($DEVICE,"alias","none")=~/Regler/)){" "}else{"sollsetz"}}>,humidity,ValvePosition,controlMode,R-btnLock@{rg($DEVICE."§device")},batteryLevel@{rg($DEVICE."§device")},state@{rg($DEVICE."§device")},<%getConfig> \
<>,<>,<>,<>,<>,<>,<>,<>
attr heatingInfo cellStyle {"r:1"=>'style="font-weight:bold;;font-size:16px;;color:yellow"',"c:0"=>'style="font-weight:bold"',"c:1"=>'style="font-weight:bold"',"c:9"=>'style="font-weight:bold"'}
attr heatingInfo commands {'controlMode' => 'trigger ntfy_rg $DEVICE controlMode', 'R-btnLock' => 'trigger ntfy_rg $DEVICE R-btnLock','heatingInfo.getConfig' => 'set $DEVICE getConfig','heatingInfo.sollsetz'=>'desired-temp:5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,15.0,15.5,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,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0,28.5,29.0,29.5,30.0'}
attr heatingInfo mapping {'desired-temp' => ''}
attr heatingInfo room 01_Übersicht
attr heatingInfo sortDevices 1
attr 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 heatingInfo valueIcon {'controlMode.manual' => 'sani_heating_manual@795CFF', 'controlMode.auto' => 'sani_heating_automatic@FFC13A', 'controlMode.boost' => 'sani_heating_boost@FB0C02', 'humidity'=>'humidity@6FD9FB', 'R-btnLock.on'=>'secur_locked@F7301D', 'R-btnLock.off'=>'secur_open@0CFB0C', 'ValvePosition.0' => 'sani_heating_level_0@002AE0', 'ValvePosition.10' => 'sani_heating_level_10@F8D53D', 'ValvePosition.20' => 'sani_heating_level_20@FF9341','ValvePosition.30' => 'sani_heating_level_30@F17F3F','ValvePosition.40' => 'sani_heating_level_40@E46C3C','ValvePosition.50' => 'sani_heating_level_50@DE3B3A','ValvePosition.60' => 'sani_heating_level_60@A30D2D','ValvePosition.70' => 'sani_heating_level_70@B40A23','ValvePosition.80' => 'sani_heating_level_80@C40619','ValvePosition.90' => 'sani_heating_level_90@D4030F','ValvePosition.100' => 'sani_heating_level_100@E50005','batteryLevel.100' => 'measure_battery_100@0CFB0C','batteryLevel.75' => 'measure_battery_75@42BC0A','batteryLevel.50' => 'measure_battery_50@F5FF10','batteryLevel.25'=>'measure_battery_25@FB5909','batteryLevel.0'=>'measure_battery_0@E50005','controlMode.set_boost' => 'hourglass','controlMode.set_auto' => 'hourglass','controlMode.set_manual' => 'hourglass','R-btnLock.set_on' => 'hourglass','R-btnLock.set_off' => 'hourglass'}
attr 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);;"'}}elsif($VALUE ~~ /CMDs_pending/ || $VALUE ~~ /CMDs_processing/ || $VALUE ~~ /TIMEOUT/){'style="color:Yellow"'}}
attr heatingInfo valueSuffix {"desired-temp"=>" °C", "measured-temp"=>" °C","ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)","humidity"=>" ".ReadingsVal($DEVICE,$READING,0)." % RH","batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"}
define ntfy_rg notify ntfy_rg {rg($EVENT)}
99_myUtils.pm
(Hinweis: HM-CC-RT-DN Firmware 1.4, Änderung bei 'btnLock'  )
sub rg($){
  my @input    = split(/[§\s]+/,shift);
  my $device   = $input[0];
  my $function = $input[1];
if($function eq "device"){
  return InternalVal($device,"device","device error");
}
elsif($function eq "controlMode"){
  my $controlMode = ReadingsVal($device,"controlMode","controlMode error");
  if($controlMode =~ /manual/)
    {fhem("set $device controlMode auto")}
  elsif($controlMode =~ /auto/)
    {fhem("set $device controlMode manual")}
}
elsif($function eq "R-btnLock"){
  my $btnLock = ReadingsVal($device,"R-btnLock","btnLock error");
  
  if($btnLock =~ /off/){
    {fhem("set $device regSet btnLock on")};
    {fhem ("set $device getConfig")}
  }
  elsif($btnLock =~ /on/){
    {fhem("set $device regSet btnLock off")};
    {fhem ("set $device getConfig")}
  };
}
elsif($function eq "state"){
  my $state = Value($device);
  if($state =~ /off/){
    {fhem("set $device on")}
  }
  elsif($state =~ /on/){
    {fhem("set $device off")}
  }
}
}
			
			
				Zitat von: justme1968 am 02 Januar 2015, 16:02:39
sorry. habe es jetzt richtig gefixed...
Vielen Dank! Funktioniert :)
			
 
			
			
				Zitat von: hexenmeister am 02 Januar 2015, 22:40:42
Vielen Dank! Funktioniert :)
Hallo Alex,
ich glaube Deine Farbzuordnung klappt nicht so ganz (s.Bild)
gruss
klaus
			
 
			
			
				Wieso, was passt denn nicht?
Die verschiedenen Farben bei Batterie und Regler sollten Verlauf darstellen von Grün zu Rot bzw. von Blau zu Rot. Die Einzelfarben kann man bestimmt noch optimieren, habe nur mal schnell ausgewählt.
Grüße,
Alexander
			
			
			
				Habe gerade festgestellt, dass folgende Definition FHEM komplett und sofort abstürzen lässt:
<%heizung>,<>,<Batterie>,<>,<Ventil>,<>,<Modus>,<>,<Auto On>,<>,<Manu On>,<>,<Ist-Temp.>,<>,<Soll-Temp.>
^(?!FileLog).*._Clima:,<>,batteryLevel@{InternalVal($DEVICE,'device',undef)},<>,ValvePosition,<>,controlMode,<>,<%sani_heating_automatic>,<>,<%sani_heating_manual>,<>,measured-temp,<>,<sollsetz>
Unmatched ( in regex; marked by <-- HERE in m/^batteryLevel@{InternalVal( <-- HERE $DEVICE$/ at ./FHEM/33_readingsGroup.pm line 1006.
			
			
			
				bitte bau mal in zeile 1005 ein log auf $regex ein. da geht beim parsen der zeile etwas schief.
gruss
  andre
			
			
			
				Komma ist wohl ein Problem... Die Expression wird anscheinend nicht als Ganzes erkannt.
habe Log eingbaut: Log3 $hash->{NAME}, 3, $hash->{NAME} .": ". "---------> REGEX --->".$regex."<---";
Hier ist die Ausgabe:
2015.01.04 15:24:33.834 3: RG_FAULT: ---------> REGEX ---><---
2015.01.04 15:24:33.835 3: RG_FAULT: ---------> REGEX --->batteryLevel@{InternalVal($DEVICE<---
Und auf Err wieder: 
Unmatched ( in regex; marked by <-- HERE in m/^batteryLevel@{InternalVal( <-- HERE $DEVICE$/ at ./FHEM/33_readingsGroup.pm line 1006.
			
			
			
				ein komma darf eigentlich in der liste der readings ausser zum trennen der readings selber gar nicht vorkommen. für die <> ausdrücke kann ich das erkennen und halbwegs automatisch reparieren.
ich muss mal schauen on ich das für die @{...} version auch hin bekomme.
ansonsten statt InternalVal erst mal eine eigene sub aufrufen die nur das DEVICE übergeben bekommt und so ohne komma auskommt.
gruss
  andre
			
			
			
				Zitat von: hexenmeister am 04 Januar 2015, 12:54:12
Wieso, was passt denn nicht?
Die verschiedenen Farben bei Batterie und Regler sollten Verlauf darstellen von Grün zu Rot bzw. von Blau zu Rot. Die Einzelfarben kann man bestimmt noch optimieren, habe nur mal schnell ausgewählt.
Grüße,
Alexander
Hallo Alexander,
die Farben bei Batterie und Regler meinte ich auch nicht , sondern bei "
Ist"
15,9 ist blau ... okay
19,5 ist rot  aber dafür ist dann 21,8 grün ?
Oder habe ich einen Denkfehler ?
Gruss
Klaus
			
 
			
			
				war doch einfacher als gedacht. hab es eben eingecheckt.
gruss
  andre
			
			
			
				Zitat von: kvo1 am 04 Januar 2015, 16:20:27
15,9 ist blau ... okay
19,5 ist rot  aber dafür ist dann 21,8 grün ?
Ich habe das so realisiert, dass die Farben die ABweichung von Soll darstellen, Grün: +/- 1 Grad, Blau: mehr als 1 Grad niedriger als Soll, Rot: 1 Grad mehr als Soll.
			
 
			
			
				Zitat von: justme1968 am 04 Januar 2015, 16:29:52
war doch einfacher als gedacht. hab es eben eingecheckt.
Funktioniert :)
Vielen Dank!
			
 
			
			
				Zitat von: hexenmeister am 04 Januar 2015, 16:47:32
Ich habe das so realisiert, dass die Farben die ABweichung von Soll darstellen, Grün: +/- 1 Grad, Blau: mehr als 1 Grad niedriger als Soll, Rot: 1 Grad mehr als Soll.
 Verstanden  ;)
Das Modul ist echt genial !
@Andre , danke nochmal dafür
@Alex:   ....dir für Deine Geduld und Hilfe 
klaus
			
 
			
			
				Hallo Zusammen,
ich würde gern die Spalten "Batterie" und Ventilöffnung" rechtsbündig formatieren ,
ist mir aber bisher weder mit   valueStyle  noch mit cellstyle  gelungen ! Geht das überhaupt (wenn ICON + Wert)?
die bisherige Formatierung schaut so aus
attr heatingInfo2 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 heatingInfo2 valueIcon {'controlMode.manual' => 'sani_heating_manual@lightgreen','controlMode.auto' => 'sani_heating_automatic', 'controlMode.boost' => 'sani_heating_boost@FB0C02','ValvePosition'=>'ValvePosition@6FD9FB', 'ValvePosition.0' => 'Heizung.0%','ValvePosition.10' => 'Heizung.10%','ValvePosition.20' => 'Heizung.20%','ValvePosition.30' => 'Heizung.30%','ValvePosition.40' => 'Heizung.40%','ValvePosition.50' => 'Heizung.50%','ValvePosition.60' => 'Heizung.60%','ValvePosition.70' => 'Heizung.70%','ValvePosition.80' => 'Heizung.80%','ValvePosition.90' => 'Heizung.90%','ValvePosition.100' => 'Heizung.100%','batteryLevel.100'=>'measure_battery_100@0CFB0C','batteryLevel.75'=>'measure_battery_75@42BC0A','batteryLevel.50'=>'measure_battery_50@F5FF10','batteryLevel.25'=>'measure_battery_25@FB5909','batteryLevel.0'=>'measure_battery_0@E50005','controlMode.set_boost' => 'hourglass','controlMode.set_auto' => 'hourglass','controlMode.set_manual' => 'hourglass','R-globalBtnLock.set_on' => 'hourglass','R-globalBtnLock.set_off' => 'hourglass'} 
attr heatingInfo2 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);;"'}}} 
gruss
kvo1
			
			
			
				Hallo,
ich habe mal versucht das Codeschnispel in meine CFG einzubauen. Irgendwie bin ich zu blöd dazu. Bei mir ist immer nur die Überschrift zu sehen. Kann mir hier jemand auf die Sprünge helfen? Ich bin blutiger Anfänger und möchte gerne verstehen was ich falsch mache.
Beste Grüße
			
			
			
				Ohne Glaskugel geht das ganze nicht ....
zeig uns was Du hast ...
mach ein LIST von dem Device und zeige die Fehlermeldung :-)
			
			
			
				Guten Morgen,
sorry, hat ein bisschen gedauert. Jeden Abend nach der Arbeit am PC rumhängen gibt irgendwann Ärger  ;D
Ich habe einen HM-Lan Adapter und zwei HM-CC-RT-DN. FHEM läuft auf einem RASPI. 
Die Thermostate habe ich umbenannt in wz_HeizungEssen bzw. wz_HeizungSofa. Der Channel_04 heisst jeweils Heizung_Essen und Heizung_Sofa. Das kann man bestimmt auch schöner machen und ich denke da liegt auch das Problem.
Internals: 
   DEF        3B0D81 
   HMLAN1_MSGCNT 1360 
   HMLAN1_RAWMSG E3B0D81,0000,1DF551AF,FF,FFB8,0C86103B0D810000000A9CD1100200 
   HMLAN1_RSSI -72 
   HMLAN1_TIME 2015-11-20 07:43:30 
   IODev      HMLAN1 
   LASTInputDev HMLAN1 
   MSGCNT     1360 
   NAME       wz_HeizungEssen 
   NR         51 
   STATE      CMDs_done 
   TYPE       CUL_HM 
   channel_01 HM_3B0D81_Weather 
   channel_02 HM_3B0D81_Climate 
   channel_03 HM_3B0D81_WindowRec 
   channel_04 Heizung_Esstisch 
   channel_05 HM_3B0D81_ClimaTeam 
   channel_06 HM_3B0D81_remote 
   lastMsg    No:0C - t:10 s:3B0D81 d:000000 0A9CD1100200 
   protLastRcv 2015-11-20 07:43:30 
   protSnd    29 last_at:2015-11-19 13:05:03 
   protState  CMDs_done 
   rssi_at_HMLAN1 max:-64 avg:-72.1 lst:-72 cnt:1360 min:-93 
   Readings: 
     2015-11-17 23:22:37   Activity        alive 
     2015-11-17 23:30:29   CommandAccepted yes 
     2015-11-13 09:37:59   D-firmware      1.4 
     2015-11-13 09:37:59   D-serialNr      MEQ0450562 
     2015-11-17 23:20:32   PairedTo        0x2CD8CD 
     2015-11-13 09:41:14   R-backOnTime    10 s 
     2015-11-13 09:41:14   R-burstRx       on 
     2015-11-13 09:41:14   R-cyclicInfoMsg on 
     2015-11-13 09:41:14   R-cyclicInfoMsgDis 0 
     2015-11-13 09:41:14   R-pairCentral   0x2CD8CD 
     2015-11-17 23:20:32   RegL_00:        01:01 02:01 09:01 0A:2C 0B:D8 0C:CD 0E:0A 0F:01  11:00 12:15 16:01 18:00 19:00 1A:00 00:00 
     2015-11-20 07:43:30   actuator        2 
     2015-11-15 21:19:31   battery         ok 
     2015-11-20 07:43:30   batteryLevel    3.1 
     2015-11-20 07:43:30   desired-temp    19.5 
     2015-11-20 07:43:30   measured-temp   20.9 
     2015-11-20 07:43:30   motorErr        ok 
     2015-11-19 13:05:03   state           CMDs_done 
     2015-11-19 13:05:03   time-request    - 
     Regl_07:: 
       VAL 
   Helper: 
     HM_CMDNR   12 
     PONtest    1 
     cSnd       012CD8CD3B0D810603,012CD8CD3B0D8106040000000001 
     mId        0095 
     rxType     140 
     Expert: 
       def        1 
       det        0 
       raw        1 
       tpl        0 
     Io: 
       newChn     +3B0D81,00,00,00 
       nextSend   1448001810.62029 
       prefIO 
       rxt        2 
       vccu 
       p: 
         3B0D81 
         00 
         00 
         00 
     Mrssi: 
       mNo        0C 
       Io: 
         HMLAN1     -70 
     Prt: 
       bErr       0 
       sProc      0 
       sleeping   1 
       Rspwait: 
     Q: 
       qReqConf 
       qReqStat 
     Role: 
       dev        1 
       prs        1 
     Rssi: 
       At_hmlan1: 
         avg        -72.1014705882354 
         cnt        1360 
         lst        -72 
         max        -64 
         min        -93 
     Shregw: 
       07         04 
Attributes: 
   IODev      HMLAN1 
   actCycle   000:10 
   actStatus  alive 
   autoReadReg 4_reqStatus 
   expert     2_full 
   firmware   1.4 
   icon       sani_heating_temp 
   model      HM-CC-RT-DN 
   serialNr   MEQ0450562 
   subType    thermostat 
   webCmd     getConfig:clear msgEvents:burstXmit
Wäre schön, wenn Ihr mir weiterhelfen könntet. Das Codesnipped habe ich inzwischen wieder gelöscht. Ich kann es aber nochmal zusammen basteln.
LG
Dominik
			
			
			
				Hallo zusammen,
ich hab´s dann auch endlich mal geschafft weiter zu probieren. Leider bekomme ich das nicht hin. Ich glaube mir fehlt hier was grundsätzliches.
Hier mal mein Eintrag in der Config:
#ReadingsGoup anlegen.
define heatingInfo readingsGroup <%sani_heating>,<Soll>,<Soll neu>,<Ist>,<Ventil / RH>,<Modus>,<Lock>,<Bat>\HM_3B0D81_Climate:desired-temp,<sollsetz>,measured-temp,humidity,controlMode,R-globalBtnLock@HM_3B0D81_Climate,batteryLevel@HM_3B0D81_Climate\<>,<>,<>,<>,<>,<>,<>,<> \
#eg_wz_wt01
#Schrift fett setzen etc.
attr 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"'}
#Heizungssteuerung ermöglichen
attr heatingInfo commands {'heatingInfo.sollsetz'=>'desired-temp:5.0,12.0,18.0,19.0,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5,24.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"}
#Gewünschte Namen definieren.
attr heatingInfo mapping {HM_3B0D81_Climate=>"Wohnzimmer",'desired-temp' => }
#Werte vorformatieren (für die Icon-Zuordnung).
attr 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}}}
#Icons zuordnen. 
attr heatingInfo valueIcon {'controlMode.manual' => 'sani_heating_manual@795CFF','controlMode.auto' => 'sani_heating_automatic@FFC13A', 'controlMode.boost' => 'sani_heating_boost@FB0C02','humidity'=>'humidity@6FD9FB', 'R-globalBtnLock.on'=>'secur_locked@F7301D','R-globalBtnLock.off'=>'secur_open@0CFB0C','ValvePosition.0' => 'sani_heating_level_0@002AE0','ValvePosition.10' => 'sani_heating_level_10@F8D53D','ValvePosition.20' => 'sani_heating_level_20@FF9341','ValvePosition.30' => 'sani_heating_level_30@F17F3F','ValvePosition.40' => 'sani_heating_level_40@E46C3C','ValvePosition.50' => 'sani_heating_level_50@DE3B3A','ValvePosition.60' => 'sani_heating_level_60@A30D2D','ValvePosition.70' => 'sani_heating_level_70@B40A23','ValvePosition.80' => 'sani_heating_level_80@C40619','ValvePosition.90' => 'sani_heating_level_90@D4030F','ValvePosition.100' => 'sani_heating_level_100@E50005','batteryLevel.100'=>'measure_battery_100@0CFB0C','batteryLevel.75'=>'measure_battery_75@42BC0A','batteryLevel.50'=>'measure_battery_50@F5FF10','batteryLevel.25'=>'measure_battery_25@FB5909','batteryLevel.0'=>'measure_battery_0@E50005','controlMode.set_boost' => 'hourglass','controlMode.set_auto' => 'hourglass','controlMode.set_manual' => 'hourglass','R-globalBtnLock.set_on' => 'hourglass','R-globalBtnLock.set_off' => 'hourglass'}
#Farben (zu kalt: blau, zu warm: rot, ok: grün).
attr 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);;"'}}}
#Messeinheiten und Zahlenwerte. 
attr heatingInfo valueSuffix {"desired-temp"=>" °C", "measured-temp"=>" °C","ValvePosition"=>" (".ReadingsVal($DEVICE,$READING,0)." %)","humidity"=>" ".ReadingsVal($DEVICE,$READING,0)." % RH","batteryLevel"=>" (".ReadingsVal($DEVICE,$READING,0)." V)"}
Das Einzige was ich sehe ist ein heatingInfo
Ich sehe den Fehler nicht und würde es gerne verstehen.  :(
			
			
			
				Guten Morgen,
fehlt Euch noch irgendwas, oder bin ich einfach zu ungeduldig?
:)
			
			
			
				Ich hatte am Wochenende Zeit und hatte wohl auch einen Geistesblitz. Jedenfalls hab ich´s hinbekommen :) Nur die Tastensperre bekomme ich nicht angezeigt
			
			
			
				Hallo 
ist ... HM_3B0D81_Climate  das Device selbst oder cannel 02 ?? (das "_Climate"  deutet m.E. auf cannel 02 hin) 
die Tastensperre geht doch auf das Device ??
http://www.fhemwiki.de/wiki/HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat (http://www.fhemwiki.de/wiki/HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat)
			
			
			
				Hi,
das ist Channel02. 
Also ich hab´s nicht hinbekommen mit der Tastensperre. Laut diesem Forumseintrag, ist es z.Zt. nicht möglich die Readings auszulesen. 
http://forum.fhem.de/index.php/topic,42535.0.html (http://forum.fhem.de/index.php/topic,42535.0.html)
Das wäre natürlich das Sahnehäubchen. Wenn ich es nicht sofort hinbekomme, ist das aber auch kein Beinbruch :)
			
			
			
				Zitat von: moemoe am 26 September 2014, 12:28:14
Ich wollte in meinen Reading-Groups nicht nur stumpf den Batteriezustand darstellen, sondern wenn die HM-CC-RT-DN schon eine Spannung liefern, diese etwas aufbereiteter darstellen.
Nur zum Verständnis:
Die Heizkörper Thermostate liefern als Reading die Batteriespannung?
			
 
			
			
				Zitat von: chr2k am 24 Dezember 2015, 14:58:15
Nur zum Verständnis:
Die Heizkörper Thermostate liefern als Reading die Batteriespannung?
Ja genau, es gibt am Device selbst zwei Readings
battery   liefert einen Status
batteryLevel liefert die Spannung
Gruß
Kvo1