Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. (gelöst) Datenpunkt aus MS SQL Datenbank ->undefined

    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

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      hutmacherin last edited by 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 haus-automatisierung 2 Replies Last reply Reply Quote 0
      • T
        ticaki Developer @hutmacherin last edited by 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 1 Reply Last reply Reply Quote 2
        • haus-automatisierung
          haus-automatisierung Developer Most Active @hutmacherin last edited by

          @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 ..

          1 Reply Last reply Reply Quote 0
          • H
            hutmacherin @ticaki last edited by

            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 Reply Last reply Reply Quote 1
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            932
            Online

            31.8k
            Users

            80.0k
            Topics

            1.3m
            Posts

            communication javascript
            3
            4
            157
            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