Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] JSON Wert extrahieren

    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] JSON Wert extrahieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Stuti last edited by

      Hallo,

      leider hatte ich in FB keinen Erfolg, deswegen die Frage noch einmal hier:

      Ich versuche Min, Max und Mittelwerte aus der SQL Datenbank zu bekommen.

          sendTo('sql.0', 'query', 'select avg(val) from ioBroker.ts_number where id = 21 and ts/1000 >= Unix_TIMESTAMP(CURDATE())', function (avgval) {
          if (avgval.error) {
              console.error(avgval.error);
          } else {
              // show result
               log('Rows: ' + JSON.stringify(avgval.result));
               var test = JSON.stringify(avgval.result).avg(val);
               log(test);
          }
          })
      
      

      Ergibt:

      16:29:43.270	info	javascript.0 script.js.Datenbankabfragen.Tagesmittelwert: Rows: [{"avg(val)":-2.0713963963963966}]
      16:29:43.270	error	javascript.0 ReferenceError: val is not defined at Object.cb (script.js.Datenbankabfragen.Tagesmittelwert:7:55) at Object.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3386:71) at Socket. <anonymous>(/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:52:30) at Socket.Emitter.emit (/opt/iobroker/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:278:10) at Socket.onpacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:236:12) at Manager. <anonymous>(/opt/iobroker/node_modules/component-bind/index.js:21:15) at Manager.Emitter.emit (/opt/iobroker/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:345:8) at Decoder. <anonymous>(/opt/iobroker/node_modules/component-bind/index.js:21:15)</anonymous></anonymous></anonymous>
      

      Also prinzipiell funktionert die Rückgabe ja, aber ich schaffe es nicht den Wert raus zu bekommen.

      log(avgval.result[1].avg(val)) gibt auch immer die Meldung, das "val" nicht definiert ist.

      Kann mir jemand helfen?

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Vielleicht liege ich völlig falsch, aber was soll im stringify der letzte ".avg(val)"? Das kannst du eigentlich nicht einfach anhängen.

        Also versuch mal so:

        sendTo('sql.0', 'query', 'select avg(val) from ioBroker.ts_number where id = 21 and ts/1000 >= Unix_TIMESTAMP(CURDATE())', function (avgval) {
            if (avgval.error) {
                console.error(avgval.error);
            } else {
                // show result
                 log('Rows: ' + JSON.stringify(avgval.result));
                 var test = JSON.stringify(avgval.result[0].avg(val));
                 log(test);
            }
            })
        
        

        Vielleicht sind auch die runden Klammern im Namen ein Problem, dann probier mal

        var test = JSON.stringify(avgval.result[0].["avg(val)"]);
        

        Gruß

        Pix

        1 Reply Last reply Reply Quote 0
        • S
          Stuti last edited by

          Hallo,

          ich hatte mich irgendwann gewundert warum es in eckigen Klammern zurückgegeben wurde, also: [{"avg(val)":-2.0713963963963966}]

          Demnach ist das dann wohl ein Array…

          Es funktioniert: avgval.result[0]["avg(val)"]

          bzw am Ende: setState('Datenbank.TagesTempMittel', (avgval.result[0]["avg(val)"]).toFixed(2));

          Ob man JSON.stringify davor schreibt oder es lässt macht soweit ich gesehen hab keinen Unterschied.

          Danke für die Hilfe. Ich markier das hier als gelöst.

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

          Support us

          ioBroker
          Community Adapters
          Donate

          826
          Online

          31.8k
          Users

          79.9k
          Topics

          1.3m
          Posts

          2
          3
          486
          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