FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Heiner33 am 11 Februar 2023, 21:15:51

Titel: Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: Heiner33 am 11 Februar 2023, 21:15:51
Hallo zusammen,

habe heute versucht auf DBLog umzusteigen, Datenbank (auf MariaDB Basis) hat auch schon einige Einträge, aber leider bekomme ich direkt nach Start von FHEM auch unzählige Fehlermeldungen im Log:

Zitat2023.02.11 21:04:30.753 2: DbLog myDbLog - Error table history - DBD::mysql::st execute_array failed: executing 1336 generated 13 errors [for Statement "INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"] at ./FHEM/93_DbLog.pm line 3179.

2023.02.11 21:04:31.344 2: DbLog myDbLog - Error table history - DBD::mysql::st execute_array failed: executing 1337 generated 13 errors [for Statement "INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"] at ./FHEM/93_DbLog.pm line 3179.

2023.02.11 21:04:32.199 2: DbLog myDbLog - Error table history - DBD::mysql::st execute_array failed: executing 1338 generated 13 errors [for Statement "INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"] at ./FHEM/93_DbLog.pm line 3179.

usw...

Könnt ihr mir helfen, woran das Problem liegt bzw. wie ich es eingrenzen kann?

Danke!
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 11 Februar 2023, 21:50:26
Ein list vom Device wäre hilfreich und ein Auszug des Log mit gesetzten verbose 5 im DbLog-Device.
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: Heiner33 am 12 Februar 2023, 06:24:21
Hier ist ein list des DBLog Devices:

Internals:
   COLUMNS    field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
   CONFIGURATION /opt/fhem/dbLog.conf
   DEF        /opt/fhem/dbLog.conf .*:.*
   FD         4
   FUUID      63ab5a9e-f33f-48bb-e775-7e4ff6218cdae3d7
   FVERSION   93_DbLog.pm:v5.8.0-s27165/2023-02-01
   MODE       synchronous
   MODEL      MYSQL
   NAME       myDbLog
   NR         2
   NTFY_ORDER 50-myDbLog
   PID        4192
   REGEXP     .*:.*
   SBP_PID    4205
   SBP_STATE  running
   STATE      DBD::mysql::st execute_array failed: executing 20064 generated 91 errors [for Statement "INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"] at ./FHEM/93_DbLog.pm line 3179.

   TYPE       DbLog
   UTF8       1
   dbconn     mysql:database=fhem;host=db;port=3306
   dbuser     fhem
   eventCount 1073
   HELPER:
     COLSET     1
     DEVICECOL  64
     EVENTCOL   512
     LONGRUN_PID 1676178244.88686
     OLDSTATE   DBD::mysql::st execute_array failed: executing 20064 generated 91 errors [for Statement "INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"] at ./FHEM/93_DbLog.pm line 3179.

     PACKAGE    main
     READINGCOL 64
     TC         current
     TH         history
     TYPECOL    64
     UNITCOL    32
     VALUECOL   128
     VERSION    5.8.0
   Helper:
     DBLOG:
       state:
         myDbLog:
           TIME       1676178244.65385
           VALUE      DBD::mysql::st execute_array failed: executing 20064 generated 91 errors [for Statement "INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"] at ./FHEM/93_DbLog.pm line 3179.

   OLDREADINGS:
   READINGS:
     2023-02-12 06:04:04   CacheUsage      2
     2023-02-12 06:04:04   state           DBD::mysql::st execute_array failed: executing 20064 generated 91 errors [for Statement "INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"] at ./FHEM/93_DbLog.pm line 3179.

Attributes:


Wenn ich Verbose auf 5 setze werde ich im Logfile erschlagen. Dementsprechend schwierig ist es eine relevante Stelle für das Problem zu finden. Zwischendrin sehe ich die folgenden Meldungen:
Zitat
...
2023.02.12 06:07:22.629 5: DbLog myDbLog - processing 512 -> TS: 2023-02-12 06:07:22, Dev: FritzBox, Type: FRITZBOX, Event: state: Didn't get a session ID, Reading: state, Val: Didn't get a session ID, Unit:
2023.02.12 06:07:22.629 5: DbLog myDbLog - processing 513 -> TS: 2023-02-12 06:07:22, Dev: FritzBox, Type: FRITZBOX, Event: guestWlan: 0, Reading: guestWlan, Val: 0, Unit:
2023.02.12 06:07:22.629 4: DbLog myDbLog - begin Transaction
2023.02.12 06:07:22.755 2: DbLog myDbLog - Error table history - DBD::mysql::st execute_array failed: executing 335 generated 13 errors [for Statement "INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)"] at ./FHEM/93_DbLog.pm line 3179.

2023.02.12 06:07:22.756 4: DbLog myDbLog - Transaction is switched on. Transferred data is returned to the cache.
2023.02.12 06:07:22.764 4: DbLog myDbLog - Transaction rollback table >history<
2023.02.12 06:07:22.765 5: DbLog myDbLog - row back to Cache: 179 -> 2023-02-12 06:07:20|Cal_Termine|CALENDAR|calname: FHEM_Termine|calname|FHEM_Termine|
2023.02.12 06:07:22.766 5: DbLog myDbLog - row back to Cache: 180 -> 2023-02-12 06:07:20|Cal_Termine|CALENDAR|lastUpdate: 2023-02-12 06:07:18|lastUpdate|2023-02-12 06:07:18|
...

Falls mit "Executing 335" das zur gelistete "Processing Element" gemeint ist, wäre das dieses hier:
2023.02.12 06:07:22.594 5: DbLog myDbLog - processing 335 -> TS: 2023-02-12 06:07:20, Dev: CalView_Termine, Type: CALVIEW, Event: t_010_bdate: 27.07.2023, Reading: t_010_bdate, Val: 27.07.2023, Unit:
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 12 Februar 2023, 08:14:12
Leider sieht man die benutzten Attribute nicht im List.
Versuche es bitte mit folgenden Attr:


insertMode   = 1
commitMode = basic_ta:off


Damit sollte im Log eindeutiger zu lesen sein bei welchen Daten der Fehler auftritt.
Wenn klar geworden ist, welche Daten das Problem verursachen, kann man weiter an einer Lösung arbeiten.

Vermutlich würde das Attr useCharfilter = 1 das Problem unterdrücken.
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: Heiner33 am 12 Februar 2023, 09:45:29
Bisher waren keine Attribute gesetzt, daher nichts im List.

Habe die zwei genannten Attribute gesetzt und FHEM neu gestartet. Es erscheinen einige Meldungen im Logfile, soweit keine Fehler. Irgendwann landet nichts mehr im Logfile und der State meines DBLog Devices zeigt "Another operation is in progress. Data is stored temporarily.". Dann steigt die Anzahl der Einträge im "CacheUsage" aber das war's dann erst mal.

edit:
Ein Neustart später, dann diese Meldung im Logfile
Zitat2023.02.12 10:09:24.187 2: DbLog myDbLog - ERROR table history - DBD::mysql::st execute failed: Incorrect string value: '\xF0\x9F\x8E\x82Ge...' for column `fhem`.`history`.`EVENT` at row 1 [for Statement "INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)" with ParamValues: 0='2023-02-12 10:09:19', 1='CalView_Termine', 2='CALVIEW', 3='t_003_summary: �...Geburtstag Andi', 4='t_003_summary', 5='�...Geburtstag Andi', 6=undef] at ./FHEM/93_DbLog.pm line 2885.

Könnte was mit dem Sonderzeichen (🎂) zu tun haben? utf8 Parameter steht auf 1 in der dbconfig, configcheck liefert:
ZitatResult of encoding check

Encoding used by Client (connection): UTF8MB3
Encoding used by DB fhem: UTF8MB4

PS: Vielen Dank schon mal so weit für deine Unterstützung!!

Grüße
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 12 Februar 2023, 10:59:16
Zitat
Könnte was mit dem Sonderzeichen (🎂) zu tun haben?
Ja, deswegen sollte dir Attr useCharfilter = 1 helfen.

Das Attr insertMode, commitMode   kannst du wieder löschen.

Danach FHEM wieder restarten.
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: Heiner33 am 12 Februar 2023, 21:12:33
Das useCharfilter = 1 hilft, keine weiteren Fehler mehr.

Frage dazu: Verliere ich mit dem gesetzten Attribut nicht die Möglichkeit generell UTF-8 Zeichen auch im DBLog zu haben?
Ist das nicht eher als Workaround zu betrachten und ich müsste die Connection irgendwie auf UTF8MB4 umstellen oder wird das generell von DBLog nicht supported?

Danke und Grüße
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 12 Februar 2023, 21:57:25
Zitat
Frage dazu: Verliere ich mit dem gesetzten Attribut nicht die Möglichkeit generell UTF-8 Zeichen auch im DBLog zu haben?
Ist das nicht eher als Workaround zu betrachten und ich müsste die Connection irgendwie auf UTF8MB4 umstellen oder wird das generell von DBLog nicht supported?
Es ist ein Workaround um schnell zu helfen. Es ist nun die Frage ob man solche Daten, die 4 Byte Zeichen erfordern, überhaupt loggen sollte. D.h. ob man die braucht.
MariaDB UTF8 kann 1, 2 oder 3 Byte Zeichen verarbeiten soviel ich weiß, wohingegen UTF8MB4 mit 4 Byte arbeiten kann.

Du kannst die Connection testweise auf UTF8MB4 umstellen indem du in DbLog die Zeile 2605 austauscht:

alt

($err, undef) = _DbLog_SBP_dbhDo ($name, $dbh, 'set names "UTF8"', $subprocess);


neu

($err, undef) = _DbLog_SBP_dbhDo ($name, $dbh, 'set names "utf8mb4"', $subprocess);


Danach restarten.

Bin mir allerdings unsicher ob es konform mit dem DBD-Treiber (DbLog setzt darauf auf) ist, denn in dessen Doku ist beschrieben:
Zitat
...
Do not try to change network charset (e.g. via SQL command SET NAMES manually) to anything different then UTF-8 as it would confuse underlying C library and DBD::MariaDB would misbehave (e.g. would lead to broken/insecure quote method or an emulated client side placeholders replacement).
...

Aber probieren kannst du es ja.
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 13 Februar 2023, 21:06:20
Ich habe eine meiner Datenbanken auch mal auf UTF8MB4 umgestellt und DbLog so ergänzt, dass sich das Connection set automatisch auf das database utf8 character set einstellt.
Bisher habe ich keine negativen Seiteneffekte feststellen können.

Du kannst die adaptierte DbLog Version aus meinem Contrib (Fußtext) ziehen, FHEM restarten und testen.
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: Heiner33 am 15 Februar 2023, 17:31:53
Hallo,

wow, vielen Dank. Habe mir das aktualisierte Modul geholt und konnte es erfolgreich testen, das Sonderzeichen landet in der Datenbank!

Sofern mit der adaptierten DbLog Version keine weiteren Probleme auftreten sollten, wird diese Version dann in Zukunft als Update "offiziell" verteilt oder müsste ich die Version immer aus dem Contrib holen?
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 15 Februar 2023, 19:17:16
Sehr schön.  :)

Diese Änderung würde ich in das nächste Check-In mit übernehmen. Das wird wahrscheinlich so gegen dem kommenden WE sein.
Vielleicht testet der eine oder andere Mitleser noch; immerhin haben mehr als 360 User den Thread angeschaut; die bereitgestellte Version.
Sollten doch noch problematische Seiteneffekte auftreten, würde ich mir ein Attribut überlegen um dieses Feature für die User anbieten zu können.

Edit: Kannst du bitte den Output von "set ... configCheck" posten ? Interessiert mich mal.

LG,
Heiko
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 15 Februar 2023, 20:41:13
Ich habe die Erläuterungen in der Commandref für DbLog um einen Absatz zu utf8(mb4) ergänzt:

Zitat
....
  Die Standardinstallation der MySQL/MariaDB Datenbank sieht die Nutzung der Collation utf8_bin vor.
  Mit dieser Einstellung können Zeichen bis 3 Byte Länge gespeichert werden was im Allgemeinen ausreichend ist.
  Sollen jedoch Zeichen mit 4 Byte Länge (z.B. Emojis) in der Datenbank gespeichert werden, ist der Zeichensatz
  utf8mb4 zu verwenden.
  Dementsprechend wäre in diesem Fall die MySQL/MariaDB Datenbank mit folgendem Statement anzulegen:
 
        CREATE DATABASE `fhem` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
 
  In Konfigurationsfile (siehe unten) ist die utf8-Unterstützung mit dem Schlüssel utf8 => 1 einzuschalten sofern utf8
  genutzt werden soll.
....
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: Heiner33 am 16 Februar 2023, 14:09:14
Danke für die Infos und die schnelle Lösung des Problems!
Der configCheck liefert das Ergebnis bzgl. charset:

Zitat
Result of encoding check

Encoding used by Client (connection): UTF8MB4_GENERAL_CI
Encoding used by DB fhem: UTF8MB4_GENERAL_CI
Rating:
Recommendation: settings o.k.

PS: Ich habe eine MariaDB via Docker aufgesetzt - keine besonderen Einstellungen vorgenommen, da scheint die Standard-Collation wohl schon auf utf8mb4 zu stehen. Ich hatte das zumindest nicht bewusst umgestellt oder die Datenbank speziell angelegt.
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 16 Februar 2023, 15:14:51
Danke.
Ich denke die Beispiel-Scripte im contrib zur Anlage einer neuen DB für DbLog stellen ich auch auf die Benutzung von utf8mb4 anstatt wie aktuell utf8 um. Dann erspart man sich den Ärger falls man Datensätze loggen will die solche Sonderzeichen enthalten.
Weiß nicht genau ab welcher MySQL Version utf8mb4 eingeführt wurde, aber wer jetzt beginnt kann mit Sicherheit auf utf8mb4  setzen.
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: betateilchen am 16 Februar 2023, 17:54:08
Zitat von: DS_Starter am 16 Februar 2023, 15:14:51
Weiß nicht genau ab welcher MySQL Version utf8mb4 eingeführt wurde,

Die bessere Frage wäre "wann wurde utf8mb4 die Standardeinstellung"
Antwort: bis 5.7 war utf8 die Standardeinstellung, alles was danach kommt, hat utf8mb4 als default.
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 17 Februar 2023, 23:26:22
Die neue DbLog Version ist eingecheckt und morgen früh im Update enthalten.

Um den Usern die Administration zu erleichtern, wird morgen früh ebenfalls eine DbRep Version ausgerollt, die utf8mb4 unterstützt und durch einen Setter "migrateCollation" die einfache Migration der bestehenden MySQL/MariaDB-Datenbank nach utf8mb4 ausführen kann.

Im configCheck wird man darauf hingewiesen:

Result of collation check

Collation used by Client (connection): UTF8_BIN
Collation used by DB fhemtest1: UTF8_BIN
Rating: ....
Recommendation: The collation of the database should be changed to 'utf8mb4_bin' so that umlauts and all special characters can be stored.
You can easy do that with the DbRep command set <DbRep-Device> migrateCollation utf8mb4_bin.
Your DBD version fulfills UTF8 support, no need to update DBD.
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: betateilchen am 17 Februar 2023, 23:45:20
Hallo Heiko,

hast Du mal den configCheck probiert, wenn die FHEM Installation nicht über den regulären update-Prozess von FHEM gepflegt wird?


Result of version check

Used Perl version: 5.32.1
Used DBI (Database independent interface) version: 1.643
Used DBD (Database driver) version mysql: 4.050
Rating:
Recommendation: ERROR - check of new DbLog version not possible, see logfile.. Your DBD version fulfills UTF8 support, no need to update DBD.

Used DbLog version: 5.8.1.

Rating:
Recommendation: No update of DbLog is needed. Your DBD version fulfills UTF8 support, no need to update DBD.



2023.02.17 23:36:57 1: DbLog dbLog - configCheck: can't open ./FHEM/controls_fhem.txt: No such file or directory
2023.02.17 23:36:57 1: PERL WARNING: Use of uninitialized value $uptb in concatenation (.) or string at ./FHEM/93_DbLog.pm line 7070.
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 17 Februar 2023, 23:51:02
Nein, hatte ich noch nicht probiert.
Danke für den Hinweis Udo, schaue mir mal an wie ich das fixen kann.

Schönes Wochende!

Grüße,
Heiko
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: betateilchen am 17 Februar 2023, 23:57:00
Nur keinen Streß. Es funktioniert ja trotzdem alles.

Eben hatte ich zum ersten Mal in meinem FHEM-Leben überhaupt den configCheck ausgeführt, weil mich einfach mal interessiert hatte, was da eigentlich als Ergebnis kommt.
Bisher habe ich den nie gebraucht und ich denke, ich werde das auch künftig nicht brauchen.

Insofern: wegen mir musst Du das nicht fixen.
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 18 Februar 2023, 00:03:29
Naja, vllt. geht es ja einfach. Ich liebe es wenn alles läuft bzw. einen sauberen Exit liefert .  ;)
Ich habe dir mal einen Screenshot gemacht was da so kommt.

GN
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: Heiner33 am 25 Februar 2023, 14:31:47
Hallo,

ich habe da vielleicht nochmal einen (Folge?)Fehler bemerkt:
Die "Value"-Spalte in der history Tabelle hat ja standardmäßig 128 Zeichen. Jetzt hatte ich den Fall, dass ein "ü" gerade an Stelle 128 im Value auftaucht und dieses dann vermutlich zwischen den zwei UTF-8 Bytes 0xC3 und 0xBC abgeschnitten wurde. Das sorgte dann für einen Fehler beim Einfügen in die Datenbank.
Sorry, ist etwas laienhaft ausgedrückt, aber du weißt bestimmt, was ich meine :-)

Zitat2023.02.25 14:22:27.263 2: DbLog DbLog - ERROR table history - DBD::mysql::st execute failed: Incorrect string value: '\xC3' for column `fhem`.`history`.`VALUE` at row 1 [for Statement "INSERT INTO history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)" with ParamValues: 0='2023-02-25 14:22:26', 1='httpmod_mediacenter_epg', 2='HTTPMOD', 3='02_show: Unsere kleine Farm - Harriet Olesons entfernter Cousin Sterling Murdoch kommt in die Stadt und will dort die erste Zeitung einführen.', 4='02_show', 5='Unsere kleine Farm - Harriet Olesons entfernter Cousin Sterling Murdoch kommt in die Stadt und will dort die erste Zeitung einf�', 6=undef] at ./FHEM/93_DbLog.pm line 2910.

Danke und Grüße
Titel: Antw:Fehler nach Umstieg auf DBLog, execute_array in 93_DBLog.pm Zeile 3179
Beitrag von: DS_Starter am 25 Februar 2023, 14:58:27
Du kannst dir die VALUE Spalte auf eine Breite setzen die du benötist.
Dazu das Attr colValue  benutzen, z.B.:


colValue = 2000


Dann musst du nur noch die Breite in der DB auch so setzen.
Einfach "get ... configCheck" aufrufen. Dann wird die Diskrepanz festgestellt und dir das Statement zur Anpassung der Spaltenbreite mitgeteilt.