Ich suche jetzt seit Stunden und werde immer verwirrter
An einer Beispielaufgabe möchte ich es gerne lernen. Habe eine Anleitung umgesetzt welche den Benzinpreis einer Tankstelle bei Clever-Tanken.de ausliest und diesen Wert in ein Reading schreibt. Ich habe also ein Reading mit dem Namen Diesel. Diesem wird ein Wert (z.B 1,98€) zugewiesen.
Im Reading wird natürlich auch ein Zeitstempel dargestellt
Diesel 1.92 2022-09-28 17:00:35
Wie kann man diesen Zeitstempel wieder in ein Reading schreiben. Ich nenne es mal "Aktualisierung"
Nach meinem Verständnis muss ich ein UserReading definieren.
userattr reading01Name reading01Regex
Dann dem reading01Name den Namen Aktualisierung geben
Dann dem reading01Regex den Wert des Zeitstempels zuweisen. Wie mache Ich das? Welche Syntax?
Oder liege ich komplett falsch?
Vermutlich für viele Anfängerwissen. aber ich bin gerade überfordert und komme null weiter
Zitat von: bajogger am 28 September 2022, 17:33:39
Wie kann man diesen Zeitstempel wieder in ein Reading schreiben. Ich nenne es mal "Aktualisierung"
Wozu um alles in der Welt willst Du das tun?
Den Zeitstempel des readings kannst Du mit ReadingsTimestamp() analog zu ReadingsVal() bzw. ReadingsNum() ermitteln.
Das "Alter" des Zeitstempels kannst Du mit ReadingsAge() feststellen.
ich möchte im DeviceOverview auch den Zeitstempel darstellen.
ZitatDen Zeitstempel des readings kannst Du mit ReadingsTimestamp() analog zu ReadingsVal() bzw. ReadingsNum() ermitteln.
Weis leider nicht wie genau. Wie genau ermittelt man ReadingTimestamp meines Readings Diesel?
Finde leider nur für mich kryptische Erklärungen
Zitat von: bajogger am 28 September 2022, 17:49:11
Wie genau ermittelt man ReadingTimestamp meines Readings Diesel?
Die Syntax ist identisch wie bei ReadingsVal() ReadingsNum() und ReadingsAge()
Wie wäre es, mal einen Blick in die zentrale FHEM Doku (commandref) zu werfen?
https://commandref.fhem.de/commandref_DE.html#perl
Hi,
in 99_myUtils
sub sub_TimeStampDatum($) { my ($T1) = @_; $T1 =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/; return "$3.$2."; }
sub sub_TimeStampZeit($) { my ($T1) = @_; $T1 =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/; return "$4"; }
und im Device userReadings
Datum { sub_TimeStampDatum(ReadingsTimestamp('do.ESP47',"cmd","00.00."))},
Zeit { sub_TimeStampZeit(ReadingsTimestamp('do.ESP47',"cmd","00:00"))}
gruss
Natürlich lese ich. Aber im commandref steht
ZitatreadingTimeStamps attr <name> readingTimeStamps [0|1]
Sendet wenn angeschaltet (1) den Reading Zeitstempel vom FHEM an die InfluxDB, andernfalls(0) wird der Zeitstempel von der InfluxDB bestimmt. Diese Funktion ist nützlich für Geräte die Werte nachmelden mit dem Originalzeitstempel. Default: 0 (InfluxDB bestimmt den Zeitstempel, es wird keiner mitgesendet)
Sorry verstehe nur Bahnhof.
Auch der Beitrag von eisman macht mich nicht wirklich klüger.
Sorry hier sind vermutlich alle deutlich weiter als Ich. Ich definiere Devices und setzte darin attr. Ich habe schon at und notify's definiert. Ich bräuchte konkreten Beispiel Code
Zitat von: bajogger am 28 September 2022, 18:30:46
Natürlich lese ich. Aber im commandref steht
Du liest einfach an der völlig falschen Stelle in der commandref. Du bist in der Moduldokumentation zu InfluxDB, nicht bei den Grundlagen von FHEM.
Geh doch mal zu der Stelle, die ich in meinem vorherigen Beitrag verlinkt habe.
Hi,
Raw definition:
defmod LEDR dummy
attr LEDR devStateIcon off:15px-grey on:15px-red
attr LEDR group LED
attr LEDR readingList state
attr LEDR room Keller
attr LEDR setList state:on,off on off
attr LEDR useSetExtensions 1
attr LEDR userReadings Datum { my ($T1) = ReadingsTimestamp("LEDR","state","00.00.");; \
$T1 =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;; \
return "$3.$2.$1";; },\
Zeit { my ($T1) = ReadingsTimestamp("LEDR","state","00:00");; \
$T1 =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;; \
return "$4:$5";; }
$1 = Jahr = 2022
$2 = Monat = 09
$3 = Tag = 28
return "$3.$2.$1" = 28.09.2022
return "$3.$2." = 28.09.
$4 = Time = 00:00
$5 = sek = 00
return "$4:$5" = 10:00:00
return "$4" = 10:00
gruss
Ich glaube ich gebe entnervt für Heute auf
Zusammenfassung, Mein Device heist "OUT.SpritpreisDies" das reading heist Diesel. Von diesem Reading möchte ich den Timestamp auslesen
attr OUT.SpritpreisDies userReadings Datum { my ($T1) = ReadingsTimestamp("OUT.SpritpreisDies","state","00.00.");; \
$T1 =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;; \
return "$3.$2.$1";; },\
tut nichts
attr OUT.SpritpreisDies userReadings Datum { my ($T1) = ReadingsTimestamp("OUT.SpritpreisDies","Diesel","00.00.");; \
$T1 =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;; \
return "$3.$2.$1";; },\[
auch nicht
Der Inhalt in der Referenz
ReadingsTimestamp(<devicename>, <reading>,<defaultvalue>)
Was tue ich damit? Ein Userattr mit diesem Code anlegen, oder?
Zitat von: bajogger am 28 September 2022, 21:12:23
Ich glaube ich gebe entnervt für Heute auf
Zusammenfassung, Mein Device heist "OUT.SpritpreisDies" das reading heist Diesel. Von diesem Reading möchte ich den Timestamp auslesen
Gib mal in der FHEM Befehlszeile ein:
{ReadingsTimestamp("OUT.SpritpreisDies","Diesel","n/a")}
Das funktioniert bei mir einwandfrei und liefert "2022-09-28 21:23:44" als Ergebnis.
Ergebnis
2022-09-28 21:25:35
Das tut schon mal
attr OUT.SpritpreisDies userReadings Datum { substr(ReadingsTimestamp("OUT.SpritpreisDies","Diesel","00.00.00"),11,8);; }
funktioniert bei mir einwandfrei.
Noch besser ist es aber, einen passenden Trigger mit anzugeben:
defmod OUT.SpritpreisDies dummy
attr OUT.SpritpreisDies readingList Diesel
attr OUT.SpritpreisDies setList Diesel
attr OUT.SpritpreisDies userReadings Datum:Diesel.* { substr(ReadingsTimestamp("OUT.SpritpreisDies","Diesel","00.00.00"),11,8);; }
Grundsätzlich halte ich das ganze Vorhaben aber weiterhin für völlig sinnfrei.
Vielen Dank
attr OUT.SpritpreisDies userReadings Datum { substr(ReadingsTimestamp("OUT.SpritpreisDies","Diesel","00.00.00"),11,8);; }
Gibt allerdings nur die Uhrzeit aus
attr OUT.SpritpreisDies userReadings Datum {ReadingsTimestamp("OUT.SpritpreisDies","Diesel","n/a")}
gibt Datum und Uhrzeit aus
Auch wenn du denkst sinnfrei. Habe gerade viel gelernt. Danke für deine Hilfe aber auch an jeden Beteiligten
Noch eine Frage. Kann ich in einem Device 2x userReadings vergeben? z.B. userReadings Datum und userReadings Uhrzeit
Lies die Beschreibung zu userReadings.
ZitatGibt allerdings nur die Uhrzeit aus
https://perlmaven.com/substr (https://perlmaven.com/substr)