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
    16
    1
    1.7k

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

SQL.Adpter: Insert-Befehle innerhalb von 40ms

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
64 Beiträge 6 Kommentatoren 5.1k 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.
  • 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

          763

          Online

          32.6k

          Benutzer

          82.1k

          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