FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Frank_Huber am 29 März 2018, 12:37:15

Titel: [gelöst] - DbLog - reducelog Syntax Frage
Beitrag von: Frank_Huber am 29 März 2018, 12:37:15
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
Titel: Antw:DbLog - reducelog Syntax Frage
Beitrag von: DS_Starter am 29 März 2018, 13:27:45
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
Titel: Antw:DbLog - reducelog Syntax Frage
Beitrag von: Frank_Huber am 29 März 2018, 13:30:47
Ja, sind Zahlen.
Das include nimmt er ja an, sieht mal im Log.

Ich denke der Syntax von Device:Reading passt ihm nicht.
Titel: Antw:DbLog - reducelog Syntax Frage
Beitrag von: amenomade am 29 März 2018, 13:38:21
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 _)
Titel: Antw:DbLog - reducelog Syntax Frage
Beitrag von: amenomade am 29 März 2018, 13:45:37
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.
Titel: Antw:DbLog - reducelog Syntax Frage
Beitrag von: Frank_Huber am 29 März 2018, 14:48:32
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:%
Titel: Antw:[gelöst] - DbLog - reducelog Syntax Frage
Beitrag 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
Titel: Antw:[gelöst] - DbLog - reducelog Syntax Frage
Beitrag von: Frank_Huber am 29 März 2018, 15:19:44
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*
Titel: Antw:DbLog - reducelog Syntax Frage
Beitrag von: Frank_Huber am 29 März 2018, 20:56:05
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?
Titel: Antw:DbLog - reducelog Syntax Frage
Beitrag von: DS_Starter am 29 März 2018, 21:15:20
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
Titel: Antw:DbLog - reducelog Syntax Frage
Beitrag von: Frank_Huber am 29 März 2018, 21:22:42
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!
Titel: Antw:DbLog - reducelog Syntax Frage
Beitrag von: Frank_Huber am 29 März 2018, 21:35:12
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.
Titel: Antw:[gelöst] - DbLog - reducelog Syntax Frage
Beitrag von: DS_Starter am 29 März 2018, 21:56:30
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.
Titel: Antw:[gelöst] - DbLog - reducelog Syntax Frage
Beitrag von: Frank_Huber am 29 März 2018, 22:00:56
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. :)
Titel: Antw:[gelöst] - DbLog - reducelog Syntax Frage
Beitrag von: DS_Starter am 29 März 2018, 22:10:17
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  ;)
Titel: Antw:[gelöst] - DbLog - reducelog Syntax Frage
Beitrag von: Frank_Huber am 29 März 2018, 22:14:13
kein Problem.
Deswegen ja der Klon, da kann nichts schief gehen bis ich meine Aufräum-Befehle zusammen habe. :-)
Titel: Antw:[gelöst] - DbLog - reducelog Syntax Frage
Beitrag von: DS_Starter am 29 März 2018, 22:28:19
Na dann noch viel Spass und schöne Ostern !

LG,
Heiko