Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Mysql Datenbank Daten in IOBoker

    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

    Mysql Datenbank Daten in IOBoker

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      Rolf Sauer last edited by Homoran

      Hallo Community

      ich habe probiert ein Skript zu Schreiben. Mit mäßigem Erfolg.

      Ich möchte die Daten von SQL-Abfrage zu einer IOBoker Variable >einspiesung_temp_2< übertragen.
      Die Variable ist als JSON deklariert.
      Ich sehe im LOG die Daten, kann sie aber nicht übergeben, leider komme ich dort nicht weiter 😞
      Bin halt kein Programmierer.

      Vielleicht hat einer für mich einen Tipp

      <<<<<<<<<<<<<<<<

      sendTo ('sql.0','query','SELECT *  FROM iobroker.ts_number WHERE iobroker.ts_number.id = 72 ', function(result) {
          if (result.error) {
              console.error('Fehler bei der Abfrage: rolf ', result.error);
          }else {
              einspeisung_temp_2 = JSON.stringify(result);
               console.log(einspeisung_temp_2);
              if (result && result.length > 0) {
              const value = result[0].val; // Wert der ID=
              const timestamp = result[0].ts; // Zeitstempel der ID=
              console.log('Wert:', value);
              console.log('Zeitstempel:', timestamp);
              // Hier kannst du die Werte in ioBroker speichern oder weiterverarbeiten
          } else {
              console.log('Keine Daten gefunden für');
          }
          }});
      

      <<<<<<<<<<<<<<

      MOD-EDIT: Code in code-tags gesetzt!

      16a6c6cf-55da-438b-a469-be5d6fb30cd9-image.png

      Samson71 mickym 2 Replies Last reply Reply Quote 0
      • Samson71
        Samson71 Global Moderator @Rolf Sauer last edited by

        @rolf-sauer sagte in Mysql Datenbank Daten in IOBoker:

        Vielleicht hat einer für mich einen Tipp

        Ja, Protokolle und Logs bitte in Code-Tags packen (oben im Menü </>) und nicht Micro-Screenshots in den Post hängen.

        1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @Rolf Sauer last edited by

          @rolf-sauer

          1. Erst mal eine Frage - wennn Du kein Programmierer bist, warum programmierst Du dann und nutzt nicht die Logikmaschinen, wie Blockly oder NodeRed?
          2. Wennn Du Code hier einstellst, dann bitte in CodeTags.
            Code-Tags.gif
          R 1 Reply Last reply Reply Quote 0
          • R
            Rolf Sauer @mickym last edited by

            @mickym Ja würde ich gerne mit Blockly machen wenn es dann die Funktion die ich bräuchte geben würde. Leider habe ich nicht passendes gefunden.

            In jungen Jahren habe ich Pascal und Turbopascal und Topas Programmiert aber es ist schon lange her.🙃

            1 Reply Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active last edited by

              @rolf-sauer sagte in Mysql Datenbank Daten in IOBoker:

              würde ich gerne mit Blockly machen wenn es dann die Funktion die ich bräuchte geben würde

              Gibt es doch:

              a536af05-6480-49f6-9a25-28bae58ccb47-grafik.png

              R 2 Replies Last reply Reply Quote 0
              • R
                Rolf Sauer @Codierknecht last edited by

                @codierknecht

                Funktioniert aber aus irgend einem Grund nicht bei mir. Ich habe Stundenlang probiert und keine Rückmeldung bekommen.

                Das wäre 100 mal mir lieber wenn ich von da aus die Daten in den iobroker übernehmen könnte.

                1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active last edited by mickym

                  @rolf-sauer sagte in Mysql Datenbank Daten in IOBoker:

                  @codierknecht

                  Funktioniert aber aus irgend einem Grund nicht bei mir. Ich habe Stundenlang probiert und keine Rückmeldung bekommen.

                  Das wäre 100 mal mir lieber wenn ich von da aus die Daten in den iobroker übernehmen könnte.

                  Ja das Blockly schaffe ich auch gerade nicht - aber Deinen Code habe ich soweit geändert - Du darfst das Objekt nicht stringifizieren:

                  
                  sendTo ('sql.0','query','SELECT * FROM iobroker.ts_number WHERE iobroker.ts_number.id = 72 ', function(result) {
                  if (result.error) {
                  console.error('Fehler bei der Abfrage: rolf ', result.error);
                  }else {
                  
                  console.log(result);
                  for (var record of result.result){
                      console.log('Wert:' + record.val);
                      console.log('Zeitstempel:' + record.ts);
                  }
                  
                  /* if (result && result.length > 0) {
                  const value = result[0].val; // Wert der ID=
                  const timestamp = result[0].ts; // Zeitstempel der ID=
                  console.log('Wert:', value);
                  console.log('Zeitstempel:', timestamp);
                  // Hier kannst du die Werte in ioBroker speichern oder weiterverarbeiten
                  } else {
                  console.log('Keine Daten gefunden für');
                  } */
                  }});
                  

                  So bekommst die Einzelwerte raus.

                  mickym 1 Reply Last reply Reply Quote 0
                  • R
                    Rolf Sauer @Codierknecht last edited by Samson71

                    @codierknecht

                    Mein ergebnis mit Blockly

                    3c228d8c-6ba7-499f-8205-1576f6492409-image.png

                    15.3.2025, 14:18:41.965	[info ]: javascript.0 (1126) Stopping script script.js.Skript_12
                    15.3.2025, 14:18:42.014	[info ]: javascript.0 (1126) Start JavaScript script.js.Skript_12 (Blockly)
                    15.3.2025, 14:18:42.016	[info ]: javascript.0 (1126) script.js.Skript_12: sendTo(instance=sql.0, cmd=query, msg={"parameter":"SELECT *  FROM iobroker.ts_number WHERE iobroker.ts_number.id = 72 "}, hasCallback=true)
                    15.3.2025, 14:18:42.016	[error]: javascript.0 (1126) script.js.Skript_12: sendTo[custom] sql.0: parameter: SELECT *  FROM iobroker.ts_number WHERE iobroker.ts_number.id = 72 
                    15.3.2025, 14:18:42.016	[info ]: javascript.0 (1126) script.js.Skript_12: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                    15.3.2025, 14:18:42.018	[info ]: javascript.0 (1126) script.js.Skript_12: { error: 'Error: No query provided' }
                    

                    MOD-EDIT: BITTE CODE-TAGS BENUTZEN!

                    mickym Codierknecht 2 Replies Last reply Reply Quote 0
                    • mickym
                      mickym Most Active @Rolf Sauer last edited by mickym

                      @rolf-sauer Ja das bekomme ich auch - für mich sieht das nach einem Bug aus. Ich hab Dir unten eine Lösung mit Deinem JS Code geschickt.

                      Selbst mit NodeRed kann man den SQL Adapter vernünftig abfragen:
                      0019e345-c197-4aa0-b360-d3ee1a70ee1d-image.png

                      Das ist eindeutig ein Blockly Fehler.

                      1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @mickym last edited by mickym

                        Hier nochmal Dein Code mit der id 72:

                         
                        sendTo ('sql.0','query','SELECT * FROM iobroker.ts_number WHERE  id = 72 AND ack = 0', function(result) {
                        if (result.error) {
                        console.error('Fehler bei der Abfrage: rolf ', result.error);
                        }else {
                         
                        console.log(result);
                        for (var record of result.result){
                            console.log('Wert:' + record.val);
                            console.log('Zeitstempel:' + record.ts);
                        }
                        
                        }});
                        

                        Ich würde Dir empfehlen auch noch auf ack = 0 zu selektieren, als Dein SQL Statement wie folgt ändern:

                        'sql.0','query','SELECT * FROM iobroker.ts_number WHERE id = 72 AND ack = 0 ',
                        
                        R 1 Reply Last reply Reply Quote 0
                        • R
                          Rolf Sauer @mickym last edited by

                          @mickym

                          Super das Funktioniert

                          jetzt müste ich es nur noch in eine IOBoker Variable portiert bekommen so das ich es bei Diagram als JSON benutzen könnte.

                          mickym 1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @Rolf Sauer last edited by mickym

                            @rolf-sauer Das verstehe ich nicht. Du siehst doch den Wert im Log und so kannst Du es doch in den Datenpunkt schreiben oder von mir aus gleich ein JSON erstellen mit ts und Wert?

                            So ?

                            e85da2e7-3901-44a3-b628-521f963b8c5e-image.png

                            dann einfach diese Zeile nehmen:

                            console.log(JSON.stringify ({"Wert": record.val, "Zeitstempel": record.ts}))
                            

                            das kannst Du ja in einen Datenpunkt schreiben.

                            1 Reply Last reply Reply Quote 0
                            • Codierknecht
                              Codierknecht Developer Most Active @Rolf Sauer last edited by

                              @rolf-sauer sagte in Mysql Datenbank Daten in IOBoker:

                              Mein ergebnis mit Blockly

                              Du musst den Parameter "parameter" umbenennen in einen leeren String.
                              Wie im Beispiel gezeigt.

                              R 1 Reply Last reply Reply Quote 0
                              • R
                                Ralf 2 @Codierknecht last edited by

                                @Rolf-Sauer
                                Was hast du eigentlich vor? Willst du das in ein Materialdesign JSON-Chart darstellen?
                                Warum nicht direkt mit einem Chart-Widget direkt aus der SQL-Datenbank darstellen?
                                Ich benutze den JSON-Chart zwar auch (aufbereitet mit TypeScript) aber nur da, wo ich Daten aus anderen Quellen als MySQL darstellen will.

                                Ansonsten: Denkt bitte daran, das alle bisherigen Abfragen ALLE gespeicherten Datenpunkt ausliest.
                                Entweder die Datenbank so einstellen, das sie nur begrenzt speichert (und nicht große Zeiträume)
                                Oder in der Query auf TS begrenzen Stichwort für die Where-Klausel:

                                date(from_unixtime(floor(ts/1000))) as 'Datum'
                                

                                Oder die Query mit einem sinnvollen Limit versehen.

                                R 1 Reply Last reply Reply Quote 0
                                • R
                                  Rolf Sauer @Ralf 2 last edited by Rolf Sauer

                                  @ralf-2

                                  Liebe Danke es funktioniert

                                  Hier die Funktionierende Abfrage

                                  sendTo('sql.0', 'query', 'SELECT (iobroker.ts_number.ts) , iobroker.ts_number.val  FROM iobroker.ts_number WHERE iobroker.ts_number.id = 72 ', function (result) {
                                      if (result.error) {
                                          console.error('Fehler bei der Abfrage:', result.error);
                                      } else {
                                          let liste = new Array;
                                          let x = 0;
                                          for (var record of result.result) {
                                              let jsonRecord = {
                                                  val: record.val, // Ersetze dies durch den tatsächlichen Wert
                                                  ts: record.ts // Ersetze dies durch den tatsächlichen Zeitstempel
                                  
                                              };
                                              liste[x] = jsonRecord;
                                              x++;
                                              // console.log('val :' + record.val);
                                              // console.log('ts :' + record.ts);
                                          }
                                          const jsonString = JSON.stringify(liste);
                                          setState('javascript.0.Meine_Variabeln.Temp1', jsonString);
                                          // console.log(jsonString);
                                      }
                                  });
                                  

                                  Es gibt noch einen Warnung aber die Funktion ist gegeben.

                                  <<< at Object.<anonymous> (script.js.SQL_Lesen:21:9)

                                  DANKE !!!!!!!

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  892
                                  Online

                                  31.8k
                                  Users

                                  79.9k
                                  Topics

                                  1.3m
                                  Posts

                                  5
                                  15
                                  400
                                  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