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. Blockly
  5. JS-Funktion für influxDB2 ohne "await wait(xxxx)" möglich?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    773

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

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

Geplant Angeheftet Gesperrt Verschoben Blockly
3 Beiträge 1 Kommentatoren 469 Aufrufe 1 Watching
  • Ä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.
  • S Offline
    S Offline
    stenmic
    schrieb am zuletzt editiert von stenmic
    #1

    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 Antwort Letzte Antwort
    0
    • S 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 Offline
      S Offline
      stenmic
      schrieb am zuletzt editiert von
      #2

      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 Antwort Letzte Antwort
      0
      • S stenmic

        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 Offline
        S Offline
        stenmic
        schrieb am zuletzt editiert von
        #3

        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 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

        696

        Online

        32.6k

        Benutzer

        82.0k

        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