Hauptmenü

Fehler devStateIcon?

Begonnen von Ralli, 08 Januar 2023, 09:17:42

Vorheriges Thema - Nächstes Thema

Ralli

Hallo zusammen,

in Abhängigkeit von der Anzahl der verbundenen Clients möchte ich das Icon für mein MQTT2-Server-Device definieren.

Die folgenden Statements funktionieren:

First form:

^0$:10px-kreis-rot ^[123]$:10px-kreis-gelb .*:10px-kreis-gruen


Second form:

{my $pic = (ReadingsNum($name,"nrclients",0)==0? '10px-kreis-rot' : ReadingsNum($name,"nrclients",0)<4? '10px-kreis-gelb' : '10px-kreis-gruen'); '<div>'.FW_makeImage($pic).'</div>'}


Das folgende Statement sollte nach meiner Interpretation gemäß Commandref bzw. Hilfe zum Attribut devStateIcon ebenfalls funktionieren, gibt aber kein Icon zurück:

Second form:

{ReadingsNum($name,"nrclients",0)==0? '10px-kreis-rot' : ReadingsNum($name,"nrclients",0)<4? '10px-kreis-gelb' : '10px-kreis-gruen'}


Commandref:
Zitat
Perl code enclosed in {}. If the code returns undef, then the default icon is used, if it retuns a string enclosed in <>, then it is interpreted as an html string. Else the string is interpreted as a devStateIcon of the first fom, see above.

Bug oder mein Denkfehler?
Gruß,
Ralli

Proxmox 8.1 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.6.20240316) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

Otto123

#1
Moin,

Denkfehler:Dein Rückgabewert wird als regExp interpretiert.

{ReadingsNum($name,"nrclients",0)==0? '.*:10px-kreis-rot' : ReadingsNum($name,"nrclients",0)<4? '.*:10px-kreis-gelb' : '.*:10px-kreis-gruen'}
ZitatLeerzeichen getrennte Auflistung von regexp:icon-name:cmd Dreierpärchen, icon-name und cmd dürfen leer sein.
Wenn STATE des Gerätes mit der regexp übereinstimmt, wird als icon-name das entsprechende Status Icon angezeigt, und (falls definiert), löst ein Klick auf das Icon das entsprechende cmd aus. Wenn FHEM icon-name nicht finden kann, wird STATE als Text angezeigt. Beispiel:
attr lamp devStateIcon on:closed off:open
attr lamp devStateIcon on::A0 off::AI
attr lamp devStateIcon .*:noIcon

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

OdfFhem

#2
Zitat von: Otto123 am 08 Januar 2023, 10:07:37
Denkfehler:Dein Rückgabewert wird als regExp interpretiert.
"Genauer" gilt lt. Doku bei SecondForm:
ZitatElse the string is interpreted as a devStateIcon of the first fom

Will man doppelte Auswertung vermeiden, könnte man aber auch in diesem Fall das bereits ermittelte Icon zurückgeben:

  { FW_makeImage(ReadingsNum($name,"state",0)==0? '10px-kreis-rot' : ReadingsNum($name,"state",0)<4? '10px-kreis-gelb' : '10px-kreis-gruen') }


***

Eine Frage wäre vielleicht noch interessant: was ist denn ein default Icon bzw. wo/wie legt man das fest ?

TomLee

Zitat von: OdfFhem am 08 Januar 2023, 10:35:04
Eine Frage wäre vielleicht noch interessant: was ist denn ein default Icon bzw. wo/wie legt man das fest ?

Bin in dem Thema nicht mehr drin und behalten hab ich auch nicht viel, aber den Thread, in dem ich mal die gleiche Frage gestellt hatte, auf Anhieb gefunden.

Ralli

Gruß,
Ralli

Proxmox 8.1 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.6.20240316) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

OdfFhem

Zitat von: TomLee am 08 Januar 2023, 11:18:51
in dem ich mal die gleiche Frage gestellt hatte
War sehr hilfreich, hätte ich so wohl nie gefunden ...

Habe das Attribut devStateIcon folgendermaßen definiert:

{ return undef; }

Für die Darstellung der Werte 0..4 hat sich erst mal nichts geändert, da es für diese Werte kein "default icon" gibt.

Dann habe ich im Verzeichnis, in dem die auserwählten Icons liegen (zufällig auch default benamt), die benötigte Datei angelegt/erweitert.
Für die Werte 1..4 klappt dies nach einem "shutdown restart" wie erwartet ... Icon statt Wert.
Dem Wert 0 scheint man kein "default icon" zuordnen zu können ... wird auf jeden Fall ignoriert ... es wird immer noch nur 0 angezeigt ...

@rudolfkoenig
Schon wäre wahrscheinlich, wenn man die Hilfe zum Attribut iconPath um einen Hinweis auf die "default icon"-Dateien erweitern würde.

rudolfkoenig

ZitatHabe das Attribut devStateIcon folgendermaßen definiert: { return undef; }
Und warum genau ist das besser, als das Attribut gar nicht zu setzen?

ZitatSchon wäre wahrscheinlich, wenn man die Hilfe zum Attribut iconPath um einen Hinweis auf die "default icon"-Dateien erweitern würde.
Ich verstehe gerade nicht, warum man das beim iconPath diskutieren soll. Oder was man hier mit "default icon" meint.
In der devStateIcon Doku ist mit default icon das gemeint, was FHEMWEB ohne devStateIcon zuweisen wuerde. 

OdfFhem

Zitat von: rudolfkoenig am 09 Januar 2023, 09:16:18
Und warum genau ist das besser, als das Attribut gar nicht zu setzen?
Dies ist ja nur ein Test, um den undef-Fall zu "provozieren". Im echten Leben ist undef ja (hoffentlich) extrem selten das einzige Ergebnis eines perl-Ausdrucks von devStateIcon.

Zitat von: rudolfkoenig am 09 Januar 2023, 09:16:18
Ich verstehe gerade nicht, warum man das beim iconPath diskutieren soll. Oder was man hier mit "default icon" meint.
Der Begriff "default icon" ist aus der devStateIcon-Doku entnommen und das Attribut iconPath aus https://forum.fhem.de/index.php/topic,123442.msg1179989.html#msg1179989.

Bislang scheint die FHEM-Doku keinerlei Info zur Festlegung von einem "default icon" über iconalias.txt zu liefern oder ich habe es nicht gefunden. Klar, neben iconPath könnte auch devStateIcon ein Platz für weiterführende Infos sein ...

OdfFhem

Neu angelegte iconalias.txt enthält folgende Zeilen:

0          15px-red.png
1          15px-red.png
^2$        15px-yellow.png
3          15px-yellow.png
4          15px-green.png


Werte "0", "1", "2", "3" und "4" ergeben beim Test-Device folgende HTML-Tags:

<div id="icondummy" title="0" class="col2">0</div>
<img class=" 1" src="/fhem/images/default/15px-red.png" alt="1" title="1">
<div id="icondummy" title="2" class="col2">2</div>
<img class=" 3" src="/fhem/images/default/15px-yellow.png" alt="3" title="3">
<img class=" 4" src="/fhem/images/default/15px-green.png" alt="4" title="4">

Die "default icon"-Zeilen für "0" und "2" scheinen keinerlei Auswirkung zu haben.


Gibt es "Auswege" für das beobachtete Programmverhalten ?

rudolfkoenig

Das Problem mit 0 koennte man fixen, ^2$ ist definitiv kein iconalias Thema.
iconalias.txt ist nicht fuer so ein mapping gedacht, dafuer ist devStateIcon da.

OdfFhem

Habe mir mal den betreffenden Code angeschaut ...

Zitat von: rudolfkoenig am 11 Januar 2023, 08:20:05
Das Problem mit 0 koennte man fixen,
In Zeile 3363 if($icon) durch if(defined($icon)) ersetzt
... der "0"-Fall wurde zwar schon immer geladen, würde aber jetzt auch durchgereicht

Zitat von: rudolfkoenig am 11 Januar 2023, 08:20:05
^2$ ist definitiv kein iconalias Thema.
Sehe ich ein, den direkten Zugriff würde ich auch nicht zwingend umbauen
... wichtige Erkenntnis wäre vielleicht noch, dass immer "nur" der erste Teil des zu prüfenden Wertes betrachtet wird
... "3" und "3 test" werden übersetzt ; "test 3" oder "33" erzielen keine Übereinstimmung bzgl. meines obigen Beispiels

rudolfkoenig

ZitatIn Zeile 3363 if($icon) durch if(defined($icon)) ersetzt
Das habe ich uebernommen und eingecheckt.

OdfFhem