Hallo Zusammen,
ich bin dabei die Plots auf das DB Log umzustellen, allerdings machen einige Geräte Probleme, es werden einfach nur Leere Werte in die DB geschrieben.
Man sieht in der Tabelle sogar das korrekte Event mit Wert, aber in Value kommt nix an.
Hat jemand einen Tipp für mich? siehe Screenshot.
Gruß Michael
Internals:
COLUMNS field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
CONFIGURATION ./db.conf
DEF ./db.conf .*:.*
FUUID 6201890a-f33f-6442-eb6f-384e7eb664be6c44
FVERSION 93_DbLog.pm:v4.12.7-s25800/2022-03-08
MODE asynchronous
MODEL MYSQL
NAME LogDB
NR 956
NTFY_ORDER 50-LogDB
PID 31056
REGEXP .*:.*
STATE Commit already running - resync at NextSync
TYPE DbLog
UTF8 1
dbconn mysql:database=fhem;host=192.168.69.116;port=3306
dbuser fhem
HELPER:
COLSET 1
DEVICECOL 64
EVENTCOL 512
LASTLIMITRUNTIME 1651645096.60639
OLDSTATE Commit already running - resync at NextSync
PACKAGE main
READINGCOL 64
TC current
TH history
TYPECOL 64
UNITCOL 32
VALUECOL 128
VERSION 4.12.7
READINGS:
2022-05-04 08:18:16 CacheOverflowLastNum 24117
2022-05-04 05:40:49 CacheOverflowLastState exceeded
2022-05-04 08:18:31 CacheUsage 26255
2022-05-04 08:18:16 NextSync 2022-05-04 08:18:46 or if CacheUsage 2000 reached
2022-05-04 05:26:25 background_processing_time 24.6103
2022-03-28 18:04:22 reduceLogState reduceLogNbl 7 average started
2022-05-04 05:26:25 sql_processing_time 17.9663
2022-05-04 08:18:16 state Commit already running - resync at NextSync
Attributes:
DbLogExclude .*
DbLogSelectionMode Exclude/Include
DbLogType Current/History
addStateEvent 0
asyncMode 1
bulkInsert 1
cacheEvents 2
cacheLimit 2000
defaultMinInterval .*::120::force
disable 0
room System->Logs
showproctime 1
userReadings DbFileSize:reduceLogState.* { (split(' ',`cat /media/nas/Downloads/db.log`))[0] }
verbose 1
Nach ca. 8 Stunden debugging habe ich festgestellt das einige Module eine Aufbereitung für DbLog zur Verfügung stellen.
sub DbLog_splitFn
Da die Felder die mich interessieren aus dem statistics Modul kommen, sind diese dem Entwickler meines 73_SolvisClient.pm Moduls natürlich nicht bekannt.
Leider hat das 73_SolvisClient.pm Modul dann einfach garkeinen Wert zurück gegeben, das konnte ich jetzt fixen.
Der else Teil ist von mir.
#####################################
#
# DbLog event interpretation
#
sub DbLog_splitFn {
my $event = shift;
my $device = shift;
my %ChannelDescriptions = %{$devicesChannelDescriptions{$device}};
my ($reading, $value, $unit);
my @splited = split(/ /,$event);
$reading = $splited[0];;
$reading =~ tr/://d;
$unit = '';
if ( defined( $ChannelDescriptions{$reading}{Unit} ) ) {
$unit = $ChannelDescriptions{$reading}{Unit};
$value = $splited[1];
}else{
$value = shift @splited;
$value = join(" ", @splited);
}
return ($reading, $value, $unit);
} # end DbLog_splitFn
1;
Jetzt kommt im Log zwar keine Einheit an, aber wenigstens Werte!
Gruß Michael