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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    SQL.Adpter: Insert-Befehle innerhalb von 40ms

    This topic has been deleted. Only users with topic management privileges can see it.
    • 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
                  • N
                    nettekov last edited by

                    @OliverIO Beiden DI-ID 47-49 (neuer Aquara-Sensor) ist der Haken Zähler gesetzt. Bei den anderen DP nicht durchgängig gesetzt , aber die Meisten.
                    sql.png

                    Die Fehlermeldung wird vom SQL-Server abgeschnitten:
                    ws1064.png

                    Gruss Nettekov

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

                      Hallo zusammen,

                      nach dem ich eine Nacht darüber geschlafen habe, haben sich die Dinge im Kopf mal zusammengefasst.
                      Das Auslösen des Problems sind zwar die neuen Aquara-Sensor, weil Diese anscheinend mehrere Werte gleichzeitig schicken und somit der SQL-Adapter in eine INSERT-Befehl mehrere (3-5) Datensätze zusammenfasst, was zu der Fehlermeldung führt.
                      Allerdings sollte das jeder SQL-Server Händeln können und zu keinem Fehler führen.

                      Ich denke auch, das die Syntax-Fehlermeldung von beiden Server richtig sond, allerdings nicht ihm SQL-Statement , sondern in der Parametrierung der MySQL-Protokoll-Frames, das Diese z.B. auf eine kurzes SQL-Statement einstellen, was dann zu lange ist.

                      Ich werden heute oder morgen , den INSERT-Befehl aus einen fehlerhaften Protokoll kopieren und in HeidiSQL nochmal ausführen und dann beide MySql-Protokolle vergleichen
                      Da muss es ja einen Unterschied geben.

                      Wie ist eure Meinung.

                      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:

                        Ich werden heute oder morgen , den INSERT-Befehl aus einen fehlerhaften Protokoll kopieren und in HeidiSQL nochmal ausführen und dann beide MySql-Protokolle vergleichen
                        Da muss es ja einen Unterschied geben.

                        Bevor Du das machst, würde ich an Deiner Stelle eher ein kurzes nodejs script schreiben, welches genau die gleiche Library verwendet wie der Adapter und einfach mal das Statement von dort senden. Tritt der Fehler dann auch auf, kann man das viel einfacher eingrenzen.

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

                          @haus-automatisierung: Können wir gerne machen. Bin halt in Linux nicht ganz fit, da ich eher von der Windows-Welt komme.
                          Sagt mir, wo ich es hin kopieren soll und wie ich es aufrufen kann.

                          Gruss nettekov

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

                            @nettekov

                            ok, also der db meldet nicht den kompletten fehler.
                            jetzt noch was bei der db tatsächlich ankommt.

                            das kann man über das general query log aktivieren.
                            da werden dann alle query requests reingeschrieben.
                            https://mariadb.com/kb/en/general-query-log/

                            die befehle kannst du entweder über den client auf dem rechner ausführen (auf der shell mysql eingeben, auch wenn du mariadb verwendest)
                            oder auch aus heidisql.
                            da genau so eingeben wie die normalen queries.

                            falls du mehr konfigurieren willst, dann kannst du es auch in der normalen
                            konfig datei /etc/mysql/my.cnf machen

                            weiterhin kannst du auch mal das error log von mariadb/mysql anschauen oder erweitern. aber da dürfte nix anderes drin stehen.
                            ich denke, der befehl der wirklich ankommt ist erst mal interessant
                            https://mariadb.com/kb/en/error-log/

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

                              Hallo zusammen,

                              @OliverIO : Ich habe gestern mal nachgeschaut. Bei der Synology NAS, wo die MariaDB als Paket installiert ist, keine Möglichkeit gefunden , irgendwelche Log zu akivieren, weil es nicht angeboten wird
                              mardb.png

                              Vielleich über PHPmyadmin, kann ich nochmal nachschauen.
                              Bei MYsql über XAMPP sieht es nicht viel besser aus.

                              @haus-automatisierung : Du hast angeboten , ein extra Nodejs zu erstellen. Steht dein Angebot noch?

                              Gruss Stefan

                              haus-automatisierung OliverIO 2 Replies 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:

                                @haus-automatisierung : Du hast angeboten , ein extra Nodejs zu erstellen. Steht dein Angebot noch?

                                Das war unglücklich formuliert. Ich meinte, dass ich das so machen würde um den Fehler zu finden.

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

                                  @haus-automatisierung Wäre das das module-Verzeichnis für den SQL.Adapter
                                  sql_adapter.png

                                  Kann ich aus Linux(putty) ein javascript starten, was ein SQL-Statement abschickt?
                                  Wenn ja, könnt ihr mir kurz erklären wie?

                                  oder soll ich auf dem Webserver eine HTML -Seite erstellen, was das java-script ausführt.

                                  Gruss Nettekov

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

                                    @nettekov

                                    ich verstehe nicht, was du mit "es wird nicht angeboten" meinst.
                                    ich habe ja die links zur doku gesendet, wie man das log aktiviert.
                                    du musst an die datenbank befehle senden, genauso wie du queries sendest.
                                    dann werden die requests in eine datei geschrieben.

                                    aber ich glaube wir steigen hier in eine technische tiefe ab, bei der es sich dann nicht mehr lohnt.
                                    ich wäre dann raus.

                                    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:

                                      Webserver eine HTML -Seite erstellen, was das java-script ausführt.

                                      Oh, dann vergiss den Tipp direkt 🙂 Da fangen wir ja bei Adam und Eva an.

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

                                        @haus-automatisierung OK, verstanden. Ich versuche es selber mal

                                        @OliverIO ich versuche es als sql Statement beim MySQL Server

                                        Ich melde mich, wenn ich ein Ergebnis habe, kann ein paar Tage dauern

                                        Gruß 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:

                                          OK, verstanden.

                                          War nicht böse gemeint. Aber serverseitiges JavaScript und auf Client-Seite ausgeführtes sind zwei komplett unterschiedliche paar Schuhe. Nur eines von beiden ist nodejs 🙂 Und wenn man das schon erklären muss, wäre es ein weiter Weg mit npm / package.json / require() / usw. anzufangen.

                                          Generell kannst Du aber einfach eine Textdatei ablegen und diese dann mit node über deine Shell aufrufen: node blabla.js

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

                                            @haus-automatisierung alles gut, habe es auch nicht böse aufgefasst.
                                            Es hätte eventuell,schnell erklärt werden können, bevor ich mich lange auf die Suche mache.
                                            Aber mir dem Hinweis node kann ich schon was anfangen.

                                            Wenn ich was habe, melde ich mich.
                                            Gruß nettekov

                                            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

                                            937
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            64
                                            3109
                                            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