devStateIcon und stateFormat

Begonnen von Florian_GT, 27 Juli 2016, 22:11:48

Vorheriges Thema - Nächstes Thema

Florian_GT

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?
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

igami

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
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Florian_GT

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 :/
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

DeeSPe

#3
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.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

igami

Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Florian_GT

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?
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

igami

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.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Florian_GT

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?
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

igami

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.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Hans Franz

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
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Stippy19

#10
/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.

carlos

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
FHEM svn auf Intel NUC mit proxmox, 3 Raspberry Pi, signalduino, nanoCUL,  toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

KernSani

ich würde Images immer über FW_makeImage(@) erzeugen.

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Stippy19

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.