Reading mit Uhrzeit der Messung anzeigen?

Begonnen von tho-mas, 17 April 2022, 09:31:13

Vorheriges Thema - Nächstes Thema

tho-mas

Moin!

Wie Readings angezeigt werden ist mir klar. Was mir aber bei einigen Sachen (FHEMWeb-Anzeige) fehlt ist die Uhrzeit der letzten Messung/Auslesens. Das würde ich gern in stateformat mit unterbringen - aber ich weiss nicht wie. Gibt es da was "fertiges" (Variable/Bezeichner)?

viele Hasengrüße
Thomas

Nobbynews

#1
https://forum.fhem.de/index.php?topic=90089.0 sollte die Lösung sein.

Beispiel:
attr Wohnzimmer stateFormat [$name:temperature] °C, [$name:humidity] %, [$name:battery], [$name:state:t]

tho-mas

Danke für die schnelle Antwort, meine Suche im Forum hatte die falsche Zusammensetzung der Suchworte.

Trotzdem funktioniert das bei mir nicht (Bin Lego-Spezialist: Ich setzte nur zusammen was ich hier lese, verstanden habe ich die Systematik nicht wirklich):

Das ist mein funktionierendes Stateformat:
{sprintf( "T: %.1f °C", ReadingsVal("DS18B20_FFE99A531704","temperature",0 )) }

Wenn ich jetzt folgendes mache (aus dem Link ein Beitrag höher):

{sprintf( "T: %.1f °C", ReadingsVal("DS18B20_FFE99A531704","temperature",0 )) [$name:state:t] }

bekomme ich einen Syntaxfehler
syntax error at (eval 679888) line 1, near ") ["


Ich verstehe das da was mit Klammern falsch ist, aber nicht was oder warum. Auch bei

{sprintf( "T: %.1f °C", ReadingsVal("DS18B20_FFE99A531704","temperature",0 )[$name:state:t])  }

kommt Syntaxfehler.


Otto123

#3
Hallo Thomas,
wenn Du sowieso was mit Perl machst nimm ReadingsTimestamp https://fhem.de/commandref_DE.html#perl und nicht die set magic Ersetzung

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

tho-mas

{sprintf( "T: %.1f °C", ReadingsVal("DS18B20_FFE99A531704","temperature",0 ))  ReadingsTimestamp($name, "state", 0)}


Funktioniert auch nicht, es wird nur noch Datum-Uhrzeit angezeigt. Gleiches Ergebnis bei

{sprintf( "T: %.1f °C", ReadingsVal("DS18B20_FFE99A531704","temperature",0 ))  ; ReadingsTimestamp($name, "state", 0)}



Nobbynews

#5
Otto hat mal wieder recht.
Das ist Perl und dann sollte z.B. soetwas hier gehen:

attr ESPEasy_ESP_05_DHT22 stateFormat {"Hum: ".sprintf("%.1f",ReadingsNum($name,"Humidity",0)).\
" Temp: ".sprintf("%.1f",ReadingsNum($name,"Temperature",0))." ".ReadingsTimestamp($name,"Temperature","")}


Für Dich also ungetestet:

{sprintf( "T: %.1f °C", ReadingsVal("DS18B20_FFE99A531704","temperature",0 ))." ".ReadingsTimestamp($name, "temperature", 0)}

Beta-User

Man kann bei dieser Art "Magic" aber auch einfach direkt die Zahl der gewünschten Nachkommastellen angeben...

[$name:temperature:r1]
commandref_DE.html#set
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

tho-mas

#7
@Nobbynews: Ich habe den (für mich erkennbar relevanten) Teil in mein stateFormat eingesetzt - bekomme dann aber wieder nur die Temperatur.

{sprintf( "T: %.1f °C", ReadingsVal("DS18B20_FFE99A531704","temperature",0 ))." ".ReadingsTimestamp($name,"Temperature","")}

Wozu dienen die

." ".
Teile zwischen den Readings? Leerzeichen?

Deine Änderung während ich schon wieder schrieb war dann die Lösung, DANKE!

Nobbynews


Otto123

#9
um bei der Perl Variante noch etwas zum möglichen Syntax beizutragen:
https://perldoc.perl.org/functions/sprintf
{sprintf( "T: %1.1f °C %2s", ReadingsVal($name,"temperature",0 ) , ReadingsTimestamp($name,"temperature",""))}
Ich bin da in euren Beispielen noch über Temperature und temperature gestolpert?
Man könnte damit auch noch die Anzeige der Uhrzeit formatieren.

und es sind nicht "nur" Leerzeichen :)
https://www.perl.com/article/8/2013/3/31/Perl-string-functions-concatenate-substring-and-split/
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

juergen012

Hallo,
ich bekomme die Zeit des Readings mit userReadings zeit {ReadingsTimestamp($name,'<readingname>','')}.
<readigname> mit dem Namen des Readings ersetzen. Dann erhälst Du die Zeit als reading.
Gruß
Jürgen K.
Fhem unter Proxmox

Beta-User

Zitat von: juergen012 am 17 April 2022, 12:27:50
mit userReadings zeit {ReadingsTimestamp($name,'<readingname>','')}.
<readigname> mit dem Namen des Readings ersetzen.
*Grusel*
Überflüssiges Datengeschubse, und dann noch ohne trigger...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

tho-mas

Also, im stateFormat mit sprintf funktioniert es jetzt. Dann habe ich allerdings noch stateFormat(s) der Form

Feuchte: humidity, Hell.: luminance, Temp.: temperature, UV: ultraviolet
(Das funktioniert so.)

Da funktioniert der Vorschlag von Nobbynews nicht. Probiert habe ich

ReadingsTimestamp($name, "temperature", 0)." ". Feuchte: humidity, Hell.: luminance, Temp.: temperature, UV: ultraviolet

auch das hier geht nicht:

{sprintf(ReadingsTimestamp($name, "temperature", 0)} Feuchte: humidity, Hell.: luminance, Temp.: temperature, UV: ultraviolet

Nach der von mir erkennbaren Systematik sind ja Codebeispiel 1 und 2 bzw. 3 im Prinzip gleichwertige Textausgaben, warum funktioniert der 2. und 3. Code nicht?

Beta-User

Es funktioniert immer nur exklusiv eine Variante: entweder String-Reading, oder "set magic" oder Perl (wobei set magic eine versteckte Perl-Variante ist).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

#14
einfach umschreiben in die Form von #1 :)

Mir war das auch nicht klar, deswegen schreib ich nochmal auf: 3 Formen:
Das Zitat aus der Doku etwas aufgehübscht:
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). Temperatur: temperature °C
  • Falls der Wert in {} eingeschlossen ist, dann wird es als Perl Ausdruck ausgewertet. Die Auswertung passiert bei jeder Änderung eines Readings.{"Temperatur: ".ReadingsNum($name,'temperature',0,1)." °C"}
  • Die hier beschriebene "set magic" wird auch angewendet. Temperatur: [$name:temperature:r1] °C
Hinweis: Manche Module aktualisieren STATE ganz oder teilweise direkt. In diesen Fällen kann es zu abweichenden Anzeigen kommen.
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