Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. SQL.Adpter: Insert-Befehle innerhalb von 40ms

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    SQL.Adpter: Insert-Befehle innerhalb von 40ms

    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      nettekov last edited by

      Hallo zusammen,

      ich habe zwei neue Xiamo _Sensoren in Zigbee eingebunden und wollte die Temperatur, Luftfeuchte und Druch loggen.

      Seit den bekommen ich ständig den Error-Log , das bei den Insert-Befehl ein Syntax_Fehler vorliegt, was aber nicht stimmt. Auffällig ist, das diese immer paarweise mit einem Abstand von unter 50ms kommen.

      Error.png

      Über PHPAdmin lassen sich die Insert ganz normal einfügen
      phpadmin.png

      Den Iobroker, bzw. das Linux habe ich aktualisiert , was kein Erfolg brachte.

      Vielleicht hat einer eine Idee.

      Gruss Nettekov

      Codierknecht OliverIO haus-automatisierung 3 Replies Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @nettekov last edited by

        @nettekov
        Die treten nicht paarweise auf - es sind ja zwei unterschiedliche ID's betroffen.

        Ist LUFDRUCK da übrigens korrekt? Ohne T?

        N 1 Reply Last reply Reply Quote 0
        • N
          nettekov @Codierknecht last edited by

          @codierknecht Ja, das ist ein Rechtschreibfehler., aber hier handelt es sich um die Alias-I'd, die in der Datenbank hinterlegt wird

          1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO @nettekov last edited by OliverIO

            @nettekov

            da stehen zwei mal die values angaben hintereinander.

            INSERT INTO table_name (column1, column2, column3, ...)
            VALUES (value1, value2, value3, ...),(value1, value2, value3, ...);
            
            

            das geht so nicht. einen datensatz auf einmal nur. wenn man mehrere datensätze auf einmal schreiben möchte, dann muss man mehrere insert intos hintereinandergeschrieben mit ; getrennt senden.
            die db optimiert das dann selbst.

            INSERT INTO table_name (column1, column2, column3, ...)
            VALUES (value1, value2, value3, ...);
            INSERT INTO table_name (column1, column2, column3, ...)
            VALUES (value1, value2, value3, ...);
            

            https://www.w3schools.com/sql/sql_insert.asp

            hast du das sql selber geschrieben? oder kommt das vom adapter?
            warum nutzt du nicht die historisierung des sql-adapters?
            der macht genau das für dich vollautomatisch.

            haus-automatisierung 1 Reply Last reply Reply Quote 0
            • haus-automatisierung
              haus-automatisierung Developer Most Active @OliverIO last edited by haus-automatisierung

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

              das geht so nicht. einen datensatz auf einmal nur. wenn man mehrere datensätze auf einmal schreiben möchte, dann muss man mehrere insert intos hintereinandergeschrieben mit ; getrennt senden.

              Das ist nicht richtig und das funktioniert so. Siehe z.B. https://mariadb.com/kb/en/insert/

              Inserting more than 1 row at a time:

              INSERT INTO tbl_name VALUES (1, "row 1"), (2, "row 2");
              

              Ich gehe eh davon aus, dass das Statements sind, welche der SQL-Adapter für das logging zusammenbaut. Der Fehler muss also wo anders liegen.

              OliverIO 1 Reply Last reply Reply Quote 0
              • haus-automatisierung
                haus-automatisierung Developer Most Active @nettekov last edited by

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

                Den Iobroker, bzw. das Linux habe ich aktualisiert , was kein Erfolg brachte.

                • Welche MariaDB version?
                • Welche sql Adapter Version?
                1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @haus-automatisierung last edited by

                  @haus-automatisierung

                  Oh danke, ist mir entgangen. Früher gabs das nicht.

                  haus-automatisierung 1 Reply Last reply Reply Quote 0
                  • haus-automatisierung
                    haus-automatisierung Developer Most Active @OliverIO last edited by haus-automatisierung

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

                    Oh danke, ist mir entgangen. Früher gabs das nicht.

                    Seit wann genau weiß ich nicht. Aber mindestens seit mysql 5.7 (also ~2015). Ich meine aber, das geht sogar noch deutlich länger.

                    EDIT: mySQL 5.5 geht auch. Also eher so 13 Jahre 🙂

                    OliverIO 1 Reply Last reply Reply Quote 0
                    • OliverIO
                      OliverIO @haus-automatisierung last edited by

                      @haus-automatisierung

                      tja, wenn man das mal kann, liest man nicht regelmäßig die Referenz nach.🤷‍♂️

                      1 Reply Last reply Reply Quote 0
                      • N
                        nettekov last edited by nettekov

                        @haus-automatisierung :

                        Sorry für der Verzug:
                        IOBroker läuft auf einer DS718+ in einem virtuellen Linux
                        MariaDB läuft ebenfalls auf der DS718+

                        MariaDB : 10.3.29-0070
                        SQL-Adapter: v1.16.1

                        Ich habe auch mal die Datapoint aufgeräumt, da durch die Umbenennung der Alias -ID jedes Mal eine neue angelegt.
                        a
                        Auffällig hier auch , da die meistens Fehlermeldung bei ID >32 entstehen
                        Tabelle datapoints
                        vorher.png

                        Zuerst alle Datenpunkten mit ID >32 deaktiviert
                        Dann in allen Tabellen (datapoints, TS_counter, ts_number) alle Datensätze mit ID >32 gelöscht.
                        Danach die Datenpunkte wieder Aktiviert
                        Nachher: Tabelle datapoints:
                        nACHHER.png

                        Aber es gab keine Verbesserung.

                        Ich verstehe die Fehlermeldung des Datenbank-Server nicht.
                        Er sagt, dass es ein Syntax-Fehler gibt.
                        Wenn ich aber den Insert-Befehl aus der Fehlermeldung im php-Admin ausführe, dann ist alles in Ordnung.
                        Gibt so erstmal keinen Sinn.
                        Zusätzlich zum eigentlichen Insert-Befehl muss was zum DB-Server geschickt werden, was ihn aus dem Tritt bringt.

                        Gruss Nettekov

                        haus-automatisierung 1 Reply Last reply Reply Quote 0
                        • haus-automatisierung
                          haus-automatisierung Developer Most Active @nettekov last edited by haus-automatisierung

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

                          SQL-Adapter: v1.16.1

                          2.2.0 ist stable. Bitte aktualisieren. Deine Version ist ja uralt. Da steige ich gar nicht erst in die Fehlersuche ein 🙂

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

                          IOBroker läuft auf einer DS718+ in einem virtuellen Linux

                          Du meinst einen Docker Container? Und die MariaDB läuft auch in einem Container? 10.3 läuft jetzt bald aus dem Support. Eventuell auch da mal ein Update machen (wird aber nichts mit dem Fehler zu tun haben).

                          1 Reply Last reply Reply Quote 0
                          • N
                            nettekov last edited by nettekov

                            @haus-automatisierung
                            Ich bin noch nicht so affin im Iobroker.
                            Ich hatte in der Hitze des Gefechtes in den Instanzen nachgeschaut, dort stand v1.16.1 (Was das auch immer für eine Version das ist)
                            instance_sql.png

                            Bei den Adapter steht aber 2.2.0
                            adapter.png

                            Ich hatte auch, bevor ich dieses Thread erstellt habe, erstmal eine Rundrum Aktualiserung durchgeführt:

                            sudo apt update 
                            sudo apt full-upgrade
                            iob repo unset beta
                            iob update
                            iob upgrade
                            iob stop 
                            iob upgrade self
                            iob start
                            

                            Da bin ich bei dir.
                            Bevor ich schreibt, sollte erstmal alles aktuell sein!

                            @haus-automatisierung sagte:

                            • Du meinst einen Docker Container? Und die MariaDB läuft auch in einem Container? 10.3 läuft jetzt bald aus dem Support. Eventuell auch da mal ein Update machen (wird aber nichts mit dem Fehler zu tun haben).

                            Nee das virtuelle Linux läuft nicht im Docker Container, sondern Synology stellt auf der DS718+ zwei Virtuelle Maschinen zur Verfügung, wo Eine davon als virtuelles Linux mit ioBroker agiert.

                            Der Mariadb-Server läuft auch nicht im Container, sondern ist von Synology ein Paket, was von Synology selber Aktuell gehalten wird.
                            mariadb.png
                            Bei Synology wird z.Z. als akuelle Version die 10.3.29-0070, ob wohl wir bei MariaDB schon bei 10.10.2; (17. November 2022)
                            sind.
                            Ich habe hier leider keine Einfluss, welche MariaDB-Version wird.

                            Generell glaube ich mehr daran, das die Ursache am DB-Server liegt, weil Diese trotz korrekter Syntax , dem Insert-Befehl als fehlerhaft anzeigt.

                            Sollten sie kein anderen Idee haben, würde ich vorschlagen, das ich die IObroker -DB exportieren und bei mir auf eine lokalen MYSQL-Server(XAMPP) importiere und laufen lasse . Hier habe ich dann auch die Möglichkeit über Wireshark den Datenverkehr zu analysieren.

                            @haus-automatisierung : Wie ist deine Meinung?

                            Gruss Nettekov

                            haus-automatisierung Codierknecht 2 Replies Last reply Reply Quote 0
                            • haus-automatisierung
                              haus-automatisierung Developer Most Active @nettekov last edited by haus-automatisierung

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

                              Bei Synology wird z.Z. als akuelle Version die 10.3.29-0070, ob wohl wir bei MariaDB schon bei 10.10.2; (17. November 2022)

                              Stimmt, wird mir auch nur angeboten. Denke mal die werden das Paket dann vor EOL auch aktualisieren. Glaube aber wie gesagt nicht, dass das das Problem ist und würde erstmal dabei bleiben. Ist ja nun ein ganz einfacher INSERT, welcher seit 20+ Jahren so funktioniert 🙂

                              Hast Du den SQL-Adapter denn jetzt auf Version 2.2.0? Besteht damit nach wie vor das gleiche Problem?

                              1 Reply Last reply Reply Quote 0
                              • Codierknecht
                                Codierknecht Developer Most Active @nettekov last edited by

                                @nettekov
                                Just for info:
                                Ich betreibe das Ganze mit so ziemlich dem gleichen Setup. ioBroker im Container und MariaDB 10.3.7-0051 als natives Synology-Paket.

                                Diesen seltsamen Effekt konnte ich aber bislang noch nie beobachten.

                                1 Reply Last reply Reply Quote 0
                                • N
                                  nettekov last edited by nettekov

                                  Hallo zusammen,

                                  Der SQL-Adapter ist laut der Versionsamgabe in Adapterbereich auf 2.2.0

                                  Ein wichtiges Detail habe ich aber vergessen zu erwähnen, die Fehlermeldung fingen an, als ich die zwei neugekauufen Temperatur - Sensoren von Aquara ins Zigee-Netz einsetze und das Dazenloggon dort aktiviert habe.

                                  • [Aqara Smart Luftdruck Temperatur Feuchtigkeit Umwelt Aqara Sensor] (https://a.aliexpress.com/_mLSqnrG)

                                  Die Fehlermeldung bleiben aber weitgehenst bei den beiden Sensoren.
                                  Vorher lief das Loggen monatelang ohne Probleme

                                  Gruß Nettekov

                                  Codierknecht 1 Reply Last reply Reply Quote 0
                                  • Codierknecht
                                    Codierknecht Developer Most Active @nettekov last edited by Codierknecht

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

                                    die Fehlermeldung fingen an, als ich die zwei neugekauufen Temperatur - Sensoren von Aquara ins Zigee-Netz einsetze und das Dazenloggon dort aktiviert habe

                                    Das dürften die sein die ich auch einsetze.
                                    3429c790-1417-4f05-8a94-f56b4aadca55-image.png
                                    Ich logge aber nicht direkt deren DP, sondern die Alias-DP die ich für alle meine Temperatur-/Feuchte-Sensoren angelegt habe.

                                    1 Reply Last reply Reply Quote 0
                                    • N
                                      nettekov last edited by nettekov

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

                                      Das dürften die sein die ich auch einsetze.

                                      Jepp , ich habe die selben Sensoren. Ich verwenden auch Alias-ID
                                      sensor.png

                                      ich habe auch beim DP die Entprellzeit auf 5Sec und die Blockzeit auf 6sec, mit dem Gedank, das er zuviel Datensätze bekommen, was aber für ein DB-Server eigentlich kein Problem darstellt.

                                      dp.png

                                      Die Frage ist, warum der DB-Server bei einem korrekten Insert -Befehl die Syntax als Fehler mukiert.
                                      Wenn ich denn komplette Insert-Befehl aus der Fehlermeldung über PHP-ADMIN einspiele, ist alles OK.

                                      @haus-automatisierung Ich stimmt dir zu , das der DB-Server wahrscheinlich keine Fehler hat, aber entweder wir irgendwas mit gesendet, was die Fehlermeldung nicht anzeigt oder vielleicht es wir durch zu eine geringen Eingangsbuffer, was weggeschnitten, wenn zuviel Befehle in einer Transaktion gesendet werden.

                                      Aber das ist alles nur eine Spekulation.

                                      Gruss Nettekov

                                      haus-automatisierung 1 Reply Last reply Reply Quote 0
                                      • haus-automatisierung
                                        haus-automatisierung Developer Most Active @nettekov last edited by haus-automatisierung

                                        @nettekov Eventuell ist auch das @ im Alias ein Problem. Mit solchen Sonderzeichen bin ich bei Datenbanken immer vorsichtig 😉 Wobei das ja eigentlich über Fremschlüssel gelöst wird und in dem Insert gar nicht enthalten ist.

                                        1 Reply Last reply Reply Quote 0
                                        • N
                                          nettekov last edited by nettekov

                                          Hallo zusammen,
                                          @haus-automatisierung Habe ich auch gedacht, aber 5 weitere Sensor verwenden auch in der Alias-ID den

                                          @
                                          

                                          und hier gib es bis jetzt die Probleme nicht.

                                          Ich habe mir gestern mit Wireshark die Netzwerk-Protokolle angeschaut und habe einen kleinen Anhaltspunkt gefunden.
                                          ich bin wie folgt vorgegangen:

                                          • Ich habe die IOBROKER-DB aus der Synology exportiert
                                          • Auf meine lokalen MYSQL-Server(XAMPP) importiert und mit den SQL-Adapter verbunden.
                                          • Gleichzeitig lasse ich Wireshark parallel laufen
                                          • Die DP-ID 47,48,49 ist einer von den neue Aquara_Sensoren, der hauptsächlich die Probleme macht
                                            nACHHER.png

                                          Ergebnis:
                                          Die selben Probleme treten auf mit dem MYSQL Server auf. Also kann es ein DB-Server spezifisches Problem nicht sein

                                          Auffällig hier, alle INSERT-Statements von den anderen DP (<>ID47-49) haben eine typische Protokolllänge ca.160Bytes

                                          Wenn von den DP47-49 INSERT-Statements, dann haben Diese ein Länge von 250-400 Bytes, teils werden die SQL-Statement TRUNCATED

                                          Witzigerweise, wenn ich diese INSERT-Sequenzen aus den Protokoll kopieren und lasse Diese mit PHP-Admin oder HeidiSQL ausführen, gehen sie alle als OK durch und werden gespeichert.

                                          Ich packe mal ein paar Screenshots dazu, vielleicht habt ihr eine Idee, bzw wie ist eure Meinung dazu

                                          Gruss Nettekov

                                          1.Iobroker-Protokoll:
                                          IOBROKER_Protokolle_06_02.png

                                          1. Normaler DP mit ID 9 , der keine Probleme machen und eine Länge von 160 Byte hat.
                                            23_01 ID9_OK.png

                                          2. Fehler A: ID 48 mit Länge von 387 und ist truncated
                                            23-03-02 ID48_Error.png

                                          3. Fehler B: ID 47 mit Länge von 340 und ist truncated
                                            23-03-02 ID47_Error.png

                                          4. Hier ist die ID 49 mal ohne Fehler durchgegangen
                                            23-03-02 ID49_OK.png

                                          5. Generell kann sagen, die meisten DP kommen mit eine Protokolllänge von unter 200Byte.
                                            Nur die AQuara -Sensor fassen anscheinend mehrere Messwert zusammen, so das in den meinsten Fälle dann die Protokolllänge über 250Byte.
                                            summary.png

                                          OliverIO 1 Reply Last reply Reply Quote 0
                                          • OliverIO
                                            OliverIO @nettekov last edited by OliverIO

                                            @nettekov

                                            Kannst du bitte mal prüfen, ob bei diesen datenpunkten in den sql Einstellungen ein Kreuzchen bei Zähler gesetzt ist? Und bei den anderen nicht?

                                            Mir ist aufgefallen, das manchmal noch ein weiteres insert für die Tabelle Counter mit drin steht. Das könnte die größere Länge erklären.

                                            Allerdings nicht den Syntax Fehler.
                                            Auch im Code des Adapters ist da nicht viel spannendes drin.

                                            https://github.com/ioBroker/ioBroker.sql/blob/64606a7c897adc741499572c7fbefb1af42f5063/main.js#L1524

                                            In der Fehleranmeldung wird erst die query die versendet wird ausgegeben und dann die Fehlermeldung die von der dB zurückkommt.
                                            Die ist allerdings nicht immer vollständig im log ausgegeben.

                                            Da bitte mal noch in die Iobroker log Datei auf der Festplatte nachschauen, nicht das die Iobroker Oberfläche hier was abschneidet was man dann nicht sieht.

                                            Wenn das nichts ergibt, dann noch das logging auf db Seite erweitern um zu schauen was da tatsächlich ankommt.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

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

                                            989
                                            Online

                                            31.7k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            64
                                            2956
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo