FHEM Forum

FHEM => Sonstiges => Thema gestartet von: birdy am 11 Juni 2025, 20:04:02

Titel: Den letzten Eintrag aus DbLog lesen
Beitrag von: birdy am 11 Juni 2025, 20:04:02
Ich möchte den letzten Eintrag für ein Device:reading aus der DB lesen
In der commandref gibt es dieses Beispiel -> get myDbLog current ALL - - %:temperature

get myDbLog current 1 - - device:reading liefert mir immer alle Einträge aus der DB.
Weder scheint die current Table berücksichtigt zu werden (da gibt es nur einen Eintrag) noch scheint die Resultats Menge auf 1 begrenzt zu werden.
Habe ich da etwas falsch verstanden...

Muss ich mir mit sqlCmd..... den Command zusammenstellen oder gibt es noch eine andre Lösung?

Danke und Gruss
birdy
Titel: Aw: Den letzten Eintrag aus DbLog lesen
Beitrag von: Guybrush am 11 Juni 2025, 20:10:13
select value from history where device = '<device>' && reading = '<reading>' order by timestamp desc limit 1
Titel: Aw: Den letzten Eintrag aus DbLog lesen
Beitrag von: birdy am 12 Juni 2025, 00:50:06
Dann geht es also nur mittels SQL Command?
Wie dann der SQL Command aussehen soll, ist mir eigentlich klar.
Dann kann ich direkt von current table lesen, und weil es da sowieso nur 1 Eintrag gibt kann ich erst noch order und limit weglassen  ;)
Titel: Aw: Den letzten Eintrag aus DbLog lesen
Beitrag von: betateilchen am 12 Juni 2025, 05:51:49
Zitat von: birdy am 11 Juni 2025, 20:04:02Ich möchte den letzten Eintrag für ein Device:reading aus der DB lesen

Dazu braucht es kein sqlCmd, dafür gibt es eine eigene get-Variante - die auch in der commandref steht:

get <name> ReadingsVal[Timestamp] <Device> <Reading> <default>

Reads the last (newest) record stored in the history table of the specified Device / Reading combination.
Only the value or the combination of value and timestamp is returned as string "<Wert> , <Timestamp>".
<default> specifies a defined return value if no value can be determined.

Alternativ geht sowas natürlich auch über DbRep.
Titel: Aw: Den letzten Eintrag aus DbLog lesen
Beitrag von: Guybrush am 12 Juni 2025, 08:56:05
in welcher Konstellation braucht man denn den letzten Wert aus der DB? da sollte doch der Wert aus dem device genügen oder nicht? das wäre doch nur dann abweichend wenn event-on-* mit mindestwerten versehen ist? dann aber solltem die schwankungen doch im regelfall egal sein, wenn man diese ohnehin nicht mitspeichern möchte?
Titel: Aw: Den letzten Eintrag aus DbLog lesen
Beitrag von: betateilchen am 12 Juni 2025, 09:04:13
Spontan fallen mir dazu zwei Szenarien ein, die bei mir im Einsatz sind.

Titel: Aw: Den letzten Eintrag aus DbLog lesen
Beitrag von: birdy am 12 Juni 2025, 13:15:41
Zitat von: betateilchen am 12 Juni 2025, 05:51:49Dazu braucht es kein sqlCmd, dafür gibt es eine eigene get-Variante - die auch in der commandref steht:

get <name> ReadingsVal[Timestamp] <Device> <Reading> <default>

Reads the last (newest) record stored in the history table of the specified Device / Reading combination.
Only the value or the combination of value and timestamp is returned as string "<Wert> , <Timestamp>".
<default> specifies a defined return value if no value can be determined.

Danke, so hat es geklappt. Dachte mir doch, dass es eine Möglichkeit ohne sqlCmd gibt

Zitat von: Guybrush am 12 Juni 2025, 08:56:05in welcher Konstellation braucht man denn den letzten Wert aus der DB? da sollte doch der Wert aus dem device genügen oder nicht? das wäre doch nur dann abweichend wenn event-on-* mit mindestwerten versehen ist? dann aber solltem die schwankungen doch im regelfall egal sein, wenn man diese ohnehin nicht mitspeichern möchte?

Gibt bestimmt div. Gründe dafür.............
Es geht mir darum die Tagesendwerte von bestimmten Devices festzuhalten. Darum habe ich mir dummy Device erstellt unter welchen ich immer am Ende des Tags die Endwerte logge, hauptsächlich von Shelly (z.B. den Wert von enegy). Neben dem Totalwert rechne ich auch noch die Differenz zum Vortag und logge die mit. Dazu brauche ich natürlich den letzten Wert, den Endwert des Vortages. So habe ich ein Device welches nur ein paar wenige Werte pro Tag enthält und ich somit über Jahre auf bewahren kann. Dieses Device kann ich dann auch sehr gut für Monats, und Jahres Plot verwenden, sogar über mehrere Jahre hinweg.
Titel: Aw: Den letzten Eintrag aus DbLog lesen
Beitrag von: rabehd am 12 Juni 2025, 18:07:11
Zitat von: birdy am 12 Juni 2025, 13:15:41Neben dem Totalwert rechne ich auch noch die Differenz zum Vortag und logge die mit. Dazu brauche ich natürlich den letzten Wert, den Endwert des Vortages. So habe ich ein Device welches nur ein paar wenige Werte pro Tag enthält und ich somit über Jahre auf bewahren kann.

Sowas mache ich mit Userreadings und zeitbezogenen Schreiben in die DB.
Außerdem räume ich täglich in dedr DB auf und da kann ich auch "Endwerte" bilden. So habe ich die Werte der letzten Tage häufig und die Vorzeit wie gewünscht selten.
Titel: Aw: Den letzten Eintrag aus DbLog lesen
Beitrag von: birdy am 12 Juni 2025, 19:38:44
Ja da gibt es verschiedene Möglichkeiten
Bis jetzt habe ich das auch mit Userrreadings gemach, aber ich hatte immer mal wieder alte Werte in den Userreadings  >:( 
Mit grosser Wahrscheinlichkeit liegt es daran, dass mir der Rechner abgestürzt ist.
Da ich gerade dabei bin von FileLog auf DB Log umzustellen, möchte für meine Berechnung die Werte aus der DB verwenden.