FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: KNUT345 am 11 März 2015, 10:31:18

Titel: gelöst: readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: KNUT345 am 11 März 2015, 10:31:18
Hallo Zusammen,
ich wollte meine ReadingsGroup zur Heizungsanzeige um ein vom Batteriezustand abhängiges Symbol ergänzen.
Leider gelingt mir die Zuordnung nicht, verliere durch die Abfrage die restlichen Auswertungen am Attr valueIcon.
Was mache ich falsch?

ReadingsGroup ohne Auswertung des Batteriezustands

{ 'battery.ok' => 'measure_battery_75@green', 'battery.low' => 'batterie@red', 'controlMode.auto' => 'sani_heating_automatic@green', 'controlMode.set_auto' => 'sani_heating_automatic@orange' , 'controlMode.manual' => 'sani_heating_manual@red', 'controlMode.set_manual' => 'sani_heating_manual@orange','state.closed' => 'fts_window_1w@green','state.tilted' => 'fts_window_1w_tilt@orange','state.open' => 'fts_window_1w_open@red' }


ReadingsGroup mit Auswertung

{ if($READING eq "batteryLevel" and $VALUE > 4) {'measure_battery_75@green'} else {'battery.ok' => 'measure_battery_75@green', 'battery.low' => 'batterie@red', 'controlMode.auto' => 'sani_heating_automatic@green', 'controlMode.set_auto' => 'sani_heating_automatic@orange' , 'controlMode.manual' => 'sani_heating_manual@red', 'controlMode.set_manual' => 'sani_heating_manual@orange','state.closed' => 'fts_window_1w@green','state.tilted' => 'fts_window_1w_tilt@orange','state.open' => 'fts_window_1w_open@red' } }
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: Elektrolurch am 11 März 2015, 11:34:13
Du vermischst da zwei 'Formen, entweder nur einen perl-Code verwenden oder einen Hash.

Was aber geht, ist folgende Schreibweise:

valueIcon {'reading1.wert1^' => '{perlcode, der einen wert für ein Icon zurückliefert}', 'reading2' => '{perlcode, der $READING auswertet und ein Icon zurückliefert}', 'reading43.Wert1' => 'Icon',... usw}

Zuerst wird der hash ausgewertet, wenn der Inhalt in {[ steht, wird ein eval darauf ausgeführt. Das eval kann $READING, $VALUE, $DEVICE usw auswerten. Da wird vorher im Grunde genommen nur ein
s/$READING/durch den aktuellen Wert/g gemacht.

Gruß

Elektrolurch
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: KNUT345 am 11 März 2015, 18:27:14
Hallo Elektrolurch,
mit deinem Tipp bin ich ein deutliches Stück weiter gekommen,
aber ich bekomm die Farbsteuerung der Icons noch nicht geregelt.
{'batteryLevel' => '{if($VALUE gt "2.7") {"measure_battery_75"} else {"measure_battery_0"}}', 'battery.ok' => 'measure_battery_75@green', usw...
Wo/wie muss ich das @green bzw. @red einfügen?

Grüße
Knut
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: Elektrolurch am 12 März 2015, 09:40:33
Hinter dem Icon-Namen m.K.n.:
'battery.ok' => 'measure_battery_75@green', usw...

Die If-Abfrage könnte man wohl auch so schreiben:

'reading.Wert1' => 'icon1@red', 'reading.Wert2' => 'Icon@yellow',...

Was ich aber nicht weiß:

Ich denke, dass das mit der Farbangabe nur für Icons vom Typ svg geht und nicht für .png.

Elektrolurch
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: KNUT345 am 12 März 2015, 12:06:57
OK, das funktioniert, so hab ich das auch vorher schon verstanden.
Damit sind meine Grenzen nun quasi hartverdrahtet.
Ich wollte das aber dynmaisch ohne Eingriff in Programmierung, heißt über 2 Variablen steuern können.
Mal sehen, ob jemanden noch was dazu einfällt.

Danke
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: justme1968 am 12 März 2015, 19:44:02
wenn du etwas werte abhängig einfärben willst schau dir das hier an: http://www.fhemwiki.de/wiki/Color#Farbskala_mit_Color::pahColor (http://www.fhemwiki.de/wiki/Color#Farbskala_mit_Color::pahColor) oder das hier: http://forum.fhem.de/index.php/topic,26470.msg194541.html#msg194541 (http://forum.fhem.de/index.php/topic,26470.msg194541.html#msg194541).

gruss
  andre
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: KNUT345 am 12 März 2015, 22:09:51
Danke, die 2 Beispiele sind ober cool, das muss ich mir mal in Ruhe anschauen.
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: KNUT345 am 26 Juli 2015, 18:37:31
Hallo,
mittlerweile konnte ich meine readingsGroup "Heizung" schon deutlich verbessern, aber ich hab da immer noch einen Punkt bei dem ich nicht weiterkomme.
Wie bekomme ich die Farbe des controlMode in Abhängigkeit von ValvePosition?
Ich hab es schon über
attr Heizung valueIcon {if(substr($READING,0,12) eq "ValvePosition"){...
versucht, aber das liefert mitunter
2015.07.26 17:31:36 1: PERL WARNING: Useless use of a constant (ValvePosition.60) in void context at (eval 376054) line 1.
2015.07.26 17:31:36 1: PERL WARNING: Useless use of a constant (sani_heating_level_60@FF00DD) in void context at (eval 376054) line 1.
2015.07.26 17:31:36 1: PERL WARNING: Useless use of a constant (ValvePosition.70) in void context at (eval 376054) line 1.
2015.07.26 17:31:36 1: PERL WARNING: Useless use of a constant (sani_heating_level_70@FF00AA) in void context at (eval 376054) line 1.

Gibt es eine Lösung für mein Problem?
Grüße
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: KNUT345 am 26 Juli 2015, 18:49:57
sorry, ich vergaß, momentan sieht das so aus
{'batteryLevel.100'=>'measure_battery_100@green','batteryLevel.75'=>'measure_battery_75@green','batteryLevel.50'=>'measure_battery_50@orange','batteryLevel.25'=>'measure_battery_25@orange','batteryLevel.0'=>'measure_battery_0@red',
'battery.ok' => 'measure_battery_100@green', 'battery.low' => 'batterie@red',
'controlMode.auto' => 'sani_heating_automatic@green', 'controlMode.set_auto' => 'sani_heating_automatic@orange' ,
'controlMode.manual' => 'sani_heating_manual@red', 'controlMode.set_manual' => 'sani_heating_manual@orange',
'controlMode.boost' => 'sani_heating_boost@orange',
'state.closed' => 'fts_window_1w@green','state.tilted' => 'fts_window_1w_tilt@orange','state.open' => 'fts_window_1w_open@red',
'ValvePosition.0' => 'sani_heating_level_0@0000FF','ValvePosition.10' => 'sani_heating_level_10@6600FF','ValvePosition.20' => 'sani_heating_level_20@8800FF',
'ValvePosition.30' => 'sani_heating_level_30@AA00FF','ValvePosition.40' => 'sani_heating_level_40@CC00FF','ValvePosition.50' => 'sani_heating_level_50@EE00FF',
'ValvePosition.60' => 'sani_heating_level_60@FF00DD','ValvePosition.70' => 'sani_heating_level_70@FF00AA','ValvePosition.80' => 'sani_heating_level_80@FF0088',
'ValvePosition.90' => 'sani_heating_level_90@FF0044','ValvePosition.100' => 'sani_heating_level_100@FF0000'}

Grüße
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: KNUT345 am 30 Juli 2015, 22:08:01
Hat keiner einen Tipp, oder ist es nicht möglich?
Grüße
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: justme1968 am 31 Juli 2015, 11:15:22
du musst für das icon das mapping in der art machen => '{...}' und den icon namen dann anlog zum humitidy beispiel hier: http://www.fhemwiki.de/wiki/Color#Beispiele (http://www.fhemwiki.de/wiki/Color#Beispiele) zusammen bauen.

gruss
  andre
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: KNUT345 am 01 August 2015, 15:16:09
Hallo Andre,
danke für den Tipp. Jetzt sieht es so aus wie ich mir das vorgestellt habe. :)

Allerdings frage ich mich, ob ich meinen Code noch etwas verschlanken kann.
...
'ValvePosition.0' => 'sani_heating_level_0@'.substr(Color::pahColor(0,50,100,0,[0,0,255, 140,0,255, 255,0,255, 255,0,140, 255,0,0]),0,6),
'ValvePosition.10' => 'sani_heating_level_10@'.substr(Color::pahColor(0,50,100,10,[0,0,255, 140,0,255, 255,0,255, 255,0,140, 255,0,0]),0,6),
'ValvePosition.20' => 'sani_heating_level_20@'.substr(Color::pahColor(0,50,100,20,[0,0,255, 140,0,255, 255,0,255, 255,0,140, 255,0,0]),0,6),
'ValvePosition.30' => 'sani_heating_level_30@'.substr(Color::pahColor(0,50,100,30,[0,0,255, 140,0,255, 255,0,255, 255,0,140, 255,0,0]),0,6)
...


Ich habe es fast geschafft, aber irgendwie funktionieren nur 0% und 100%, denn bei 27% wurde nur die Zahl 30 angezeigt statt dem Icon, wo liegt mein Denkfehler?
... => 'sani_heating_level_'.int(int(ReadingsVal($DEVICE,"ValvePosition",0)/10+0.5)*10).'@'...

Grüße
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: justme1968 am 03 August 2015, 10:37:24
etwa so sollte es gehen:..., 'ValvePosition' => '{my $v=int($VALUE/10)*10; return "sani_heating_level_".$v"@"..substr(Color::pahColor(0,50,100,$v,[0,0,255, 140,0,255, 255,0,255, 255,0,140, 255,0,0]),0,6) }', ...

wenn das nicht geht schau ins log. steht da etwas ?

gruss
  andre
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: KNUT345 am 07 August 2015, 16:20:09
Hallo Andre,
Klasse, bis auf "." an der falschen Stelle hat es funktioniert, hier die korrigierte Version.
..., 'ValvePosition' => '{my $v=int($VALUE/10)*10; return "sani_heating_level_".$v."@".substr(Color::pahColor(0,50,100,$v,[0,0,255, 140,0,255, 255,0,255, 255,0,140, 255,0,0]),0,6) }',...
Super, jetzt sieht der Code viel aufgeräumter auf.
Das war's was ich gesucht habe.

Danke
Knut
Titel: Antw:gelöst: readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: KNUT345 am 30 August 2015, 23:09:55
Hallo,
inspiriert durch die vorgenannte Lösung wollte ich nun auch den letzten Teil in der readingsGroup verallgemeinern, Sinn oder Unsinn sei mal dahingestellt.
...'batteryLevel.100' => 'measure_battery_100@green','batteryLevel.75' => 'measure_battery_75@green'...
Leider funktioniert meine Lösung nicht
'...{return "batteryLevel.".$VALUE}' => '{return "measure_battery_".$VALUE."@".substr(Color::pahColor(0,50,100,$VALUE,[0,255,0, 140,255,0, 255,255,0, 255,140,0, 255,0,0]),0,6)}'...
Das Problem liegt in
"batteryLevel.".$VALUE}
denn der Punkt wird als Sonderzeichen interpretiert und nicht als Punkt zwischen batteryLevel und Wert also als "batteryLevel.Wert".
Laut Hinweise aus der perl-Community müsste man den Punkt als Zeichen \. darstellen, aber das hat auch nicht funktioniert.
Hat jemand einen Tipp?

Danke und Grüße
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: justme1968 am 31 August 2015, 08:41:44
der key, d.h. das was links vom => steht darf kein perl ausdruck sein. das ist aber auch gar nicht nötig.

...,'batteryLevel' => '{return "measure_battery_".$VALUE."@".substr(Color::pahColor(0,50,100,$VALUE,[0,255,0, 140,255,0, 255,255,0, 255,140,0, 255,0,0]),0,6)}',...

ich glaube aber das du $VALUE noch auf die vorhandenen icons beschränken must. es gibt glaube ich nicht für alle werte zwischen 0 und 100 ein icon.

gruss
  andre
Titel: Antw:readingsGroup mit vom Reading gesteuertem Icon
Beitrag von: KNUT345 am 31 August 2015, 09:48:07
Hallo Andre,
das war's.

Du hast recht, das $VALUE muss eingeschränkt werden,
das hab ich schon gelöst.

Danke und Grüße