Hallo,
ich möchte das Ergebis eines SELECT's aus meinem DBLog in einem Reading darstellen. Wie kann ich das realisieren?
select count(VALUE) from history where DEVICE like 'ESPEasy_WS_Regensensor' AND cast(VALUE as INTEGER) > 100 AND TIMESTAMP >= datetime('now','-1 day') order by TIMESTAMP;
Das Ergebnis ist die Anzahl der Treffer, welche ich später in einem DOIF auswerten möchte.
Danke schonmal!
Gruß
Thomas
Mit einem DbRep-Device.
Den select mit sqlCmd ausführen. Das Ergebnis steht in einem Reading SqlResult und kann weiter verarbeitet werden.
Siehe auch https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#Werte_mittels_Event_.C3.BCbetragen
VG
Hmm, hab ich nicht ganz verstanden, trotzdem Danke.
Da ich ein wenig Perl kann, habe ich es jetzt anders gelöst.
99_myUtils.pm
# RainCount (Regen-Zähler)
sub RainCount() {
use strict;
use DBI;
my $dbh = DBI->connect(
"dbi:SQLite:dbname=/var/log/fhem/fhem.db",
"",
"",
{ RaiseError => 1 },
) or die $DBI::errstr;
my $sth = $dbh->prepare("select count(VALUE) from history where DEVICE like 'ESPEasy_WS_Regensensor' AND cast(VALUE as INTEGER) > 100 AND TIMESTAMP >= datetime('now','-1 day') order by TIMESTAMP");
$sth->execute();
my $row = $sth->fetchrow_array();
return $row;
}
UserReading:
attr ESPEasy_WS_Regensensor userReadings raincount {RainCount()}
Jetzt habe ich das Ergebnis im UserReading raincount stehen.
Ja, allerdings wird es dein Fhem für die Zeit der Ausführung blockieren oder ganz lahmlegen wenn die Db nicht reagiert.
Und die ist generell keine gute Idee.
Nur so als Hinweis.
Definiere die einfach ein DbRep device und verwende sqlCmd wie in der commandref beschrieben.
Das ist wirklich nicht schwer.
Lg