Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. SQL.Adpter: Insert-Befehle innerhalb von 40ms

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    14
    1
    309

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    600

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

SQL.Adpter: Insert-Befehle innerhalb von 40ms

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
64 Beiträge 6 Kommentatoren 4.9k Aufrufe 7 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • OliverIOO OliverIO

    @nettekov

    setze deine energie erst mal nicht so sehr in wireshark. das hat seine eigenen untiefen.
    nutze lieber ersteinmal die Möglichkeiten der DB

    N Offline
    N Offline
    nettekov
    schrieb am zuletzt editiert von nettekov
    #44

    @oliverio Da gebe ich dir Recht, aber Wireshark war schneller aufzubauen

    1 Antwort Letzte Antwort
    0
    • OliverIOO OliverIO

      @nettekov

      setze deine energie erst mal nicht so sehr in wireshark. das hat seine eigenen untiefen.
      nutze lieber ersteinmal die Möglichkeiten der DB

      N Offline
      N Offline
      nettekov
      schrieb am zuletzt editiert von nettekov
      #45

      @oliverio said in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

      setze deine energie erst mal nicht so sehr in wireshark. das hat seine eigenen untiefen.
      nutze lieber ersteinmal die Möglichkeiten der DB

      Da gebe ich dir Recht, aber Wireshark war schneller aufzubauen

      1 Antwort Letzte Antwort
      0
      • OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von
        #46

        @nettekov

        ok also auch hier sehen die sqls gut aus.
        dann noch das db error log prüfen

        https://mariadb.com/kb/en/error-log/

        also ich sehe da kein syntax error
        und wenn du die über den client ausführst geht es ja auch.
        aber warum meldet die db dann einen syntax error?
        auch die möglichkeit eines eines zeichens, welches im log oder sonst nicht richtig sichtbar ist kann man ausschließen, da es ja nur zahlen sind die da enthalten sind.

        kannst du da mal die kompatibilitäts einstellungen prüfen ob da was besonderes ist?
        https://mariadb.com/kb/en/sql-mode/
        nicht das er da durch eine einstellung doch nicht das mehrfache insert kennt.

        als workaround könntest du auch den counter deaktivieren, wenn du ihn nicht wirklich brauchst.

        findest du irgendwo in den logs inserts, bei denen das insert mit mehreren values funktioniert und keinen fehler erzeugt?

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        N 1 Antwort Letzte Antwort
        0
        • OliverIOO OliverIO

          @nettekov

          ok also auch hier sehen die sqls gut aus.
          dann noch das db error log prüfen

          https://mariadb.com/kb/en/error-log/

          also ich sehe da kein syntax error
          und wenn du die über den client ausführst geht es ja auch.
          aber warum meldet die db dann einen syntax error?
          auch die möglichkeit eines eines zeichens, welches im log oder sonst nicht richtig sichtbar ist kann man ausschließen, da es ja nur zahlen sind die da enthalten sind.

          kannst du da mal die kompatibilitäts einstellungen prüfen ob da was besonderes ist?
          https://mariadb.com/kb/en/sql-mode/
          nicht das er da durch eine einstellung doch nicht das mehrfache insert kennt.

          als workaround könntest du auch den counter deaktivieren, wenn du ihn nicht wirklich brauchst.

          findest du irgendwo in den logs inserts, bei denen das insert mit mehreren values funktioniert und keinen fehler erzeugt?

          N Offline
          N Offline
          nettekov
          schrieb am zuletzt editiert von
          #47

          @oliverio
          anbei die SQL-Mode:

          STRICT_TRANS_TABLES,
          ERROR_FOR_DIVISION_BY_ZERO,
          NO_AUTO_CREATE_USER,
          NO_ENGINE_SUBSTITUTION
          

          Ich glaube nicht das es die DB-Server sind, bzw. erstmals nicht, obwohl es eigentlich Wahrscheinlicher ist, bzw. sonst wäre draußen viel mehr Probleme. Da gehe ich auf jeden fall mit
          Aber sowohl der MariaDB Server auf der Synology , als auch der MySql auf meinem lokalen PC haben die selben Problematiken und in beiden Fällen stimmt die Syntax (sowohl in den Logs , als auch in Wireshark), bzw wenn ich Sie separat über eine anderen SQL-Client schicke , gehen Diese Durch.

          1 Antwort Letzte Antwort
          0
          • N Offline
            N Offline
            nettekov
            schrieb am zuletzt editiert von nettekov
            #48

            Hallo zusammen,

            bevor ich weitermachen, wollte ich kurz nochmal die Version checken, nicht das wir doch durch einer veralten Version nach eine Problem suchen, was eigentlich nicht gibt, bzw. ggf. schon durch eine neuere Version gelöst ist.

            IObroker-Adapter:
            version1.png

            SQL-Adapter mit zweiter Version v1.16.1:
            version2.png

            IOBroker node:
            version 3.png

            MariaDB auf Synology-NAS:
            version4.png

            MySQL Server auf lokalen PC(Nur zur Testzwecken: ist veralte von XAMPP, kann ich aber ggf aktualisieren)
            version5.png

            Sollte ich eine wichtige Version vergessen haben, sagt kurz Bescheid.

            Gruss Nettekov

            Marc BergM 1 Antwort Letzte Antwort
            0
            • N Offline
              N Offline
              nettekov
              schrieb am zuletzt editiert von nettekov
              #49

              @haus-automatisierung
              @OliverIO

              Hallo zusammen,

              ich glaube ich habe was gefunden.

              Das Problem bei mir, das manch ein Insert Befehl von SQL-Server als Syntax-Error angemahnt wird, ist, wenn mehrere Insert-Befehle
              in einer Transaktion gepackt und weggeschickt werden.
              Schickt man jeden INSERT-Befehl in einer separaten Transaktion, dann werden Diese dann auch vom SQL-Server akzeptiert, auch wenn ich die Datensätze auf 8 erhöhe.
              Wenn zwei oder mehrere Insert-Anweisung in einer Transaktion über das node-Module 'mysql' geschickt werden, dann wird anscheinend (und das ganz vorsichtig gesagt) das Protokoll nicht so eingestellt, das es für mehrere SQL-Statements nicht geeignet ist.(Dies ist aber nur eine Mutmaßung).
              Schickt man die selben angemahnten SQL-Sequenzen unverändert über eine anderen SQL-Client, dann wird die komplette SQL-Sequenz auch in einer Transaktion an den SQL-Server geschickt und Diese werden dann akzeptiert.
              Bei myphpadmin wird die SQl-Sequenz teilweise gesplittet in mehreren Transaktionen,
              Bei Heidi-SQL werden Diese generell in einzelne Transaktionen gesplittet.

              Aber nochmal, das habe ich erstmal nur bei mir festgestellt.

              ich würde jetzt versuchen, hierfür eine JS-Funktion zu schreiben, damit das Datenloggen bei mir wieder lauffähig wird.
              Kann sein , das ich da ggf. Euch nochmal was fragen muss.

              Gruss nettekov

              Hier die Protokolle:
              Angemahntes SQL-Sequenz im IOBroker-Log:
              test1.png

              Cannot insert INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (5, 1676135872618, 53.32),(5, 1676138387812, 53),(5, 1676138387812, 53),(5, 1676138670902, 52.95);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676138387812, 53, 1, 2, 0),(5, 1676138670902, 52.95, 1, 2, 0);: Error: 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 'INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676...' at line 1 (id: LUFTFEUCHTE@William_Martin)
              

              Inhalt von SQL_TEST2.js (kopiertes angemahntes SQL-Sequenz vom IOBroker-Protokoll):

              ar mysql      = require('mysql');
              var connection = mysql.createConnection({
                host     : '172.27.110.30',
                user     : 'iobroker',
                password : '*********',
                database : 'iobroker',
                port     : 3307
              });
              
              
              connection.connect(function(err) {
                if (err) throw err;
                console.log("Connected!");
                var sql = " INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (5, 1676135872618, 53.32),(5, 1676138387812, 53),(5, 1676138387812, 53),(5, 1676138670902, 52.95);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676138387812, 53, 1, 2, 0),(5, 1676138670902, 52.95, 1, 2, 0);";
                connection.query(sql, function (err, result) {
                  if (err) throw err;
                  console.log("1 record inserted");
                });
              });
              

              Ergebnis von node SQL_TEST2.js--> Transaktion wird erwartender Weise angemahnt

              root@server03:~/test$ node SQL_TEST2.js
              Connected!
              /home/root/test/node_modules/mysql/lib/protocol/Parser.js:437
                    throw err; // Rethrow non-MySQL errors
                    ^
              
              Error: ER_PARSE_ERROR: 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 'INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676...' at line 1
                  at Query.Sequence._packetToError (/home/root/test/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
                  at Query.ErrorPacket (/home/root/test/node_modules/mysql/lib/protocol/sequences/Query.js:79:18)
                  at Protocol._parsePacket (/home/root/test/node_modules/mysql/lib/protocol/Protocol.js:291:23)
                  at Parser._parsePacket (/home/root/test/node_modules/mysql/lib/protocol/Parser.js:433:10)
                  at Parser.write (/home/root/test/node_modules/mysql/lib/protocol/Parser.js:43:10)
                  at Protocol.write (/home/root/test/node_modules/mysql/lib/protocol/Protocol.js:38:16)
                  at Socket.<anonymous> (/home/root/test/node_modules/mysql/lib/Connection.js:88:28)
                  at Socket.<anonymous> (/home/root/test/node_modules/mysql/lib/Connection.js:526:10)
                  at Socket.emit (events.js:400:28)
                  at addChunk (internal/streams/readable.js:293:12)
                  --------------------
                  at Protocol._enqueue (/home/root/test/node_modules/mysql/lib/protocol/Protocol.js:144:48)
                  at Connection.query (/home/root/test/node_modules/mysql/lib/Connection.js:198:25)
                  at Handshake.<anonymous> (/home/root/test/SQL_TEST2.js:15:14)
                  at Handshake.<anonymous> (/home/root/test/node_modules/mysql/lib/Connection.js:526:10)
                  at Handshake._callback (/home/root/test/node_modules/mysql/lib/Connection.js:488:16)
                  at Handshake.Sequence.end (/home/root/test/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)
                  at Handshake.Sequence.OkPacket (/home/root/test/node_modules/mysql/lib/protocol/sequences/Sequence.js:92:8)
                  at Protocol._parsePacket (/home/root/test/node_modules/mysql/lib/protocol/Protocol.js:291:23)
                  at Parser._parsePacket (/home/root/test/node_modules/mysql/lib/protocol/Parser.js:433:10)
                  at Parser.write (/home/root/test/node_modules/mysql/lib/protocol/Parser.js:43:10) {
                code: 'ER_PARSE_ERROR',
                errno: 1064,
                sqlMessage: "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 'INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676...' at line 1",
                sqlState: '42000',
                index: 0,
                sql: ' INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (5, 1676135872618, 53.32),(5, 1676138387812, 53),(5, 1676138387812, 53),(5, 1676138670902, 52.95);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676138387812, 53, 1, 2, 0),(5, 1676138670902, 52.95, 1, 2, 0);'
              }
              

              Inhalt von SQL_TEST5.js (kopiertes angemahntes SQL-Sequenz wird in zwei Transaktionen aufgeteilt):

              var mysql      = require('mysql');
              var connection = mysql.createConnection({
                host     : '172.27.110.30',
                user     : 'iobroker',
                password : '***************',
                database : 'iobroker',
                port     : 3307
              });
              
              
              connection.connect(function(err) {
                if (err) throw err;
                console.log("Connected!");
                var sql1 = " INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (5, 1676135872618, 53.32),(5, 1676138387812, 53),(5, 1676138387812, 53),(5, 1676138670902, 52.95)";
                connection.query(sql1, function (err, result) {
                  if (err) throw err;
                  console.log("1 record inserted");
                });
                  var sql2 = "INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676138387812, 53, 1, 2, 0),(5, 1676138670902, 52.95, 1, 2, 0);";
                connection.query(sql2, function (err, result) {
                  if (err) throw err;
                  console.log("1 record inserted");
                });
              });
              
              

              Ergebnis von node SQL_TEST5.js--> Transaktion wird akzeptiert

              root@server03:~/test$ vi SQL_TEST5.js
              root@server03:~/test$ node SQL_TEST5.js
              Connected!
              1 record inserted
              1 record inserted
              

              Inhalt von SQL_TEST6.js (kopiertes angemahntes SQL-Sequenz wird in zwei Transaktionen aufgeteilt und jeder INSERT-Befehl wurden die Datensätze auf acht erhöht):

              var mysql      = require('mysql');
              var connection = mysql.createConnection({
                host     : '172.27.110.30',
                user     : 'iobroker',
                password : '*****************',
                database : 'iobroker',
                port     : 3307
              });
              
              
              connection.connect(function(err) {
                if (err) throw err;
                console.log("Connected!");
                var sql1 = " INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (1235, 1676135872618, 53.32),(1235, 1676138387812, 53),(1235, 1676138387812, 53),(1235, 1676138670902, 52.95),(1236, 1676135872618, 53.32),(1236, 1676138387812, 53),(1236, 1676138387812, 53),(1235, 1676138670902, 52.95);";
                connection.query(sql1, function (err, result) {
                  if (err) throw err;
                  console.log("1 record inserted");
                });
                  var sql2 = "INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (1235, 1676138387812, 53, 1, 2, 0),(1235, 1676138670902, 52.95, 1, 2, 0),(1236, 1676138387812, 53, 1, 2, 0),(1236, 1676138670902, 52.95, 1, 2, 0),(1237, 1676138387812, 53, 1, 2, 0),(1237, 1676138670902, 52.95, 1, 2, 0),(1238, 1676138387812, 53, 1, 2, 0),(1238, 1676138670902, 52.95, 1, 2, 0);";
                connection.query(sql2, function (err, result) {
                  if (err) throw err;
                  console.log("1 record inserted");
                });
              });
              

              Ergebnis von node SQL_TEST6.js--> Transaktionen werden akzeptiert

              root@server03:~/test$ vi SQL_TEST6.js
              root@server03:~/test$ node SQL_TEST6.js
              Connected!
              1 record inserted
              1 record inserted
              

              Angemahntes SQL-Sequenz im IOBroker-Log:
              test3.png

              	Cannot insert INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (47, 1676131245941, 8.04),(47, 1676133519887, 7.82);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (47, 1676133519887, 7.82, 1, 2, 0),(47, 1676133530714, 7.87, 1, 2, 0);: Error: 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 'INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (47, 167...' at line 1 (id: TEMPERATUR@AussenHaustuer)
              

              Ergebnis über anderen SQL-Client--> Transaktion wird akzeptiert
              mobile.png
              test4.png

              1 Antwort Letzte Antwort
              0
              • N Offline
                N Offline
                nettekov
                schrieb am zuletzt editiert von
                #50

                @OliverIO
                Hallo OliverIO,

                In der main.js werden mit dieser Funktion die Datenlogs gesendet?

                function _insertValueIntoDB(query, id, cb) {
                    adapter.log.debug(query);
                
                    borrowClientFromPool((err, client) => {
                        if (err) {
                            returnClientToPool(client);
                            adapter.log.error(err);
                            cb && cb(); // BF asked (2021.12.14): may be return here err?
                        } else {
                            client.execute(query, (err /* , rows, fields */) => {
                                returnClientToPool(client);
                                if (err) {
                                    adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                } else {
                                    checkRetention(id);
                                }
                                cb && cb(); // BF asked (2021.12.14): may be return here err?
                            });
                        }
                    });
                }
                

                Gruss Nettekov

                OliverIOO 1 Antwort Letzte Antwort
                0
                • N nettekov

                  Hallo zusammen,

                  bevor ich weitermachen, wollte ich kurz nochmal die Version checken, nicht das wir doch durch einer veralten Version nach eine Problem suchen, was eigentlich nicht gibt, bzw. ggf. schon durch eine neuere Version gelöst ist.

                  IObroker-Adapter:
                  version1.png

                  SQL-Adapter mit zweiter Version v1.16.1:
                  version2.png

                  IOBroker node:
                  version 3.png

                  MariaDB auf Synology-NAS:
                  version4.png

                  MySQL Server auf lokalen PC(Nur zur Testzwecken: ist veralte von XAMPP, kann ich aber ggf aktualisieren)
                  version5.png

                  Sollte ich eine wichtige Version vergessen haben, sagt kurz Bescheid.

                  Gruss Nettekov

                  Marc BergM Offline
                  Marc BergM Offline
                  Marc Berg
                  Most Active
                  schrieb am zuletzt editiert von Marc Berg
                  #51

                  @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                  SQL-Adapter mit zweiter Version v1.16.1:
                  version2.png

                  IOBroker node:
                  version 3.png

                  So, wie es aussieht hast du es ja hier mit irgendwelchen Inkompatibilitäten zu tun. Darum verstehe ich nicht, warum nicht erstmal dieser Schiefstand der Adapter-Version sowie ein Update der Node Version angegangen wird?
                  An deiner Stelle würde ich den Adapter löschen und neu installieren sowie Node.js auf die empfohlene Version (16) bringen.

                  NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

                  Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                  Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                  N 1 Antwort Letzte Antwort
                  0
                  • Marc BergM Marc Berg

                    @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                    SQL-Adapter mit zweiter Version v1.16.1:
                    version2.png

                    IOBroker node:
                    version 3.png

                    So, wie es aussieht hast du es ja hier mit irgendwelchen Inkompatibilitäten zu tun. Darum verstehe ich nicht, warum nicht erstmal dieser Schiefstand der Adapter-Version sowie ein Update der Node Version angegangen wird?
                    An deiner Stelle würde ich den Adapter löschen und neu installieren sowie Node.js auf die empfohlene Version (16) bringen.

                    N Offline
                    N Offline
                    nettekov
                    schrieb am zuletzt editiert von
                    #52

                    @marc-berg Vielen dank für deine Antwort.

                    Weiß Du , wofür die V1.16.1 steht.
                    Bevor ich den SQL-Adapter , deinstalliere und wieder installiere, sollten wir erst wissen, wofür Diese Version steht.

                    Marc BergM 1 Antwort Letzte Antwort
                    0
                    • N Offline
                      N Offline
                      nettekov
                      schrieb am zuletzt editiert von
                      #53

                      Hallo zusammen,

                      ich habe in die '_insertValueIntoDB' Funktion einfach mal ein Log-Befehl eingebaut, der bei jedem Daten-Loggen das Query anzeigt.

                      function _insertValueIntoDB(query, id, cb) {
                          adapter.log.debug(query);
                      
                          borrowClientFromPool((err, client) => {
                              if (err) {
                                  returnClientToPool(client);
                                  adapter.log.error(err);
                                  cb && cb(); // BF asked (2021.12.14): may be return here err?
                              } else {
                                  client.execute(query, (err /* , rows, fields */) => {
                                      returnClientToPool(client);
                      
                                      adapter.log.error(`Hallo Welt --> ${query}`); // Nettekov
                                      
                                     if (err) {
                                          adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                      } else {
                                          checkRetention(id);
                                      }
                                      cb && cb(); // BF asked (2021.12.14): may be return here err?
                                  });
                              }
                          });
                      }
                      
                      

                      Wenn man jetzt im Protokollbereich von IOBroker nachschauen, sieht man , da die meine Datenlog' in der SQL-Transaktion nur ein SQl-Statement haben.
                      Wenn zwei SQL-Statements in einer Transaktion auftauchen, dann kommt auch der Syntax-Error.

                      iolog.png

                      Gruss nettekov

                      haus-automatisierungH 1 Antwort Letzte Antwort
                      0
                      • N nettekov

                        Hallo zusammen,

                        ich habe in die '_insertValueIntoDB' Funktion einfach mal ein Log-Befehl eingebaut, der bei jedem Daten-Loggen das Query anzeigt.

                        function _insertValueIntoDB(query, id, cb) {
                            adapter.log.debug(query);
                        
                            borrowClientFromPool((err, client) => {
                                if (err) {
                                    returnClientToPool(client);
                                    adapter.log.error(err);
                                    cb && cb(); // BF asked (2021.12.14): may be return here err?
                                } else {
                                    client.execute(query, (err /* , rows, fields */) => {
                                        returnClientToPool(client);
                        
                                        adapter.log.error(`Hallo Welt --> ${query}`); // Nettekov
                                        
                                       if (err) {
                                            adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                        } else {
                                            checkRetention(id);
                                        }
                                        cb && cb(); // BF asked (2021.12.14): may be return here err?
                                    });
                                }
                            });
                        }
                        
                        

                        Wenn man jetzt im Protokollbereich von IOBroker nachschauen, sieht man , da die meine Datenlog' in der SQL-Transaktion nur ein SQl-Statement haben.
                        Wenn zwei SQL-Statements in einer Transaktion auftauchen, dann kommt auch der Syntax-Error.

                        iolog.png

                        Gruss nettekov

                        haus-automatisierungH Online
                        haus-automatisierungH Online
                        haus-automatisierung
                        Developer Most Active
                        schrieb am zuletzt editiert von
                        #54

                        @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                        Wenn zwei SQL-Statements in einer Transaktion auftauchen, dann kommt auch der Syntax-Error.

                        Eventuell kann @apollon77 was dazu sagen?

                        🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                        🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                        📚 Meine inoffizielle ioBroker Dokumentation

                        apollon77A 1 Antwort Letzte Antwort
                        0
                        • N nettekov

                          @marc-berg Vielen dank für deine Antwort.

                          Weiß Du , wofür die V1.16.1 steht.
                          Bevor ich den SQL-Adapter , deinstalliere und wieder installiere, sollten wir erst wissen, wofür Diese Version steht.

                          Marc BergM Offline
                          Marc BergM Offline
                          Marc Berg
                          Most Active
                          schrieb am zuletzt editiert von Marc Berg
                          #55

                          @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                          @marc-berg Vielen dank für deine Antwort.

                          Weiß Du , wofür die V1.16.1 steht.
                          Bevor ich den SQL-Adapter , deinstalliere und wieder installiere, sollten wir erst wissen, wofür Diese Version steht.

                          Ich weiß es nicht, vielleicht es nur ein Anzeigefehler. Genauso gut kann ein Update unvollständig durchgelaufen sein. Ich finde es aber verdächtig, und eine Neuinstallation eines Adapters ist keine Raketentechnologie.

                          NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

                          Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                          Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                          1 Antwort Letzte Antwort
                          0
                          • N Offline
                            N Offline
                            nettekov
                            schrieb am zuletzt editiert von nettekov
                            #56

                            Hallo zusammen,

                            ich versuche es mit diesen Code-Schnipsel, das Problem provisorisch zu umgehen. Dient nur zu Testzwecken.

                                             adapter.log.error(`Hallo Welt --> ${query}`);
                            
                                     var start=0;
                                    var ende=0;
                                    var schleife=true;
                                    var sub_query=query;
                                    do{
                                            start=query.indexOf("INSERT",ende);
                                            ende=query.indexOf(";INSERT",start);
                                            if (ende<0){
                                                    ende=query.length ;
                                                     schleife=false;
                                            }
                                            else{
                                                    ende++;
                                                    schleife=true;
                                            }
                                            sub_query=query.substring(start,ende);
                                            client.execute(sub_query, (err /* , rows, fields */) => {
                                                    if (err) {
                                                            adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                                    } else {
                                                    checkRetention(id);
                                                    }
                                                    cb && cb(); // BF asked (2021.12.14): may be return here err?
                                            });
                            
                            
                                    }while(schleife);
                                    returnClientToPool(client);
                            
                            

                            (Achtung! Kopieren und Einsetzen auf eigene Gefahr! Dies ist nicht mit dem Entwickler abgesprochen und dient nur zur Testzwecken. Ich nehme keinerlei Gewähr!)

                            Momentan sieht es gut aus, es gibt keine Fehlermeldung mehr, wenn zwei INSERT in einer Transaktion stehen, bzw die Werte werden auch gespeichert.
                            Ergebnis.png

                            Gruss nettekov

                            1 Antwort Letzte Antwort
                            0
                            • N nettekov

                              @OliverIO
                              Hallo OliverIO,

                              In der main.js werden mit dieser Funktion die Datenlogs gesendet?

                              function _insertValueIntoDB(query, id, cb) {
                                  adapter.log.debug(query);
                              
                                  borrowClientFromPool((err, client) => {
                                      if (err) {
                                          returnClientToPool(client);
                                          adapter.log.error(err);
                                          cb && cb(); // BF asked (2021.12.14): may be return here err?
                                      } else {
                                          client.execute(query, (err /* , rows, fields */) => {
                                              returnClientToPool(client);
                                              if (err) {
                                                  adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                              } else {
                                                  checkRetention(id);
                                              }
                                              cb && cb(); // BF asked (2021.12.14): may be return here err?
                                          });
                                      }
                                  });
                              }
                              

                              Gruss Nettekov

                              OliverIOO Offline
                              OliverIOO Offline
                              OliverIO
                              schrieb am zuletzt editiert von
                              #57

                              @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                              In der main.js werden mit dieser Funktion die Datenlogs gesendet?

                              sorry für die verspätung, aber ich glaube du hast es selbst schon herausgefunden.
                              ja, das ist die funktion, welche für die inserts zuständig ist.
                              mit client.execute wird der befehl ausgeführt und wenn ein fehler kommt, wird die query (so wie es der adapter erzeugt hat) ausgegeben + die db fehlermeldung + die betroffene id

                              Meine Adapter und Widgets
                              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                              Links im Profil

                              1 Antwort Letzte Antwort
                              0
                              • haus-automatisierungH haus-automatisierung

                                @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                                Wenn zwei SQL-Statements in einer Transaktion auftauchen, dann kommt auch der Syntax-Error.

                                Eventuell kann @apollon77 was dazu sagen?

                                apollon77A Online
                                apollon77A Online
                                apollon77
                                schrieb am zuletzt editiert von
                                #58

                                @haus-automatisierung Also Wenn da wirklich in einem SQL Statement vom Adapter zwei Queries gesendet werden zusammen dann muss ich schauen warum - weil ich entsinne mich das die SQL Lib das nicht kann .... aber da muss ich reinschauen. Github issue bitte anlegen

                                Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                                • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                                • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                                haus-automatisierungH 1 Antwort Letzte Antwort
                                1
                                • apollon77A apollon77

                                  @haus-automatisierung Also Wenn da wirklich in einem SQL Statement vom Adapter zwei Queries gesendet werden zusammen dann muss ich schauen warum - weil ich entsinne mich das die SQL Lib das nicht kann .... aber da muss ich reinschauen. Github issue bitte anlegen

                                  haus-automatisierungH Online
                                  haus-automatisierungH Online
                                  haus-automatisierung
                                  Developer Most Active
                                  schrieb am zuletzt editiert von
                                  #59

                                  @apollon77 Danke!

                                  FYI https://github.com/ioBroker/ioBroker.sql/issues/294

                                  🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                                  🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                                  📚 Meine inoffizielle ioBroker Dokumentation

                                  1 Antwort Letzte Antwort
                                  1
                                  • N Offline
                                    N Offline
                                    nettekov
                                    schrieb am zuletzt editiert von
                                    #60

                                    @apollon77
                                    @haus-automatisierung
                                    Hallo zusammen,

                                    ich wollte mal ein Status nach 3 Tagen abgeben. Wenn ich irgendwie helfen kann, gebt mir bitte Bescheid.

                                    ich bekommen ca 5-20 mal in der Stunde , SQL-Sequenzen mit mehrfach INSERT-Statements von den Aquara Sensoren.
                                    Beispiel aus den Logs:

                                    sql.0			
                                    	15.02.2023 19:54	info	Hallo Welt -->(SUB)adapter.log.error INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (47, 1676485989164, 5.77),(47, 1676486828459, 5.26);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (47, 1676486828459, 5.26, 1, 2, 0);
                                    sql.0			
                                    	15.02.2023 19:34	info	Hallo Welt -->(SUB)adapter.log.error INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (47, 1676484472310, 6.11),(47, 1676485989164, 5.77);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (47, 1676485989164, 5.77, 1, 2, 0);
                                    sql.0			
                                    	15.02.2023 19:54	info	Hallo Welt -->(SUB)adapter.log.error INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (50, 1676483202748, 19.83),(50, 1676486821479, 19.78),(50, 1676486821479, 19.78),(50, 1676487143779, 19.72);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (50, 1676486821479, 19.78, 1, 2, 0),(50, 1676487143779, 19.72, 1, 2, 0);
                                    ..............
                                    

                                    Durch den temporären, eingebauten Codeschnipsel in der '_InsertValueIntoDB' - Funktion werden alle eingehenden mehrfach INSERT-Statement in einzelne INSERT-Sequenz separiert und als einzelne Transaktionen verschickt.
                                    Bis jetzt habe ich keine Fehlermeldung mehr erhalten, bzw. die Daten werden ohne Probleme gespeichert.

                                    Wie gesagt, dies ist nur temporär bis das Problem gefixt ist.
                                    Gruss nettekov

                                    (Achtung! Kopieren und Einsetzen auf eigene Gefahr! Dies ist nicht mit dem Entwickler abgesprochen und dient nur zur Testzwecken. Ich nehme keinerlei Gewähr!)

                                    function _insertValueIntoDB(query, id, cb) {
                                        adapter.log.debug(query);
                                    
                                        borrowClientFromPool((err, client) => {
                                            if (err) {
                                                returnClientToPool(client);
                                                adapter.log.error(err);
                                                cb && cb(); // BF asked (2021.12.14): may be return here err?
                                            } else {
                                    //BEGIN********************************************
                                                     //adapter.log.info(`Hallo Welt --> ${query}`);
                                    
                                             var start=0;
                                            var ende=0;
                                            var schleife=true;
                                            var sub_query=query;
                                            do{
                                                    start=query.indexOf("INSERT",ende);
                                                    ende=query.indexOf(";INSERT",start);
                                                    if (ende<0){
                                                            ende=query.length ;
                                                             schleife=false;
                                                    }
                                                    else{
                                                            ende++;
                                                            schleife=true;
                                                            adapter.log.info(`Hallo Welt -->(SUB)adapter.log.error ${query}`);
                                    
                                                    }
                                                    sub_query=query.substring(start,ende);
                                                    client.execute(sub_query, (err /* , rows, fields */) => {
                                                            if (err) {
                                                                    adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                                            } else {
                                                            checkRetention(id);
                                                            }
                                                            cb && cb(); // BF asked (2021.12.14): may be return here err?
                                                    });
                                    
                                    
                                            }while(schleife);
                                            returnClientToPool(client);
                                    //ENDE******************************************************
                                    /*
                                                client.execute(query, (err ) => {
                                                    returnClientToPool(client);
                                                    
                                                    if (err) {
                                                        adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                                    } else {
                                                        checkRetention(id);
                                                    }
                                                    cb && cb(); // BF asked (2021.12.14): may be return here err?
                                                });*/
                                            }
                                        });
                                    }
                                    
                                    
                                    haus-automatisierungH apollon77A 2 Antworten Letzte Antwort
                                    0
                                    • N nettekov

                                      @apollon77
                                      @haus-automatisierung
                                      Hallo zusammen,

                                      ich wollte mal ein Status nach 3 Tagen abgeben. Wenn ich irgendwie helfen kann, gebt mir bitte Bescheid.

                                      ich bekommen ca 5-20 mal in der Stunde , SQL-Sequenzen mit mehrfach INSERT-Statements von den Aquara Sensoren.
                                      Beispiel aus den Logs:

                                      sql.0			
                                      	15.02.2023 19:54	info	Hallo Welt -->(SUB)adapter.log.error INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (47, 1676485989164, 5.77),(47, 1676486828459, 5.26);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (47, 1676486828459, 5.26, 1, 2, 0);
                                      sql.0			
                                      	15.02.2023 19:34	info	Hallo Welt -->(SUB)adapter.log.error INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (47, 1676484472310, 6.11),(47, 1676485989164, 5.77);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (47, 1676485989164, 5.77, 1, 2, 0);
                                      sql.0			
                                      	15.02.2023 19:54	info	Hallo Welt -->(SUB)adapter.log.error INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (50, 1676483202748, 19.83),(50, 1676486821479, 19.78),(50, 1676486821479, 19.78),(50, 1676487143779, 19.72);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (50, 1676486821479, 19.78, 1, 2, 0),(50, 1676487143779, 19.72, 1, 2, 0);
                                      ..............
                                      

                                      Durch den temporären, eingebauten Codeschnipsel in der '_InsertValueIntoDB' - Funktion werden alle eingehenden mehrfach INSERT-Statement in einzelne INSERT-Sequenz separiert und als einzelne Transaktionen verschickt.
                                      Bis jetzt habe ich keine Fehlermeldung mehr erhalten, bzw. die Daten werden ohne Probleme gespeichert.

                                      Wie gesagt, dies ist nur temporär bis das Problem gefixt ist.
                                      Gruss nettekov

                                      (Achtung! Kopieren und Einsetzen auf eigene Gefahr! Dies ist nicht mit dem Entwickler abgesprochen und dient nur zur Testzwecken. Ich nehme keinerlei Gewähr!)

                                      function _insertValueIntoDB(query, id, cb) {
                                          adapter.log.debug(query);
                                      
                                          borrowClientFromPool((err, client) => {
                                              if (err) {
                                                  returnClientToPool(client);
                                                  adapter.log.error(err);
                                                  cb && cb(); // BF asked (2021.12.14): may be return here err?
                                              } else {
                                      //BEGIN********************************************
                                                       //adapter.log.info(`Hallo Welt --> ${query}`);
                                      
                                               var start=0;
                                              var ende=0;
                                              var schleife=true;
                                              var sub_query=query;
                                              do{
                                                      start=query.indexOf("INSERT",ende);
                                                      ende=query.indexOf(";INSERT",start);
                                                      if (ende<0){
                                                              ende=query.length ;
                                                               schleife=false;
                                                      }
                                                      else{
                                                              ende++;
                                                              schleife=true;
                                                              adapter.log.info(`Hallo Welt -->(SUB)adapter.log.error ${query}`);
                                      
                                                      }
                                                      sub_query=query.substring(start,ende);
                                                      client.execute(sub_query, (err /* , rows, fields */) => {
                                                              if (err) {
                                                                      adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                                              } else {
                                                              checkRetention(id);
                                                              }
                                                              cb && cb(); // BF asked (2021.12.14): may be return here err?
                                                      });
                                      
                                      
                                              }while(schleife);
                                              returnClientToPool(client);
                                      //ENDE******************************************************
                                      /*
                                                  client.execute(query, (err ) => {
                                                      returnClientToPool(client);
                                                      
                                                      if (err) {
                                                          adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                                      } else {
                                                          checkRetention(id);
                                                      }
                                                      cb && cb(); // BF asked (2021.12.14): may be return here err?
                                                  });*/
                                              }
                                          });
                                      }
                                      
                                      
                                      haus-automatisierungH Online
                                      haus-automatisierungH Online
                                      haus-automatisierung
                                      Developer Most Active
                                      schrieb am zuletzt editiert von
                                      #61

                                      @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                                      Durch den temporären, eingebauten Codeschnipsel in der '_InsertValueIntoDB' - Funktion werden alle eingehenden mehrfach INSERT-Statement in einzelne INSERT-Sequenz separiert und als einzelne Transaktionen verschickt.

                                      Die Frage ist ja eher, wie die da rein kommen.

                                      OT: Schau dir mal die String-Funktion split an ;)

                                      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                                      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                                      📚 Meine inoffizielle ioBroker Dokumentation

                                      N 1 Antwort Letzte Antwort
                                      0
                                      • haus-automatisierungH haus-automatisierung

                                        @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                                        Durch den temporären, eingebauten Codeschnipsel in der '_InsertValueIntoDB' - Funktion werden alle eingehenden mehrfach INSERT-Statement in einzelne INSERT-Sequenz separiert und als einzelne Transaktionen verschickt.

                                        Die Frage ist ja eher, wie die da rein kommen.

                                        OT: Schau dir mal die String-Funktion split an ;)

                                        N Offline
                                        N Offline
                                        nettekov
                                        schrieb am zuletzt editiert von
                                        #62

                                        @haus-automatisierung said in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                                        Die Frage ist ja eher, wie die da rein kommen.

                                        Die kommen durch die Aqara Sensoren für Temperatur, Luftdruck und Luftfeuchtigkeit.

                                        Aqara Smart Luftdruck Temperatur Feuchtigkeit Umwelt Aqara Sensor Arbeit Für Xiaomi Hause Android IOS APP Control Homekit

                                        Ich hatte letztes Jahr im Januar 3 Stück gekauft und bis dato keine Probleme.
                                        Im Januar zwei weitere implementiert. Erst in der Kombination diesen zwei gab es die Probleme, dann aber z. T. von allen fünf.
                                        Von den anderen Zigbee-Teilnehmern, bzw. Datenpunkten ist alles ruhig.
                                        Vielleicht haben wir hier ein Chargen Problem bei den Aqara.
                                        Würde zumindest erklären, warum das Problem jetzt auftritt.

                                        Ich habe noch einen Sensor übrig, denn kann ich gerne zuschicken.

                                        Grüße nettekov

                                        1 Antwort Letzte Antwort
                                        0
                                        • N Offline
                                          N Offline
                                          nettekov
                                          schrieb am zuletzt editiert von nettekov
                                          #63

                                          @haus-automatisierung said in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                                          OT: Schau dir mal die String-Funktion split an

                                          Jaja, ich ziehe mir den :athletic_shoe: gerne an.
                                          Beim nächsten Flickschustern nehme ich die Zange statt nicht den Hammer. :grinning:

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          919

                                          Online

                                          32.5k

                                          Benutzer

                                          81.9k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe