Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Script um SQL auszulesen

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    23
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Script um SQL auszulesen

Scheduled Pinned Locked Moved Skripten / Logik
32 Posts 14 Posters 9.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    moebius
    wrote on last edited by
    #21

    Man könnte zB statt 3 sql statements nur eines verwenden - ungefähr so (ist aus meinem node-red Beispiel kopiert):````
    msg.topic = 'SELECT min(val) As Min
    ,max(val) as Max
    ,avg(val) as Avg
    ,"' + msg.topic + '" as point
    ,"' + msg.payload + '" as val
    FROM ts_number WHERE
    from_unixtime(ts/1000) >= (CURRENT_DATE - INTERVAL '+ hours +' HOUR)
    AND id=(SELECT id FROM datapoints WHERE name = '' + msg.topic + '')
    GROUP BY id having Min >= ' + msg.payload + ';';

    1 Reply Last reply
    0
    • ThisoftT Offline
      ThisoftT Offline
      Thisoft
      wrote on last edited by
      #22

      Natürlich kann man das - aber wenn's einzeln schon nicht funktioniert wird's verschachtelt auch nicht übersichtlicher ;)

      @andre - Komische Frage fällt mir gerade noch ein. Bist du sicher dass für den fraglichen Datenpunkt auch wirklich Werte in die Db geschrieben werden???

      22 HM-Geräte; PivCCU2 auf RasPi

      ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

      1 Reply Last reply
      0
      • andreA Offline
        andreA Offline
        andre
        Developer
        wrote on last edited by
        #23

        @Thisoft:

        @andre - Komische Frage fällt mir gerade noch ein. Bist du sicher dass für den fraglichen Datenpunkt auch wirklich Werte in die Db geschrieben werden??? `
        Ja, Datenbank ist aus meiner Sicht ok. Daten sind auch drin, Hatte ich oben schonmal ein screenshot von gepostet. Hier nochmal mit der Abfrage der ID:
        914_id.png
        Und hier mit der Abfrage nach den Datensätzen:
        914_daten.png
        MfG,

        André

        Bitte keine Support-Fragen per PN! Nutzt die öffentliche Kanäle damit auch andere von den Antworten profitieren können!

        1 Reply Last reply
        0
        • ThisoftT Offline
          ThisoftT Offline
          Thisoft
          wrote on last edited by
          #24

          Das sieht wirklich alles soweit gut aus. So eine richtige Idee habe ich jetzt auch nicht mehr. :cry: Wenn da mal nicht irgendwo ein ganz einfacher Tippfehler drin ist den ich jetzt auch nicht sehe…

          Du könntest aber durchaus mal die Abfrage in Node-Red versuchen wie @moebius schreibt - falls du mit Node-Red was anzufangen weisst. Ich bin da jetzt auch nicht so tief drin...

          22 HM-Geräte; PivCCU2 auf RasPi

          ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

          1 Reply Last reply
          0
          • andreA Offline
            andreA Offline
            andre
            Developer
            wrote on last edited by
            #25

            @Thisoft:

            Das sieht wirklich alles soweit gut aus. So eine richtige Idee habe ich jetzt auch nicht mehr. :cry: Wenn da mal nicht irgendwo ein ganz einfacher Tippfehler drin ist den ich jetzt auch nicht sehe…

            Du könntest aber durchaus mal die Abfrage in Node-Red versuchen wie @moebius schreibt - falls du mit Node-Red was anzufangen weisst. Ich bin da jetzt auch nicht so tief drin... `

            Mhh, mit Node-Red komme ich noch nicht ganz so klar… Da fehlt mir irgendwie noch das Grundverständnis. Arbeite damit eigentlich nur im copy and paste oder try and error Modus. :)

            Mit Javascript habe ich mich gerade ein wenig angefreundet und wollte da jetzt eben auch ein bisschen in das Thema Daten aus Datenbank einsteigen.

            Dein Script ist für den Einstieg eigentlich auch ganz schick, da kann man schön nachvollziehen was wo passiert/ passieren soll.

            Ein Rätsel ist mir dabei allerdings auch, warum mein dpoint.result "undefined" ist. :(

            Hab eben mal im Forum gesucht, aber leider auch keinen anderen für mich passenden Ansatz gefunden... Die meisten "abstrakten" Scripte verstehe ich schlicht nicht. Da kann ich dann nur schwer nachvollziehen was passiert und wie ich das für meine Zwecke abändern kann. Bin halt im JavaScript noch n oller Anfänger...

            Naja, vielleicht hat ja noch jemand anderes einen Idee...

            Trotzdem danke für die Mühe.

            MfG,

            André

            Bitte keine Support-Fragen per PN! Nutzt die öffentliche Kanäle damit auch andere von den Antworten profitieren können!

            1 Reply Last reply
            0
            • M Offline
              M Offline
              moebius
              wrote on last edited by
              #26

              Leute, wo steht denn bitte "mach es in node-red"?

              Hab da ein Beispiel reinkopiert, das zeigen soll wie man das Ganze mit einer einzigen Abfrage lösen kann…

              Nach einer kleinen Anpassung hätte es dann vielleicht so ausgesehen:````
              SELECT min(val) As Min ,max(val) as Max ,avg(val) as Avg
              FROM ts_number
              WHERE id=(SELECT id FROM datapoints WHERE name = 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung')

              1 Reply Last reply
              0
              • ThisoftT Offline
                ThisoftT Offline
                Thisoft
                wrote on last edited by
                #27

                @moebius - ich will dir ja nicht zu nahe treten, aber so wie du die Abfrage jetzt formuliert hast hätte es mit Sicherheit nicht ausgesehen ;) Da fehlt erstens eine zeitliche Einschränkung und zweitens die Gruppierung womit komplett nur ein Fehler zurückkäme…

                Und der momentane Stand ist ja, dass der Ausdruck den du hier mal locker in ein Subselect packst:

                WHERE id=(SELECT id FROM datapoints WHERE name = 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung') 
                

                für sich genommen schon kein Ergebnis zurückliefert. Wieso hast du die Hoffnung dass der plötzlich ein Ergebnis liefert wenn du noch mehr drumherum schreibst?

                Ausserdem meide ich Subselects nach Möglichkeit generell weil diese gewaltig auf die Performance schlagen und - Subselects werden auch gar nicht von jedem Db-System unterstützt.

                22 HM-Geräte; PivCCU2 auf RasPi

                ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

                1 Reply Last reply
                0
                • N Offline
                  N Offline
                  noxx
                  wrote on last edited by
                  #28

                  läuft das Script inzwischen?

                  teste gerade und bekomme ebenfalls einen Fehler

                  ! ````
                  javascript.0 TypeError: Cannot read property '0' of undefined at Object.GetResults [as cb] (script.js.common.Wetter_MinMax_Temp:36:134) at Object.change
                  (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3030:71) at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30) at Socket.Emitter.emit
                  (/opt/iobroker/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20) at Socket.onevent (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:270:10) at
                  Socket.onpacket (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:228:12) at Manager. (/opt/iobroker/node_modules/component-bind/index.js:21:15) at Manager.Emitter.emit
                  (/opt/iobroker/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20) at Manager.ondecoded (/opt/iobroker/node_modules/socket.io-client/lib/manager.js:332:8) at
                  Decoder. (/opt/iobroker/node_modules/component-bind/index.js:21:15)

                  1 Reply Last reply
                  0
                  • H Offline
                    H Offline
                    HeiLuRa
                    wrote on last edited by
                    #29

                    Habe mich inzwischen auch mit dem Beispiel von 'Thisoft' beschäftigt.

                    Bei mir funktioniert das Script, wenn ich den Name der DB mit angebe. (hier z.B. "name_DB")

                    function SQLAbfrage () {
                    //log(id);
                      sendTo('sql.0', 'query', 'SELECT * FROM name_DB.datapoints WHERE name = \'' + id + '\'', GetResults);
                    }
                    

                    und weiter:

                    ...
                    sendTo('sql.0', 'query', 'SELECT Round(Max(val),1) As MaxVal FROM name_DB.ts_number WHERE ts >= ' + start_time + ' AND id=' + dpoint.result[0].id + ' GROUP BY id',maximum);
                    ...
                    
                    

                    Viele Grüße

                    Lutz

                    1 Reply Last reply
                    0
                    • ThisoftT Offline
                      ThisoftT Offline
                      Thisoft
                      wrote on last edited by
                      #30

                      @HeiLuRa:

                      Habe mich inzwischen auch mit dem Beispiel von 'Thisoft' beschäftigt.

                      Bei mir funktioniert das Script, wenn ich den Name der DB mit angebe. (hier z.B. "name_DB") `

                      Ja, gut dass Du das hier schreibst. Wir haben inzwischen in einem anderen Thread herausgefunden dass man abhängig davon welche Db man verwendet den Namen der DB vor dem Tabellennamen mit angeben muss (wie z.B. bei mySQL) oder auch nicht angeben darf (wie z.B. bei meinem MS-SQLServer)

                      22 HM-Geräte; PivCCU2 auf RasPi

                      ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

                      1 Reply Last reply
                      0
                      • K Offline
                        K Offline
                        Kugelkopf
                        wrote on last edited by
                        #31
                        sendTo('sql.0', 'query', 'SELECT id FROM iobroker.datapoints WHERE name="deconz.0.Sensor_13.temperature"', function (result) {
                            if (result.error) {
                                console.error(result.error);
                            } else {
                                // show result
                                console.log('Rows: ' + JSON.stringify(result.result));
                                var now = new Date();
                                var now2 = new Date();
                                        now.setHours(-72);
                                now2.setHours(-1);
                                sendTo('sql.0', 'query', 'SELECT Round(Min(val),1) As MinVal FROM iobroker.ts_number WHERE ts between ' + now.getTime() + ' AND '  + now2.getTime() + ' AND id=' + result.result[0].id, function (result) {
                                    console.log('Rows: ' + JSON.stringify(result.result));
                        
                                    //setState(idHistoryTemp1,test.val );
                                });
                                sendTo('sql.0', 'query', 'SELECT Round(Max(val),1) As MaxVal FROM iobroker.ts_number  WHERE ts between ' + now.getTime() + ' AND '  + now2.getTime() + ' AND id=' + result.result[0].id, function (result) {
                        
                                    console.log('Rows: ' + JSON.stringify(result.result));
                        
                                    //setState(idHistoryTemp1,test.val );
                                });
                            }
                        });
                        

                        So klappts…

                        1 Reply Last reply
                        0
                        • H Offline
                          H Offline
                          hans61
                          wrote on last edited by hans61
                          #32

                          Hallo,

                          habe leider mit js nocht nicht viel am hut, aber wie müsste es aussehen wenn ich einen datenbank abruf von einem gewissen datum haben will.

                          Würde gerne einen wert aus der datenbank von einem bestimmten zeitstempel in eine variable hinterlegen.

                          Hintergrund:

                          würde gerne einen zähler, der den wert ja immer nur erhöht.
                          gerne über eine eingabe auf der vis, einen bestimmten verbrauch ausgeben.
                          Also sagen wir mal von datum dd.mm.jjjj bis datum dd.mm.jjjj so ausgeben das ich auch nur den verbrauchten wert von dem zeitraum ausgebe.
                          Oder gibt es dafür eine elegantere lösung?

                          Lg Hans.

                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          659

                          Online

                          32.5k

                          Users

                          81.7k

                          Topics

                          1.3m

                          Posts
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Home
                          • Recent
                          • Tags
                          • Unread 0
                          • Categories
                          • Unreplied
                          • Popular
                          • GitHub
                          • Docu
                          • Hilfe