Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Funktionsrückgabe undefined

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

[gelöst] Funktionsrückgabe undefined

Scheduled Pinned Locked Moved Skripten / Logik
6 Posts 3 Posters 544 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • O Offline
    O Offline
    ostseeskipper
    wrote on last edited by ostseeskipper
    #1

    Hallo Zusammen,

    irgendwie verstehe ich wohl nicht wo und wie mit async, await und/oder promises gearbeitet werden muss und hoffe auf hilfe

    Habe folgende Funktion

    function tibberprice_holen(t){
        
        var tibberprice = 0;
        console.log(t);
        
        // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
    
        let search_Std = t.toString().substring(0, 18);
        console.log(search_Std);
        try{  
            id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
               
            if(getState(id).val.substring(0, 18) == search_Std) {
            tibberprice = getState(id.replace('startTime', 'Total_Preis')).val;
            console.log(tibberprice);
            return  ;
            }});
        }
        catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
    
    }
    
    console.log('Fertig : ' +tibberprice_holen(new Date()));
    
    

    wenn das Programm läuft zeigt es durch die Logs innerhalb der Funktion den richtigen Wert
    nur ausserhalb im Log kommt undefined:disappointed:

    ? paul53P 2 Replies Last reply
    0
    • O ostseeskipper

      Hallo Zusammen,

      irgendwie verstehe ich wohl nicht wo und wie mit async, await und/oder promises gearbeitet werden muss und hoffe auf hilfe

      Habe folgende Funktion

      function tibberprice_holen(t){
          
          var tibberprice = 0;
          console.log(t);
          
          // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
      
          let search_Std = t.toString().substring(0, 18);
          console.log(search_Std);
          try{  
              id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                 
              if(getState(id).val.substring(0, 18) == search_Std) {
              tibberprice = getState(id.replace('startTime', 'Total_Preis')).val;
              console.log(tibberprice);
              return  ;
              }});
          }
          catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
      
      }
      
      console.log('Fertig : ' +tibberprice_holen(new Date()));
      
      

      wenn das Programm läuft zeigt es durch die Logs innerhalb der Funktion den richtigen Wert
      nur ausserhalb im Log kommt undefined:disappointed:

      ? Offline
      ? Offline
      A Former User
      wrote on last edited by A Former User
      #2

      @ostseeskipper auf den ersten Blick würde ich sagen das du bei return noch angeben musst welchen Wert er denn zurück geben soll. Woher soll er das sonst wissen? Also „return tibberprice“

      Und wenn du eine Funktion mit async deklarierst solltest du innerhalb dieser auch async Funktionen nutzen. Also await getStateAsync(id.replace('startTime', 'Total_Preis')).val; Ist hier nun nicht schlimm und wenn nicht kannst auch das async weg lassen. Aber bei mehreren Werten die man holen möchte macht das dann schon Sinn damit ggf. nicht übersprungen wird.

      O 1 Reply Last reply
      0
      • ? A Former User

        @ostseeskipper auf den ersten Blick würde ich sagen das du bei return noch angeben musst welchen Wert er denn zurück geben soll. Woher soll er das sonst wissen? Also „return tibberprice“

        Und wenn du eine Funktion mit async deklarierst solltest du innerhalb dieser auch async Funktionen nutzen. Also await getStateAsync(id.replace('startTime', 'Total_Preis')).val; Ist hier nun nicht schlimm und wenn nicht kannst auch das async weg lassen. Aber bei mehreren Werten die man holen möchte macht das dann schon Sinn damit ggf. nicht übersprungen wird.

        O Offline
        O Offline
        ostseeskipper
        wrote on last edited by
        #3

        @ciddi89
        Hatte ich bereits probiert genau zu sagen "return tibberprice"
        auch await hilft nicht

        
        function tibberprice_holen(t){          // wenn Funktion geht und wert zurück liefert
            
            var tibberprice = 0;
            console.log(t);
            
            // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
        
            let search_Std = t.toString().substring(0, 18);
            console.log(search_Std);
            try{  
                id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                   
                if(getState(id).val.substring(0, 18) == search_Std) {
                tibberprice = await Math.round(getState(id.replace('startTime', 'Total_Preis')).val*100)/10000;
                console.log(tibberprice);
                return tibberprice ;
                }});
            }
            catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
        
        }
        console.log('Fertig : ' +tibberprice_holen(new Date()));
        
        

        ergibt

        19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19:26:37 GMT+0200 (Mitteleuropäische Sommerzeit)
        19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19
        19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Fertig : undefined
        

        und wenn funktion mit async definiert wird kommt

        19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19:27:41 GMT+0200 (Mitteleuropäische Sommerzeit)
        19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19
        19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Fertig : [object Promise]
        

        Daher wird es irgendwas sein was ich noch nicht verstanden habe und hoffe auf das Wissen hier im Forum

        ? 1 Reply Last reply
        0
        • O ostseeskipper

          @ciddi89
          Hatte ich bereits probiert genau zu sagen "return tibberprice"
          auch await hilft nicht

          
          function tibberprice_holen(t){          // wenn Funktion geht und wert zurück liefert
              
              var tibberprice = 0;
              console.log(t);
              
              // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
          
              let search_Std = t.toString().substring(0, 18);
              console.log(search_Std);
              try{  
                  id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                     
                  if(getState(id).val.substring(0, 18) == search_Std) {
                  tibberprice = await Math.round(getState(id.replace('startTime', 'Total_Preis')).val*100)/10000;
                  console.log(tibberprice);
                  return tibberprice ;
                  }});
              }
              catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
          
          }
          console.log('Fertig : ' +tibberprice_holen(new Date()));
          
          

          ergibt

          19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19:26:37 GMT+0200 (Mitteleuropäische Sommerzeit)
          19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19
          19:26:37.080	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Fertig : undefined
          

          und wenn funktion mit async definiert wird kommt

          19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19:27:41 GMT+0200 (Mitteleuropäische Sommerzeit)
          19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Sun Apr 23 2023 19
          19:27:41.412	info	javascript.0 (18691) script.js.Z_Test.Test_Zaehlerstaende: Fertig : [object Promise]
          

          Daher wird es irgendwas sein was ich noch nicht verstanden habe und hoffe auf das Wissen hier im Forum

          ? Offline
          ? Offline
          A Former User
          wrote on last edited by A Former User
          #4

          @ostseeskipper erstmal das await for Math.round hat keinen Effekt. Du musst wenn schon await vor das getState setzen. dann heisst es aber await getStateAsync

          Aber woher holt er zb. den Wert? id_SrcTibberpreise Ist da noch mehr im script? Deswegen gibt er wahrscheinlich nichts zurück weil er mit der id nichts anfangen kann und somit aus der Funktion springt.

          Hier aber erstmal wie es mit den await aussehen sollte/könnte:

           
          function tibberprice_holen(t){          // wenn Funktion geht und wert zurück liefert
              
              let tibberprice = 0;
              console.log(t);
              
              // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
           
              let search_Std = t.toString().substring(0, 18);
              console.log(search_Std);
              try{  
                  id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                     
                  if(getState(id).val.substring(0, 18) == search_Std) {
                  tibberprice = Math.round((await getStateAsync(id.replace('startTime','Total_Preis'))).val*100)/10000;
                  console.log(tibberprice);
                  return tibberprice;
                  }});
              }
              catch(error) {
                  console.warn(error.message)
              } // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
           
          }
          const actualTibberprice = tibberprice_holen(new Date());
          console.log('Fertig : ' + actualTibberprice);
          
          

          // EDIT: wird einem auch gesagt wenn du im error fall eine log ausgabe gibt. Hab das Script damit auch noch angepasst.

          19:51:28.618	warn	javascript.0 (539) script.js.Vorlagen.212: id_SrcTibberpreise is not defined
          
          1 Reply Last reply
          0
          • O ostseeskipper

            Hallo Zusammen,

            irgendwie verstehe ich wohl nicht wo und wie mit async, await und/oder promises gearbeitet werden muss und hoffe auf hilfe

            Habe folgende Funktion

            function tibberprice_holen(t){
                
                var tibberprice = 0;
                console.log(t);
                
                // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
            
                let search_Std = t.toString().substring(0, 18);
                console.log(search_Std);
                try{  
                    id_SrcTibberpreise.each(async function(id) {                      // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                       
                    if(getState(id).val.substring(0, 18) == search_Std) {
                    tibberprice = getState(id.replace('startTime', 'Total_Preis')).val;
                    console.log(tibberprice);
                    return  ;
                    }});
                }
                catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
            
            }
            
            console.log('Fertig : ' +tibberprice_holen(new Date()));
            
            

            wenn das Programm läuft zeigt es durch die Logs innerhalb der Funktion den richtigen Wert
            nur ausserhalb im Log kommt undefined:disappointed:

            paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by
            #5

            @ostseeskipper sagte: ausserhalb im Log kommt undefined

            Man muss den Rückgabewert in der äußeren Funktion mitgeben:

            function tibberprice_holen(t){
                var tibberprice = 0;
                console.log(t);
                // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
                let search_Std = t.toString().substring(0, 18);
                console.log(search_Std);
                try {  
                    id_SrcTibberpreise.each(function(id) {  // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                        if(getState(id).val.substring(0, 18) == search_Std) {
                            tibberprice = getState(id.replace('startTime', 'Total_Preis')).val;
                            console.log(tibberprice);
                            return;
                        }
                    });
                    return tibberprice;
                }
                catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
            }
             
            console.log('Fertig : ' +tibberprice_holen(new Date()));
            

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            O 1 Reply Last reply
            1
            • paul53P paul53

              @ostseeskipper sagte: ausserhalb im Log kommt undefined

              Man muss den Rückgabewert in der äußeren Funktion mitgeben:

              function tibberprice_holen(t){
                  var tibberprice = 0;
                  console.log(t);
                  // Aktuellen Tibber Preis holen innerhalb der Callback-Funktion: 
                  let search_Std = t.toString().substring(0, 18);
                  console.log(search_Std);
                  try {  
                      id_SrcTibberpreise.each(function(id) {  // im Verzeichnis der Tibberpreise suchen im gültig ab Zeitdatenpunkt 
                          if(getState(id).val.substring(0, 18) == search_Std) {
                              tibberprice = getState(id.replace('startTime', 'Total_Preis')).val;
                              console.log(tibberprice);
                              return;
                          }
                      });
                      return tibberprice;
                  }
                  catch(error) {} // wegen fehlender Werte für den Folgetag in der Zeit von 00 - 14 Uhr    
              }
               
              console.log('Fertig : ' +tibberprice_holen(new Date()));
              
              O Offline
              O Offline
              ostseeskipper
              wrote on last edited by
              #6

              @paul53 wie immer besten Dank:+1:
              echt klasse wie du hier mit deinem Wissen hilfst und unterstützt.
              Hast du ne Kaffeekasse?:tea:

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              500

              Online

              32.7k

              Users

              82.3k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Home
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe