Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. JS-Funktion für influxDB2 ohne "await wait(xxxx)" möglich?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    JS-Funktion für influxDB2 ohne "await wait(xxxx)" möglich?

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

      Hallo,
      ich nutze folgende Funktion in meinen Blocklys für die Abfrage der Influx Datenbank

      2024-09-01 07 34 23.jpg

      var ergebnis;
      sendTo('influxdb.0', 'query', 'from(bucket: "'+Bucket+'") |> range(start: '+Start+', stop: '+Ende+') |> filter(fn: (r) => r["_measurement"] == "'+Datenpunkt+'") |> filter(fn: (r) => r["_field"] == "value") |> filter(fn: (r) => r._value > 0) |> group() |>'+Wert+'()', function (result) {
          if (result.error) {
              console.error(result.error);
          } else {
              ergebnis = JSON.stringify(result);
          }
      });
      await wait(1000);
      return ergebnis;
      

      Es funktioniert auch alles, jedoch stört mich das "await wait(xxxx)" am Ende.
      Gibt es eine Möglichkeit, dass das Ergebnis "returniert" wird sobald es vorhanden ist?

      S 1 Reply Last reply Reply Quote 0
      • S
        stenmic @stenmic last edited by

        so gehts

        return new Promise((resolve, reject) => {
            let value = 0;
            let query = [
                'from(bucket: "'+Bucket+'")',
                '|> range(start: '+Start+', stop: '+Ende+')',
                '|> filter(fn: (r) => r["_measurement"] == "'+Datenpunkt+'")',
                '|> filter(fn: (r) => r["_field"] == "value")',
                '|> filter(fn: (r) => r._value > 0) |> group()',
                '|> '+Wert+'()'].join('');
         
            sendTo('influxdb.0', 'query', query, function (result) {
                if (result.error) {
                    reject(result.error);
                } else {
                    value = JSON.stringify(result);
                    resolve(value);
                };
            });
        });
        
        S 1 Reply Last reply Reply Quote 0
        • S
          stenmic @stenmic last edited by

          so, nächstes Problem.
          Das Script funktioniert, jedoch stürzt der Javascript Adapter bei Fehlern ab.

          Ich wollte es nun in ein try / catch verpacken.
          Der Adapter stürzt jetzt zwar nicht mehr ab, aber der Fehler wird bei catch nicht sauber in der Konsole ausgegeben.
          Wo liegt mein Fehler?

          try {
              return new Promise((resolve, reject) => {
              let Ergebnis = 0
              let settings = [
                  'import "timezone"',
                  'import "date"',
                  'option location = timezone.location(name: "Europe/Berlin")',
                  'from(bucket: "'+Bucket+'")',
                  '|> range(start: -'+Start+')',
                  '|> filter(fn: (r) => r["_measurement"] == "'+Datenpunkt+'")',
                  '|> filter(fn: (r) => r["_field"] == "value")',
                  '|> aggregateWindow(every: '+Aggregation+', fn: '+fn+', createEmpty: false) ',
                  ].join('');
          
              sendTo('influxdb.0', 'query', settings, function (query) {
                      Ergebnis = query.result[0].map(elm => ({
                      t: (elm.ts !== null && elm.ts !== undefined) ? elm.ts : null,
                      y: (elm._value !== null && elm._value !== undefined) ? elm._value : null
                      }))
                      resolve(Ergebnis)
                  })
          	})
          } catch (error) {
              console.warn(error)
          }
          
          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          807
          Online

          32.0k
          Users

          80.3k
          Topics

          1.3m
          Posts

          1
          3
          353
          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