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. Node-Red Javascript Node - Berechnung ungewünscht doppelt

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.6k

Node-Red Javascript Node - Berechnung ungewünscht doppelt

Scheduled Pinned Locked Moved Skripten / Logik
node-redjavascript
15 Posts 3 Posters 1.8k Views 5 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.
  • L Offline
    L Offline
    lemuba
    wrote on last edited by lemuba
    #1

    Moin Moin Allerseits,

    ich versuche hier gerade Schritt für Schritt in Javascript reinzukommen und habe aktuell ein kleines Problem/Frage:

    Taupunkt.JPG

    Der Funktionsnode "Taupunkt" erhält im Eingang seine beiden Werte Temperatur und Lufteuchtigkeit und berechnet dann im Ausgang den aktuellen Taupunkt. Die Werte Temperatur und Luftfeuchtigkeit kommen ca. alle 60 Sekunden rein und werden vorher erstmal weiterverarbeitet - z.B. String nach Zahl und Fahrenheit nach °C.

    Dadurch scheint der Node Taupunkt die Werte zeitversetzt zu erhalten und triggert die Berechnung zwei mal. Im schlimmsten Falle auch mit der Ausgabe "not a number"...

    Wie kann ich das abfangen?

    JS Taupunkt Funktionsnode:

    Taupunkt.txt


    if (msg.topic === "tempf") {
    context.set('tempf',msg.payload);
    } else if (msg.topic === "humidity") {
    context.set('humidity',msg.payload);
    }

    var tempf = context.get('tempf');
    var humidity = context.get('humidity');

    // Quelle: https://www.chemie-schule.de/KnowHow/Taupunkt
    // Gültigkeitsbereich Taupunkt: -30°C <= tmp <= 70°C
    var tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
    tp = Math.round( tp * 100 ) / 100;
    flow.set("flowtp",tp);
    msg.payload = tp;
    msg.topic = "Taupunkt";
    return msg;

    Anbei ansonsten auch nochmal der komplette Wetterstation Node-Red Flow:

    flows(3).json

    Wäre da über jeden Tip dankbar... :-)

    R 1 Reply Last reply
    0
    • L lemuba

      Moin Moin Allerseits,

      ich versuche hier gerade Schritt für Schritt in Javascript reinzukommen und habe aktuell ein kleines Problem/Frage:

      Taupunkt.JPG

      Der Funktionsnode "Taupunkt" erhält im Eingang seine beiden Werte Temperatur und Lufteuchtigkeit und berechnet dann im Ausgang den aktuellen Taupunkt. Die Werte Temperatur und Luftfeuchtigkeit kommen ca. alle 60 Sekunden rein und werden vorher erstmal weiterverarbeitet - z.B. String nach Zahl und Fahrenheit nach °C.

      Dadurch scheint der Node Taupunkt die Werte zeitversetzt zu erhalten und triggert die Berechnung zwei mal. Im schlimmsten Falle auch mit der Ausgabe "not a number"...

      Wie kann ich das abfangen?

      JS Taupunkt Funktionsnode:

      Taupunkt.txt


      if (msg.topic === "tempf") {
      context.set('tempf',msg.payload);
      } else if (msg.topic === "humidity") {
      context.set('humidity',msg.payload);
      }

      var tempf = context.get('tempf');
      var humidity = context.get('humidity');

      // Quelle: https://www.chemie-schule.de/KnowHow/Taupunkt
      // Gültigkeitsbereich Taupunkt: -30°C <= tmp <= 70°C
      var tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
      tp = Math.round( tp * 100 ) / 100;
      flow.set("flowtp",tp);
      msg.payload = tp;
      msg.topic = "Taupunkt";
      return msg;

      Anbei ansonsten auch nochmal der komplette Wetterstation Node-Red Flow:

      flows(3).json

      Wäre da über jeden Tip dankbar... :-)

      R Offline
      R Offline
      rewenode
      wrote on last edited by
      #2

      @lemuba Ohne jetzt durch deinen kompletten Flow zu steigen. Der "Taupunkt" wird ja auch 2 mal getriggert. Einmal vom Subflow3(temperatur) und einmal vom Subflow6(feuchte).
      Statt dessen solltest du an den Taupunkt ein Objekt übergeben, welches sowohl die termeratur als auch die feuchte beinhaltet.
      Das könntest du leicht, wenn du den Input von "Taupunkt" direkt vom Output "Listen to GW1000 in Ecowitt Mode" abgreifst und Temp/Hum in "Taupunkt" extrahierst.

      L 1 Reply Last reply
      1
      • R rewenode

        @lemuba Ohne jetzt durch deinen kompletten Flow zu steigen. Der "Taupunkt" wird ja auch 2 mal getriggert. Einmal vom Subflow3(temperatur) und einmal vom Subflow6(feuchte).
        Statt dessen solltest du an den Taupunkt ein Objekt übergeben, welches sowohl die termeratur als auch die feuchte beinhaltet.
        Das könntest du leicht, wenn du den Input von "Taupunkt" direkt vom Output "Listen to GW1000 in Ecowitt Mode" abgreifst und Temp/Hum in "Taupunkt" extrahierst.

        L Offline
        L Offline
        lemuba
        wrote on last edited by lemuba
        #3

        @rewenode

        Mit Leicht ist noch nicht als Anfänger... :-)
        habe noch keine Ahnung wie ich das Alles in eine Function reinbekomme und gleichzeitig berechne...
        Aber der Ansatz ist natürlich sicherlich gut und sinnvoll...

        Lieber wäre mir aber, auch um es für Anfänger wie mich bei einer möglichen Erweiterung um weitere Sensoren einfacher zu halten: Lieber mehr Einzelnodes mit einfachen Funktionen in Reihe, wie einen Großen...

        1 Reply Last reply
        0
        • mickymM Online
          mickymM Online
          mickym
          Most Active
          wrote on last edited by mickym
          #4

          Ja Dein Problem wurde letztlich von @rewenode richtig beschrieben. Du triggerst Deine Funktion immer mehrfach mit jedem Input. Du führst beide Werte über den Funktionsnode zusammen, indem Du es über den Context speicherst. Den Taupunkt speicherst Du in einer Flow-Variablen - was unnötig ist.

          aber Du musst eigentlich in Deiner Funktion gar nicht soviel ändern:

          Speichere den Taupunkt doch einfach auch in einer Kontextvariable (eine FlowVariable erschliesst sich mir hier nicht) und sende nur, wenn sich was ändert bzw. der Wert valide ist.

          Ich habe Deinen Code mal ergänzt, so müsste es einigermaßen funktionieren:

          var tempf   = context.get('tempf')|| 0;
          var humidity = context.get('humidity')|| 0;
          var oldTp = context.get('contexttp') || 0;
          var tp = 0;
          
          if (msg.topic === "tempf") {
              tempf= msg.payload;
              context.set('tempf',msg.payload);
          
          } else if (msg.topic === "humidity") {
              humidity= msg.payload;
            context.set('humidity',msg.payload);
          }
          
            
          
          // Quelle: https://www.chemie-schule.de/KnowHow/Taupunkt
          // Gültigkeitsbereich Taupunkt:    -30°C <= tmp <= 70°C
          if (tempf >0 && humidity > 0 ) {
          	tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
          	tp = Math.round( tp * 100 ) / 100;
          	context.set("contexttp",tp);
          }
          
          if (oldTp !== tp) { 
          msg.payload = tp;
          msg.topic = "Taupunkt";
          return msg }
          else {
              return null;
          }
          
          

          Somit wird nur gesendet, wenn sich Taupunkt verändert hat - bzw. gültig ist. Ggf. halt noch NaN abfangen und die Funktion mit "return null" verlassen!

          Wenn die Bedingung nicht zutrifft - sendet Dein Funktionsnode einfach nichts und die eingehenden Nachrichten befüllen nur die internen Variablen, bis ein Ergebnis da ist.

          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

          L 1 Reply Last reply
          1
          • mickymM Online
            mickymM Online
            mickym
            Most Active
            wrote on last edited by
            #5

            Ich hab den Code nochmal leicht editiert!

            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

            1 Reply Last reply
            0
            • mickymM mickym

              Ja Dein Problem wurde letztlich von @rewenode richtig beschrieben. Du triggerst Deine Funktion immer mehrfach mit jedem Input. Du führst beide Werte über den Funktionsnode zusammen, indem Du es über den Context speicherst. Den Taupunkt speicherst Du in einer Flow-Variablen - was unnötig ist.

              aber Du musst eigentlich in Deiner Funktion gar nicht soviel ändern:

              Speichere den Taupunkt doch einfach auch in einer Kontextvariable (eine FlowVariable erschliesst sich mir hier nicht) und sende nur, wenn sich was ändert bzw. der Wert valide ist.

              Ich habe Deinen Code mal ergänzt, so müsste es einigermaßen funktionieren:

              var tempf   = context.get('tempf')|| 0;
              var humidity = context.get('humidity')|| 0;
              var oldTp = context.get('contexttp') || 0;
              var tp = 0;
              
              if (msg.topic === "tempf") {
                  tempf= msg.payload;
                  context.set('tempf',msg.payload);
              
              } else if (msg.topic === "humidity") {
                  humidity= msg.payload;
                context.set('humidity',msg.payload);
              }
              
                
              
              // Quelle: https://www.chemie-schule.de/KnowHow/Taupunkt
              // Gültigkeitsbereich Taupunkt:    -30°C <= tmp <= 70°C
              if (tempf >0 && humidity > 0 ) {
              	tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
              	tp = Math.round( tp * 100 ) / 100;
              	context.set("contexttp",tp);
              }
              
              if (oldTp !== tp) { 
              msg.payload = tp;
              msg.topic = "Taupunkt";
              return msg }
              else {
                  return null;
              }
              
              

              Somit wird nur gesendet, wenn sich Taupunkt verändert hat - bzw. gültig ist. Ggf. halt noch NaN abfangen und die Funktion mit "return null" verlassen!

              Wenn die Bedingung nicht zutrifft - sendet Dein Funktionsnode einfach nichts und die eingehenden Nachrichten befüllen nur die internen Variablen, bis ein Ergebnis da ist.

              L Offline
              L Offline
              lemuba
              wrote on last edited by
              #6

              @mickym

              Vielen Dank erstmal - das muss noch ein kleiner Fehler im Script sein...?

              13.5.2020, 15:48:05node: Taupunktfunction : (error)
              "ReferenceError: oldTP is not defined (line 22, col 1)"

              Line 22:

              if (oldTP !== tp) {

              mickymM 1 Reply Last reply
              0
              • L lemuba

                @mickym

                Vielen Dank erstmal - das muss noch ein kleiner Fehler im Script sein...?

                13.5.2020, 15:48:05node: Taupunktfunction : (error)
                "ReferenceError: oldTP is not defined (line 22, col 1)"

                Line 22:

                if (oldTP !== tp) {

                mickymM Online
                mickymM Online
                mickym
                Most Active
                wrote on last edited by mickym
                #7

                @lemuba Ja ich habe nochmal geändert. War ein großes P anstelle eines kleinen und aussßerdem darfst die Variablen nur mit richtigem Topic setzen. Kopier nochmal alles aus der Box.

                Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                L 1 Reply Last reply
                0
                • mickymM mickym

                  @lemuba Ja ich habe nochmal geändert. War ein großes P anstelle eines kleinen und aussßerdem darfst die Variablen nur mit richtigem Topic setzen. Kopier nochmal alles aus der Box.

                  L Offline
                  L Offline
                  lemuba
                  wrote on last edited by
                  #8

                  @mickym

                  Top - funktioniert!:

                  13.5.2020, 16:01:28node: 81594f23.375458
                  Taupunkt : msg.payload : number
                  6.09

                  Das kann ich nun sicherlich als Grundlage nehmen um auch weitere Berechnungen durchzuführen/zu optimieren, wie z.B. Windchill:


                  //Source: https://homematic-forum.de/forum/viewtopic.php?t=50821
                  if (msg.topic === "windspeed") {
                  context.set('wind',msg.payload);
                  } else if (msg.topic === "tempf") {
                  context.set('temp',msg.payload);
                  } else if (msg.topic === "humidity") {
                  context.set('feucht',msg.payload);
                  }

                  var wind = context.get('wind');
                  var temp = context.get('temp');
                  var feucht = context.get('feucht');

                  if (typeof wind === 'undefined' || typeof temp === 'undefined' || typeof feucht === 'undefined') {
                  node.status({text:"null"});
                  return null;
                  }

                  msg.topic = "0/CurrentTemperature"

                  if (temp !== null) {
                  if (temp < 27) {
                  if (wind >= 5) {
                  msg.payload = 13.12 + (0.6215 * temp) + ((0.3965 * temp) - 11.37) * Math.pow(wind, 0.16);
                  } else {
                  msg.payload = temp;
                  }
                  } else {
                  msg.payload = -8.785 + (1.611 * TEMP) + (2.339 * FEUCHT) + (-0.146 * TEMP * FEUCHT) + (-0.01231 * Math.pow(TEMP,2)) + (-0.01642 * Math.pow(FEUCHT,2)) + (0.002212 * Math.pow(TEMP,2) * FEUCHT) + (0.0007255 * TEMP * Math.pow(FEUCHT,2)) + (-0.000003582 * Math.pow(TEMP,2) * Math.pow(FEUCHT,2));
                  }
                  } else {
                  node.status({text:"Ebenfalls null"});
                  return null;
                  }

                  var aktuelleWerte = "Temp: " + temp + ", Wind: " + wind + ", Feucht: " + feucht + ", Ergebnis: " + msg.payload;

                  node.status({text:aktuelleWerte});

                  return msg;

                  L 1 Reply Last reply
                  0
                  • L lemuba

                    @mickym

                    Top - funktioniert!:

                    13.5.2020, 16:01:28node: 81594f23.375458
                    Taupunkt : msg.payload : number
                    6.09

                    Das kann ich nun sicherlich als Grundlage nehmen um auch weitere Berechnungen durchzuführen/zu optimieren, wie z.B. Windchill:


                    //Source: https://homematic-forum.de/forum/viewtopic.php?t=50821
                    if (msg.topic === "windspeed") {
                    context.set('wind',msg.payload);
                    } else if (msg.topic === "tempf") {
                    context.set('temp',msg.payload);
                    } else if (msg.topic === "humidity") {
                    context.set('feucht',msg.payload);
                    }

                    var wind = context.get('wind');
                    var temp = context.get('temp');
                    var feucht = context.get('feucht');

                    if (typeof wind === 'undefined' || typeof temp === 'undefined' || typeof feucht === 'undefined') {
                    node.status({text:"null"});
                    return null;
                    }

                    msg.topic = "0/CurrentTemperature"

                    if (temp !== null) {
                    if (temp < 27) {
                    if (wind >= 5) {
                    msg.payload = 13.12 + (0.6215 * temp) + ((0.3965 * temp) - 11.37) * Math.pow(wind, 0.16);
                    } else {
                    msg.payload = temp;
                    }
                    } else {
                    msg.payload = -8.785 + (1.611 * TEMP) + (2.339 * FEUCHT) + (-0.146 * TEMP * FEUCHT) + (-0.01231 * Math.pow(TEMP,2)) + (-0.01642 * Math.pow(FEUCHT,2)) + (0.002212 * Math.pow(TEMP,2) * FEUCHT) + (0.0007255 * TEMP * Math.pow(FEUCHT,2)) + (-0.000003582 * Math.pow(TEMP,2) * Math.pow(FEUCHT,2));
                    }
                    } else {
                    node.status({text:"Ebenfalls null"});
                    return null;
                    }

                    var aktuelleWerte = "Temp: " + temp + ", Wind: " + wind + ", Feucht: " + feucht + ", Ergebnis: " + msg.payload;

                    node.status({text:aktuelleWerte});

                    return msg;

                    L Offline
                    L Offline
                    lemuba
                    wrote on last edited by lemuba
                    #9

                    @mickym

                    Noch eine Frage - bedeutet das jetzt aber, daß der Taupunkt nur bei Temperaturen über 0 Grad berechnet wird?

                    if (tempf >0 && humidity > 0 ) {
                    tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
                    tp = Math.round( tp * 100 ) / 100;
                    context.set("contexttp",tp);
                    }

                    mickymM 1 Reply Last reply
                    0
                    • L lemuba

                      @mickym

                      Noch eine Frage - bedeutet das jetzt aber, daß der Taupunkt nur bei Temperaturen über 0 Grad berechnet wird?

                      if (tempf >0 && humidity > 0 ) {
                      tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
                      tp = Math.round( tp * 100 ) / 100;
                      context.set("contexttp",tp);
                      }

                      mickymM Online
                      mickymM Online
                      mickym
                      Most Active
                      wrote on last edited by
                      #10

                      @lemuba Ja da hast Du Recht - letztlich diente die Bedingung nur dazu, zu überprüfen ob alles initialisiert ist. Entweder Du fängst das ab mit != NaN oder Du nimmst einfach einen anderen Wert.
                      Du kannst ja die Temperatur mit -100 initialisieren und dann in der Abfrage > -100 arbeiten. ;)

                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                      L 1 Reply Last reply
                      1
                      • mickymM mickym

                        @lemuba Ja da hast Du Recht - letztlich diente die Bedingung nur dazu, zu überprüfen ob alles initialisiert ist. Entweder Du fängst das ab mit != NaN oder Du nimmst einfach einen anderen Wert.
                        Du kannst ja die Temperatur mit -100 initialisieren und dann in der Abfrage > -100 arbeiten. ;)

                        L Offline
                        L Offline
                        lemuba
                        wrote on last edited by lemuba
                        #11

                        @mickym

                        Ok, bin aber gerade am schauen ob eine Taupunktberechnung unter Null Grad überhaupt relevant ist - ein anderes, dann metrolgisches Thema... :-)

                        1 Reply Last reply
                        0
                        • mickymM Online
                          mickymM Online
                          mickym
                          Most Active
                          wrote on last edited by mickym
                          #12

                          if (!(isNaN(tempf) || isNaN(humidity))) { ...

                          müsste eigentlich auch funktionieren als Bedingung

                          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                          L 1 Reply Last reply
                          0
                          • mickymM mickym

                            if (!(isNaN(tempf) || isNaN(humidity))) { ...

                            müsste eigentlich auch funktionieren als Bedingung

                            L Offline
                            L Offline
                            lemuba
                            wrote on last edited by
                            #13

                            @mickym sagte in Node-Red Javascript Node - Berechnung ungewünscht doppelt:

                            !(isNaN(tempf) || isNaN(humidity))

                            Ich habe nun die -100 Variante eingebaut, weil die habe ich glaube ich verstanden... und funktioniert so weit:


                            var tempf = context.get('tempf')|| -100;
                            var humidity = context.get('humidity')|| -100;
                            var oldTp = context.get('contexttp') || -100;
                            var tp = -100;

                            if (msg.topic === "tempf") {
                            tempf= msg.payload;
                            context.set('tempf',msg.payload);

                            } else if (msg.topic === "humidity") {
                            humidity= msg.payload;
                            context.set('humidity',msg.payload);
                            }

                            // Quelle: https://www.chemie-schule.de/KnowHow/Taupunkt
                            // Gültigkeitsbereich Taupunkt: -30°C <= tmp <= 70°C
                            if (tempf > -100 && humidity > -100 ) {
                            tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
                            tp = Math.round( tp * 100 ) / 100;
                            context.set("contexttp",tp);
                            }

                            if (oldTp !== tp) {
                            msg.payload = tp;
                            msg.topic = "Taupunkt";
                            return msg }
                            else {
                            return null;
                            }

                            Mir war nicht ganz klar wo das reingehört hätte:

                            !(isNaN(tempf) || isNaN(humidity))

                            mickymM 1 Reply Last reply
                            0
                            • L lemuba

                              @mickym sagte in Node-Red Javascript Node - Berechnung ungewünscht doppelt:

                              !(isNaN(tempf) || isNaN(humidity))

                              Ich habe nun die -100 Variante eingebaut, weil die habe ich glaube ich verstanden... und funktioniert so weit:


                              var tempf = context.get('tempf')|| -100;
                              var humidity = context.get('humidity')|| -100;
                              var oldTp = context.get('contexttp') || -100;
                              var tp = -100;

                              if (msg.topic === "tempf") {
                              tempf= msg.payload;
                              context.set('tempf',msg.payload);

                              } else if (msg.topic === "humidity") {
                              humidity= msg.payload;
                              context.set('humidity',msg.payload);
                              }

                              // Quelle: https://www.chemie-schule.de/KnowHow/Taupunkt
                              // Gültigkeitsbereich Taupunkt: -30°C <= tmp <= 70°C
                              if (tempf > -100 && humidity > -100 ) {
                              tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
                              tp = Math.round( tp * 100 ) / 100;
                              context.set("contexttp",tp);
                              }

                              if (oldTp !== tp) {
                              msg.payload = tp;
                              msg.topic = "Taupunkt";
                              return msg }
                              else {
                              return null;
                              }

                              Mir war nicht ganz klar wo das reingehört hätte:

                              !(isNaN(tempf) || isNaN(humidity))

                              mickymM Online
                              mickymM Online
                              mickym
                              Most Active
                              wrote on last edited by
                              #14

                              @lemuba

                              var tempf   = context.get('tempf')|| 0;
                              var humidity = context.get('humidity')|| 0;
                              var oldTp = context.get('contexttp') || 0;
                              var tp = 0;
                              
                              if (msg.topic === "tempf") {
                                  tempf= msg.payload;
                                  context.set('tempf',msg.payload);
                              
                              } else if (msg.topic === "humidity") {
                                  humidity= msg.payload;
                                context.set('humidity',msg.payload);
                              }
                              
                                
                              
                              // Quelle: https://www.chemie-schule.de/KnowHow/Taupunkt
                              // Gültigkeitsbereich Taupunkt:    -30°C <= tmp <= 70°C
                              if (!(isNaN(tempf) || isNaN(humidity))) {
                              	tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
                              	tp = Math.round( tp * 100 ) / 100;
                              	context.set("contexttp",tp);
                              }
                              
                              if (oldTp !== tp) { 
                              msg.payload = tp;
                              msg.topic = "Taupunkt";
                              return msg }
                              else {
                                  return null;
                              }
                              
                              

                              Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                              L 1 Reply Last reply
                              1
                              • mickymM mickym

                                @lemuba

                                var tempf   = context.get('tempf')|| 0;
                                var humidity = context.get('humidity')|| 0;
                                var oldTp = context.get('contexttp') || 0;
                                var tp = 0;
                                
                                if (msg.topic === "tempf") {
                                    tempf= msg.payload;
                                    context.set('tempf',msg.payload);
                                
                                } else if (msg.topic === "humidity") {
                                    humidity= msg.payload;
                                  context.set('humidity',msg.payload);
                                }
                                
                                  
                                
                                // Quelle: https://www.chemie-schule.de/KnowHow/Taupunkt
                                // Gültigkeitsbereich Taupunkt:    -30°C <= tmp <= 70°C
                                if (!(isNaN(tempf) || isNaN(humidity))) {
                                	tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
                                	tp = Math.round( tp * 100 ) / 100;
                                	context.set("contexttp",tp);
                                }
                                
                                if (oldTp !== tp) { 
                                msg.payload = tp;
                                msg.topic = "Taupunkt";
                                return msg }
                                else {
                                    return null;
                                }
                                
                                
                                L Offline
                                L Offline
                                lemuba
                                wrote on last edited by lemuba
                                #15

                                @mickym sagte in Node-Red Javascript Node - Berechnung ungewünscht doppelt:

                                var tempf = context.get('tempf')|| 0;
                                var humidity = context.get('humidity')|| 0;
                                var oldTp = context.get('contexttp') || 0;
                                var tp = 0;

                                if (msg.topic === "tempf") {
                                tempf= msg.payload;
                                context.set('tempf',msg.payload);

                                } else if (msg.topic === "humidity") {
                                humidity= msg.payload;
                                context.set('humidity',msg.payload);
                                }

                                // Quelle: https://www.chemie-schule.de/KnowHow/Taupunkt
                                // Gültigkeitsbereich Taupunkt: -30°C <= tmp <= 70°C
                                if (!(isNaN(tempf) || isNaN(humidity))) {
                                tp = ((241.2 * Math.log(humidity/100)) + ((4222.03716 * tempf) / (241.2 + tempf))) / (17.5043 - Math.log(humidity/100) - ((17.5043*tempf)/(241.2+tempf)));
                                tp = Math.round( tp * 100 ) / 100;
                                context.set("contexttp",tp);
                                }

                                if (oldTp !== tp) {
                                msg.payload = tp;
                                msg.topic = "Taupunkt";
                                return msg }
                                else {
                                return null;
                                }

                                Funktioniert auch... nun habe ich estmal was zum weiterspielen/testen... Vielen Dank erstmal!
                                Den Link/Quelle zu diesem Beitrag werde ich gleich mal im Script notieren....

                                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

                                902

                                Online

                                32.4k

                                Users

                                81.4k

                                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