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
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?
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 :-[
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
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'; }
@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?
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
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.
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
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:
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.
Okay, vielen Dank für die Rückmeldung. Dann brauche ich mir wenigstens nicht mehr den Kopf zerbrechen, was ich verkehrt mache ;)
@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.
S. auch Beispiele im Wiki zu readingsgroup.
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.
Hab FHEMWEB geaendert: falls devStateIcon gesetzt ist, dann greift die desired-temp oder desiredTemperature Logik nicht. Eingecheckt, d.h. ab morgen per update.
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?
Soweit ich sehe, wird nur die Anzeige ersetzt, dropdown fuer die Aenderung sollte bleiben.
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.
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.