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. (gelöst) Datenpunkt aus MS SQL Datenbank ->undefined

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

(gelöst) Datenpunkt aus MS SQL Datenbank ->undefined

Geplant Angeheftet Gesperrt Verschoben JavaScript
communicationjavascript
4 Beiträge 3 Kommentatoren 189 Aufrufe 4 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.
  • H Offline
    H Offline
    hutmacherin
    schrieb am zuletzt editiert von hutmacherin
    #1

    Hallo Zusammen,

    ich habe mir ein Skript zusammengebastelt, welches alle 10s den neuesten Wert eines Datenpunktes aus einer My SQL Datenbank ausliest.
    Vorgehen:

    1. SQL Adapter installiert
    2. Datenbank verbunden
    3. Neuen Datenpunkt im ioBroker erstellt
    4. Skript geschrieben welches eine SQL Abfrage an die Datenbank schickt und den Rückgabewert in den erstellten Datenpunkt schreibt, falls sich dieser geändert hat (Code siehe unten)

    Das klappt alles prima. Der Zahlenwert wird in die Variable geschrieben.

    So, nun zum Problem:
    ich habe das gleiche bei einer MS SQL Datenbank machen wollen. Dafür habe ich:

    1. eine neue Instanz des SQL Adapters Installiert
    2. Diese mit der Datenbank verbunden
    3. Neuen Datenpunkt im ioBroker erstellt
    4. Skript an die neuen Variablen angepasst (Code siehe unten)

    Jetzt gibt mir das Skript im log immer "undefined" zurück und im Datenpunkt steht (null), statt dass der Zahlenwert aus der Datenbank ausgegeben wird.

    Nach zweitägiger Recherche habe ich immernoch keine Lösung. Ich hoffe mir kann jemand helfen das Problem zu finden.

    Code für MySQL (dieser hier funktioniert):

    schedule("*/10 * * * * *", async function () {  // Zeitsteuerung -> alle 10 Sekunden; ("*/20 * * * * *") -> Das wäre alle 20 Sekunden
        // sendTo Befehl sendet hier eine Anfrage an die SQL-Datenbank in Form eines SQL-Befehls; das Ergebnis der Abfrage wird in die Variable "result" geschrieben
    sendTo('sql.0','query','SELECT value FROM Datenbankname.readings WHERE datapoint_id=29 ORDER BY timestamp DESC LIMIT 1',function (result) { 
    
            if (result.error) {
    
                console.error(result.error);
    
            } else if (Number(JSON.stringify(result.result[0].value)) != getState("0_userdata.0.SGM47_Zykluszeit_Ist").val){ // Prüfung ob sich der Wert seit der letzten abfrage geändert hat
    
                //console.log("Datenbank " + Number(JSON.stringify(result.result[0].value)));
                //console.log("ioBroker " + getState("0_userdata.0.SGM47_Zykluszeit_Ist").val);
    
                setState("0_userdata.0.SGM47_Zykluszeit_Ist",Number(JSON.stringify(result.result[0].value))); //neuer Wert wird in einen Datenpunkt im ioBroker geschrieben
    
                log(JSON.stringify(result.result[0].value))
    
            }
        });
    });
    code_text
    

    Code für MS SQL (dieser hier gibt "undefined" zurück):

    schedule("*/10 * * * * *", async function () {  // Zeitsteuerung -> alle 10 Sekunden; ("*/20 * * * * *") -> Das wäre alle 20 Sekunden
        // sendTo Befehl sendet hier eine Anfrage an die SQL-Datenbank in Form eines SQL-Befehls; das Ergebnis der Abfrage wird in die Variable "result" geschrieben
         await this.sendTo('sql.1','query','SELECT TOP(1) channel1 FROM Datenbank1.dbo.slaveData WHERE slaveId=15 ORDER BY datStart DESC',function (result) { 
             if (result.error) {
    
                console.error(result.error);
    
            } else if (Number(JSON.stringify(result.result[0].value)) != getState("0_userdata.0.SGM47_channel1").val){ // Prüfung ob sich der Wert seit der letzten abfrage geändert hat
    
                //console.log("Datenbank " + Number(JSON.stringify(result.result[0].value)));
                //console.log("ioBroker " + getState("0_userdata.0.SGM47_Zykluszeit_Ist").val);
    
                setState("0_userdata.0.SGM47_channel1",Number(JSON.stringify(result.result[0].value))); //neuer Wert wird in einen Datenpunkt im ioBroker geschrieben
    
                log(JSON.stringify(result.result[0].value))
    
            }
        });
    });
    
    T haus-automatisierungH 2 Antworten Letzte Antwort
    0
    • H hutmacherin

      Hallo Zusammen,

      ich habe mir ein Skript zusammengebastelt, welches alle 10s den neuesten Wert eines Datenpunktes aus einer My SQL Datenbank ausliest.
      Vorgehen:

      1. SQL Adapter installiert
      2. Datenbank verbunden
      3. Neuen Datenpunkt im ioBroker erstellt
      4. Skript geschrieben welches eine SQL Abfrage an die Datenbank schickt und den Rückgabewert in den erstellten Datenpunkt schreibt, falls sich dieser geändert hat (Code siehe unten)

      Das klappt alles prima. Der Zahlenwert wird in die Variable geschrieben.

      So, nun zum Problem:
      ich habe das gleiche bei einer MS SQL Datenbank machen wollen. Dafür habe ich:

      1. eine neue Instanz des SQL Adapters Installiert
      2. Diese mit der Datenbank verbunden
      3. Neuen Datenpunkt im ioBroker erstellt
      4. Skript an die neuen Variablen angepasst (Code siehe unten)

      Jetzt gibt mir das Skript im log immer "undefined" zurück und im Datenpunkt steht (null), statt dass der Zahlenwert aus der Datenbank ausgegeben wird.

      Nach zweitägiger Recherche habe ich immernoch keine Lösung. Ich hoffe mir kann jemand helfen das Problem zu finden.

      Code für MySQL (dieser hier funktioniert):

      schedule("*/10 * * * * *", async function () {  // Zeitsteuerung -> alle 10 Sekunden; ("*/20 * * * * *") -> Das wäre alle 20 Sekunden
          // sendTo Befehl sendet hier eine Anfrage an die SQL-Datenbank in Form eines SQL-Befehls; das Ergebnis der Abfrage wird in die Variable "result" geschrieben
      sendTo('sql.0','query','SELECT value FROM Datenbankname.readings WHERE datapoint_id=29 ORDER BY timestamp DESC LIMIT 1',function (result) { 
      
              if (result.error) {
      
                  console.error(result.error);
      
              } else if (Number(JSON.stringify(result.result[0].value)) != getState("0_userdata.0.SGM47_Zykluszeit_Ist").val){ // Prüfung ob sich der Wert seit der letzten abfrage geändert hat
      
                  //console.log("Datenbank " + Number(JSON.stringify(result.result[0].value)));
                  //console.log("ioBroker " + getState("0_userdata.0.SGM47_Zykluszeit_Ist").val);
      
                  setState("0_userdata.0.SGM47_Zykluszeit_Ist",Number(JSON.stringify(result.result[0].value))); //neuer Wert wird in einen Datenpunkt im ioBroker geschrieben
      
                  log(JSON.stringify(result.result[0].value))
      
              }
          });
      });
      code_text
      

      Code für MS SQL (dieser hier gibt "undefined" zurück):

      schedule("*/10 * * * * *", async function () {  // Zeitsteuerung -> alle 10 Sekunden; ("*/20 * * * * *") -> Das wäre alle 20 Sekunden
          // sendTo Befehl sendet hier eine Anfrage an die SQL-Datenbank in Form eines SQL-Befehls; das Ergebnis der Abfrage wird in die Variable "result" geschrieben
           await this.sendTo('sql.1','query','SELECT TOP(1) channel1 FROM Datenbank1.dbo.slaveData WHERE slaveId=15 ORDER BY datStart DESC',function (result) { 
               if (result.error) {
      
                  console.error(result.error);
      
              } else if (Number(JSON.stringify(result.result[0].value)) != getState("0_userdata.0.SGM47_channel1").val){ // Prüfung ob sich der Wert seit der letzten abfrage geändert hat
      
                  //console.log("Datenbank " + Number(JSON.stringify(result.result[0].value)));
                  //console.log("ioBroker " + getState("0_userdata.0.SGM47_Zykluszeit_Ist").val);
      
                  setState("0_userdata.0.SGM47_channel1",Number(JSON.stringify(result.result[0].value))); //neuer Wert wird in einen Datenpunkt im ioBroker geschrieben
      
                  log(JSON.stringify(result.result[0].value))
      
              }
          });
      });
      
      T Offline
      T Offline
      ticaki
      schrieb am zuletzt editiert von ticaki
      #2

      @hutmacherin sagte in Datenpunkt aus MS SQL Datenbank einlesen ergibt undefined:

      log(JSON.stringify(result))
      

      Ich würde das einsetzen um zu sehen, ob in result steht was falsch gelaufen ist.

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      H 1 Antwort Letzte Antwort
      2
      • H hutmacherin

        Hallo Zusammen,

        ich habe mir ein Skript zusammengebastelt, welches alle 10s den neuesten Wert eines Datenpunktes aus einer My SQL Datenbank ausliest.
        Vorgehen:

        1. SQL Adapter installiert
        2. Datenbank verbunden
        3. Neuen Datenpunkt im ioBroker erstellt
        4. Skript geschrieben welches eine SQL Abfrage an die Datenbank schickt und den Rückgabewert in den erstellten Datenpunkt schreibt, falls sich dieser geändert hat (Code siehe unten)

        Das klappt alles prima. Der Zahlenwert wird in die Variable geschrieben.

        So, nun zum Problem:
        ich habe das gleiche bei einer MS SQL Datenbank machen wollen. Dafür habe ich:

        1. eine neue Instanz des SQL Adapters Installiert
        2. Diese mit der Datenbank verbunden
        3. Neuen Datenpunkt im ioBroker erstellt
        4. Skript an die neuen Variablen angepasst (Code siehe unten)

        Jetzt gibt mir das Skript im log immer "undefined" zurück und im Datenpunkt steht (null), statt dass der Zahlenwert aus der Datenbank ausgegeben wird.

        Nach zweitägiger Recherche habe ich immernoch keine Lösung. Ich hoffe mir kann jemand helfen das Problem zu finden.

        Code für MySQL (dieser hier funktioniert):

        schedule("*/10 * * * * *", async function () {  // Zeitsteuerung -> alle 10 Sekunden; ("*/20 * * * * *") -> Das wäre alle 20 Sekunden
            // sendTo Befehl sendet hier eine Anfrage an die SQL-Datenbank in Form eines SQL-Befehls; das Ergebnis der Abfrage wird in die Variable "result" geschrieben
        sendTo('sql.0','query','SELECT value FROM Datenbankname.readings WHERE datapoint_id=29 ORDER BY timestamp DESC LIMIT 1',function (result) { 
        
                if (result.error) {
        
                    console.error(result.error);
        
                } else if (Number(JSON.stringify(result.result[0].value)) != getState("0_userdata.0.SGM47_Zykluszeit_Ist").val){ // Prüfung ob sich der Wert seit der letzten abfrage geändert hat
        
                    //console.log("Datenbank " + Number(JSON.stringify(result.result[0].value)));
                    //console.log("ioBroker " + getState("0_userdata.0.SGM47_Zykluszeit_Ist").val);
        
                    setState("0_userdata.0.SGM47_Zykluszeit_Ist",Number(JSON.stringify(result.result[0].value))); //neuer Wert wird in einen Datenpunkt im ioBroker geschrieben
        
                    log(JSON.stringify(result.result[0].value))
        
                }
            });
        });
        code_text
        

        Code für MS SQL (dieser hier gibt "undefined" zurück):

        schedule("*/10 * * * * *", async function () {  // Zeitsteuerung -> alle 10 Sekunden; ("*/20 * * * * *") -> Das wäre alle 20 Sekunden
            // sendTo Befehl sendet hier eine Anfrage an die SQL-Datenbank in Form eines SQL-Befehls; das Ergebnis der Abfrage wird in die Variable "result" geschrieben
             await this.sendTo('sql.1','query','SELECT TOP(1) channel1 FROM Datenbank1.dbo.slaveData WHERE slaveId=15 ORDER BY datStart DESC',function (result) { 
                 if (result.error) {
        
                    console.error(result.error);
        
                } else if (Number(JSON.stringify(result.result[0].value)) != getState("0_userdata.0.SGM47_channel1").val){ // Prüfung ob sich der Wert seit der letzten abfrage geändert hat
        
                    //console.log("Datenbank " + Number(JSON.stringify(result.result[0].value)));
                    //console.log("ioBroker " + getState("0_userdata.0.SGM47_Zykluszeit_Ist").val);
        
                    setState("0_userdata.0.SGM47_channel1",Number(JSON.stringify(result.result[0].value))); //neuer Wert wird in einen Datenpunkt im ioBroker geschrieben
        
                    log(JSON.stringify(result.result[0].value))
        
                }
            });
        });
        
        haus-automatisierungH Online
        haus-automatisierungH Online
        haus-automatisierung
        Developer Most Active
        schrieb am zuletzt editiert von
        #3

        @hutmacherin sagte in Datenpunkt aus MS SQL Datenbank einlesen ergibt undefined:

        SELECT TOP(1)

        Ich habe bei sql da noch nie eine Klammer drum gemacht. Funktioniert das? Probier mal

        SELECT TOP 1 ..

        🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
        🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
        📚 Meine inoffizielle ioBroker Dokumentation

        1 Antwort Letzte Antwort
        0
        • T ticaki

          @hutmacherin sagte in Datenpunkt aus MS SQL Datenbank einlesen ergibt undefined:

          log(JSON.stringify(result))
          

          Ich würde das einsetzen um zu sehen, ob in result steht was falsch gelaufen ist.

          H Offline
          H Offline
          hutmacherin
          schrieb am zuletzt editiert von
          #4

          Erstmal vielen Dank für die schnelle Rückmeldung!

          @ticaki
          da bringt er "javascript.0 (12764) script.js.Daten_aus_MS_Datenbank_einlesen: {"error":null,"result":[{"channel1":20}]}"

          Leute, ihr seid der Hammer!
          Kann ja keiner ahnen, dass ich statt "value" "channel1" schreiben muss.
          Hab das ersetzt und es klappt!!

          @haus-automatisierung Ohne Klammer klappt es genauso wie mit Klammer. Scheint egal zu sein.

          Ich bin so froh ...war schon am verzweifeln.
          Danke an euch.

          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

          659

          Online

          32.6k

          Benutzer

          82.2k

          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