FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Hackstall am 31 Mai 2019, 21:24:43

Titel: [Geloest]: Daten aus Log-DB lesen und in Fhem weiterverarbeiten
Beitrag von: Hackstall am 31 Mai 2019, 21:24:43
Hallo,

ich möchte gerne Daten aus meiner FHEM Datenbank lesen und weiterverarbeiten
und das Ergebnis anzeigen.

Ist das moeglich?

Wenn ich Kurven plotte werden ja auch Daten aus der Datenbank gelesen.

Seht Ihr hier eine Moeglichkeit?

Danke Andreas
Titel: Antw:Daten aus Log-DB lesen und in Fhem weiterverarbeiten
Beitrag von: roedert am 31 Mai 2019, 21:46:59
Mit set userCommand auf das Datenbank-Logdevice kannst du beliebige SQL-Statements absetzen, das Ergebnis steht dann im Reading userCommandResult und kann beliebig weiterverarbeitet werden.
Titel: Antw:Daten aus Log-DB lesen und in Fhem weiterverarbeiten
Beitrag von: Hackstall am 31 Mai 2019, 22:18:21
Hallo,

danke war mir nicht bekannt.
Ein Forenbeitrag gibt es hierzu aber dieser ist nicht befriedigend.

Hier wird gesagt dass der usercommand nur zu testzwecken implementiert wurde.
in der Commandref kann ich leider auch nichts finden.

Wie auch immer Test oder nicht waere mir egal, sofern ich meine Werte (gerne über Sql) zurückbekomme.

Mir ist aber nicht klar wie die Returnreadings aussehen.
Haettest Du vielleicht ein Beispiel?

Danke A. Krause
Titel: Antw:Daten aus Log-DB lesen und in Fhem weiterverarbeiten
Beitrag von: roedert am 31 Mai 2019, 23:10:15
Was willst denn genau erreichen?

Ich halte zB ca 30 Tage meine Zählerstände im Log vor und mache hiermit eine "Jahreshochrechnung"
Aus der DB wird der erste und letzte Wert inclusive der entsprechenden Timestamps ausgelesen und daraus der Jahresverbauch hochgerechnet.

v2 ... letzter Zählerstand
t2 ... letzter Timestamp
v1 ... erster Zählerstand
t1 ... erster Timestamp

Die Differenz wird in den Readings kWh und days gespeichert .... das Attribut stateFormat macht dann die Jahreshochrechnung:
{sprintf("%.0f",ReadingsVal($name,'kWh',0)/ReadingsVal($name,'days',0)*365) . " kWh/Jahr"}

{
$v2 = ReadingsVal('Strom','kWh',0);
$t2 = str2time(ReadingsTimestamp('Strom','kWh',0));
fhem("set DbLog userCommand select timestamp from history where device='Strom' and reading='kWh' order by timestamp limit 1");
$t1 = str2time(ReadingsVal('DbLog','userCommandResult',0));
fhem("set DbLog userCommand select value from history where device='Strom' and reading='kWh' order by timestamp limit 1");
$v1 = ReadingsVal('DbLog','userCommandResult',0);
fhem("setreading Strom.Jahr kWh " . ($v2-$v1));
fhem("setreading Strom.Jahr days " . (($t2-$t1)/(24*60*60)));
}
Titel: Antw:Daten aus Log-DB lesen und in Fhem weiterverarbeiten
Beitrag von: Hackstall am 01 Juni 2019, 00:10:31
Hallo,

vielen Dank das ist genau was ich gebraucht habe.
Spitze. Danke.
viele Gruesse
Andreas
Titel: [Geloest]: Daten aus Log-DB lesen und in Fhem weiterverarbeiten
Beitrag von: Hackstall am 01 Juni 2019, 00:11:35
Thema gelöst
Titel: Antw:[Geloest]: Daten aus Log-DB lesen und in Fhem weiterverarbeiten
Beitrag von: DS_Starter am 01 Juni 2019, 07:47:12
Denkt aber bitte daran, dass euer FHEM für die Zeit der db-operation blockiert wird ! Je nach geschwindigkeit der db . Und wenn die db nicht reagiert bleibt euer fhem stehen.
Alternative ist DbRep, siehe Wiki zu Beispielen. Ist etwas aufwendiger, aber sicherer.

Grüße,
Heiko