devStateIcon anhand actuator setzen

Begonnen von Waldmensch, 30 Januar 2014, 22:04:47

Vorheriges Thema - Nächstes Thema

Waldmensch

Ich würde gerne die FHT mit einem verschiedenfarbigen Icon darstellen.
actuator == 0  -> Icon blau
actuator  >  0 -> Icon rot

ich dachte mir das es so funktioniert - es wird aber kein Icon angezeigt. Ich glaube es liegt an dem % und das deswegen kein numerischer Vergleich möglich ist. Nur wie krieg ich xx% zu xx ?

devStateIcon {ReadingsVal("fht_wohnzimmer","actuator",0)>0}:sani_heating@red {ReadingsVal("fht_wohnzimmer","actuator",0)==0}:sani_heating@blue

Waldmensch

ich habe mir eine kleine Funktion gebaut die das % wegmacht

sub clear_percent($) {
my($retval) = @_;
#return substr($retval,0,length($retval)-1);
return $retval;
}


und es dann so probiert:
{clear_percent(ReadingsVal("fht_wohnzimmer","actuator",0))>0}:sani_heating@red {clear_percent(ReadingsVal("fht_wohnzimmer","actuator",0))==0}:sani_heating@blue

geht auch nicht. Wo ist mein Denkfehler? Wird an der Stelle nicht einfach auf true/false geprüft?

Waldmensch

Neuer Ansatz nach viel googlen

Eine Funktion:

sub fht_devStateIcon($) {
  my($hash) = @_;
  $hash = $defs{$hash} if( ref($hash) ne 'HASH' );

  return undef if( !$hash );
  return undef if( $hash->{helper}->{group} );

  my $name = $hash->{NAME};
  my $strval = ReadingsVal($name,"actuator",0);
  my $numval = substr($strval,0,length($strval)-1);
 
  return '.*:sani_heating@red' if($numval >= 50);
  return '.*:sani_heating@green' if($numval >= 5 && $numval < 50);
  return '.*:sani_heating@blue' if($numval < 5);
   
}


bei Überprüfung an der Komando Eingabe liefert

{(fht_devStateIcon("fht_wohnzimmer"))}

ordnungsgemäß

.*:sani_heating@green

Da der Actuator auf 24% steht

Nun habe ich das Attribut so gesetzt

Attributes:
   alias      Wohnzimmer
   devStateIcon {(fht_devStateIcon($name))}
   group      _Heizung_
   icon       sani_heating
   retrycount 1
   room       FHT,Heizung,Wohnzimmer


Leider passiert nichts. Das Icon bleibt weiß, obwohl es eigentlich grün sein müßte  :-[

Martin Schmid

Hallo,
versuche es doch mal mit einer einfachen if-Abfrage und return:
devStateIcon {if (ReadingsVal("fht_wohnzimmer","actuator",0)>0 ) {return '.*:sani_heating@red'} else {return '.*:sani_heating@blue}}
Code ungetestet, sollte aber funktionieren.

Viele Grüße
Martin Schmid
FHEM 5.5 Development (Image von Fhem.de)
Fritz!Box 7390 + HM-CFG-LAN
HM-CC-TC + HM-CC-VD
HM-LC-Dim1T-Pl-2, HM-LC-Dim1PWM-CV, HM-LC-Sw1-Ba-PCB
HM-RC-KEY3-B

rudolfkoenig

Eine stark vereinfachte Variante (s.u) funktioniert bei mir (getestet):

define d dummy
attr d devStateIcon {dsi_fn()}

und
sub dsi_fn() { return '.*:sani_heating@red'; }


Waldmensch

@Martin

Das kann nicht funktionieren, da ReadingsVal("fht_wohnzimmer","actuator",0) xx% zurückliefert und der numerische Vergleich fehlschlägt.  25% > 0 geht nicht. Deswegen schneide ich in meiner Funktion mit substr() das Prozentzeichen weg.

@Rudolf
Die Funktion scheint ja nicht mein Problem zu sein. Die returniert ja wie gewollt. Kann es sein, dass erst auf einen STATUS Wechsel gewartet/getriggert wird? Das wäre ja im FHT Fall measured-temp. Falls ja, wie bekomme ich es hin, das bei Aktuator Änderung getriggert wird?

Martin Schmid

Dann setze ein int() vor dasRedingsVal:
devStateIcon {if (int(ReadingsVal("fht_wohnzimmer","actuator",0))>0 ) {return '.*:sani_heating@red'} else {return '.*:sani_heating@blue}}
Dann kommt nur die reine Integer-Zahl durch.

Viel Erfolg
Martin Schmid
FHEM 5.5 Development (Image von Fhem.de)
Fritz!Box 7390 + HM-CFG-LAN
HM-CC-TC + HM-CC-VD
HM-LC-Dim1T-Pl-2, HM-LC-Dim1PWM-CV, HM-LC-Sw1-Ba-PCB
HM-RC-KEY3-B

Waldmensch

Ok werde es heute Abend mal testen. Ich wußte nicht das Perl so tolerant beim casten ist  :)

Aber wie gesagt, auch meine Funktion liefert was sie soll zurück. Ich stell mir nur die Frage, wann bei einem FHT88 das devStateIcon getriggert wird. Ich habe den Browser zuhause offen gelassen, um zu testen ob es eventuell bei den recht seltenen measured-temp getan wird. Das wäre allerdings keine Lösung für mich, da es viel zu selten passiert. Ich würde gerne auf die Aktuator Meldungen reagieren - allerdings nicht mit einem separaten Dummy + Icon sondern halt in dem Bereich des FHT.

Martin Schmid

Die Idee mit dem int() habe ich auch aus einem anderen Thread:
http://forum.fhem.de/index.php/topic,17895.msg127785.html#msg127785
Wenn ich wieder mehr Zeit für FHEM habe, werde ich das in obigem Thread vorgestellte neue IF-Modul auch bei mir implementiern.

Viele Grüße
Martin Schmid
FHEM 5.5 Development (Image von Fhem.de)
Fritz!Box 7390 + HM-CFG-LAN
HM-CC-TC + HM-CC-VD
HM-LC-Dim1T-Pl-2, HM-LC-Dim1PWM-CV, HM-LC-Sw1-Ba-PCB
HM-RC-KEY3-B

Waldmensch

#9
Also ich weiß nicht wo der Fehler liegen soll - kann es sein, das einfach das devStateIcon bei den FHT nicht funktioniert?

define fht_wohnzimmer FHT 2c41
attr fht_wohnzimmer alias Wohnzimmer
attr fht_wohnzimmer devStateIcon {fht_devStateIcon("fht_wohnzimmer")}
attr fht_wohnzimmer group _Heizung_
attr fht_wohnzimmer icon sani_heating
attr fht_wohnzimmer retrycount 1
attr fht_wohnzimmer room FHT,Heizung,Wohnzimmer

define d dummy
attr d devStateIcon {fht_devStateIcon("fht_wohnzimmer")}
attr d room FHT


Liefert folgendes Bild:

rudolfkoenig

Falls ein Geraet desired-temp oder desiredTemperature als Befehl anbietet, dann wird ein AuswahlBox angeboten, und devStateIcon ignoriert... Sorry. Wenn ich weiss, nach welchem Kriterien ich das anders machen soll, dann werde ich es aendern.

Waldmensch

Okay, vielen Dank für die Rückmeldung. Dann brauche ich mir wenigstens nicht mehr den Kopf zerbrechen, was ich verkehrt mache  ;)

Martin Schmid

@Waldmensch: Eine ähnliche Problematik wurde im Thread "Batterie-Icon anzeigen" http://forum.fhem.de/index.php/topic,19126.0.html diskutiert und in dem Modul "readigsGroup" gelöst.
Vielleicht hilft das weiter.
FHEM 5.5 Development (Image von Fhem.de)
Fritz!Box 7390 + HM-CFG-LAN
HM-CC-TC + HM-CC-VD
HM-LC-Dim1T-Pl-2, HM-LC-Dim1PWM-CV, HM-LC-Sw1-Ba-PCB
HM-RC-KEY3-B

Invers

S. auch Beispiele im Wiki zu readingsgroup.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Waldmensch

Eine readinggroup ist aber nicht das was ich will. Ich will einfach das FHT Icon abhängig von der Actuator Position blau/grün/rot färben. Dafür ist das devStateIcon da. Dies funktioniert nicht aufgrund Einschränkung im Code. Wie soll mir jetzt eine Readinggroup dabei helfen? Eine readinggroup als solches habe ich schon verstanden und da geht es auch.