FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: tklein am 22 Juni 2018, 21:04:43

Titel: [gelöst]Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: tklein am 22 Juni 2018, 21:04:43
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
Titel: Antw:Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: Otto123 am 22 Juni 2018, 21:23:11
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
Titel: Antw:Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: tklein am 22 Juni 2018, 21:29:48
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
Titel: Antw:Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: Gisbert am 22 Juni 2018, 21:46:57
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​
Titel: Antw:Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: Otto123 am 22 Juni 2018, 21:58:03
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
Titel: Antw:Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: tklein am 22 Juni 2018, 22:21:33
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
Titel: Antw:[gelöst]Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: tklein am 23 Juni 2018, 09:57:47
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
Titel: Antw:[gelöst]Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: Otto123 am 23 Juni 2018, 10:45:36
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
Titel: Antw:[gelöst]Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: tklein am 23 Juni 2018, 11:02:06
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. :-(
Titel: Antw:[gelöst]Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: Otto123 am 23 Juni 2018, 11:19:44
Ich verstehe Deinen Einwand nicht. Kannst Du ein Beispiel geben?
Titel: Antw:[gelöst]Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: tklein am 23 Juni 2018, 15:43:15
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
Titel: Antw:[gelöst]Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: Otto123 am 23 Juni 2018, 16:25:39
Ok verstanden.

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

Gruß Otto
Titel: Antw:[gelöst]Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: tklein am 24 Juni 2018, 15:01:25
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
Titel: Antw:[gelöst]Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: Otto123 am 25 Juni 2018, 00:00:41
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
Titel: Antw:[gelöst]Problem mit Formatierung des State Formats durch eine eigene Fkt.
Beitrag von: tklein am 26 Juni 2018, 20:38:57
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