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. Skripten / Logik
  4. JavaScript
  5. SQL-Abfrage aus Script an MariaDB

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

SQL-Abfrage aus Script an MariaDB

Geplant Angeheftet Gesperrt Verschoben JavaScript
8 Beiträge 3 Kommentatoren 51 Aufrufe 2 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.
  • Norwegen60N Online
    Norwegen60N Online
    Norwegen60
    schrieb zuletzt editiert von
    #1

    Hallo,
    ich habe bisher iobroker Daten in eine MsSQL-Datenbank geschrieben und die in einem SQL-Script stark vereinfacht so ausgelesen:

    sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); });
    und mit
    {console.log('###  SQL-Test: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};
    

    Das hat funktioniert.

    Jetzt habe ich auf MariaDB umgestellt. Daten werden auch problemlos in DB geschrieben. Adapter arbeitet also korrekt und Rechte sind vorhanden.
    Ich schaffe es aber nicht mehr auf irgendeine Weise Werte abzurufen. Die ganze SQL-Logik ist in eine DB-function verlegt.

    sendTo('sql.0', 'query', "SELECT fnTest AS test;", function(result) {console.log('Result 1: ', result);});
    

    Result bleibt leer. Aber auch folgende Abfragen liefern nichts, bzw 0 zurück:

    sendTo('sql.0', 'query', "SELECT 1 AS test;", function(result) {console.log('Result 1: ', result);});
    
    sendTo('sql.0', 'query', "SELECT 1 AS test;", result => console.log('Result 2: ', result));
    
    sendTo('sql.0', 'query', 'SELECT 1 AS test;', result =>{ 
          setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); });
    {console.log('Result3: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};
    
    sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{ 
          setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); });
    {console.log('Result4: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};
    

    Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?

    Danke im Voraus
    Gerd

    bahnuhrB fuzzy1955F 2 Antworten Letzte Antwort
    0
    • Norwegen60N Norwegen60

      Hallo,
      ich habe bisher iobroker Daten in eine MsSQL-Datenbank geschrieben und die in einem SQL-Script stark vereinfacht so ausgelesen:

      sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); });
      und mit
      {console.log('###  SQL-Test: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};
      

      Das hat funktioniert.

      Jetzt habe ich auf MariaDB umgestellt. Daten werden auch problemlos in DB geschrieben. Adapter arbeitet also korrekt und Rechte sind vorhanden.
      Ich schaffe es aber nicht mehr auf irgendeine Weise Werte abzurufen. Die ganze SQL-Logik ist in eine DB-function verlegt.

      sendTo('sql.0', 'query', "SELECT fnTest AS test;", function(result) {console.log('Result 1: ', result);});
      

      Result bleibt leer. Aber auch folgende Abfragen liefern nichts, bzw 0 zurück:

      sendTo('sql.0', 'query', "SELECT 1 AS test;", function(result) {console.log('Result 1: ', result);});
      
      sendTo('sql.0', 'query', "SELECT 1 AS test;", result => console.log('Result 2: ', result));
      
      sendTo('sql.0', 'query', 'SELECT 1 AS test;', result =>{ 
            setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); });
      {console.log('Result3: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};
      
      sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{ 
            setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); });
      {console.log('Result4: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};
      

      Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?

      Danke im Voraus
      Gerd

      bahnuhrB Online
      bahnuhrB Online
      bahnuhr
      Forum Testing Most Active
      schrieb zuletzt editiert von
      #2

      @Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:

      Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?

      Hatte mir in meiner Beispielsammlung vermerkt.
      // wenn sql eine mysql, z.B. mariaDB dann immer davor den namen der DB setzen
      // z.B. iob_mariadb.datapoints oder iob_mariadb.ts_number, etc.

      Also dann in JS so:

      sendTo('sql.0', 'query', 'SELECT * FROM iob_mariadb.ts_number WHERE id=' + result.result[0].id, function (result) {
                  console.log('Rows: ' + JSON.stringify(result.result));
              });
      

      Steht auch versteckt in der Doku ;-)

      Vielleicht hilfts.


      Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
      Danke.
      gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
      ScreenToGif :https://www.screentogif.com/downloads.html

      1 Antwort Letzte Antwort
      0
      • Norwegen60N Norwegen60

        Hallo,
        ich habe bisher iobroker Daten in eine MsSQL-Datenbank geschrieben und die in einem SQL-Script stark vereinfacht so ausgelesen:

        sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); });
        und mit
        {console.log('###  SQL-Test: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};
        

        Das hat funktioniert.

        Jetzt habe ich auf MariaDB umgestellt. Daten werden auch problemlos in DB geschrieben. Adapter arbeitet also korrekt und Rechte sind vorhanden.
        Ich schaffe es aber nicht mehr auf irgendeine Weise Werte abzurufen. Die ganze SQL-Logik ist in eine DB-function verlegt.

        sendTo('sql.0', 'query', "SELECT fnTest AS test;", function(result) {console.log('Result 1: ', result);});
        

        Result bleibt leer. Aber auch folgende Abfragen liefern nichts, bzw 0 zurück:

        sendTo('sql.0', 'query', "SELECT 1 AS test;", function(result) {console.log('Result 1: ', result);});
        
        sendTo('sql.0', 'query', "SELECT 1 AS test;", result => console.log('Result 2: ', result));
        
        sendTo('sql.0', 'query', 'SELECT 1 AS test;', result =>{ 
              setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); });
        {console.log('Result3: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};
        
        sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{ 
              setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); });
        {console.log('Result4: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};
        

        Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?

        Danke im Voraus
        Gerd

        fuzzy1955F Online
        fuzzy1955F Online
        fuzzy1955
        schrieb zuletzt editiert von
        #3

        @Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:

        Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?

        Meine SQL-Abfragen funktionieren so recht gut:

            sendTo('sql.0', 'query', 'SELECT 1 AS test1, 2 AS test2, 3 AS test3;', function (result) {
                if (result.error) {
                    console.error(result.error);
                } else {
                    //setState (idDataPoint,JSON.stringify(result.result));
                    console.log (JSON.stringify(result.result));
                }
            });
        

        @bahnuhr sagte in SQL-Abfrage aus Script an MariaDB:

        immer davor den namen der DB setzen

        Ja, das ist sehr nützlich.

            sendTo('sql.0', 'query', 'SELECT * FROM iobroker.datapoints ORDER BY name;', function (result) {
                if (result.error) {
                    console.error(result.error);
                } else {
                    console.log (JSON.stringify(result.result));
                }
            });
        

        Raspberry PI5 mit Linux Debian 13, IoBroker v7.7.22, VIS-2, MariaDB (MySQL)
        Shellies: 1G4, 1MiniG3, PlusI4DC, PlusPlugS, Pro0110PM, ProSmoke. Modbus: Waveshare Relay 8 Channels, Waveshare RS485-TO-ETH.
        PV: 10 kWp Module, 2 x Deye WR SUN-10K, 3 x 10 kWh MeritSun LiFe Speicher, KEBA P30 Wallbox, Fronius Wattpilot home 11

        bahnuhrB Norwegen60N 2 Antworten Letzte Antwort
        0
        • fuzzy1955F fuzzy1955

          @Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:

          Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?

          Meine SQL-Abfragen funktionieren so recht gut:

              sendTo('sql.0', 'query', 'SELECT 1 AS test1, 2 AS test2, 3 AS test3;', function (result) {
                  if (result.error) {
                      console.error(result.error);
                  } else {
                      //setState (idDataPoint,JSON.stringify(result.result));
                      console.log (JSON.stringify(result.result));
                  }
              });
          

          @bahnuhr sagte in SQL-Abfrage aus Script an MariaDB:

          immer davor den namen der DB setzen

          Ja, das ist sehr nützlich.

              sendTo('sql.0', 'query', 'SELECT * FROM iobroker.datapoints ORDER BY name;', function (result) {
                  if (result.error) {
                      console.error(result.error);
                  } else {
                      console.log (JSON.stringify(result.result));
                  }
              });
          
          bahnuhrB Online
          bahnuhrB Online
          bahnuhr
          Forum Testing Most Active
          schrieb zuletzt editiert von
          #4

          @fuzzy1955 sagte in SQL-Abfrage aus Script an MariaDB:

          Ja, das ist sehr nützlich.

          Nicht nur nützlich sondern muss.
          MariaDB funktionierte ohne den Zusatz bei mir nicht.


          Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
          Danke.
          gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
          ScreenToGif :https://www.screentogif.com/downloads.html

          fuzzy1955F 1 Antwort Letzte Antwort
          0
          • bahnuhrB bahnuhr

            @fuzzy1955 sagte in SQL-Abfrage aus Script an MariaDB:

            Ja, das ist sehr nützlich.

            Nicht nur nützlich sondern muss.
            MariaDB funktionierte ohne den Zusatz bei mir nicht.

            fuzzy1955F Online
            fuzzy1955F Online
            fuzzy1955
            schrieb zuletzt editiert von
            #5

            @bahnuhr sagte in SQL-Abfrage aus Script an MariaDB:

            MariaDB funktionierte ohne den Zusatz bei mir nicht

            Stimmt! Sonst müsste man "USE iobroker;" davor absetzen.

            Raspberry PI5 mit Linux Debian 13, IoBroker v7.7.22, VIS-2, MariaDB (MySQL)
            Shellies: 1G4, 1MiniG3, PlusI4DC, PlusPlugS, Pro0110PM, ProSmoke. Modbus: Waveshare Relay 8 Channels, Waveshare RS485-TO-ETH.
            PV: 10 kWp Module, 2 x Deye WR SUN-10K, 3 x 10 kWh MeritSun LiFe Speicher, KEBA P30 Wallbox, Fronius Wattpilot home 11

            1 Antwort Letzte Antwort
            0
            • fuzzy1955F fuzzy1955

              @Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:

              Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?

              Meine SQL-Abfragen funktionieren so recht gut:

                  sendTo('sql.0', 'query', 'SELECT 1 AS test1, 2 AS test2, 3 AS test3;', function (result) {
                      if (result.error) {
                          console.error(result.error);
                      } else {
                          //setState (idDataPoint,JSON.stringify(result.result));
                          console.log (JSON.stringify(result.result));
                      }
                  });
              

              @bahnuhr sagte in SQL-Abfrage aus Script an MariaDB:

              immer davor den namen der DB setzen

              Ja, das ist sehr nützlich.

                  sendTo('sql.0', 'query', 'SELECT * FROM iobroker.datapoints ORDER BY name;', function (result) {
                      if (result.error) {
                          console.error(result.error);
                      } else {
                          console.log (JSON.stringify(result.result));
                      }
                  });
              
              Norwegen60N Online
              Norwegen60N Online
              Norwegen60
              schrieb zuletzt editiert von
              #6

              Danke für das Feedback. Ein Stück bin ich weiter. Dass nie etwas kam lag daran, dass ich

              console.log('Result 1: ', result);
              // , durch + ersetzen und schon wird Result im Log angezeigt :-(
              console.log('Result 1 : ' + result);
              

              hatte.
              Ich hatte es auch mit ioBroker.fn_xx probiert, aber da der Log nie was angezeigt hat, konnte das auch nicht funktieren bzw. ich nichts sehen. Auch das hier

              sendTo('sql.0', 'query', "SELECT ioBroker.fn_energy('YEAR', 27, 1) AS energy;", function(result) {
                   console.log("Result fnEnergy2: " + JSON.stringify(result.result));
               });
              

              liefert jetzt "energy":23456
              Zwei Fragen sind jetzt noch offen. Das Ganze wird in der Function

              function GetEnergy(Mode, ID, Offset, DataPoint)
              { 
               sendTo('sql.0', 'query', "SELECT ioBroker.fn_energy('YEAR', 27, 1) AS energy;", function(result) {
                      console.log("Result fnEnergy2: " + JSON.stringify(result.result));
                  });
              }
              

              aufgerufen.

              • Wie ersetze ich jetzt 'YEAR', 27, 1 durch Mode, ID, Offset
              • wie bekomme ich 23456 in Datapoint. Letzteres hatte ich schon, funktioniert aber bei der Rückgabe "energy:"23456 nicht
              fuzzy1955F 1 Antwort Letzte Antwort
              0
              • Norwegen60N Norwegen60

                Danke für das Feedback. Ein Stück bin ich weiter. Dass nie etwas kam lag daran, dass ich

                console.log('Result 1: ', result);
                // , durch + ersetzen und schon wird Result im Log angezeigt :-(
                console.log('Result 1 : ' + result);
                

                hatte.
                Ich hatte es auch mit ioBroker.fn_xx probiert, aber da der Log nie was angezeigt hat, konnte das auch nicht funktieren bzw. ich nichts sehen. Auch das hier

                sendTo('sql.0', 'query', "SELECT ioBroker.fn_energy('YEAR', 27, 1) AS energy;", function(result) {
                     console.log("Result fnEnergy2: " + JSON.stringify(result.result));
                 });
                

                liefert jetzt "energy":23456
                Zwei Fragen sind jetzt noch offen. Das Ganze wird in der Function

                function GetEnergy(Mode, ID, Offset, DataPoint)
                { 
                 sendTo('sql.0', 'query', "SELECT ioBroker.fn_energy('YEAR', 27, 1) AS energy;", function(result) {
                        console.log("Result fnEnergy2: " + JSON.stringify(result.result));
                    });
                }
                

                aufgerufen.

                • Wie ersetze ich jetzt 'YEAR', 27, 1 durch Mode, ID, Offset
                • wie bekomme ich 23456 in Datapoint. Letzteres hatte ich schon, funktioniert aber bei der Rückgabe "energy:"23456 nicht
                fuzzy1955F Online
                fuzzy1955F Online
                fuzzy1955
                schrieb zuletzt editiert von
                #7

                @Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:

                'YEAR', 27, 1 durch Mode, ID, Offset

                Teil 1: Ich baue umfangreichere SQL-Statements in einem String vorher zusammen:

                function GetEnergy(Mode, ID, Offset, DataPoint)
                { 
                    let strSQL = "SELECT ioBroker.fn_energy('" + Mode + "', " + ID + ", " + Offset + ") AS energy;"
                    
                    sendTo('sql.0', 'query', strSQL, function(result) {
                        console.log("Result fnEnergy2: " + JSON.stringify(result.result));
                    });
                }
                

                Raspberry PI5 mit Linux Debian 13, IoBroker v7.7.22, VIS-2, MariaDB (MySQL)
                Shellies: 1G4, 1MiniG3, PlusI4DC, PlusPlugS, Pro0110PM, ProSmoke. Modbus: Waveshare Relay 8 Channels, Waveshare RS485-TO-ETH.
                PV: 10 kWp Module, 2 x Deye WR SUN-10K, 3 x 10 kWh MeritSun LiFe Speicher, KEBA P30 Wallbox, Fronius Wattpilot home 11

                Norwegen60N 1 Antwort Letzte Antwort
                0
                • fuzzy1955F fuzzy1955

                  @Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:

                  'YEAR', 27, 1 durch Mode, ID, Offset

                  Teil 1: Ich baue umfangreichere SQL-Statements in einem String vorher zusammen:

                  function GetEnergy(Mode, ID, Offset, DataPoint)
                  { 
                      let strSQL = "SELECT ioBroker.fn_energy('" + Mode + "', " + ID + ", " + Offset + ") AS energy;"
                      
                      sendTo('sql.0', 'query', strSQL, function(result) {
                          console.log("Result fnEnergy2: " + JSON.stringify(result.result));
                      });
                  }
                  
                  Norwegen60N Online
                  Norwegen60N Online
                  Norwegen60
                  schrieb zuletzt editiert von Norwegen60
                  #8

                  @fuzzy1955
                  Ja, das hatte ich auch, aber ich dachte ich müsse hier auch in String wandeln und hatte

                  let strSQL = "SELECT ioBroker.fn_energy('" + Mode + "', " + String(ID) + ", " + String(Offset) + ") AS energy;"
                  // Und ich hatte es mit 
                  let sSQL5 = `SELECT ioBroker.fn_energy('${Mode}', ${ID}, ${Offset}) AS energy`;
                  

                  versucht, dort aber die falschen quotes verwendet. mit den nach rechts gekippten hat auch das funktioniert
                  Das hier funktioniert jetzt incl. zurück holen des Wertes in Datapoint

                      let sSQL0 = "SELECT ioBroker.fn_energy('" + Mode + "', " + ID + ", " + Offset + ") AS energy";
                  
                      sendTo('sql.0', 'query', sSQL0, function (result) {
                          let energy = result.result[0].energy;
                  
                          setState(DataPoint, {val: Number(energy), ack: true});
                  
                          log('GetEnergy: ' + energy + ' -> ' + DataPoint, 'info');
                      });
                  

                  Danke für die Unterstützung

                  1 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  674

                  Online

                  32.6k

                  Benutzer

                  82.3k

                  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