Mahlzeit,
ich würde gerne von einem Device alle Readings "reducen"
nach commandref kam ich auf folgenden Befehl:
set logdb reduceLogNbl 270 average include=Luftdaten_remote:.*
Es gibt im Device für die letzten ca 12 Monate alle 5 minuten mehrere Readings in der DB.
Die Ausführung des o.g. Befehls gibt allerdings zurück nichts gemacht zu haben:
reduceLogNbl finished. Rows processed: 0, deleted: 0, updated: 0, time: 15.00sec
selbiges im Log:
2018.03.29 12:17:45 3: DbLog logdb: reduceLogNbl requested with DAYS=270, AVERAGE=HOUR, INCLUDE=Luftdaten_remote:.*
2018.03.29 12:18:00 3: DbLog logdb: reduceLogNbl finished. Rows processed: 0, deleted: 0, updated: 0, time: 15.00sec
So, jetzt die Quizfrage:
Was ist an meinem Befehl falsch und wie wäre der richtige? :)
In der db sind von dem Sensor knapp 319K Einträge.
__Luftdaten_remote__/__COUNT_history__no_aggregation 318688
Ich habe den Code gerade nicht vor mir ... Aber schreibe das include mal groß.
Sind die Trackingsäfte auch Zahlen und keine Strings ?
Grüße
Ja, sind Zahlen.
Das include nimmt er ja an, sieht mal im Log.
Ich denke der Syntax von Device:Reading passt ihm nicht.
Zitat von: CommandREFOptional kann als letzer Parameter "INCLUDE=Database-deviceRegExp:Database-ReadingRegExp" angegeben werden um die auf die Datenbank ausgeführte SELECT-Abfrage einzugrenzen, was die RAM-Belastung verringert und die Performance erhöht. (Wildcards sind % und _)
Und hier das entspr. Code: my $sth_get = $dbh->prepare("SELECT TIMESTAMP,DEVICE,'',READING,VALUE FROM history WHERE "
.($a[-1] =~ /^INCLUDE=(.+):(.+)$/i ? "DEVICE like '$1' AND READING like '$2' AND " : '')
."TIMESTAMP < $cmd ORDER BY TIMESTAMP ASC"); # '' was EVENT, no longer in use
Deswegen sind SQL Wildcards zu nutzen.
mit Device:% hatte ich es auch versucht, gleiches Ergebnis.
Die Doku spricht hier etwas widersprüchlich. "ReadingRegExp" und SQL wildcard. RegEx wäre für mich ".*" für "alles"
SQL sieht "%" für "alles"
Aber wie muss dann der Befehl aussehen damit er funktioniert?
Device:.* sowie Device:% gehen beide nicht.
OK, nochmal getestet mit "%", das geht wirklich.
War mir sicher das auch versucht zu haben.
Dann wäre nur noch ein Verbesserungsvorschlag von mir die commandref anzupassen. :-)
Danke euch beiden auf jeden Fall!
funktionierender Befehl:
set logdb reduceLogNbl 270 average include=Luftdaten_remote:%
OK, nehme ich mit und arbeite es in die commandref beim nächsten Release mit ein.
Nebenbei ... Was doch die Worterkennung auf einem Tablet für Mist produziert .... "Trackingsäfte" siehe oben :D
Zitat von: DS_Starter am 29 März 2018, 15:09:07
OK, nehme ich mit und arbeite es in die commandref beim nächsten Release mit ein.
Nebenbei ... Was doch die Worterkennung auf einem Tablet für Mist produziert .... "Trackingsäfte" siehe oben :D
danke! macht es für den nächsten dann bestimmt einfacher. :)
Ja, Autokorrektur ist immer wieder "super" *lach*
Noch eine Nachfrage, ich stell mich aber bestimmt nur wieder blöd an. :-)
Wenn ich mehrere Device:Reading Kombis habe so werden die nach Commandref per Komma getrennt.
der hier:
set logdb reduceLogNbl 150 average include=Luftdaten_remote:%,Aussen%:%
mag aber nichts machen:
2018.03.29 20:52:59 3: DbLog logdb: reduceLogNbl requested with DAYS=150, AVERAGE=HOUR, INCLUDE=Luftdaten_remote:%,Aussen%:%
2018.03.29 20:53:06 3: DbLog logdb: reduceLogNbl finished. Rows processed: 0, deleted: 0, updated: 0, time: 7.00sec
wo steckt mein Fehler?
ZitatWenn ich mehrere Device:Reading Kombis habe so werden die nach Commandref per Komma getrennt.
Ja, stimmt. Aber nur bei EXCLUDE ;)
INCLUDE kennt nur eine Device:Reading-Angabe
Grüße
Heiko
Zitat von: DS_Starter am 29 März 2018, 21:15:20
Ja, stimmt. Aber nur bei EXCLUDE ;)
INCLUDE kennt nur eine Device:Reading-Angabe
damn! Wo Du Recht hast. ;-) danke!
Zitat von: DS_Starter am 29 März 2018, 21:15:20
Ja, stimmt. Aber nur bei EXCLUDE ;)
INCLUDE kennt nur eine Device:Reading-Angabe
Ein Test mit EXCLUDE:
2018.03.29 21:31:55 3: DbLog logdb: reduceLogNbl requested with DAYS=180, AVERAGE=HOUR, EXCLUDE=Energiekosten:%,Verbrauch:%
2018.03.29 21:32:19 1: PERL WARNING: Use of uninitialized value $day in numeric ne (!=) at ./FHEM/93_DbLog.pm line 4167.
2018.03.29 21:32:19 1: PERL WARNING: Use of uninitialized value $day in numeric ne (!=) at ./FHEM/93_DbLog.pm line 4168.
2018.03.29 21:32:19 1: PERL WARNING: Use of uninitialized value $hour in numeric ne (!=) at ./FHEM/93_DbLog.pm line 4369.
2018.03.29 21:32:19 1: PERL WARNING: Use of uninitialized value $day in numeric ne (!=) at ./FHEM/93_DbLog.pm line 4163.
2018.03.29 21:32:19 3: DbLog logdb: reduceLogNbl finished. Rows processed: 0, deleted: 0, updated: 0, time: 24.00sec
Hier könnte es allerdings sein dass auch NICHT numerische Werte enthalten sind.
ZitatHier könnte es allerdings sein dass auch NICHT numerische Werte enthalten sind.
nichtnumerische Daten kannst du mit reduceLog nicht verarbeiten. Dafür kannst du delSeqDoublets im DbRep verwenden.
Die Warnungen sind vernachlässigbar, vielleicht bekomme ich die mal mit weg.
Zitat von: DS_Starter am 29 März 2018, 21:56:30
nichtnumerische Daten kannst du mit reduceLog nicht verarbeiten. Dafür kannst du delSeqDoublets im DbRep verwenden.
Die Warnungen sind vernachlässigbar, vielleicht bekomme ich die mal mit weg.
Ja, dass er die nicht verarbeitet ist klar, hätte nur gedacht dass er alle numerischen readings macht und die nicht numerischen ignoriert.
Wenn das nicht der Fell ist muss ich viele Einzelschritte machen. Geht auch wenns sein muss.
Bin gerade mit dem Reduce am testen. Hab dazu meinen Haupt-FHEM PI geklont.
kann also nichts kaputt gehen. :)
ZitatJa, dass er die nicht verarbeitet ist klar, hätte nur gedacht dass er alle numerischen readings macht und die nicht numerischen ignoriert.
Da bin ich mir nicht so sicher. Diese Funktion hat ein Entwicklerkollege vor mir geschrieben.
Ich müßte mich da erstmal intensiver einlesen um die Frage fundiert beantworten zu können.
Musst du wohl zunächst mal mit Tests leben, komme erst nach Ostern wieder zu mehr ;)
kein Problem.
Deswegen ja der Klon, da kann nichts schief gehen bis ich meine Aufräum-Befehle zusammen habe. :-)
Na dann noch viel Spass und schöne Ostern !
LG,
Heiko