FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Mad-at am 04 Januar 2023, 12:31:08

Titel: [Gelöst] DBLog logged einige Werte nicht mehr
Beitrag von: Mad-at am 04 Januar 2023, 12:31:08
Hallo!

Ich würde ein wenig Hilfe bei der Fehlersuche benötigen. Ich musste mein komplettes System wiederherstellen, dabei auch die MariaDB in die ich logge. Ohne Änderungen an der FHEM Konfiguration werden jetzt einige Readings nicht mehr geloggt. Der Status ist aber korrekt und ändert sich stetig. An DBlog exclude/include hat sich nichts geändert. Ich bekomme für mich kryptische Fehlermeldungen im FHEM Log:


2023.01.04 12:15:22 2: DbLog DBLogging - Error table history - DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 [for Statement "INSERT IGNORE INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES"] at ./FHEM/93_DbLog.pm line 2757.

2023.01.04 12:15:22 2: DbLog DBLogging - Transaction is switched off. Transferred data is lost.


Danke!
Matthias
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: betateilchen am 04 Januar 2023, 12:40:54
Das ist keine Anfängerfrage, sondern eine Problembeschreibung zu DbLog.
Das solltest Du im richtigen Unterforum schreiben bzw. diesen Thread dorthin verschieben, damit der Modulautor davon auch etwas mitbekommt.

https://forum.fhem.de/index.php/topic,13092.0.html
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: Mad-at am 04 Januar 2023, 13:18:35
Sorry ich fühl mich immernoch so anfängerig   :-[
Ich versuches...
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: DS_Starter am 04 Januar 2023, 13:37:15
Hallo Matthias,

bitte ein list deines DbLog Devices posten.
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: Mad-at am 04 Januar 2023, 14:00:59
Hallo DS_Starter,

vielen Dank, anbei:


Internals:
   COLUMNS    field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
   CONFIGURATION /opt/fhem/db.conf
   DEF        /opt/fhem/db.conf .*:.*
   FD         5
   FUUID      5d595aca-f33f-db1a-9fae-2143ffbee32056c7
   FVERSION   93_DbLog.pm:v5.5.9-s26923/2022-12-29
   MODE       asynchronous
   MODEL      MYSQL
   NAME       DBLogging
   NR         2
   NTFY_ORDER 50-DBLogging
   PID        5869
   REGEXP     .*:.*
   SBP_PID    5870
   SBP_STATE  running
   STATE      Another operation is in progress - resync at NextSync
   TYPE       DbLog
   UTF8       0
   dbconn     mysql:database=fhem;host=192.168.1.2;port=19648
   dbuser     fhemuser
   eventCount 29
   HELPER:
     COLSET     1
     DEVICECOL  64
     EVENTCOL   512
     LASTLIMITRUNTIME 1672837151.60521
     LONGRUN_PID 1672837151.60489
     OLDSTATE   Another operation is in progress - resync at NextSync
     PACKAGE    main
     READINGCOL 64
     TC         current
     TH         history
     TYPECOL    64
     UNITCOL    32
     VALUECOL   128
     VERSION    5.5.9
   Helper:
     DBLOG:
       CacheOverflowLastState:
         DBLogging:
           TIME       1672837181.58673
           VALUE      normal
       DBD::mysql::st execute failed:
         DBLogging:
           TIME       1672837025.06969
           VALUE      You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 [for Statement "INSERT IGNORE INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES"] at ./FHEM/93_DbLog.pm line 2755.
       state:
         DBLogging:
           TIME       1672837181.59546
           VALUE      Another operation is in progress - resync at NextSync
   OLDREADINGS:
   READINGS:
     2023-01-04 13:59:41   CacheOverflowLastNum 0
     2023-01-04 13:59:41   CacheOverflowLastState normal
     2023-01-04 13:59:46   CacheUsage      180
     2023-01-04 13:59:41   NextSync        2023-01-04 14:00:11 or when CacheUsage 250 is reached
     2023-01-04 13:59:41   state           Another operation is in progress - resync at NextSync
Attributes:
   DbLogExclude CacheOverflowLastNum.*
   DbLogSelectionMode Exclude/Include
   DbLogType  Current/History
   addStateEvent 0
   asyncMode  1
   bulkInsert 1
   cacheLimit 250
   commitMode basic_ta:off
   event-on-change-reading .*
   room       System
   useCharfilter 1
   verbose    3
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: DS_Starter am 04 Januar 2023, 14:25:51
Löche das Attr commitMode, setze  bulkInsert = 0 (evtl. bessere Fehlermitteilung) und verbose = 4.

Wenn der Fehler wieder auftaucht, bitte den Logausschnitt posten und den Inhalt von "set ... listCache".

Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: Mad-at am 04 Januar 2023, 15:27:29
Danke, hab ich gemacht, seit einem "shutdown restart" läuft es jetzt erstmal fehlerfrei (meine Log wird halt beängstigend groß grad...). Aber das Nicht-Loggen hat sich nicht gebessert. Im FHEM Log steht aber dass er es übermittelt


2023.01.04 15:09:49 4: DbLog DBLogging - ################################################################
2023.01.04 15:09:49 4: DbLog DBLogging - ###              start of new Logcycle                       ###
2023.01.04 15:09:49 4: DbLog DBLogging - ################################################################
2023.01.04 15:09:49 4: DbLog DBLogging - number of events received: 2 of device: AlleBewegungsmelderSperren
2023.01.04 15:09:49 4: DbLog DBLogging - check Device: AlleBewegungsmelderSperren , Event: setG1: on
2023.01.04 15:09:49 4: DbLog DBLogging - added event - Timestamp: 2023-01-04 15:09:49, Device: AlleBewegungsmelderSperren, Type: KNX, Event: setG1: on, Reading: setG1, Value: on, Unit:
2023.01.04 15:09:49 4: DbLog DBLogging - check Device: AlleBewegungsmelderSperren , Event: on
2023.01.04 15:09:49 4: DbLog DBLogging - added event - Timestamp: 2023-01-04 15:09:49, Device: AlleBewegungsmelderSperren, Type: KNX, Event: on, Reading: on, Value: , Unit:

[...]

2023.01.04 15:10:02 4: DbLog DBLogging - ################################################################
2023.01.04 15:10:02 4: DbLog DBLogging - ###              start of new Logcycle                       ###
2023.01.04 15:10:02 4: DbLog DBLogging - ################################################################
2023.01.04 15:10:02 4: DbLog DBLogging - number of events received: 2 of device: AlleBewegungsmelderSperren
2023.01.04 15:10:02 4: DbLog DBLogging - check Device: AlleBewegungsmelderSperren , Event: setG1: off
2023.01.04 15:10:02 4: DbLog DBLogging - added event - Timestamp: 2023-01-04 15:10:02, Device: AlleBewegungsmelderSperren, Type: KNX, Event: setG1: off, Reading: setG1, Value: off, Unit:
2023.01.04 15:10:02 4: DbLog DBLogging - check Device: AlleBewegungsmelderSperren , Event: off
2023.01.04 15:10:02 4: DbLog DBLogging - added event - Timestamp: 2023-01-04 15:10:02, Device: AlleBewegungsmelderSperren, Type: KNX, Event: off, Reading: off, Value: , Unit:


bzw.:


2023.01.04 15:10:40 4: DbLog DBLogging - ################################################################
2023.01.04 15:10:40 4: DbLog DBLogging - ###              start of new Logcycle                       ###
2023.01.04 15:10:40 4: DbLog DBLogging - ################################################################
2023.01.04 15:10:40 4: DbLog DBLogging - number of events received: 2 of device: Aussentemperatur
2023.01.04 15:10:40 4: DbLog DBLogging - check Device: Aussentemperatur , Event: getG1: 8.16
2023.01.04 15:10:40 4: DbLog DBLogging - check Device: Aussentemperatur , Event: 8.16
2023.01.04 15:10:40 4: DbLog DBLogging - added event - Timestamp: 2023-01-04 15:10:40, Device: Aussentemperatur, Type: KNX, Event: 8.16, Reading: 8.16, Value: , Unit:


Also offenbar hat das eine mit dem anderen nichts zu tun?
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: DS_Starter am 04 Januar 2023, 15:59:17
Kannst wieder auf verbose 3 wechseln.

Das Thema ist halt das berühmt / berüchtigte loggen von Reading "state".
Der Datensatz kommt ohne Readingname im Event :

Zitatadded event - Timestamp: 2023-01-04 15:09:49, Device: AlleBewegungsmelderSperren, Type: KNX, Event: on, Reading: on, Value: , Unit:

Dadurch klappt das parsen nicht.
Das KNX-Modul hat dankenswerter Weise eine sogenannte DbLog-SplitFn eingebaut (KNX_DbLog_split).
Die scheint aber das Reading "state" nicht richtig zu behandeln. Das solltest du dem Maintainer des Moduls melden.

Übergangsweise kannst du versuchen ob im DbLog das Attr addStateEvent = 0 dir hilft.


Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: Mad-at am 04 Januar 2023, 16:27:02
Ah cool, das hat es gebracht. Dann muss das ein Problem mit der Version ab 30.12. sein, denn bis dahin hat es problemlos ohne addStateEvent geklappt.

Vielen vielen lieben Dank!
Jetzt hoffe ich nur dass der Database Error auch weg ist und weg bleibt  :)
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: DS_Starter am 04 Januar 2023, 16:33:17
Zitat
Dann muss das ein Problem mit der Version ab 30.12. sein, denn bis dahin hat es problemlos ohne addStateEvent geklappt.
Ich glaube es dir, allerdings ist die Eventverarbeitung identisch zur V4.... so ganz gehe ich über diese Brücke noch nicht.

Zitat
Jetzt hoffe ich nur dass der Database Error auch weg ist und weg bleibt  :)
Das denke ich. Allerdings mache ich mir noch Gedanken weil ein undefined Value-Feld nicht zu einem solchen Fehler führen darf.
Ich habe auch schon eine Idee die ich teste und wenn es klappt ins nächste Release kommt.

LG
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: erwin am 04 Januar 2023, 18:00:52
Sorry Mad-at,
ja ich habe da etwas im KNX-modul geändert, was das Problem ausgelöst hat - sorry!

@Heiko:
ich war mir sicher, das ich das checken auf state / nostate nicht mehr brauche, weil in deiner DbLog_Log folgendes vorkommt:
my $events = deviceEvents($dev_hash, AttrVal($name, "addStateEvent", 1));
  return if(!$events);

... und wenn ich das richtig verstehe, ergibt AttrVal  '1'  falls KEIN attr im DbLog-device gesetzt ist...
... und deviceEvents($hash,1) sollte lt. wiki das "state" im array liefern ? https://wiki.fhem.de/wiki/DevelopmentModuleAPI#deviceEvents (https://wiki.fhem.de/wiki/DevelopmentModuleAPI#deviceEvents)
Wo ist der Wurm ?
PS: ich kann natürlich die Änderung im KNX Modul jederzeit zurückdrehen- kein Problem!
l.g. erwin
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: DS_Starter am 04 Januar 2023, 18:40:30
Moin erwin,

also ich finde erstmal wirklich gut dass du eine DbLog_SplitFn drin hast.  :)

Die sieht so aus:


sub KNX_DbLog_split {
my ($event, $device) = @_;

my $unit = q{}; # default

# split event into reading & value
my ($reading, $value) = split(/:\s/x, $event, 2);
if (! defined($reading)) {
$reading = 'state';
$value   = $event;
}
.....


"state" geht verloren, wenn DbLog deine Fn aufruft und in $event "state" enthält , z.B.  "state: 34".
EDIT: das war Unsinn von mir ... Knoten im Hirn .  ;)
Wenn Mad-at im KNX verbose 5 einstellt, müsste man das Split-Ergebnis sehen.
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: erwin am 04 Januar 2023, 18:49:08
Hi Heiko,
ja state geht verloren, da funktioniert das split nicht! - mein Fehler!
.. ich werde das heute noch fixen.
Die Frage bleibt: ist das wiki falsch bez. deviceEvents ... oder...?
offen gesagt, den code deviceEvents (in der fhem.pl) durchschau ich nicht.
l.g. erwin
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: DS_Starter am 04 Januar 2023, 18:51:59
Zitat
ja state geht verloren, da funktioniert das split nicht! - mein Fehler!
:D ... also nach zweimal hingucken dachte ich, dass meine Schlußfolgerung falsch war ...

Ich schaue mir die deviceEvents sub auch mal an.
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: erwin am 04 Januar 2023, 19:23:27
So Mad-at & Heiko,
fix für KNX-modul ist am SVN,
bitte morgen um update & test!

sorry Heiko, dass das Problem bei dir aufgeschlagen ist.... >:(.
l.g. erwin
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: DS_Starter am 04 Januar 2023, 19:32:08
Danke erwin.  :)

@ Mad-at, nach dem Update kannst du addStateEvent = 0 wieder rausnehmen.
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: Mad-at am 04 Januar 2023, 20:05:51
Wow, vielen lieben Dank an euch beide! Ich werde morgen testen und berichten. Das Verbose 5 im KNX Modul ist jetzt sinnlos, oder?

Lg
Matthias
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: erwin am 04 Januar 2023, 20:20:55
ZitatDas Verbose 5 im KNX Modul ist jetzt sinnlos, oder?
Ja, entweder morgen in der Datenbank checken, oder kurz bei EINEM KNX-Device setzen und
KNX_DbLog_Split (dpt3tst): EVENT= state: -3 % READING= state VALUE= -3 UNIT= %
nach so einem Log-Eintrag suchen. Wichtig dabei ist nur dass READING = state vorkommt!
l.g. erwin
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: Mad-at am 05 Januar 2023, 09:51:54
Hallo! Vielen Dank nochmal, kann mich garnicht genug bedanken!

Vor dem Update


2023.01.04 21:29:19 4: KNX_Parse (Aussentemperatur): -process gadName=g1 cmd= w
2023.01.04 21:29:19 5: KNX_limit (Aussentemperatur): DIR= DECODE INPUT= 9.2 OUTPUT= 9.2
2023.01.04 21:29:19 5: KNX_decodeByDpt (Aussentemperatur): gadName= g1 model= dpt9 code= dpt9 value= 1873 length-value= 4 state= 9.20
2023.01.04 21:29:19 4: KNX_Parse_wp (Aussentemperatur): readingName=getG1 value=9.20
2023.01.04 21:29:19 5: KNX_DbLog_Split (Aussentemperatur): EVENT= getG1: 9.20 READING= getG1 VALUE= 9.20 UNIT=
2023.01.04 21:29:19 5: KNX_DbLog_Split (Aussentemperatur): EVENT= state: 9.20 READING= state VALUE= 9.20 UNIT=


Nach dem Update


2023.01.05 09:38:45 4: KNX_Parse (Aussentemperatur): -process gadName=g1 cmd= w
2023.01.05 09:38:45 5: KNX_limit (Aussentemperatur): DIR= DECODE INPUT= 10.88 OUTPUT= 10.88
2023.01.05 09:38:45 5: KNX_decodeByDpt (Aussentemperatur): gadName= g1 model= dpt9 code= dpt9 value= 1888 length-value= 4 state= 10.88
2023.01.05 09:38:45 4: KNX_Parse_wp (Aussentemperatur): readingName=getG1 value=10.88
2023.01.05 09:38:45 5: KNX_DbLog_Split (Aussentemperatur): EVENT= getG1: 10.88 READING= getG1 VALUE= 10.88 UNIT=
2023.01.05 09:38:45 5: KNX_DbLog_Split (Aussentemperatur): EVENT= state: 10.88 READING= state VALUE= 10.88 UNIT=


Nach Update und mit addStateEvent 0


2023.01.05 09:41:19 4: KNX_Parse (Aussentemperatur): -process gadName=g1 cmd= w
2023.01.05 09:41:19 5: KNX_limit (Aussentemperatur): DIR= DECODE INPUT= 10.96 OUTPUT= 10.96
2023.01.05 09:41:19 5: KNX_decodeByDpt (Aussentemperatur): gadName= g1 model= dpt9 code= dpt9 value= 1889 length-value= 4 state= 10.96
2023.01.05 09:41:19 4: KNX_Parse_wp (Aussentemperatur): readingName=getG1 value=10.96
2023.01.05 09:41:19 5: KNX_DbLog_Split (Aussentemperatur): EVENT= getG1: 10.96 READING= getG1 VALUE= 10.96 UNIT=
2023.01.05 09:41:19 5: KNX_DbLog_Split (Aussentemperatur): EVENT= 10.96 READING= state VALUE= 10.96 UNIT=


8)
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: erwin am 05 Januar 2023, 13:16:04
hi Mad-at,

gerne - wieder was gefixt!  ;D
addStateEvent sollte jetzt keinen Einfuss darauf mehr haben, zumindest was die KNX-devices betrifft!
bitte bei Gelegenheit den thread als [gelöst] markieren.
l.g. erwin
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: Mad-at am 05 Januar 2023, 15:09:55
Hi Erwin!

ja deshalb hab ich beide logs geposted. Lustiger Weise schient es doch einen Einfluss zu haben?

EVENT= state: 10.88 READING= state VALUE= 10.88 UNIT vs EVENT= 10.96 READING= state VALUE= 10.96 UNIT=

Kann das überhaupt sein?

Lg
Matthias
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: erwin am 05 Januar 2023, 16:13:24
Ja, hast recht, was EVENT betrifft!
Ich habe mich auf READING bezogen, was ja das ursprüngliche Problem war - und das vmtl. jenes Feld ist, das zur Auswertung/Grafik,... nötig ist.
das EVENT Feld find ich in der Db völlig unnötig, aber das ist meine pers. Meinung...
l.g. erwin
Titel: Antw:DBLog logged einige Werte nicht mehr
Beitrag von: Mad-at am 05 Januar 2023, 17:47:47
Kenn mich aus! Danke!!