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: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

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: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

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: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

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

tho-mas

@ Otto:

Dann müßte doch das hier auch funktonieren:

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

Macht aber nicht, es werden die Variablennamen (nicht deren Inhalte) angezeigt. Ich bekomme beim speicherversuch (Klick auf "attr") eine Fehlermeldung "Sysntax Error near .:".

Beta-User

#16
"Exklusiv" meinte: "exklusiv"... Edit: also nicht: gemischt.

@Otto123: falls du noch rumtesten willst - multiline ist die Steigerung ::) :P

Edit: Die direkte Perl-Variante ist m.E. die effizienteste, und wer keine Icons haben will und das nur für das FHEMWEB-Frontend braucht, kann das ganze pure-Perl nach devStateIcon verfrachten...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

das in der Doku nicht extra exklusiv oder oder erwähnt wird, bedeutet nicht, dass da im Umkehrschluss vermischt irgendwo versteckt stehen könnte  ;)
siehe Antwort #1
[$name:temperature:t] Feuchte: [$name:humidity], Hell.: [$name:luminance], Temp.: [$name:temperature], UV: [$name:ultraviolet]
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

Danke Otto, auf das nachgestellte "t" (für Time) muß man erst mal kommen.

Okay, dann noch die Königsfrage in dieser Diskussion: Geht "t" auch kürzer, also nicht volles Datum, sondern nur Uhrzeit im Format hh:mm?

Otto123

#19
Zitat von: tho-mas am 17 April 2022, 19:36:28
Danke Otto, auf das nachgestellte "t" (für Time) muß man erst mal kommen.
das stand aber wie gesagt schon in der ersten Antwort auf Deine erste Frage :)

was geht steht alles hier https://fhem.de/commandref_DE.html#set

Was Du willst geht mMn nur mit Perl oder den Umweg mit einem weiteren Reading - wird also aufwendiger.
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

Nobbynews

#20
Zitat von: tho-mas am 17 April 2022, 19:36:28
Geht "t" auch kürzer, also nicht volles Datum, sondern nur Uhrzeit im Format hh:mm?
Wie Otto schon meinte, mir fällt dazu auch nur eine Lösung in Perl ein.

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


tho-mas

Zitat von: Otto123 am 17 April 2022, 19:48:01
das stand aber wie gesagt schon in der ersten Antwort auf Deine erste Frage :)

Da habe ich nur die eckigen Klammern gesehen... HAbe bitte Nachsicht mit einem älterem Herrn, der nicht immer den Überblick hat.

Frohe Ostern naoch an alle Antworten.

TomLee

#22
Die zuletzt genannte Perllösung einfacher notiert  8):

{sprintf('Hum: %.1f Temp: %.1f %s',ReadingsNum($name,'Humidity',0),ReadingsNum($name,'Temperature',0),substr(ReadingsTimestamp($name,'Temperature',0),11,5))}

Otto123

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

TomLee

#24
Gestehe erst auf der zweiten Seite angefangen zu haben zu lesen, den Anfang nur überflogen  :)

edit:

Wenn man nicht angemeldet ist sinds bereits zwei Seiten, angemeldet bis jetzt nur eine, fällt mir gerade auf.

Otto123

mir ging es da noch um T vs t  ;) - sonst funktioniert es ja wieder nicht ...
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

Nobbynews

Zitat von: Otto123 am 18 April 2022, 08:16:34
mir ging es da noch um T vs t  ;) - sonst funktioniert es ja wieder nicht ...
??
Ist
Temperature != temperature
gemeint?