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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

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.
  • 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+RabbitMQ+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 Offline
                apollon77A Offline
                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
                          • 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?
                                        });*/
                                    }
                                });
                            }
                            
                            
                            apollon77A Offline
                            apollon77A Offline
                            apollon77
                            schrieb am zuletzt editiert von
                            #64

                            @nettekov @haus-automatisierung ALso wo er herkommt weiss ich ... und ist "schon ewig" so ... ich denke eher das das counter Feature nicht so oft genutzt wird (und nicht vom testing), sodass das einfach noch nie wirklich aufgefallen ist.

                            Sauber müsste man umbauen das die "insert" Methode in den DB-Function Files (mysql.js, mssql.js ...) keinen String sondern ein array zurückgibt und dann wie bei der abarbeitung von SQLFunct.init oder .destroy das von der Methode allScripts() gemacht wird weil die das array dann "kommandoweise" abarbeitet. Ich schaue mal wann ich neben Matter zeit finde das zu machen, aber ja dein workkaround tut auch erstmal für dich :-)

                            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
                            1 Antwort Letzte Antwort
                            1
                            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

                            630

                            Online

                            32.5k

                            Benutzer

                            81.7k

                            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