Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Funktionsrückgabewert = Skript und nicht Ergebniss

    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

    Funktionsrückgabewert = Skript und nicht Ergebniss

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @etzeste13 last edited by

      @etzeste13 sagte: Ihr habt eine Idee..

      Klammern in Zeile 50 vergessen:

          AC_Sum = getACgesamt();
      
      E 2 Replies Last reply Reply Quote 1
      • E
        etzeste13 @paul53 last edited by

        @paul53
        Hallo Paul,
        funktioniert natürlich!! Vielen Dank für Wink. Machmal siehr man den Wald vor lauter Bäumen nicht....🤦

        1 Reply Last reply Reply Quote 0
        • E
          etzeste13 @paul53 last edited by

          @paul53
          Hallo, jetzt hat sich gleich noch eine Frage ergeben aus der ich nicht schlau werde...
          Ich lasse zur Kontrolle den Ausgabewert der Funktion innerhalb der Funktion ausgeben... und mache das gleiche nochmal in der Hauptschleife. Interessanterweise habe ich da keinen Wert im Log? hast du auch hier einen Wink für mich?

          7ddf749a-3142-47aa-89c5-a83035d77502-grafik.png

          async function getACgesamt() {
              var wr_ost1 = 92932006106226;       //WR-Seriennummern definieren
              var wr_ost2 = 92932007107063;
              var wr_sued1 = 92932007107055;
              var wr_sued2 = 92932007102044;
              var wr_west1 = 92932007107053;
              var wr_west2 = 92932006106237;
          
              var ACin_L1_1, ACin_L1_2, ACin_L2_1, ACin_L2_2, ACin_L3_1, ACin_L3_2, AC_ges;
              var WrSerNr = 0;
          
              // Selektion und Zuteilung der Wechselricher auf die Phasen
              for (var i = 1; i < 7; i++) {       // 6 durchläufe um alle WR Abzufragen 
                  WrSerNr = getState("mqtt.0.solpiplog.pip" + i + ".serial").val;     //SerNr des aktuellen WR abfragen
                  //console.log(WrSerNr);
                  //Nun kommt die if Schleife um die WR basierend auf der Seriennummer der Phase zuzuordnen
                  if (WrSerNr == wr_ost1) {
                      ACin_L1_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  } else if (WrSerNr == wr_ost2) {
                      ACin_L1_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  } else if (WrSerNr == wr_sued1) {
                      ACin_L2_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  } else if (WrSerNr == wr_sued2) {
                      ACin_L2_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  } else if (WrSerNr == wr_west1) {
                      ACin_L3_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  } else if (WrSerNr == wr_west2) {
                      ACin_L3_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  }
              }
          
          AC_ges = ACin_L1_1 + ACin_L1_2 + ACin_L2_1 + ACin_L2_2 + ACin_L3_1 + ACin_L3_2;
          console.log(AC_ges);    
          return AC_ges;
          }
          
             
          
          //Nun alle 30 Sek status der ACin-Werte abfragen
          
          schedule("*/30 * * * * *", async function () {
              var AC_Sum; 
          
              AC_Sum = getACgesamt();
              console.log(AC_Sum);  
              if (AC_Sum < 1290) {    // Wenn Summe ACin kleiner als 215Vx6=1290V
                  await wait(10000);    // 10 sec warten und nochmals checken
                  AC_Sum = getACgesamt;
                  if (AC_Sum < 1290) {
                      setState('rpi2.1.gpio.23.state' /* GPIO 23 */, false);  //Externe WP-Abschaltung aktivieren
                  }
          
              }
          });
          
          paul53 T 2 Replies Last reply Reply Quote 0
          • paul53
            paul53 @etzeste13 last edited by

            @etzeste13 sagte: keinen Wert im Log? hast du auch hier einen Wink für mich?

            Nein, der Wert sollte als erster Eintrag im Log erscheinen.

            1 Reply Last reply Reply Quote 0
            • T
              ticaki Developer @etzeste13 last edited by ticaki

              @etzeste13

              Bitte benutze log nicht console.log. Dann verwendet

              log(`Dat ist en Kontrollvalue: ${AC_ges}`);
              
              //Ich verwende fast nur `` strings
              

              Damit man im Log sieht welches log() welche Ausgabe erzeugt.

              und zu deiner Frage:

              async erzwingt ein await wenn du eine Rückgabe haben möchtest.

              async function getACgesamt() {
              ...
              
              AC_Sum = getACgesamt(); // rückgabe Promise<any>
              
              // richtig
              
              AC_Sum = await getACgesamt();
              
              

              EDIT:
              Jedoch wäre es sinnvoller das async in async function getACgesamt() zu entfernen. Ist unnötig und nur eine zusätzliche Fehlerquelle.

              E 1 Reply Last reply Reply Quote 0
              • E
                etzeste13 @ticaki last edited by

                @ticaki
                Hallo und vielen Dank!! Funktioniert ohne dem async natürlich, und auch nur log funktioniert tadellos.

                Stellt sich mir nun die Frage, warum wählt den Bockly bei einer Funktion den Wert async und bei einer Ausgabe das console.log?

                Wie oben beschrieben, versuche ich viel zu lernen indem ich Blocklys mache und mir dann ansehe wie das in JS umgewandelt wird...
                lg Etze

                T 1 Reply Last reply Reply Quote 0
                • T
                  ticaki Developer @etzeste13 last edited by ticaki

                  @etzeste13

                  Zu dem console.log weiß ich nichts zu sagen, das muß @haus-automatisierung beantworten. ´log` ist im JS auf jeden Fall die bevorzugte Methode.

                  Das async ist kein Problem, da Blockly ja nicht das await vergisst 🙂 Und in deinem schedule hast du ein await sleep() drin, dafür muß diese Funktion mit async gekennzeichnet sein.

                  E 1 Reply Last reply Reply Quote 1
                  • E
                    etzeste13 @ticaki last edited by

                    @ticaki
                    Ich verstehe und ich kann mit dem Feedback auch arbeiten.
                    Was ich noch probiert habe und bei mir von deinem Codvorschlag nicht funktioniert hat war

                    log(`Dat ist en Kontrollvalue: ${AC_ges}`);
                    

                    bei mir hat folgendes funktioniert:

                    log('Das ist Rückgabewert der Funktion:' + AC_ges);
                    

                    lg

                    T 1 Reply Last reply Reply Quote 0
                    • T
                      ticaki Developer @etzeste13 last edited by ticaki

                      @etzeste13
                      Ich wette du hast den gleichen Fehler gemacht wie ich am anfang

                      folgendes ist nicht das gleiche:

                      "" // double quote
                      '' // single quote
                      `` // template literals
                      ´´ // das ist garnix
                      

                      ich hab oben:

                      ``
                      

                      verwerdet.

                      https://www.w3schools.com/js/js_string_templates.asp

                      mit template literals kannste halt sowas machen:

                      log(`${topic}: ${type} - ${typeof value == 'object' ? JSON.stringify(value) : value}`);
                      

                      die alternative sieht so aus:

                      log(topic + ': ' + type + ' - '  + typeof value == 'object' ? JSON.stringify(value) : value);
                      

                      Wenn das jetzt aufbläst wird es unlesbar

                      E 1 Reply Last reply Reply Quote 1
                      • E
                        etzeste13 @ticaki last edited by

                        @ticaki
                        Das war´s!! Vielen Dank für die Hilfe!! So habe ich heute wirklich was gelernt!!

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        992
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        3
                        11
                        361
                        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