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. Script um SQL auszulesen

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

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

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

Script um SQL auszulesen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
32 Beiträge 14 Kommentatoren 9.9k Aufrufe
  • Ä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.
  • andreA Offline
    andreA Offline
    andre
    Developer
    schrieb am zuletzt editiert von
    #11

    Ja, die sind zwar auch nicht perfekt [emoji2] aber die stören nicht. Wenn ich sie weg lasse, selber Fehler. Nehm ich die letzten beiden Zeilen raus, Fehler weg. :(

    MfG, André

    Gesendet mit Tapatalk.

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

    1 Antwort Letzte Antwort
    0
    • ThisoftT Offline
      ThisoftT Offline
      Thisoft
      schrieb am zuletzt editiert von
      #12

      Natürlich liegt's an den letzten beiden Zeilen - die holen die Daten aus der SQL-Db. Wenn du die weglässt hast du keinen Fehler aber auch keine Daten ;)

      Maßgeblich ist diese Zeile in den Fehlermeldungen:

      TypeError:   2017-02-11 13:12:23.778   error   Cannot read property '0' of undefined
      

      Meine erste Vermutung: Welchen Typ hat denn dein DP 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung'? Der muß zwingend vom Typ "number" sein sonst funktioniert die Abfrage so nicht!

      Anderenfalls schalte mal die auskommentierten Logzeilen ein und dann schauen wir mal weiter…

      22 HM-Geräte; PivCCU2 auf RasPi

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

      1 Antwort Letzte Antwort
      0
      • andreA Offline
        andreA Offline
        andre
        Developer
        schrieb am zuletzt editiert von
        #13

        @Thisoft:

        Natürlich liegt's an den letzten beiden Zeilen - die holen die Daten aus der SQL-Db. Wenn du die weglässt hast du keinen Fehler aber auch keine Daten ;)

        Maßgeblich ist diese Zeile in den Fehlermeldungen:

        TypeError:   2017-02-11 13:12:23.778   error   Cannot read property '0' of undefined
        

        Meine erste Vermutung: Welchen Typ hat denn dein DP 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung'? Der muß zwingend vom Typ "number" sein sonst funktioniert die Abfrage so nicht!

        Anderenfalls schalte mal die auskommentierten Logzeilen ein und dann schauen wir mal weiter… `
        Ok, bitte verzeih mir wenn die ein oder andere Bemerkung/ Frage ein bisschen "unwissend" daher kommt. :) Für mich ist das Thema Javascript und SQL momentan noch "Neuland". :D

        Mein Datenpunkt sieht so aus:
        914_datenpunkt.png
        Wenn ich in der Datenbank schaue, ist der Name in "datapoints" zu finden. Zur Zugehörigen ID 77 finde ich auch Datensätze in "ts_number" filename="datensätze.PNG" index="0">~~
        Wenn ich die Logzeilen auskommentiere, dann bekomme ich eine Zeile Log mehr:

        javascript.0	2017-02-11 15:11:08.956	info	script.js.E3DC.test_stromverbrauch: undefined//1486735868955
        

        Die Zahl am Ende sieht für mich aus wie ein Zeitstempel. Einen Reim kann ich mir darauf trotzdem nicht machen.

        Anmerkung: Mein Datenpunkt loggt in der Regel alle 10 Sekunden einen Datensatz. Kann das vielleicht auch ein bisschen viel sein?

        MfG,

        André

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

        1 Antwort Letzte Antwort
        0
        • ThisoftT Offline
          ThisoftT Offline
          Thisoft
          schrieb am zuletzt editiert von
          #14

          Ach ja, manchmal kann's so einfach sein ;) DA fehlt ein Hochkomma in deinem Script! Anstelle:

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

          muss es heißen:

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

          Deshalb findet die Abfrage auf die Tabelle "datapoints" keine ID und gibt wie in der Logzeile zu sehen "undefined" zurück.

          EDIT - da hatten sogar zwei Hochkommata gefehlt

          22 HM-Geräte; PivCCU2 auf RasPi

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

          1 Antwort Letzte Antwort
          0
          • andreA Offline
            andreA Offline
            andre
            Developer
            schrieb am zuletzt editiert von
            #15

            @Thisoft:

            Ach ja, manchmal kann's so einfach sein ;) DA fehlt ein Hochkomma in deinem Script! Anstelle:

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

            muss es heißen:

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

            Deshalb findet die Abfrage auf die Tabelle "datapoints" keine ID und gibt wie in der Logzeile zu sehen "undefined" zurück.

            EDIT - da hatten sogar zwei Hochkommata gefehlt `
            Das war es leider nicht. Hatte dort auch schon die Schreibweise im Verdacht und ein bisschen probiert. Daher fehlten auch zwei Hochkomma. Aber egal welche Schreibweise, der Fehler bleibt. :(

            MfG,

            André

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

            1 Antwort Letzte Antwort
            0
            • ThisoftT Offline
              ThisoftT Offline
              Thisoft
              schrieb am zuletzt editiert von
              #16

              Dann schalte bitte mal ALLE auskommentierten Logzeilen ein und poste das entprechende Log und bitte nochmal das komplette Script so wie du es jetzt hast.

              22 HM-Geräte; PivCCU2 auf RasPi

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

              1 Antwort Letzte Antwort
              0
              • andreA Offline
                andreA Offline
                andre
                Developer
                schrieb am zuletzt editiert von
                #17

                @Thisoft:

                Dann schalte bitte mal ALLE auskommentierten Logzeilen ein und poste das entprechende Log und bitte nochmal das komplette Script so wie du es jetzt hast. `

                OK, hier das Script:

                // createState('javascript.0.e3dc.tageswerte.testmax', 0, {name: 'Maximalwert Stromverbrauch'});
                // createState('javascript.0.e3dc.tageswerte.testmin', 0, {name: 'Minimalwert Stromverbrauch'});
                
                var id = 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung';
                
                var maxid = 'javascript.0.e3dc.tageswerte.testmax';
                var minid = 'javascript.0.e3dc.tageswerte.testmin';
                var dt = 24;                                                                       //Zeitraum in Stunden
                    dt = dt*3600*1000;
                
                SQLAbfrage(id);
                
                // maximum, minimum
                function minimum(result) {
                  log(JSON.stringify(result.result));
                  setState(minid, result.result[0].MinVal);
                }
                
                function maximum(result) {
                  log('Fn Max'+ JSON.stringify(result.result));
                  setState(maxid, result.result[0].MaxVal);
                }
                
                function SQLAbfrage () {
                  log(id);
                  sendTo('sql.0', 'query', 'SELECT * FROM datapoints WHERE name = \'' + id + '\'', GetResults);
                }
                
                function GetResults (dpoint) {
                  var end_time = new Date().getTime();
                  var start_time = new Date().getTime() - dt;
                  log(JSON.stringify(dpoint.result)+'//'+start_time);
                  log(dpoint.result[0].id + '---//---' + dpoint.result[0].name);
                  sendTo('sql.0', 'query', 'SELECT Round(Min(val),1) As MinVal FROM ts_number WHERE ts >= ' + start_time + ' AND id=' + dpoint.result[0].id + ' GROUP BY id',minimum);
                  sendTo('sql.0', 'query', 'SELECT Round(Max(val),1) As MaxVal FROM ts_number WHERE ts >= ' + start_time + ' AND id=' + dpoint.result[0].id + ' GROUP BY id',maximum);
                }
                

                Und hier die Log-Ausgabe:

                12:01:55.929	[info]	javascript.0 Start javascript script.js.E3DC.test_stromverbrauch
                12:01:55.929	[info]	javascript.0 script.js.E3DC.test_stromverbrauch: modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung
                12:01:55.929	[info]	javascript.0 script.js.E3DC.test_stromverbrauch: registered 0 subscriptions and 0 schedules
                12:01:55.944	[info]	javascript.0 script.js.E3DC.test_stromverbrauch: undefined//1486810915941
                12:01:55.945	[error]	TypeError: Cannot read property '0' of undefined at Object.GetResults [as cb] (script.js.E3DC.test_stromverbrauch:35:20) at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2827:71) at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30) at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20) at Socket.onevent (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:270:10) at Socket.onpacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:228:12) at Manager. (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-bind/index.js:21:15) at Manager.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20) at Manager.ondecoded (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:332:8) at Decoder. (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-bind/index.js:21:15)
                12:03:12.573	[info]	javascript.0 Stop script script.js.E3DC.test_stromverbrauch
                

                Ich hab irgendwie das Gefühl dass mit meinen Daten in der SQl etwas nicht stimmt, aber wenn ich das Ganze mit einem "Standard"-Temperaturwert eines Thermostats mache, bekomme ich den selben Fehler. :(

                MfG,

                André

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

                1 Antwort Letzte Antwort
                0
                • ThisoftT Offline
                  ThisoftT Offline
                  Thisoft
                  schrieb am zuletzt editiert von
                  #18

                  Was mich jetzt stutzig macht ist dass die folgenden beiden Zeilen im Log "verkehrtherum" stehen.

                  12:01:55.929   [info]   javascript.0 script.js.E3DC.test_stromverbrauch: modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung
                  12:01:55.929   [info]   javascript.0 script.js.E3DC.test_stromverbrauch: registered 0 subscriptions and 0 schedules
                  

                  Das würde ja nach meinem Verständnis bedeuten dass die erste Funktion bereits ausgeführt wird bevor das Script fertig registriert ist. Ob das schlimm ist weiß ich jetzt nicht, aber nicht dass uns hier die Asynchronität eine Streich spielt…??? Hast du einen besonders schnellen Rechner auf dem ioBroker läuft?

                  Weiterhin sagt diese Logzeile

                  12:01:55.944   [info]   javascript.0 script.js.E3DC.test_stromverbrauch: undefined//1486810915941
                  

                  dass die erste Funktion (SQLAbfrage) kein Result (eben undefined) zurückgegeben hat und da liegt das Problem, der zweite Teil ist der für die nächste Abfrage berechnete Zeitstempel - der sieht OK aus, hat aber für diesen Fehler ohnehin noch keine Relevanz.

                  So eine richtige Idee habe ich jetzt auch nicht mehr, aber eins kannst du mal noch machen. Ändere mal die Funktion wie folgt und poste dann nochmal das Log

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

                  22 HM-Geräte; PivCCU2 auf RasPi

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

                  1 Antwort Letzte Antwort
                  0
                  • andreA Offline
                    andreA Offline
                    andre
                    Developer
                    schrieb am zuletzt editiert von
                    #19

                    @Thisoft:

                    Was mich jetzt stutzig macht ist dass die folgenden beiden Zeilen im Log "verkehrtherum" stehen.

                    12:01:55.929   [info]   javascript.0 script.js.E3DC.test_stromverbrauch: modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung
                    12:01:55.929   [info]   javascript.0 script.js.E3DC.test_stromverbrauch: registered 0 subscriptions and 0 schedules
                    

                    Das würde ja nach meinem Verständnis bedeuten dass die erste Funktion bereits ausgeführt wird bevor das Script fertig registriert ist. Ob das schlimm ist weiß ich jetzt nicht, aber nicht dass uns hier die Asynchronität eine Streich spielt…??? Hast du einen besonders schnellen Rechner auf dem ioBroker läuft? `
                    Nach langer Pause habe ich heute endlich mal wieder Zeit…

                    Ja, ich habe einen schnellen Rechner. Habe meinen ioBroker auf der Synology laufen. Die ist schon sehr performant...

                    Ob sich das Script in irgendeiner Form "überholen" kann, weiß ich auch nicht...

                    Ich habe mal ein bisschen probiert, aber irgendwie steige ich nicht dahinter. So sieht es aktuell aus:

                    // createState('javascript.0.e3dc.tageswerte.testmax', 0, {name: 'Maximalwert Stromverbrauch'});
                    // createState('javascript.0.e3dc.tageswerte.testmin', 0, {name: 'Minimalwert Stromverbrauch'});
                    
                    var id = 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung';
                    
                    var maxid = 'javascript.0.e3dc.tageswerte.testmax';
                    var minid = 'javascript.0.e3dc.tageswerte.testmin';
                    var dt = 24;                                                                       //Zeitraum in Stunden
                        dt = dt*3600*1000;
                    
                    // maximum, minimum
                    function minimum(result) {
                      log(JSON.stringify(result.result));
                      setState(minid, result.result[0].MinVal);
                    }
                    
                    function maximum(result) {
                      log('Fn Max'+ JSON.stringify(result.result));
                      setState(maxid, result.result[0].MaxVal);
                    }
                    
                    function SQLAbfrage () {
                      log(id);
                      log('SELECT * FROM datapoints WHERE name = \'' + id + '\'');
                      sendTo('sql.0', 'query', 'SELECT * FROM datapoints WHERE name = \'' + id + '\'', GetResults);
                    }
                    
                    function GetResults (dpoint) {
                      var end_time = new Date().getTime();
                      var start_time = new Date().getTime() - dt;
                      log(JSON.stringify(dpoint.result)+'//'+start_time);
                      log(dpoint.result[0].id + '---//---' + dpoint.result[0].name);
                      sendTo('sql.0', 'query', 'SELECT Round(Min(val),1) As MinVal FROM ts_number WHERE ts >= ' + start_time + ' AND id=' + dpoint.result[0].id + ' GROUP BY id',minimum);
                      sendTo('sql.0', 'query', 'SELECT Round(Max(val),1) As MaxVal FROM ts_number WHERE ts >= ' + start_time + ' AND id=' + dpoint.result[0].id + ' GROUP BY id',maximum);
                    }
                    
                    SQLAbfrage(id);
                    

                    Und im Log so:

                    22:21:50.105	[info]	javascript.0 Start javascript script.js.E3DC.test_stromverbrauch
                    22:21:50.105	[info]	javascript.0 script.js.E3DC.test_stromverbrauch: modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung
                    22:21:50.105	[info]	javascript.0 script.js.E3DC.test_stromverbrauch: SELECT * FROM datapoints WHERE name = 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung'
                    22:21:50.105	[info]	javascript.0 script.js.E3DC.test_stromverbrauch: registered 0 subscriptions and 0 schedules
                    22:21:50.121	[info]	javascript.0 script.js.E3DC.test_stromverbrauch: undefined//1487884910118
                    22:21:50.122	[error]	TypeError: Cannot read property '0' of undefined at Object.GetResults [as cb] (script.js.E3DC.test_stromverbrauch:32:20) at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2827:71) at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30) at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20) at Socket.onevent (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:270:10) at Socket.onpacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:228:12) at Manager. (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-bind/index.js:21:15) at Manager.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20) at Manager.ondecoded (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:332:8) at Decoder. (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-bind/index.js:21:15)
                    22:21:51.971	[info]	javascript.0 Stop script script.js.E3DC.test_stromverbrauch
                    

                    Vielleicht hat ja noch wer eine Idee…

                    MfG,

                    André

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

                    1 Antwort Letzte Antwort
                    0
                    • ThisoftT Offline
                      ThisoftT Offline
                      Thisoft
                      schrieb am zuletzt editiert von
                      #20

                      Kannst du die folgende Abfrage mal direkt auf deine Datenbank ausführen?

                      SELECT * FROM datapoints WHERE name = 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung'
                      

                      22 HM-Geräte; PivCCU2 auf RasPi

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

                      1 Antwort Letzte Antwort
                      0
                      • M Offline
                        M Offline
                        moebius
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • ThisoftT Offline
                          ThisoftT Offline
                          Thisoft
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          0
                          • andreA Offline
                            andreA Offline
                            andre
                            Developer
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            0
                            • ThisoftT Offline
                              ThisoftT Offline
                              Thisoft
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              • andreA Offline
                                andreA Offline
                                andre
                                Developer
                                schrieb am zuletzt editiert von
                                #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 Antwort Letzte Antwort
                                0
                                • M Offline
                                  M Offline
                                  moebius
                                  schrieb am zuletzt editiert von
                                  #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 Antwort Letzte Antwort
                                  0
                                  • ThisoftT Offline
                                    ThisoftT Offline
                                    Thisoft
                                    schrieb am zuletzt editiert von
                                    #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 Antwort Letzte Antwort
                                    0
                                    • N Offline
                                      N Offline
                                      noxx
                                      schrieb am zuletzt editiert von
                                      #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 Antwort Letzte Antwort
                                      0
                                      • H Offline
                                        H Offline
                                        HeiLuRa
                                        schrieb am zuletzt editiert von
                                        #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 Antwort Letzte Antwort
                                        0
                                        • ThisoftT Offline
                                          ThisoftT Offline
                                          Thisoft
                                          schrieb am zuletzt editiert von
                                          #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 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

                                          755

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          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