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. JavaScript
  5. Bitte um Sample Code für "sendToAsync"

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Bitte um Sample Code für "sendToAsync"

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
4 Beiträge 2 Kommentatoren 525 Aufrufe 2 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.
  • M Offline
    M Offline
    Marty56
    schrieb am zuletzt editiert von
    #1

    Hallo

    Ich möchte die neue Funktion "sendToAsync" nutzen, um eine InfluxDB query durchzuführen.
    So habe ich das bisher realisiert mit selbst gebautem promise.

    async function sum(id,timestart,timeend,db) {
        //workarround to adjust Timezone Differenz to UTC
        var end   =  new Date(timeend).getTime()*1000000
        var start =  new Date(timestart).getTime()*1000000
        var sum = 0
        var query = 'SELECT sum("value") FROM "autogen"."' + id +'" WHERE time >= ' + start + ' AND time <= ' + end
        const abfrage = new Promise(function(resolve, error) {
            sendTo(db, 'query', query, 
                function (result) {
                    if (result.error) {console.error(result.error);
                    } else {
                        if (result.result[0][0] != undefined) sum = result.result[0][0].sum
                        resolve(true)
                    }
                }
            )
        })
        await abfrage
        return sum;
    }
    

    Dann habe ich versucht, die neue Funktion zu nutzen und bekomme einen Javascript "termination".

    async function sum2(id,timestart,timeend,db) {
        //workarround to adjust Timezone Differenz to UTC
        var end   =  new Date(timeend).getTime()*1000000
        var start =  new Date(timestart).getTime()*1000000
        var sum = 0
        var result = {}
        var query = 'SELECT sum("value") FROM "autogen"."' + id +'" WHERE time >= ' + start + ' AND time <= ' + end
        result = await sendToAsync(db, 'query', query)
        if (result.error) {console.error(result.error);
        } else {
            if (result.result[0][0] != undefined) sum = result.result[0][0].sum
            //log('Summme von DB:' + db + ' id:'+ id + " Summe: " + sum + " von: " + timestart + " bis: " + timeend)
        }
        return sum;
    }
    
    (async ()  => {
        log("" +  await sum2(path2db + 'Auto_Ex.Tag_Energie',firstdayofyear + seach_time_start,yesterday +seach_time_end ,endless))
     })();
    

    Der Javascript Adapter stürzt ab mit folgender Fehlermeldung

    	2022-11-23 10:30:27.581	error	undefined
    
    javascript.0
    2022-11-23 10:30:27.581	error	unhandled promise rejection: undefined
    
    javascript.0
    2022-11-23 10:30:27.581	error	Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
    

    Was mache ich falsch?

    HW:NUC (16 GB Ram)
    OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

    OliverIOO 1 Antwort Letzte Antwort
    0
    • M Marty56

      Hallo

      Ich möchte die neue Funktion "sendToAsync" nutzen, um eine InfluxDB query durchzuführen.
      So habe ich das bisher realisiert mit selbst gebautem promise.

      async function sum(id,timestart,timeend,db) {
          //workarround to adjust Timezone Differenz to UTC
          var end   =  new Date(timeend).getTime()*1000000
          var start =  new Date(timestart).getTime()*1000000
          var sum = 0
          var query = 'SELECT sum("value") FROM "autogen"."' + id +'" WHERE time >= ' + start + ' AND time <= ' + end
          const abfrage = new Promise(function(resolve, error) {
              sendTo(db, 'query', query, 
                  function (result) {
                      if (result.error) {console.error(result.error);
                      } else {
                          if (result.result[0][0] != undefined) sum = result.result[0][0].sum
                          resolve(true)
                      }
                  }
              )
          })
          await abfrage
          return sum;
      }
      

      Dann habe ich versucht, die neue Funktion zu nutzen und bekomme einen Javascript "termination".

      async function sum2(id,timestart,timeend,db) {
          //workarround to adjust Timezone Differenz to UTC
          var end   =  new Date(timeend).getTime()*1000000
          var start =  new Date(timestart).getTime()*1000000
          var sum = 0
          var result = {}
          var query = 'SELECT sum("value") FROM "autogen"."' + id +'" WHERE time >= ' + start + ' AND time <= ' + end
          result = await sendToAsync(db, 'query', query)
          if (result.error) {console.error(result.error);
          } else {
              if (result.result[0][0] != undefined) sum = result.result[0][0].sum
              //log('Summme von DB:' + db + ' id:'+ id + " Summe: " + sum + " von: " + timestart + " bis: " + timeend)
          }
          return sum;
      }
      
      (async ()  => {
          log("" +  await sum2(path2db + 'Auto_Ex.Tag_Energie',firstdayofyear + seach_time_start,yesterday +seach_time_end ,endless))
       })();
      

      Der Javascript Adapter stürzt ab mit folgender Fehlermeldung

      	2022-11-23 10:30:27.581	error	undefined
      
      javascript.0
      2022-11-23 10:30:27.581	error	unhandled promise rejection: undefined
      
      javascript.0
      2022-11-23 10:30:27.581	error	Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
      

      Was mache ich falsch?

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von
      #2

      @marty56
      die Funktion wirft einen Fehler.
      Die Async Versionen der Funktionen geben primär ein Promise zurück.
      Der Befehl await hilft dem Programmierer dabei, simpler mit dem promise umzugehen. Allerdings nur wenn alles gut verläuft. Wirft das promise ein reject (also ein Fehler ist im Befehl aufgetaucht, dann muss man den mit try/catch abfangen

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise?retiredLocale=de
      Version 1: Klassischer Umgang mit Promise

      sendToAsync(db, 'query', query).then({
        //Funktionsteil wenn ohne Fehler
      },{
        //Funktionsteil wenn mit Fehler
      }
      

      Version 2: Fehler bei Promis mit Await mit try/catch Anweisung

      try {
        result = await sendToAsync(db, 'query', query);
        ... weitere Abarbeitung im Gutfall
      } catch(err) {
        //Im Fehlerfall
      }
      

      Version 3: Fehler bei Promise mit Await und catch-Funktion

      
      result = await sendToAsync(db, 'query', query).catch((err=>{
          //Im Fehlerfall
      });
      ... weitere Abarbeitung im Gutfall
      

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      M 1 Antwort Letzte Antwort
      0
      • OliverIOO OliverIO

        @marty56
        die Funktion wirft einen Fehler.
        Die Async Versionen der Funktionen geben primär ein Promise zurück.
        Der Befehl await hilft dem Programmierer dabei, simpler mit dem promise umzugehen. Allerdings nur wenn alles gut verläuft. Wirft das promise ein reject (also ein Fehler ist im Befehl aufgetaucht, dann muss man den mit try/catch abfangen

        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise?retiredLocale=de
        Version 1: Klassischer Umgang mit Promise

        sendToAsync(db, 'query', query).then({
          //Funktionsteil wenn ohne Fehler
        },{
          //Funktionsteil wenn mit Fehler
        }
        

        Version 2: Fehler bei Promis mit Await mit try/catch Anweisung

        try {
          result = await sendToAsync(db, 'query', query);
          ... weitere Abarbeitung im Gutfall
        } catch(err) {
          //Im Fehlerfall
        }
        

        Version 3: Fehler bei Promise mit Await und catch-Funktion

        
        result = await sendToAsync(db, 'query', query).catch((err=>{
            //Im Fehlerfall
        });
        ... weitere Abarbeitung im Gutfall
        
        M Offline
        M Offline
        Marty56
        schrieb am zuletzt editiert von Marty56
        #3

        @oliverio Danke für die Antwort.

        Ich habe deinen Vorschlag ausprobiert und glaube jetzt, dass die Funktion "sendToAsync" noch buggy ist.

        Es wird nämlich immer einen Fehler ausgelöst, auch wenn ein korrektes Ergebnis vorliegt.
        Und wenn ich dann den Inhalt des Fehler anschaue, wird das korrekte Ergebnis als Fehlerursache angezeigt.

        async function sum2(id,timestart,timeend,db) {
            //workarround to adjust Timezone Differenz to UTC
            var end   =  new Date(timeend).getTime()*1000000
            var start =  new Date(timestart).getTime()*1000000
            var sum = 0
            var result ={}
            var return_value
            var query = 'SELECT sum("value") FROM "autogen"."' + id +'" WHERE time >= ' + start + ' AND time <= ' + end
            try {
                    return_value = await sendToAsync(db, 'query', query);
                    log("Return" + JSON.stringify(return_value))
            } 
            catch (error) {
                console.error(error)
            }         
            return sum;
        }
        

        liefert im Log

        error	script.js.common.Energie: {'result':[[{'sum':1333.9444199999998,'ts':1640991600000}]],'ts':1669200179686,'error':null}
        

        Ich mache mal ein Issue auf.

        HW:NUC (16 GB Ram)
        OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

        M 1 Antwort Letzte Antwort
        1
        • M Marty56

          @oliverio Danke für die Antwort.

          Ich habe deinen Vorschlag ausprobiert und glaube jetzt, dass die Funktion "sendToAsync" noch buggy ist.

          Es wird nämlich immer einen Fehler ausgelöst, auch wenn ein korrektes Ergebnis vorliegt.
          Und wenn ich dann den Inhalt des Fehler anschaue, wird das korrekte Ergebnis als Fehlerursache angezeigt.

          async function sum2(id,timestart,timeend,db) {
              //workarround to adjust Timezone Differenz to UTC
              var end   =  new Date(timeend).getTime()*1000000
              var start =  new Date(timestart).getTime()*1000000
              var sum = 0
              var result ={}
              var return_value
              var query = 'SELECT sum("value") FROM "autogen"."' + id +'" WHERE time >= ' + start + ' AND time <= ' + end
              try {
                      return_value = await sendToAsync(db, 'query', query);
                      log("Return" + JSON.stringify(return_value))
              } 
              catch (error) {
                  console.error(error)
              }         
              return sum;
          }
          

          liefert im Log

          error	script.js.common.Energie: {'result':[[{'sum':1333.9444199999998,'ts':1640991600000}]],'ts':1669200179686,'error':null}
          

          Ich mache mal ein Issue auf.

          M Offline
          M Offline
          Marty56
          schrieb am zuletzt editiert von
          #4

          https://github.com/ioBroker/ioBroker.javascript/issues/1198

          Ich glaube, dass ich auch den Bug gefunden habe.

          HW:NUC (16 GB Ram)
          OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

          1 Antwort Letzte Antwort
          1
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          679

          Online

          32.6k

          Benutzer

          82.3k

          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