Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Vorh. Tabelle aus MySQL-Datenbank anbinden und auslesen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Vorh. Tabelle aus MySQL-Datenbank anbinden und auslesen

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

      Ich habe eine vorhandene Tabelle in einer MYSQL Datenbank, welche ich gerne in Teilen via JS oder Blocky in Form von SQL Statements auslesen und weiterverarbeiten möchte.

      Die vorhandenen IOBROKER STD- SQL Anbindung zum Datenloggen in die gleiche MY SQL Datenbank
      soll davon unberührt bleiben.

      Unbenannt.PNG

      Leider enden alle hier im Forum gefunedenen Anfragen in dieser Richtung bei "Nutze die IO Broker dB."

      Wenn ich die STD Implementierung für eine MySQL dB Connection als JS nutzen möchte

      var mysql = require('mysql2');
      //var mysql = require('mysql'); funktioniert auch nicht
      var con = mysql.createConnection({
        host: "192.168.X.Y:3303",
        user: "USER",
        password: "PW"
      });
      
      con.connect(function(err) {
        if (err) throw err;
        console.log("Connected!");
      });
      

      bekomme ich bereits verschiedene Fehlermeldungen.

      Hier die Fehlermeldung mit mysql2:

      sourceanalytix.0 (2200) Objects user redis pmessage */cfg.o.script.js.common.1_Running_Files.SQLdBCon:{"common":{"name":"SQLdBCon","expert":true,"engineType":"Javascript/js","engine":"system.adapter.javascript.0","source":"var mysql = require('mysql2');\r\n\r\nvar con = mysql.createConnection({\r\n host: "192.168.X.Y:3303",\r\n user: "USERDNAME",\r\n password: "PASSWORT"\r\n});\r\n\r\ncon.connect(function(err) {\r\n if (err) throw err;\r\n console.log("Connected!");\r\n});","debug":false,"verbose":false,"enabled":true},"type":"script","from":"system.adapter.admin.0","user":"system.user.admin","ts":1690141347794,"_id":"script.js.common.1_Running_Files.SQLdBCon","acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}

      Hier die Fehlermeldung mit mysql:
      22:02:48.031 error javascript.0 (326872) script.js.common.1_Running_Files.SQLdBCon: Error: Cannot find module 'mysql'
      22:02:48.033 error javascript.0 (326872) at script.js.common.1_Running_Files.SQLdBCon:1:13
      22:02:48.034 error javascript.0 (326872) at script.js.common.1_Running_Files.SQLdBCon:13:3
      22:02:48.038 error javascript.0 (326872) script.js.common.1_Running_Files.SQLdBCon: TypeError: Cannot read properties of undefined (reading 'createConnection')
      22:02:48.038 error javascript.0 (326872) at script.js.common.1_Running_Files.SQLdBCon:3:17
      22:02:48.039 error javascript.0 (326872) at script.js.common.1_Running_Files.SQLdBCon:13:3

      Habe zur Lösung versucht per npm install mysql das Problem zu beheben.
      Mit scheint, ich hätte noch ein paar Options mit angeben müssen.
      Kann hier jemand kurz auf die Sprünge helfen?

      Gruss
      AtlantisUnion

      mickym F T 3 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active @Atlantis last edited by

        @atlantis Überlege Dir ob Du nicht lieber NodeRed nutzen willst, da gibts fertige Nodes.

        1 Reply Last reply Reply Quote 0
        • F
          fastfoot @Atlantis last edited by fastfoot

          @atlantis erstelle eine zweite Instanz des sql-adapters, trage dort deine DB ein und frage dann mit den iobroker Standard-Tools ab was immer du möchtest

          sendTo("sql.1", "query", "select * from deine_db.deine_tabelle", (erg) => {
              log(erg)
          })
          

          zu deinem urspr. Versuch:

          const mysql = require('mysql2');
          const con = mysql.createConnection({
              host: "deine_ip",
              user: "user",
              password: "passwort"
          });
          
          con.connect(function (err) {
              if (err) log(err);
              console.log("Connected!");
          });
          
          con.query("select * from deine_db.deine_tabelle", (err, erg, fld) => {
              log(erg)
          })
          
          A 1 Reply Last reply Reply Quote 0
          • T
            ticaki Developer @Atlantis last edited by ticaki

            @atlantis

            benutze einfach den Adapter. Mußt wohl darauf achten das der iobroker user auch auf die weitere DB zugreifen darf

                       result = await sendToAsync('sql.0', 'query', 'SELECT enum, name FROM iobroker.rooms WHERE enum = "' + r + '";')        
                        if (result.result[0] && result.result[0].length != 0) { 
                            if (result.result[0].name != room) {
                            await sendToAsync('sql.0', 'query', 'UPDATE iobroker.rooms set name = "'+room+'" WHERE enum = "' + r + '";')
                            }
                        } else {
                            await sendToAsync('sql.0', 'query', 'INSERT INTO iobroker.rooms (enum, name) VALUES ("' + r + '", "' + room + '");')
                        }       
            
            
            1 Reply Last reply Reply Quote 0
            • A
              Atlantis @fastfoot last edited by

              @fastfoot
              Habe die dB eingebunden, Verbindungsversuch erfolgt ohne Fehler.

              Habe dann mal versucht die Werte eine Teabelle zu lesen:

              sendTo("sql.1", "query", "select * from FREISCHALTUNG", (erg) => {
              
                  log(erg)
              
              })
              

              Bekomme folgende Fehlermeldung in den Protokollen:

              sourceanalytix.0 (2200) Objects user redis pmessage */cfg.o.script.js.common.1_Running_Files.SQLdBCon:{"common":{"name":"SQLdBCon","expert":true,"engineType":"Javascript/js","engine":"system.adapter.javascript.0","source":"sendTo(\"sql.1\", \"query\", \"select * from FREISCHALTUNG\", (erg) => {\r\n\r\n log(erg)\r\n\r\n})","debug":false,"verbose":false,"enabled":false},"type":"script","from":"system.adapter.admin.0","user":"system.user.admin","ts":1690230804235,"_id":"script.js.common.1_Running_Files.SQLdBCon","acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}
              

              Habe folgende Rechte eingestellt:
              45bef692-6211-4dd1-b3aa-21c48d47a73c-grafik.png

              F 1 Reply Last reply Reply Quote 0
              • F
                fastfoot @Atlantis last edited by

                @atlantis was hat das mit sourceanalytics zu tun? wie sind deine Einstellungen für sql.1?

                du kannst doch auch mein anderes Beispiel nutzen, wobei das hier auch funktioniert wenn du richtige settings nutzt

                A 1 Reply Last reply Reply Quote 0
                • A
                  Atlantis @fastfoot last edited by

                  @fastfoot Was das mit sourceanalytics zu tun hat kann ich leider nicht sagen.
                  Immer wenn ich das JS ausführe aber auch wenn ich es stoppe mit dem Pausen Symbol kommt diese "Silly"-Meldung komlett so wie ich sie hier reincopiert habe.
                  Ich hätte erwartet dass dann im LOG das Ergebnis der Anfrage steht, oder?

                  0def1c61-9c50-4ef0-895b-251ee5a31914-grafik.png

                  Der SQL Adapter läuft sonst so weit...
                  c18dbf7d-3f07-4cb2-adbf-a04e3210ca77-grafik.png

                  Settings wie folgt:
                  9b5b422d-c060-4a0d-8d70-bcbf02a37ac5-grafik.png

                  477e5b5b-cfa7-4823-bb23-0bf24cb29f49-grafik.png

                  Was mich irritiert ist dass er eine Tabelle anlegen möchte???
                  b4885bb2-6819-496f-b660-aacb5e2abe61-grafik.png

                  F 1 Reply Last reply Reply Quote 0
                  • F
                    fastfoot @Atlantis last edited by fastfoot

                    @atlantis Hast du denn Sourceanalytics installiert? Wenn ja, mal stoppen für den test! Die Abfrage muss beim mysql die DB enthalten, wie in meinem Beispiel auch gezeigt. Dass er Tabellen erstellen will(und hoffentlich auch kann?) liegt daran dass der sql adapter glaubt dass er für iobroker da ist und da müssen dann natürlich auch die Tabellen da sein. Du wirst die aber nicht verwenden und auch nicht löschen! Der sql adapter wird hier für deine eigene Datenbank missbraucht

                    was ich so gar nicht verstehe ist dass du mein 2tes Beispiel ohne den SQL Adapter erst gar nicht probiert hast wo das doch dein ursprünglicher Ansatz war, der halt auch schon Fehler enthalten hatte

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    871
                    Online

                    31.7k
                    Users

                    79.8k
                    Topics

                    1.3m
                    Posts

                    4
                    8
                    819
                    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