FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Florian_GT am 27 Juli 2016, 22:11:48

Titel: devStateIcon und stateFormat
Beitrag von: Florian_GT am 27 Juli 2016, 22:11:48
Hallo zusammen,

ich habe nachfolgende Konfiguration in der fhem.cfg:
define mqttserver MQTT 127.0.0.1:1883

define licht_wohnzimmer MQTT_DEVICE
attr licht_wohnzimmer IODev mqttserver
attr licht_wohnzimmer devStateIcon on:on:lcd_bl_on on:off:lcd_bl_off
attr licht_wohnzimmer eventMap 0:off 1:on
attr licht_wohnzimmer publishSet 0 1 /sonoff144/gpio/12
attr licht_wohnzimmer stateFormat irgendwas
attr licht_wohnzimmer subscribeReading_ausgelesen /sonoff144/relay/state
attr licht_wohnzimmer webCmd off:on


wie man sieht, versuche ich per stateFormat den Text der im Frontend angezeigt wird, zu verändern. Außerdem möchte ich aber das per devStateIcon angezeigte Icon/Symbol je nach Status anpassen lassen. Leider bekomme ich jedoch nicht beides simultan konfiguriert.

Welche Möglichkeiten habe ich da, beides parallel zu nutzen, wenn das überhaupt möglich ist?
Titel: Antw:devStateIcon und stateFormat
Beitrag von: igami am 28 Juli 2016, 06:25:12
Du kannst du devStateIcon auch Perl-Code angeben

attr licht_wohnzimmer devStateIcon {
  my $state = ReadingsVal($name, "state", "off");
  return ".*:on:lcd_bl_on" if($state eq "on");
  return ".*:lcd_bl_off" if($state eq "off");
}
[\code]

Nur so als fixe Idee und ungetestet.

Grüße
igami
Titel: Antw:devStateIcon und stateFormat
Beitrag von: Florian_GT am 20 Oktober 2016, 00:10:58
Zitat von: igami am 28 Juli 2016, 06:25:12
Du kannst du devStateIcon auch Perl-Code angeben

attr licht_wohnzimmer devStateIcon {
  my $state = ReadingsVal($name, "state", "off");
  return ".*:on:lcd_bl_on" if($state eq "on");
  return ".*:lcd_bl_off" if($state eq "off");
}
[\code]

Nur so als fixe Idee und ungetestet.

Grüße
igami


funktioniert leider nicht :/
Titel: Antw:devStateIcon und stateFormat
Beitrag von: DeeSPe am 20 Oktober 2016, 02:07:58
Um die im Frontend angezeigten Icons so anzupassen wie Du willst, musst Du wohl erst einmal ein userReading anlegen welches die von Dir gewünschten Ausgaben erstellt.
Dann stellst Du stateFormat auf das Reading welches Du per userReading erstellt hast.
Als Letztes formatierst Du noch mit devStateIcon Deine Icons.

Anhand eines dummy könnte das so aussehen:
define test1 dummy
attr test1 devStateIcon was.tolles:secur_locked@green:off irgendwas.anderes:secur_open@red:on
attr test1 setList on off
attr test1 stateFormat read
attr test1 userReadings read {(ReadingsVal($name,"state","on") eq "on")?"was tolles":"irgendwas anderes"}


Gruß
Dan

EDIT: Du kannst Dir auch nur mir stateFormat entsprechend alles formatieren und sparst Dir damit das userReading. Aber mit dem userReading bist Du flexibler.
Titel: Antw:devStateIcon und stateFormat
Beitrag von: igami am 20 Oktober 2016, 13:38:20
Zitat von: afloria am 20 Oktober 2016, 00:10:58
funktioniert leider nicht :/
Gibt es Fehlermeldungen im Log?
Titel: Antw:devStateIcon und stateFormat
Beitrag von: Florian_GT am 27 Oktober 2016, 00:05:16
Zitat von: igami am 20 Oktober 2016, 13:38:20
Gibt es Fehlermeldungen im Log?

Ich habe nachfolgende Fehlermeldung:
2016.10.27 00:00:34.643 1: configfile: Unknown command my, try help.
Unknown command return, try help.
Unknown command return, try help.
Unknown command }, try help.


Die Konfiguration sieht dazu so aus:
define esp_esp133_relais MQTT_DEVICE
attr esp_esp133_relais userattr building building_map structexclude
attr esp_esp133_relais IODev mqttserver
attr esp_esp133_relais building Gesamte_Wohnung
attr esp_esp133_relais event-min-interval .*:1800
attr esp_esp133_relais event-on-change-reading .*
attr esp_esp133_relais eventMap 0:off 1:on
attr esp_esp133_relais group ESP
attr esp_esp133_relais icon message_socket
attr esp_esp133_relais publishSet 0 1 /sonoff133/gpio/12
attr esp_esp133_relais room Alle
#attr esp_esp133_relais stateFormat Feedback: ausgelesen <br>State: state
attr esp_esp133_relais subscribeReading_ausgelesen /sonoff133/relay/state
attr esp_esp133_relais webCmd off:on
#attr esp_esp133_relais devStateIcon off:off:on on:on:off
attr esp_esp133_relais devStateIcon {
  my $state = ReadingsVal($name, "state", "off");
  return ".*:on:lcd_bl_on" if($state eq "on");
  return ".*:lcd_bl_off" if($state eq "off");
}


Ich habe auch schon nachfolgendes ohne Erfolg versucht:
attr esp_esp133_relais devStateIcon {\
  my $state = ReadingsVal($name, "state", "off");\
  return ".*:on:lcd_bl_on" if($state eq "on");\
  return ".*:lcd_bl_off" if($state eq "off");\
}


Kann es sein, dass FHEM in der devStateIcon Perl Code nicht akzeptiert?
Titel: Antw:devStateIcon und stateFormat
Beitrag von: igami am 27 Oktober 2016, 05:37:50
Kann es sein, dass du die fhem config direkt bearbeitest? Falls ja, lass das und gib die Änderung in der Detail Ansicht des device ein, da du sonst Sonderzeichen escapen musst, aber scheinbar nicht weiß, dass man auch ; berücksichtigen muss.
Titel: Antw:devStateIcon und stateFormat
Beitrag von: Florian_GT am 27 Oktober 2016, 23:59:33
Zitat von: igami am 27 Oktober 2016, 05:37:50
Kann es sein, dass du die fhem config direkt bearbeitest? Falls ja, lass das und gib die Änderung in der Detail Ansicht des device ein, da du sonst Sonderzeichen escapen musst, aber scheinbar nicht weiß, dass man auch ; berücksichtigen muss.

Ja, ich bearbeite gerne direkt. Und du hast recht, hinter dem Semikolon (;) hätte noch ein weiteres gekonnt. Leider übersehen. Dass der "Webeditor das für mich tut, wusste ich noch nicht, danke für den Tipp ;)

Ich habe jetzt mal wie du beschrieben hast, das Webinterface aufgerufen, und eingefügt, funktioniert!

Wie könnte ich denn jetzt aber am sinnvollsten Realisieren, dass dort Icon und Text erscheint?
Titel: Antw:devStateIcon und stateFormat
Beitrag von: igami am 28 Oktober 2016, 05:24:40
Zitat von: afloria am 27 Oktober 2016, 23:59:33
Wie könnte ich denn jetzt aber am sinnvollsten Realisieren, dass dort Icon und Text erscheint?
Ich glaube das ist nur über eine ReadingsGroup möglich.
Titel: Antw:devStateIcon und stateFormat
Beitrag von: Hans Franz am 28 Oktober 2016, 09:55:37
Icon+Text geht über die Second form des devStateIcon, ungefähr so:
return '<div><img src="/fhem/images/<Ordner>/lcd_bl.svg">'.$state.'</div>'

Gruß
Hans
Titel: Antw:devStateIcon und stateFormat
Beitrag von: Stippy19 am 26 April 2017, 01:17:24
/Edit: Code ist falsch, siehe Beitrag weiter unten.

Da ich selbst hierzu auch gerade 1h rumgemacht habe, dachte ich ich poste es einfach mal hier:

In FHEM im device (bei mir z.B. Steckdose mit Stromverbrauchsmessung) reingehen, Attribut "stateFormat" suchen und dann als Text dahinter folgendes einfügen:

{
  my $state = ReadingsVal($name, "state", "off");
  return '<div><img src="/fhem/images/default/on.png">'.sprintf("&nbsp;&nbsp; %.2f W", ReadingsVal($name,"power",0)).'</div>' if($state eq "on");
  return '<div><img src="/fhem/images/default/off.png">'.sprintf("&nbsp;&nbsp; %.2f W", ReadingsVal($name,"power",0)).'</div>' if($state eq "off");
}


Dadurch ergibt sich ein Lampensymbol sowie dahinter das power reading, wobei hier auf "X.XX" formatiert wird. Bei meinem Stecker war z.B. power nicht nur ein Wert, sondern Wert + zeitspanne + vorheriger Wert, ich wollte aber nur den aktuellen anzeigen lassen. &nbsp erzeugt zusätzliche Leerzeichen zwischen dem Lampensymbol und dem Text.

Vielleicht hilfts ja jemandem.
Titel: Antw:devStateIcon und stateFormat
Beitrag von: carlos am 26 April 2017, 10:42:43
Hab das mal getestet und funktioniert leider nicht.
on.png und off.png liegt hier: /opt/fhem/www/images/default

{
  my $state = ReadingsVal($name, "state", "off");
  return '<div><img src="/opt/fhem/www/images/default/on.png">'.sprintf("aktuell: %.1f W Tag: %.2f Kw/h", ReadingsVal($name,"Power",undef), ReadingsVal($name,"Today",undef)).'</div>' if($state eq "ON");
  return '<div><img src="/opt/fhem/www/images/default/off.png">'.sprintf("aktuell: %.1f W Tag: %.2f Kw/h", ReadingsVal($name,"Power",undef), ReadingsVal($name,"Today",undef)).'</div>' if($state eq "OFF");
}


das Lampensymbol wird leider nicht angezeigt, der Rest schon.
Gruß

Carlos
Titel: Antw:devStateIcon und stateFormat
Beitrag von: DeeSPe am 26 April 2017, 10:55:12
Zitat von: carlos am 26 April 2017, 10:42:43
Hab das mal getestet und funktioniert leider nicht.
on.png und off.png liegt hier: /opt/fhem/www/images/default

{
  my $state = ReadingsVal($name, "state", "off");
  return '<div><img src="/opt/fhem/www/images/default/on.png">'.sprintf("aktuell: %.1f W Tag: %.2f Kw/h", ReadingsVal($name,"Power",undef), ReadingsVal($name,"Today",undef)).'</div>' if($state eq "ON");
  return '<div><img src="/opt/fhem/www/images/default/off.png">'.sprintf("aktuell: %.1f W Tag: %.2f Kw/h", ReadingsVal($name,"Power",undef), ReadingsVal($name,"Today",undef)).'</div>' if($state eq "OFF");
}


das Lampensymbol wird leider nicht angezeigt, der Rest schon.
Gruß

Carlos

Der Webserver kann m.E. mit absoluten Pfaden nicht umgehen.

Gruß
Dan
Titel: Antw:devStateIcon und stateFormat
Beitrag von: KernSani am 26 April 2017, 14:25:33
ich würde Images immer über FW_makeImage(@) erzeugen.

Titel: Antw:devStateIcon und stateFormat
Beitrag von: Stippy19 am 26 April 2017, 18:13:13
Verdammt, ich hab den falschen Code hier reinkopiert  :-[

Hier der richtige:

{
  my $state = ReadingsVal($name, "state", "off");
  return '<div><img src="/fhem/images/default/on.png">'.sprintf("&nbsp;&nbsp; %.2f W", ReadingsVal($name,"power",0)).'</div>' if($state eq "on");
  return '<div><img src="/fhem/images/default/off.png">'.sprintf("&nbsp;&nbsp; %.2f W", ReadingsVal($name,"power",0)).'</div>' if($state eq "off");
}

Siehe bild im Anhang.
Titel: Antw:devStateIcon und stateFormat
Beitrag von: lin_win am 26 April 2017, 18:38:55
Danke, super Vorlage für mich als Laie !
Titel: Antw:devStateIcon und stateFormat
Beitrag von: carlos am 26 April 2017, 23:34:03
Interessant, ich habe es jetzt mit deinem Code probiert und damit geht es tatsächlich.
Ich verstehe es zwar nicht, den der Pfad zum Icon sieht im OS anders aus.
Gruß
Carlos
Titel: Antw:devStateIcon und stateFormat
Beitrag von: DeeSPe am 26 April 2017, 23:57:28
Zitat von: carlos am 26 April 2017, 23:34:03
Interessant, ich habe es jetzt mit deinem Code probiert und damit geht es tatsächlich.
Ich verstehe es zwar nicht, den der Pfad zum Icon sieht im OS anders aus.
Gruß
Carlos

/fhem steht in der Adresszeile hinter dem Port, richtig?
/opt/fhem/www/ ist der Default Webserver Pfad für FHEM, also wird nur der Unterordner /images angegeben.

Ergibt zusammen: /fhem/images/...............

EDIT: In Real steht da noch die Webserveradresse davor, also:
http(s)://xxx.xxx.xxx.xxx:8083/fhem/images/...............

Gruß
Dan
Titel: Antw:devStateIcon und stateFormat
Beitrag von: carlos am 27 April 2017, 00:00:36
Womit du Recht hast. Danke für die Erklärung-
Gruß
Carlos
Titel: Antw:devStateIcon und stateFormat
Beitrag von: Stippy19 am 28 April 2017, 19:58:23
Nachtrag: Der Vorschlag weiter oben zwar funktioniert, bringt aber dennoch Fehlermeldungen im Log:
PERL WARNING: Argument " 0 W previous: 0 delta_time: 301 s" isn't numeric in sprintf at (eval 48295) line 3.

Mit Hilfe im anderen Thread (Link: https://forum.fhem.de/index.php/topic,71194.0.html (https://forum.fhem.de/index.php/topic,71194.0.html)) habe ich jetzt einen, der dieses Problem nicht hat:
{
  my $state = ReadingsVal($name, "state", "off");
  return '<div><img src="/fhem/images/default/on.png">'." ".(split " ",ReadingsVal("Bad_PowerPlug_Waschmaschine","power","0 W previous: 0 delta_time: 301 s"))[0]." ".ReadingsVal($name,"running","off").'</div>' if($state eq "on");
  return '<div><img src="/fhem/images/default/off.png">'." ".(split " ",ReadingsVal("Bad_PowerPlug_Waschmaschine","power","0 W previous: 0 delta_time: 301 s"))[0]." ".ReadingsVal($name,"running","off").'</div>' if($state eq "off");
}
Titel: Antw:devStateIcon und stateFormat
Beitrag von: misux am 13 Februar 2018, 17:47:34
Hallo! Ich versuche anhand dieser Einträge den Selben Effekt... Leider klappt es nicht weil mein ReadingsVal irgendwie keine $name akzeptiert und andere Probleme hat...: Fehlermeldung als Bild...

Könnte bitte mir jemand behilflich sein wie ich meine devStateIcon und meine eventMap in der Device Overviev nebeneinander hin bekomme... :-\

Hier meine List vom Device. Ich kann nur mit dem basicSet aus den Readings arbeiten weil das irgendwie der einzige Wert ist der sich ändert wenn ich mein Modul schalte...

Internals:
   DEF        cedf06ff 769
   IODev      ZWDongle
   LASTInputDev ZWDongle
   MSGCNT     169
   NAME       SENSOR_1_Tor
   NR         41
   STATE      OPEN
   TYPE       ZWave
   ZWDongle_MSGCNT 169
   ZWDongle_RAWMSG 0004000307600d01012001ff
   ZWDongle_TIME 2018-02-13 16:39:26
   ZWaveSubDevice yes
   endpointParent SENSOR_1
   homeId     cedf06ff
   isWakeUp   
   nodeIdHex  0301
   READINGS:
     2018-02-13 16:39:26   basicSet        255
     2018-02-12 10:49:05   reportedState   open
     2018-02-12 10:49:05   state           open
Attributes:
   IODev      ZWDongle
   classes    SENSOR_BINARY SENSOR_ALARM
   devStateIcon 255:secur_open@red 0:secur_locked@green
   eventMap   255:OPEN 0:CLOSED
   room       ZWave
   stateFormat basicSet
Titel: Antw:devStateIcon und stateFormat
Beitrag von: mfhotdog am 28 März 2019, 15:12:17
Hallo,

irgendwie stehe ich auf dem Schlauch.

Ich habe einen Sonoff POW, dieser funktioniert und ist angebunden mit folgendem stateFormat:

{sprintf("Aktuell: %.1f W Tag: %.2f Kw/h Total: %.3f Kw/h", ReadingsVal($name,"ENERGY_Power",undef), ReadingsVal($name,"ENERGY_Today",undef), ReadingsVal($name,"ENERGY_Total",undef))}

Ich würde nun gerne, wenn der Sonoff ansich ein- oder ausgeschaltet ist eine Steckdose einblenden, ich habe es mit folgendem Code ohne Erfolg versucht:


{
  my $state = ReadingsVal($name, "state", "off");
  return '<div><img src="/fhem/images/default/on.png">'.sprintf(" &NBSP;&NBSP; Aktuell: %.2f W Tag: %.3f Kw/h Total: %.4f Kw/h", ReadingsVal($name,"ENERGY_Power",undef), ReadingsVal($name,"ENERGY_Today",undef), ReadingsVal($name,"ENERGY_Total",undef)).'</div>' if($state eq "on");
  return '<div><img src="/fhem/images/default/off.png">'.sprintf(" &NBSP;&NBSP; Aktuell: %.2f W Tag: %.3f Kw/h Total: %.4f Kw/h", ReadingsVal($name,"ENERGY_Power",undef), ReadingsVal($name,"ENERGY_Today",undef), ReadingsVal($name,"ENERGY_Total",undef)).'</div>' if($state eq "off");
}



Hat jemand zufällig gerade eine Idee parat, wie das  klappt, dass alle 3 Werte sowie der Status des Sonoff POW angezeigt werden kann?

LG
Marc
Titel: Antw:devStateIcon und stateFormat
Beitrag von: mfhotdog am 18 April 2019, 14:19:22
Hallo,

habe eine Lösung an anderer Stelle bekommen. Hier ein funktionierendes stateFormat für Sonoff POW und POW R2 mit Tasmota:

{my $state = lc ReadingsVal($name, "state", "off");
my $devStateIcon = 'black_Steckdose.on.png';
if ($state eq "off")
{
$devStateIcon = 'black_Steckdose.off.png';
}
"<div><img width='25px' height='25px' src='/fhem/images/default/" . $devStateIcon . "'>" . sprintf(
"&nbsp;&nbsp;[Aktuell: %.1f W / Tag: %.3f Kw/h / Total: %.2f kW/h]",
ReadingsVal($name,"ENERGY_Power",-1),
ReadingsVal($name,"ENERGY_Today",-1),
ReadingsVal($name,"ENERGY_Total",-1)
)
}


Grüße
Titel: Antw:devStateIcon und stateFormat
Beitrag von: tschonder am 28 September 2019, 10:06:36
Hallo,

wenn ich den Sonoff POW über das Steckdosen Icon schalten will,  kann ich nur einschalten aber nicht mehr aus .

über on : off kann ich das devStateIcon schalten .

was mache ich da falsch .


ZitatHallo,

habe eine Lösung an anderer Stelle bekommen. Hier ein funktionierendes stateFormat für Sonoff POW und POW R2 mit Tasmota:

Code: [Auswählen]

{my $state = lc ReadingsVal($name, "state", "off");
my $devStateIcon = 'black_Steckdose.on.png';
if ($state eq "off")
{
$devStateIcon = 'black_Steckdose.off.png';
}
"<div><img width='25px' height='25px' src='/fhem/images/default/" . $devStateIcon . "'>" . sprintf(
"&nbsp;&nbsp;[Aktuell: %.1f W / Tag: %.3f Kw/h / Total: %.2f kW/h]",
ReadingsVal($name,"ENERGY_Power",-1),
ReadingsVal($name,"ENERGY_Today",-1),
ReadingsVal($name,"ENERGY_Total",-1)
)
}


Grüße
Titel: Antw:devStateIcon und stateFormat
Beitrag von: schwatter am 28 September 2019, 11:00:28
Das geht viel einfacher als immer so Konstrukte.
So nutze ich das.

devStateIcon
on:rc_GREEN:off off:rc_RED:on offline:rc_BLUE:off

stateFormat
state
Strom: ENERGY_Current
| Energie heute: ENERGY_Today
| Energie total: ENERGY_Total
| <a href='http://192.168.178.43' target='_blank'>192.168.178.43</a


Schaltbar und übersichtlich.
Titel: Antw:devStateIcon und stateFormat
Beitrag von: tschonder am 28 September 2019, 12:15:18
Danke  :)  für die Antwort , funktioniert   :)
Titel: Antw:devStateIcon und stateFormat
Beitrag von: fritzla am 28 November 2019, 23:53:33
Zitat von: schwatter am 28 September 2019, 11:00:28
Das geht viel einfacher als immer so Konstrukte.
So nutze ich das.

devStateIcon
on:rc_GREEN:off off:rc_RED:on offline:rc_BLUE:off

stateFormat
state
Strom: ENERGY_Current
| Energie heute: ENERGY_Today
| Energie total: ENERGY_Total
| <a href='http://192.168.178.43' target='_blank'>192.168.178.43</a


Schaltbar und übersichtlich.

Die Anzeige funktioniert bei mir damit. Wenn ich auf das Icon klicke wechselt der Status zwischen an und aus, aber wenn ich auf den Text klicke welchselt der Status immer zu an? Was mache ich falsch?