FHEM Forum

FHEM => Frontends => Thema gestartet von: Waldmensch am 30 Januar 2014, 22:04:47

Titel: devStateIcon anhand actuator setzen
Beitrag von: Waldmensch am 30 Januar 2014, 22:04:47
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
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Waldmensch am 30 Januar 2014, 23:19:18
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?
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Waldmensch am 31 Januar 2014, 08:46:35
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  :-[
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Martin Schmid am 31 Januar 2014, 11:15:56
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
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: rudolfkoenig am 31 Januar 2014, 11:52:42
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'; }

Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Waldmensch am 31 Januar 2014, 12:23:20
@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?
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Martin Schmid am 31 Januar 2014, 13:25:22
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
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Waldmensch am 31 Januar 2014, 13:35:03
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.
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Martin Schmid am 31 Januar 2014, 13:42:53
Die Idee mit dem int() habe ich auch aus einem anderen Thread:
http://forum.fhem.de/index.php/topic,17895.msg127785.html#msg127785 (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
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Waldmensch am 31 Januar 2014, 19:27:21
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:
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: rudolfkoenig am 31 Januar 2014, 20:01:08
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.
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Waldmensch am 31 Januar 2014, 20:06:18
Okay, vielen Dank für die Rückmeldung. Dann brauche ich mir wenigstens nicht mehr den Kopf zerbrechen, was ich verkehrt mache  ;)
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Martin Schmid am 31 Januar 2014, 20:25:05
@Waldmensch: Eine ähnliche Problematik wurde im Thread "Batterie-Icon anzeigen" http://forum.fhem.de/index.php/topic,19126.0.html (http://forum.fhem.de/index.php/topic,19126.0.html) diskutiert und in dem Modul "readigsGroup" gelöst.
Vielleicht hilft das weiter.
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Invers am 31 Januar 2014, 20:37:33
S. auch Beispiele im Wiki zu readingsgroup.
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Waldmensch am 01 Februar 2014, 00:01:58
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.

Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: rudolfkoenig am 01 Februar 2014, 08:30:50
Hab FHEMWEB geaendert: falls devStateIcon gesetzt ist, dann greift die desired-temp oder desiredTemperature Logik nicht. Eingecheckt, d.h. ab morgen per update.
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: Waldmensch am 01 Februar 2014, 10:02:09
Zitat von: rudolfkoenig am 01 Februar 2014, 08:30:50
Hab FHEMWEB geaendert: falls devStateIcon gesetzt ist, dann greift die desired-temp oder desiredTemperature Logik nicht. Eingecheckt, d.h. ab morgen per update.

Kannst Du bitte kurz für jemand Unerfahrenen die Nebenwirkungen erklären? Wenn ich das richtig verstehe, verschwinden dann die Dropdowns und man kann die Temperatur nicht mehr setzen?
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: rudolfkoenig am 01 Februar 2014, 12:13:48
Soweit ich sehe, wird nur die Anzeige ersetzt, dropdown fuer die Aenderung sollte bleiben.
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: chris1284 am 02 Februar 2014, 08:04:57
Leider nein. Das Update brachte zwar den Erfolg dass das Icon nun zu sehen ist, auch in der richtigen Farbe. Aber nun gibts kein Dropdown für Temp-einstellungen mehrund die Werte sind weg (z.B: T: 16.2 desired: 5 valve: 0 %).

{ if (ReadingsVal ("hz.Buero_Clima","ValvePosition", "0 %") > "0 %") {return '.*:sani_heating@red'} else{return '.*:sani_heating@blue'}} es funktioniert auch mit %

Bild im Anhang.
Titel: Antw:devStateIcon anhand actuator setzen
Beitrag von: rudolfkoenig am 02 Februar 2014, 09:21:03
Hast recht, ich habe wohl getraeumt gestern, als ich es getestet habe. Mit Hilfe von
attr hz.Buero_Clima webCmd desired-temp
kriegt man den dropdown hin. Die alten Werte UND ein Bild hinzukriegen geht auch, ist aber deutlich komplizierter, da du in der Funktion das komplette HTML (samt eingefaerbten SVG-Inhalt) zurueckliefern musst. Es muss in einem beliebigen HTML Tag eingeschlossen sein, damit FHEMWEB das erkennt.