[Gelöst] "Defining DbLog SVG-Plots with :CURRENT is deprecated" Fehlerbehebung?

Begonnen von bejxonojo, 10 April 2020, 12:13:50

Vorheriges Thema - Nächstes Thema

bejxonojo

Hallo Zusammen,

ich habe meine FHEM Installation vor kurzem in Docker umgezogen.
Nachdem ich die größeren Umstellungen und nötigen Anpassungen erledigt hatte und Fhem erfolgreich im Docker Container lief habe ich mir das Logfile nochmal angeschaut und festgestellt das ich noch einige Fehlermeldungen hatte.

Unter anderem einige "Defining DbLog SVG-Plots with :CURRENT is deprecated" was mich allerdings stutzig machte, denn ich habe die SVG Plots mit History als Quelle definiert...

Zum Beispiel bekomme ich wenn ich einen Raum mit fünf SVG Plots aufrufe folgende Logmeldungen:
2020.03.13 20:42:09 3: Defining DbLog SVG-Plots with :CURRENT is deprecated. Please define DbLog SVG-Plots with :HISTORY instead of :CURRENT. (define <mySVG> SVG <DbLogDev>:<gplotfile>:HISTORY)
2020.03.13 20:42:09 3: Defining DbLog SVG-Plots with :CURRENT is deprecated. Please define DbLog SVG-Plots with :HISTORY instead of :CURRENT. (define <mySVG> SVG <DbLogDev>:<gplotfile>:HISTORY)
2020.03.13 20:42:09 3: Defining DbLog SVG-Plots with :CURRENT is deprecated. Please define DbLog SVG-Plots with :HISTORY instead of :CURRENT. (define <mySVG> SVG <DbLogDev>:<gplotfile>:HISTORY)
2020.03.13 20:42:09 3: Defining DbLog SVG-Plots with :CURRENT is deprecated. Please define DbLog SVG-Plots with :HISTORY instead of :CURRENT. (define <mySVG> SVG <DbLogDev>:<gplotfile>:HISTORY)
2020.03.13 20:42:09 3: Defining DbLog SVG-Plots with :CURRENT is deprecated. Please define DbLog SVG-Plots with :HISTORY instead of :CURRENT. (define <mySVG> SVG <DbLogDev>:<gplotfile>:HISTORY)


Die Plots sind aber folgendermaßen definiert:
define dblog_ReglerBad DbLog ./local_db.conf ReglerBad
attr dblog_ReglerBad DbLogType History

define SVG_ReglerBad_1 SVG dblog_ReglerBad:SVG_DBLOG_ReglerBad_1:HISTORY
attr SVG_ReglerBad_1 captionPos left
attr SVG_ReglerBad_1 label "Bad Ventil min.: $data{min3} %, max: $data{max3} %, last: $data{currval3} %"
attr SVG_ReglerBad_1 room HeatingPlots


Die gplot Datei sieht so aus:
Created by FHEM/98_SVG.pm, 2020-03-12 12:32:59
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ytics
set y2tics
set grid y2tics
set ylabel "Ventilposition (%)"
set y2label "Temperatur (°C)"
set yrange [0:100]
set y2range [10:30]

#dblog_ReglerBad ReglerBad:measured-temp
#dblog_ReglerBad ReglerBad:desired-temp
#dblog_ReglerBad ReglerBad:actuator
#dblog_BadTemp BadTemp:temperature

plot "<IN>" using 1:2 axes x1y2 title 'Gemessen' ls l0fill lw 2 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Gewünscht' ls l1fill lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Ventilpos' ls l2 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'ExternerSensor' ls l5 lw 1 with lines


Wenn ich verbose auf 5 hochsetze bekomme ich als Log Ausgabe:
2020.03.13 20:49:32 5: dblog_ReglerBad - SQL-result -> TS: 2020-03-13 20:44:57, DEV: ReglerBad, RD: actuator, VAL: 0

hier scheint es zu krachen >>> 2020.03.13 20:49:32 5: Cmd: >get dblog_BadTemp CURRENT INT 2020-03-12_20:50:00 2020-03-13_20:49:59 BadTemp:temperature<

2020.03.13 20:49:32 3: Defining DbLog SVG-Plots with :CURRENT is deprecated. Please define DbLog SVG-Plots with :HISTORY instead of :CURRENT. (define <mySV$
2020.03.13 20:49:32 4: DbLog dblog_BadTemp -> ################################################################
2020.03.13 20:49:32 4: DbLog dblog_BadTemp -> ###                  new get data for SVG                    ###
2020.03.13 20:49:32 4: DbLog dblog_BadTemp -> ################################################################
2020.03.13 20:49:32 4: DbLog dblog_BadTemp -> main PID: 6395, secondary PID: 6395
2020.03.13 20:49:32 4: dblog_BadTemp - Processing Statement:
SELECT
                       DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i:%s'),
                       DEVICE,
                       READING,
                       VALUE
                        FROM history WHERE 1=1 AND DEVICE = 'BadTemp' AND READING = 'temperature' AND TIMESTAMP >= STR_TO_DATE('2020-03-12 20:50:00', '%Y-%m$
2020.03.13 20:49:32 5: dblog_BadTemp - SQL-result -> TS: 2020-03-12 20:50:24, DEV: BadTemp, RD: temperature, VAL: 21.1
2020.03.13 20:49:32 5: dblog_BadTemp - SQL-result -> TS: 2020-03-12 21:00:25, DEV: BadTemp, RD: temperature, VAL: 21.1
2020.03.13 20:49:32 5: dblog_BadTemp - SQL-result -> TS: 2020-03-12 21:10:26, DEV: BadTemp, RD: temperature, VAL: 21
2020.03.13 20:49:32 5: dblog_BadTemp - SQL-result -> TS: 2020-03-12 21:20:28, DEV: BadTemp, RD: temperature, VAL: 21
2020.03.13 20:49:32 5: dblog_BadTemp - SQL-result -> TS: 2020-03-12 21:30:33, DEV: BadTemp, RD: temperature, VAL: 20.9
2020.03.13 20:49:32 5: dblog_BadTemp - SQL-result -> TS: 2020-03-12 21:40:34, DEV: BadTemp, RD: temperature, VAL: 20.8
2020.03.13 20:49:32 5: dblog_BadTemp - SQL-result -> TS: 2020-03-12 21:50:39, DEV: BadTemp, RD: temperature, VAL: 21+


In der zweiten Zeile kommt es zum Aufruf von get mit dem Parameter "CURRENT" was zu der Fehlermeldung im Log führt, da in 93_DbLog.pm folgendes konfiguriert ist:
sub DbLog_Get($@) {
  my ($hash, @a) = @_;
  my $name    = $hash->{NAME};
  my $utf8    = defined($hash->{UTF8})?$hash->{UTF8}:0;
  my $history = $hash->{HELPER}{TH};
  my $current = $hash->{HELPER}{TC};
  my ($dbh,$err);

  return DbLog_dbReadings($hash,@a) if $a[1] =~ m/^Readings/;

  return "Usage: get $a[0] <in> <out> <from> <to> <column_spec>...\n".
     "  where column_spec is <device>:<reading>:<default>:<fn>\n" .
     "  see the #DbLog entries in the .gplot files\n" .
     "  <in> is not used, only for compatibility for FileLog, please use - \n" .
     "  <out> is a prefix, - means stdout\n"
     if(int(@a) < 5);

  shift @a;
  my $inf  = lc(shift @a);
  my $outf = lc(shift @a);               # Wert ALL: get all colums from table, including a header
                                         # Wert Array: get the columns as array of hashes
                                         # Wert INT: internally used by generating plots
  my $from = shift @a;
  my $to   = shift @a;                   # Now @a contains the list of column_specs
  my ($internal, @fld);

  if($inf eq "-") {
      $inf = "history";
  }

  if($outf eq "int" && $inf eq "current") {
      $inf = "history";
      Log3 $hash->{NAME}, 3, "Defining DbLog SVG-Plots with :CURRENT is deprecated. Please define DbLog SVG-Plots with :HISTORY instead of :CURRENT. (define$
  }


Meine Frage ist jetzt, wo liegt der Fehler?
Ist er in der der Fhem config oder in einem Modul zu suchen?

Ach ja, hier noch die Versionen der jeweiligen Module:
File                  Rev   Last Change
93_DbLog.pm           21483 2020-03-22 16:06:11Z DS_Starter
98_SVG.pm             21338 2020-03-02 16:57:22Z rudolfkoenig
svg.js                20860 2019-12-31 12:20:15Z rudolfkoenig


lg Stefan

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

bejxonojo

Hey amenomade, Danke fürs Zeit nehmen und durchlesen.

Zitatdblog_BadTemp oder dblog_ReglerBad?
Stimmt da hab ich im Eifer des Gefechts geschludert...

Die Fehlermeldung kommt bei dblog_BadTemp:
2020.04.11 14:38:44 5: Cmd: >get dblog_BadTemp CURRENT INT 2020-04-10_14:40:00 2020-04-11_14:39:59 BadTemp:temperature<
2020.04.11 14:38:44 3: Defining DbLog SVG-Plots with :CURRENT is deprecated. Please define DbLog SVG-Plots with :HISTORY instead of :CURRENT. (define <mySVG> SVG <DbLogDev>:<gplotfile>:HISTORY)
2020.04.11 14:38:44 4: DbLog dblog_BadTemp -> ################################################################
2020.04.11 14:38:44 4: DbLog dblog_BadTemp -> ###                  new get data for SVG                    ###
2020.04.11 14:38:44 4: DbLog dblog_BadTemp -> ################################################################
2020.04.11 14:38:44 4: DbLog dblog_BadTemp -> main PID: 4586, secondary PID: 4586
2020.04.11 14:38:44 4: dblog_BadTemp - Processing Statement:
SELECT
                      DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i:%s'),
                      DEVICE,
                      READING,
                      VALUE
                       FROM history WHERE 1=1 AND DEVICE = 'BadTemp' AND READING = 'temperature' AND TIMESTAMP >= STR_TO_DATE('2020-04-10 14:40:00', '%Y-%m-%d %H:%i:%s') AND TIMESTAMP <= STR_TO_DATE('2020-04-11 14:39:59', '%Y-%m-%d %H:%i:%s') ORDER BY TIMESTAMP
2020.04.11 14:38:44 5: dblog_BadTemp - SQL-result -> TS: 2020-04-10 14:47:44, DEV: BadTemp, RD: temperature, VAL: 23.1


Definition dblog & SVG
define dblog_BadTemp DbLog ./local_db.conf BadTemp:.*
attr dblog_BadTemp DbLogType Current/History

define SVG_BadTemp_1 SVG dblog_BadTemp:SVG_DBLOG_BadTemp_1:HISTORY
attr SVG_BadTemp_1 captionPos left
attr SVG_BadTemp_1 label "Bad min.: $data{min1} °C $data{min2} % max: $data{max1} °C $data{max2} % last: $data{currval1} °C $data{currval2} %"


gplot Datei:
# Created by FHEM/98_SVG.pm, 2018-09-13 19:18:10
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ytics
set y2tics
set grid ytics y2tics
set ylabel "Humidity"
set y2label "Temperature"

#dblog_BadTemp BadTemp:temperature
#dblog_BadTemp BadTemp:humidity
#dblog_BadTemp BadTemp:dewpoint
#dblog_FensterBad FensterBad:state

plot "<IN>" using 1:2 axes x1y2 title 'Temperature' ls l0fill lw 1 with histeps,\
     "<IN>" using 1:2 axes x1y1 title 'Humidity' ls l2fill lw 1 with histeps,\
     "<IN>" using 1:2 axes x1y2 title 'Dewpoint' ls l1fill lw 1 with histeps,\
     "<IN>" using 1:2 axes x1y2 title 'Window_open' ls l6fill lw 1 with steps


list DEF=.*CURRENT findet nur die Definition eines SVG Plot für einen Temperatursensor (der aber in ein FileLog abgespeichert wird) und keine Probleme macht.

Habe auch ausprobiert ob es an der Definition der DbLogDevices liegt und statt Current/History mal auf nur History umgestellt, aber ohne Erfolg. Die Fehlermeldungen kamen trotzdem noch...

bejxonojo

Da es hier ein wenig stagniert habe ich den Post im Automatisierungs Unterforum verlinkt um die Maintainer des DbLogs auch anzufragen.

Wenn das gegen Forumsregeln verstoßen sollte bitte bescheid sagen...

lg Stefan

DS_Starter

Hallo zusammen,

ich kann aus den bisherigen Infos keinen Ansatz erkennen woher dieser Aufruf kommt.
Festzustellen ist aber dass der an DbLog übergebene Datenabruf

 
get dblog_BadTemp CURRENT INT 2020-04-10_14:40:00 2020-04-11_14:39:59 BadTemp:temperature


zu dem Logeintrag führt. DbLog intern wird dann automatisch auf history umgeschaltet. Deswegen funktioniert alles. Nur die Meldung stört natürlich

  if($outf eq "int" && $inf eq "current") {
      $inf = "history";
      Log3 $hash->{NAME}, 3, "Defining DbLog SVG-Plots with :CURRENT is deprecated. Please define DbLog SVG-Plots with :HISTORY instead of :CURRENT. (define$
  }


Und die Ursache sollte gefunden werden.
Der Aufruf wird durch das SVG-Modul generiert, wobei auch hier nicht die Ursache im Modul zu suchen ist, sondern in der Definition. Insofern war

list DEF=.*CURRENT

genau richtig. Die Definition des SVG Devices ist dabei wesentlich:

<DbLogDev>:<gplotfile>:HISTORY

Schleierhaft ist mir natürlich auch wieso du nur eins findest was lt. deiner Angabe nicht beteiligt sein kann. Trotzdem würde ich dir vorschlagen das gefundene SVG Device entsprechend zu ändern.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

bejxonojo

Hallo Heiko,

Danke für deine Antwort.
Bei dem einen SVG Device das gefunden wurde handelt es sich um den Plot eines KS300 (Kombisensor KS300 misst Regen, Windgeschwindigkeit, Temperatur und Luftfeuchtigkeit)
defmod SVG_FileLog_USBWX_ks300_2 SVG FileLog_USBWX_ks300:SVG_FileLog_USBWX_ks300_2:HISTORY
attr SVG_FileLog_USBWX_ks300_2 captionPos left
attr SVG_FileLog_USBWX_ks300_2 label "Windgeschwindigkeit Min $data{min1}, Max $data{max1}, Last $data{currval1}"

defmod SVG_FileLog_USBWX_ks300_1 SVG FileLog_USBWX_ks300:SVG_FileLog_USBWX_ks300_1:HISTORY
attr SVG_FileLog_USBWX_ks300_1 captionPos left
attr SVG_FileLog_USBWX_ks300_1 label "Südseite min.: $data{min1} °C $data{min2} % max: $data{max1} °C $data{max2} % last: $data{currval1} °C $data{currval2} %"


Dieser wird aus diesem Filelog gespeist:
defmod FileLog_USBWX_ks300 FileLog ./log/KS300-%Y.log USBWX_ks300:T:.*
attr FileLog_USBWX_ks300 logtype temp4rain10:Temp/Rain,hum6wind8:Wind/Hum,text


Das Filelog wird von einem USB-WDE1 befüllt:
defmod USBWDE1 USBWX /dev/serial/by-path/USBWX
defmod USBWX_ks300 USBWX 9


Hab die beiden SVG Devices die ich zum plotten nehme mal umgestellt auf HISTORY, was mich gleich wieder daran erinnert hat warum ich diese vorher auf CURRENT stehen hatte.
Der Plot funktioniert nur mit CURRENT, bei HISTORY bleiben die Plots leer und es kommt im Log die Fehlermeldung:
2020.04.17 06:26:13 1: USBWX_ks300 => No Get function (?) implemented
2020.04.17 06:26:50 1: USBWDE1 => No Get function (?) implemented
2020.04.17 06:27:10 1: USBWDE1 => No Get function (?) implemented
2020.04.17 06:27:12 1: USBWX_ks300 => No Get function (?) implemented
2020.04.17 06:28:51 1: USBWX_ks300 => No Get function (?) implemented
2020.04.17 06:29:01 1: USBWDE1 => No Get function (?) implemented


Erneute abfrage mit list DEF=.*CURRENT zeigt jetzt keine Ergebnisse mehr.
Die Fehlermeldungen "Defining DbLog SVG-Plots with :CURRENT is deprecated." kommen aber immer noch...  :'(

Gibt es noch weitere Möglichkeit die Aufrufe genauer zu Debuggen?

lg Stefan

amenomade

Ja, bei FileLog gibt es HISTORY nicht. Entweder CURRENT, oder explizit eine Dateiname.
Du kannst versuchen, verbose 5 auf dem verdächtigen Plot zu setzen, und dann in der Log schauen

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

DS_Starter

Ich habe mal in SVG reingeschaut. Leider bekommt man auch mit verbose 5 nicht das aufrufende Device heraus.
In das angehängte SVG.pm habe ich zur Fehlersuche eine Logausgaebe mit verbose 1 eingebaut.

Jedesmal wenn ein SVG aufgerufen wird, kommt die Ausgabe:

2020.04.17 22:30:34.047 1: SVG caller device: SVG_LogDB_Dum.Energy, Logdevice: LogDB, SRC: LogDB

Das caller device zeigt wo es herkommt.  Logdevice und SRC müssen gleich sein, sonst kommt die Fehlermeldung.
Diese Ausgabe kommt dann unmittelbar vor der Fehlermeldung "Defining DbLog SVG-Plots with :CURRENT is deprecated ..."

Vielleicht bekommst du es damit heraus.
Wenn es sich bewährt, könnte Rudi es vllt. im SVG mit verbose 5 z.B. übernehmen.

File ist angehängt. Nach /opt/fhem/FHEM kopieren und dann restarten.
Siehe #8

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Ich denke ich habs gefunden. In deinem gplot-File ist der rote Teil unpassend:

#dblog_BadTemp BadTemp:temperature
#dblog_BadTemp BadTemp:humidity
#dblog_BadTemp BadTemp:dewpoint
#dblog_FensterBad FensterBad:state

Es wird ein anderes Device abgefragt als in deiner Definition

define SVG_BadTemp_1 SVG dblog_BadTemp:SVG_DBLOG_BadTemp_1:HISTORY

Das führt in der SVG-Logik dazu dass beim call CURRENT mitgegeben wird.
Das kannst du mit dem angehängten SVG.pm verifizieren.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

bejxonojo

Wow Heiko, dickes Dankeschön fürs dranbleiben/verfolgen.
Du hast die Wurzel des Übels gefunden ;D

Ich hab die "definitionsfremden" Einträge aus den Plots rausgenommen und die Fehlermeldungen sind verschwunden :D.

Jetzt wäre aber meine andere Frage, wie fügt man diese Einträge von "fremden" DbLogs in einen Plot ein ohne Fehlermeldungen zu generieren?
Ich habe zum Beispiel bei einem Plot von einem Heizungsregler neben den Werten des Reglers selbst noch den Wert eines Temperatursensors der im selben Raum steht im SVG anzeigen wollen.

Soll ich erst mal dieses Thema auf gelöst setzen und ein neues Thema zu der Frage aufmachen (würde es dann hier verlinken für andere Interessierte)?

DS_Starter

#10
Morgen Stefan,

Zitat
Jetzt wäre aber meine andere Frage, wie fügt man diese Einträge von "fremden" DbLogs in einen Plot ein ohne Fehlermeldungen zu generieren?

Ich wußte dass die Frage jetzt kommt.  :D

Also die "unsaubere" Lösung wäre verbose 2 im DbLog Device zu setzen und gut.
Aber meiner Meinung nach müßte dieser Fall im SVG Modul berücksichtigt werden weil es sicherlich garnicht so selten vorkommt dass verschiedene Datenquellen ausgelesen werden sollen.

Das ist eine Frage an Rudolf König der hier sicherlich mitliest.

@Rudi ... ich hatte in der Zeile 1215 im SVG entdeckt dass die folgende Prüfung / Ersetzung stattfiindet:


    my $fname = ($defs{$d}{LOGDEVICE} && $src eq $defs{$d}{LOGDEVICE} ?
                $defs{$d}{LOGFILE} : "CURRENT");


Das führt zu dem oben untersuchten Problem wenn verschiedenene Datenquellen (=DbLog-Datenbanken) eingebunden werden sollen. Ich konnte bisher nicht ergründen wozu diese Prüfung dient.
Vielleicht kannst du dir das mal anschauen und evtl. ist es "heutzutage" nicht mehr nötig es zu tun.

EDit:
Zitat
Soll ich erst mal dieses Thema auf gelöst setzen und ein neues Thema zu der Frage aufmachen (würde es dann hier verlinken für andere Interessierte)?
Warte mal ob sich Rudi noch dazu meldet, wenn nicht kannst du gern ein neues Thema aufmachen mit dem konkreten Bezug.

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

rudolfkoenig

Ist historisch gewachsen:
- am Anfang (TM) musste man bei SVG / FileLog angeben, welche Datei man haben will, CURRENT stand als Abkuerzung fuer die jeweils aktuelle Datei
- spaeter hat FileLog gelernt, bei CURRENT anhand der bei get geforderten Zeitstempel die richtige Datei zu finden (damit man die Historie anschauen kann), die Angabe der Dateiname war nicht notwendig.
- beim Einbau der Mehrfach-Quellen habe ich das ausgenutzt, und die Dateiname im .gplot auch nicht mehr gespeichert. Da ich bei FileLog-get aber etwas spezifizieren muss (die Schnittstelle hat sich nicht geaendert, und FileLog fuehrt die Berechnung nur bei CURRENT durch), wird CURRENT uebergeben.

Wieso reagiert DbLog so allergisch auf diese Angabe, wo es doch auch gut ohne auskommt?

DS_Starter

Hallo Rudi,

ZitatWieso reagiert DbLog so allergisch auf diese Angabe, wo es doch auch gut ohne auskommt?
Ist auch historisch gewachsen.  ;)  Es ist tatsächlich so, dass es diesen Logeintrag bereits 2016 gab, als ich das Modul in Pflege genommen hatte (gerade nochmal nachgeschaut).

Dieser Logeintrag weist den User darauf hin dass er die falsche Tabelle (current) anspricht und es ändern sollte. Das stimmt in der Regel wenn nicht der beschriebene Fall vorliegt und dadurch in dem Code die besagte Ersetzung stattfindet.

Im DbLog kann ich momentan anhand der übergebenen Daten nicht feststellen ob es tatsächlich eine Falschkonfiguration ist oder die besagte Ersetzung. Wäre es denn möglich in SVG diese Ersetzung nicht vorzunehmen, wenn der Typ von $defs{$d}{LOGDEVICE} DbLog ist ? Alternativ könnte ich auch ein Merkmal auswerten welches mir sagt, ob tatsächlich die current oder history Tabelle angesprochen wird, wenn das Merkmal mitgeliefert werden würde.

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

rudolfkoenig

ZitatWäre es denn möglich in SVG diese Ersetzung nicht vorzunehmen, wenn der Typ von $defs{$d}{LOGDEVICE} DbLog ist?
Was genau moechtest Du als Argument in diesem Fall haben?

DS_Starter

Also im SVG wird ja $hash->{LOGFILE} abgeleitet aus der DEF

  define SVG_BadTemp_1 SVG dblog_BadTemp:SVG_DBLOG_BadTemp_1:HISTORY

In dem Code

Zitat
my $fname = ($defs{$d}{LOGDEVICE} && $src eq $defs{$d}{LOGDEVICE} ?
                $defs{$d}{LOGFILE} : "CURRENT");

Wird $defs{$d}{LOGFILE} nicht verwendet und durch "CURRENT" ersetzt sobald die Datenquelle(n) nicht mit der Angabe im DEF ("dblog_BadTemp" z.B.) übereinstimmen.
Genau dieses Ersetzung ist ja nur bei Filelog sinnvoll wenn ich dich richtig verstanden habe. Bei DbLog ist sie kontraproduktiv. Wenn DbLog angesprochen wird, würde ich ohne die besagte Ersetzung den Inhalt von  $defs{$d}{LOGFILE} übermittelt bekommen.
Sollte dann CURRENT drin stehen, wäre es tatsächlich ein User Konfig-Fehler den ich anzeigen kann.
Mehr/zusätzliches brauche ich in dem Fall eigentlich nicht.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

rudolfkoenig

Entweder uebersiehst Du hier was, oder ich bin zu langsam heute, und verstehe Dich nicht :)

Die zitierte Programmzeile prueft, ob der Name in der .gplot Datei dem im aktuellen SVG referenzierten Logdevice entspicht.
Wenn ja, dann wird LOGFILE aus der (SVG) Definition genommen.
Wen nicht, dann weiss das Modul nicht, was es stattdessen nehmen soll, und verwendet CURRENT.

Ich koennte im "wenn nicht" Fall pruefen, ob die Quelle ein DbLog ist, und dann HISTORY statt CURRENT nehmen, dann muesstest Du die Warnung in DbLog nicht ausbauen. Den Sinn dieser Warnung habe ich aber noch nicht verstanden: wenn in DbLog_Get nur HISTORY sinnvoll ist, dann koennte man das doch stillschweigend setzen, oder uebersehe ich etwas?

DS_Starter

#16
Zitat
Die zitierte Programmzeile prueft, ob der Name in der .gplot Datei dem im aktuellen SVG referenzierten Logdevice entspicht.
Wenn ja, dann wird LOGFILE aus der (SVG) Definition genommen.
Wen nicht, dann weiss das Modul nicht, was es stattdessen nehmen soll, und verwendet CURRENT.
Ja, hab ich auch so verstanden. Du hast es nur besser ausgedrückt.  :)

ZitatIch koennte im "wenn nicht" Fall pruefen, ob die Quelle ein DbLog ist, und dann HISTORY statt CURRENT nehmen, dann muesstest Du die Warnung in DbLog nicht ausbauen.
Entweder so oder _keinerlei_ Ersetzung vornehmen (falls Quelle DbLog ist), was meine Idee war. Dann würde nämlich das drin stehen und an DbLog_Get übermittelt werden was der User im letzten Teil seiner SVG-Definition (CURRENT oder HISTORY) angegeben hat.

ZitatDen Sinn dieser Warnung habe ich aber noch nicht verstanden
Naja, es ist eigentlich nur ein Hinweis darauf, dass er die History-Tabelle benutzen soll. Früher "vor meiner Zeit" vermute ich mal dass es wohl üblich war Werte aus der Current Tabelle zu lesen und später gab es dann die History und die User mussten alles umstellen. Aber das ist eine reine Vermutung meinerseits.

Ich gebe dir recht, man könnte stillschweigend auch CURRENT akzeptieren und einfach stillschweigend in HISTORY umwandeln. Aber ich vermute dass gerade Anfänger dann wieder Fragezeichen bekommen weil sie glauben aus der Current Tabelle zu lesen wenn sie CURRENT angeben und solche Dinge. Deswegen würde ich die Warnung eigentlich gerne drin lassen als Hinweis für eine Fehlkonfiguration.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

rudolfkoenig

ZitatEntweder so oder _keinerlei_ Ersetzung vornehmen (falls Quelle DbLog ist), was meine Idee war.
Um die Diskussion abzukuerzen habe ich SVG.pm geaendert: falls im .gplot ein DbLog referenziert wird, wird immer das im SVG spezifizierte Logfile (Argument #3) verwendet, so wie Du es hier vorgeschlagen hast.

DS_Starter

Herzlichen Dank Rudi. Habe die Änderung bei mir auch nochmal kurz angetestet und funktioniert wie erwartet.

@bejxonojo ... mit der geänderten SVG kann man nun verschieden DbLog Datenquellen im .gplot-File angeben ohne dass diese Warnung erscheint. Nur wenn der User im SVG

define <mySVG> SVG <DbLogDev>:<gplotfile>:CURRENT

definiert, erfolgt die Meldung (berechtigterweise) weiterhin.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

bejxonojo

@Rudi, @Heiko Prima, vielen Dank funktioniert jetzt ohne Fehlermeldungen im Logfile  :)