[gelöst]Problem mit Formatierung des State Formats durch eine eigene Fkt.

Begonnen von tklein, 22 Juni 2018, 21:04:43

Vorheriges Thema - Nächstes Thema

tklein

Hallo zusammen,

ich bekomme gerade keinen Lösungsansatz, um den Status von Devices farbig darzustellen.
Das reading heißt "presence" und kann die Werte "presence" bzw. "absent" annehmen.

Die Funktion in meiner 99_myUtils.pm dazu:


sub fontcolour_in_stateformat($) {
  # --- get parameter
  my ($status) = @_;
 
  if ($status eq "present")
  {
return "<font color=\"#00FF00\">online</font><br>";
}
elsif (($status eq "absent"))
{
return "<font color=\"#FF0000\">offline</font><br>";
}
else
{
return $status;
}

}


Hier noch das state format:

Status: {(fontcolour_in_stateformat("presence"))}
Allerdings wird nicht der Wert/Reading von presence (present oder absent) genommen, sondern hier im Beispiel immer "presence" obwohl das Device "absent" ist.

Wie muss ich den Aufruf vornehmen? Oder muss ich meine Funktion anpassen?

Grüße
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

Otto123

Hallo Thomas,

wo in Deinem Code glaubst Du, dass das reading presence gelesen wird? Aus welchem Device eigentlich?

Du übergibst einen String, das ist alles. Zumindest sehe ich das nicht anders.

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

tklein

Hi Otto,

hier z.B.

defmod Broadlink_LAN PRESENCE lan-ping 192.168.0.67 30 600
attr Broadlink_LAN event-on-change-reading state
attr Broadlink_LAN pingCount 4
attr Broadlink_LAN room Status,System

setstate Broadlink_LAN present
setstate Broadlink_LAN 2018-06-22 21:19:36 .absenceThresholdCounter 0
setstate Broadlink_LAN 2018-06-22 21:19:36 .presenceThresholdCounter 0
setstate Broadlink_LAN 2018-06-21 11:48:40 model lan-ping
setstate Broadlink_LAN 2018-06-22 21:19:36 presence present
setstate Broadlink_LAN 2018-06-22 21:19:36 state present


oder hier:


defmod ESPEasy_Wemos_Bad ESPEasy 192.168.0.65 80 espBridge Wemos_Bad
attr ESPEasy_Wemos_Bad IODev espBridge
attr ESPEasy_Wemos_Bad Interval 600
attr ESPEasy_Wemos_Bad event-on-change-reading .*
attr ESPEasy_Wemos_Bad group ESPEasy Device
attr ESPEasy_Wemos_Bad homebridgeMapping [CurrentTemperature=temperature] CurrentRelativeHumidity=humidity
attr ESPEasy_Wemos_Bad presenceCheck 1
attr ESPEasy_Wemos_Bad readingSwitchText 1
attr ESPEasy_Wemos_Bad room Badezimmer,ESPEasy,Heizung
attr ESPEasy_Wemos_Bad setState 14
attr ESPEasy_Wemos_Bad stateFormat Helligkeit: Lux <br>\
Feuchtigkeit: humidity <br>\
Temperatur: temperature <br>\
Auslastung: Load <br>\
Uptime: uptime <br>\
Wifi: wifi <br>

setstate ESPEasy_Wemos_Bad Helligkeit: 7 <br>\
Feuchtigkeit: 53 <br>\
Temperatur: 22.8 <br>\
Auslastung: 14.00 <br>\
Uptime: 23154.00 <br>\
Wifi: -82.00 <br>
setstate ESPEasy_Wemos_Bad 2017-09-11 10:42:28 Humidity 56
setstate ESPEasy_Wemos_Bad 2018-06-22 21:19:38 Load 14.00
setstate ESPEasy_Wemos_Bad 2018-06-22 21:27:54 Lux 7
setstate ESPEasy_Wemos_Bad 2018-06-22 21:28:01 Switch off
setstate ESPEasy_Wemos_Bad 2017-09-11 10:42:28 Temperature 21.9
setstate ESPEasy_Wemos_Bad 2018-06-22 21:25:18 humidity 53
setstate ESPEasy_Wemos_Bad 2018-06-22 21:27:13 presence present
setstate ESPEasy_Wemos_Bad 2018-06-22 21:28:01 state Load: 14.00 Lux: 7 Switch: off humidity: 53 temperature: 22.8 uptime: 23154.00 wifi: -82.00
setstate ESPEasy_Wemos_Bad 2018-06-22 21:25:18 temperature 22.8
setstate ESPEasy_Wemos_Bad 2018-06-22 21:18:54 uptime 23154.00
setstate ESPEasy_Wemos_Bad 2018-06-22 21:19:39 wifi -82.00



Ohne die "" im Aufruf bekomme ich "Status: Bareword "presence" not allowed while "strict subs" in use at (eval 244424) line 1."

Grüße
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

Gisbert

Hallo Thomas,

ein Beispiel, dass bei mir funktioniert:
stateFormat
<span style='color:{(ReadingsVal('$name','rainDataNow','') > 0 ? "red":"blue")}'>Niederschlag:<br/>[$name:rainDataNow] mm/h</span>


Ich hab's nur kopiert, weil ich am Handy antworte.
Wenn das Prinzip noch nicht klar ist, dann melde dich nochmals.

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Otto123

Hallo Thomas,

aber Du darfst nicht nur presence "rufen" Du musst rufen: Ich will den Wert vom Reading presence im Gerät Broadlink_LAN wissen! Du musst im "ganzen Satz" reden  ;D

ReadingsVal("Broadlink_LAN","presence","Fehlerwert")

Hast Du verstanden was ich meine?

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

tklein

Hi Otto,

besten Dank für das "Vorrufen" :-)
Rede jetzt auch in ganzen Sätzen.

Jetzt klappt es mit:
Status: {(fontcolour_in_stateformat(ReadingsVal("Broadlink_KU_LAN","presence","error")))}

Viele Grüße & Danke
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

tklein

Hallo nochmal,

was mich allerdings dann wundert ist, dass diese Readingwerte (siehe screen) korrekt im Stateformat angezeigt werden. Ich hatte den Namen des Readings immer als eine Art Funktionsaufruf verstanden, welche den entsprechenden Wert des Readings zurückliefert.

Mhhmm da muss ich wohl noch mal etwas nachlesen...

Schönes WE euch
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

Otto123

Es ist so wie Du sagst, aber Du bist in deinem Fall dann zwischen den {} und da bist Du in der Perlenwelt :)
Zitat Doku
ZitatstateFormat
Ändert den Gerätestatus, dies ist z.Bsp. in der Ausgabe des list Kommandos zu sehen, oder in der Raumübersicht von FHEMWEB. Falls nicht gesetzt, dann wird das state Reading übernommen. Sonst werden alle Wörter im Wert des Attributes durch das entsprechende Reading des Gerätes ersetzt (soweit vorhanden). Falls der Wert in {} eingeschlossen ist, dann wird es als Perl Ausdruck ausgewertet. Die Auswertung passiert bei jeder Änderung eines Readings.
Die hier beschriebene "set magic" wird auch angewendet.
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

tklein

wobei es jetzt so ist, dass ich sobald in einer Zeile von einem state format "{}" für nur ein Reading drin habe, die restlichen nicht mehr "direkt" angezeigt werden. Jetzt muss ich überall das ReadingVal einbauen. :-(
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

Otto123

Ich verstehe Deinen Einwand nicht. Kannst Du ein Beispiel geben?
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

tklein

klar doch.

Sobald ich im Stateformat die {} nutze (pic mit_perl), bekomme ich bei den restlichen Readings keine Werte mehr angezeigt z.B. uptime.
Nehme ich den Perlaufruf raus (pic ohne_perl), werden sie komplett wieder angezeigt.

Derzeitig rufe ich die Fkt so auf:
Status: {(fontcolour_in_stateformat(ReadingsVal("ESPEasy_Wemos_Bad","presence","error")))}

Gruß
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

Otto123

Ok verstanden.

Gegenvorschlag (ungetestet) Du machst mit Deiner Perlfunktion ein extra userReadings. Dann brauchst Du im stateFormat wieder nur die Reading Namen.

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

tklein

jetzt verstehe ich nicht so ganz :-)

Oder meinst du, dass ich in der Fkt die restlichen Readings in (neue) Userreadings "kopiere" und dann im Stateformat ausgebe?


Grüße
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

Otto123

Hallo Thomas,

nein, ich meine Du rufst Deine Funktion in einem userReadings auf. Dann kann Du im stateFormat wieder bloß Reading Namen schreiben und hast dort keinen Perl Aufruf mehr.
Damit hast Du ein Reading mehr, kannst aber alle anderen so lassen wie sie sind.
Also anstatt (was nicht geht)
stateFormat Raeding1 Reading2 Reading3 {Perlfunktion}
so rum
userReadingsNamen {Perlfunktion}
stateFormat Raeding1 Reading2 Reading3 userReadingsNamen

So besser erklärt?

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

tklein

Hi,

jetzt habe ich es auch verstanden, wie du es gemeinst hast.
Werde dennoch die Gelegenheit nutzen und mir jeweils Funktionen für die jeweilgen Stateformats zu machen.
Danke für deine Hilfe!!

Viele Grüße
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2