Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] gefühlte Temperatur

    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

    [gelöst] gefühlte Temperatur

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      Peter666666 last edited by Peter666666

      Hallo Leute,

      Ich möchte gerne in Vis die gefühlte Temperatur darstellen wozu ich die Außentemperatur & Windgeschwindigkeit von Netatmo habe. Habe mir aus dem Netz ein Skript kopiert und so gut ich wusste meine ID`s eingetragen und die Formel geändert. Wenn ich nun das Skript starte wird mir aber kein Wert in die Userdata geschrieben. Was fehlt mir da noch damit mir der Wert berechnet wird? Bin leider blutiger Anfänger in JS.

      ****function Start() {
      Berechne();
      }function gefühlteTemperatur(temp, wind){
      var t =temp
      var v = wind
      var w = 13.12+(0.6215*t)-11.37*v**0.16+0.3965*t*v**0.16;
      
      return w;
      }
      
      function Berechne(){
      var t = parseFloat( getState("netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.02-00-00-90-bd-80.Temperature.Temperature").val);
      var v =parseFloat( getState("netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.06-00-00-06-b3-3a.Wind.WindStrength").val);
      var w = gefühlteTemperatur(t,v);
      setState("0_userdata.0.Hausdaten.gefühlte_Temperatur",w.toFixed(1));
      }
      
      Start();****
      

      LG Peter

      MOD EDIT: Log in Code Tags gesetzt

      wendy2702 paul53 2 Replies Last reply Reply Quote 0
      • wendy2702
        wendy2702 @Peter666666 last edited by

        @peter666666 sagte in gefühlte Temperatur:

        setState("0_userdata.0.Hausdaten.gefühlte_Temperatur",w.toFixed(1));

        Bin auch kein Profi aber gibt es diesen Datenpunkt denn ?

        P 1 Reply Last reply Reply Quote 0
        • P
          Peter666666 @wendy2702 last edited by

          @wendy2702 0_userdata.0.Hausdaten.gefühlte_Temperatur habe ich erstellt.

          wendy2702 1 Reply Last reply Reply Quote 0
          • wendy2702
            wendy2702 @Peter666666 last edited by

            @peter666666 Woher kommen die "****" im Script? Sind die wirklich vorhanden oder hast du die im Thread eingefügt?

            Gib es irgendeine Meldung/Log beim Script aktivieren im Adapter? Ist das Script aktiv? Wie hast du den DP angelegt bzw. was erwartet er? STring, Number, Boolean.... ?

            P 1 Reply Last reply Reply Quote 0
            • P
              Peter666666 @wendy2702 last edited by Peter666666

              @wendy2702 **** sind im original nicht vorhanden.

              2023-01-23 12_45_02-javascript - e73f64821262.png

              2023-01-23 12_51_37-objects - e73f64821262.png

              DP sind von dem Netatmo Adapter und stehen als State zur Verfügung wenn ich das richtig verstehe.

              Codierknecht wendy2702 2 Replies Last reply Reply Quote 0
              • Codierknecht
                Codierknecht Developer Most Active @Peter666666 last edited by

                @peter666666 sagte in gefühlte Temperatur:

                **** sind im original nicht vorhanden.

                Doch:
                512752cc-b1ac-4b1f-a8d7-ac09038f4c4d-image.png
                Doppelte Multiplikation wird nicht funktionieren.
                Ob der Rest der Formel stimmt, kann ich nicht beurteilen. Multiplikationen muss man eigentlich nicht klammern - es gilt auch in JS: Punkt- vor Strichrechnung.

                Rücke den Code mal sauber ein - macht das Lesen deutlich einfacher.

                P paul53 2 Replies Last reply Reply Quote 0
                • P
                  Peter666666 @Codierknecht last edited by Peter666666

                  @codierknecht sagte in gefühlte Temperatur:

                  @peter666666 sagte in gefühlte Temperatur:

                  **** sind im original nicht vorhanden.

                  Doch:
                  512752cc-b1ac-4b1f-a8d7-ac09038f4c4d-image.png
                  Doppelte Multiplikation wird nicht funktionieren.
                  Ob der Rest der Formel stimmt, kann ich nicht beurteilen. Multiplikationen muss man eigentlich nicht klammern - es gilt auch in JS: Punkt- vor Strichrechnung.

                  Rücke den Code mal sauber ein - macht das Lesen deutlich einfacher.

                  achso du meinst die doppelten ** . Lt. Netz schreibt man das so wenn ich Potenz rechnen will oder ist das falsch? (V hoch 0,16). Formel ist so im Original: W = 13,12 + 0,6215 x T – 11,37 x V0,16 + 0,3965 x T x V0,16

                  1 Reply Last reply Reply Quote 0
                  • wendy2702
                    wendy2702 @Peter666666 last edited by

                    @peter666666 was mir noch fehlt, als laie, ist ein trigger um die Berechnung zu starten.

                    Da müsste wahrscheinlich zumindest ein Schedule rein

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

                      @codierknecht sagte: Doppelte Multiplikation wird nicht funktionieren.

                      Das ist ein Exponent.

                      Codierknecht 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Peter666666 last edited by

                        @peter666666 sagte: w.toFixed(1)

                        .toFixed(1) macht aus der Zahl einen String! Eine Zahl rundet man so auf eine Nachkommastelle:

                        Math.round(w * 10) / 10
                        
                        1 Reply Last reply Reply Quote 1
                        • Codierknecht
                          Codierknecht Developer Most Active @paul53 last edited by

                          @paul53
                          Sieht aber äußerst strange aus.
                          Aber Du bist der Fachmann - ich gebe zu: Ich lerne noch.

                          Ich finde das hier durchaus besser lesbar:

                          13.12 + (0.6215 * temp) - Math.pow((11.37 * wind), 0.16) + Math.pow((0.3965 * temp * wind), 0.16)
                          
                          1 Reply Last reply Reply Quote 0
                          • P
                            Peter666666 last edited by

                            Was ist noch falsch?

                            function Start() {
                            Berechne();
                            }function gefühlteTemperatur(temp, wind){
                            var t =temp
                            var v = wind
                            var w = 13.12+(0.6215*t)-11.37*v**0.16+0.3965*t*v**0.16;
                            
                            return w;
                            }
                            
                            function Berechne(){
                            var t = parseFloat( getState("netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.02-00-00-90-bd-80.Temperature.Temperature").val);
                            var v =parseFloat( getState("netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.06-00-00-06-b3-3a.Wind.WindStrength").val);
                            var w = gefühlteTemperatur(t,v);
                            setState("0_userdata.0.Hausdaten.gefühlte_Temperatur",Math.round(w * 10) / 10);
                            }
                            
                            schedule("*/5 * * * *",function(){
                            
                            Start();
                            
                            });
                            
                            Codierknecht 1 Reply Last reply Reply Quote 0
                            • Codierknecht
                              Codierknecht Developer Most Active @Peter666666 last edited by Codierknecht

                              @peter666666
                              Vorschlag:

                              function windchill(temp, wind) {
                                  return 13.12 + 0.6215 * temp + (0.3965 * temp - 11.37) * Math.pow(wind, 0.16);
                              }
                              
                              on({id: [].concat(['netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.02-00-00-90-bd-80.Temperature.Temperature'])
                                        .concat(['netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.06-00-00-06-b3-3a.Wind.WindStrength']), change: "ne"}, async function (obj) {
                                  var temp = parseFloat(getState("netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.02-00-00-90-bd-80.Temperature.Temperature").val);
                                  var wind = parseFloat(getState("netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.06-00-00-06-b3-3a.Wind.WindStrength").val);
                                  setState("0_userdata.0.Hausdaten.gefühlte_Temperatur", Math.round(windchill(temp, wind) * 10) / 10, true);
                              });
                              

                              Vielleicht hat @paul53 ja einen besseren 😉

                              P.S.: Ich würde grundsätzlich auf Umlaute verzichten. Sowohl in JS als auch bei den ID's der Datenpunkte.

                              Edit: Formel korrigiert (Quelle: https://de.wikipedia.org/wiki/Windchill)

                              paul53 P 2 Replies Last reply Reply Quote 1
                              • paul53
                                paul53 @Codierknecht last edited by paul53

                                @codierknecht sagte: Ich würde grundsätzlich auf Umlaute verzichten. Sowohl in JS als aich bei den ID's der Datenpunkte.

                                Ich auch.

                                In der Berechnung würde ich den Exponenten nur einmal verwenden:

                                return 13.12 + 0.6215 * t + (0.3965 * t - 11.37) * Math.pow(v, 0.16);
                                

                                oder

                                return 13.12 + 0.6215 * t + (0.3965 * t - 11.37) * v ** 0.16;
                                

                                @Codierknecht Du wirst feststellen, dass Deine Formel anders aussieht.

                                Codierknecht paul53 2 Replies Last reply Reply Quote 1
                                • P
                                  Peter666666 @Codierknecht last edited by Peter666666

                                  @codierknecht danke. Habe die Umlaute entfernt und habe das Skript kopiert & mal gestartet - Keine Fehlermeldung aber "0_userdata.0.Hausdaten.gefühlte_Temperatur" noch leer. Mal schauen ob in ein paar Minuten ein Wert unter "0_userdata.0.Hausdaten.gefuehlte_Temperatur" steht.

                                  Codierknecht 1 Reply Last reply Reply Quote 0
                                  • Codierknecht
                                    Codierknecht Developer Most Active @Peter666666 last edited by

                                    @peter666666 sagte in gefühlte Temperatur:

                                    @codierknecht danke. Habe die Umlaute entfernt und habe das Skript mal gestartet - Keine Fehlermeldung aber "0_userdata.0.Hausdaten.gefühlte_Temperatur" noch leer. Mal schauen ob in ein paar Minuten ein Wert unter "0_userdata.0.Hausdaten.gefuehlte_Temperatur" steht.

                                    Da sollte etwas stehen, sobald sich einer der beiden Eingangswerte ändert.

                                    P 2 Replies Last reply Reply Quote 1
                                    • P
                                      Peter666666 @Codierknecht last edited by

                                      @codierknecht danke, werde berichten. Leider schmiert der Fernzugriff über die Cloud immer ab wegen zu vieler Anfragen oder so. Jetzt muss ich immer 5 Minuten warten bevor ich mich wieder verbinden kann. Den Fehler muss ich erst Googlen.

                                      JohGre 1 Reply Last reply Reply Quote 0
                                      • Codierknecht
                                        Codierknecht Developer Most Active @paul53 last edited by

                                        @paul53 sagte in gefühlte Temperatur:

                                        Du wirst feststellen, dass Deine Formel anders aussieht.

                                        Solange das Ergebnis stimmt, soll's mir persönlich Wurscht sein.
                                        Ich bin noch dabei herauszufinden, wie und wo Du da gekürzt hast. Mathematik dieser Kategorie hatte ich zuletzt vor vielleicht 30 Jahren - das fluppt nicht mehr so gut 😁

                                        1 Reply Last reply Reply Quote 0
                                        • JohGre
                                          JohGre last edited by JohGre

                                          @peter666666 Hi bei mir funktioniert deine Methode. Der einzige Unterschied den ich zwischen mir und dir entdecken kann sind die doppelten Hochkommas bei der Stateauswahl. Probier's mal mit einfachen Singleticks.

                                          function Start() {
                                          Berechne();
                                          }
                                          
                                          function GefuehlteTemperatur(temp, wind){
                                              var t =temp
                                              var v = wind
                                              var w = 13.12+(0.6215*t)-11.37*v**0.16+0.3965*t*v**0.16;
                                              return w;
                                          }
                                          
                                          function Berechne(){
                                              var t = parseFloat( getState('netatmo.0.xxx.70-ee-50-03-da-44.02-00-00-03-d7-bc.Temperature.Temperature'/*Temperature*/).val);
                                              var v =parseFloat( getState('netatmo.0.xxxc.70-ee-50-03-da-44.06-00-00-00-1e-82.Wind.WindStrength'/*Wind strength*/).val);
                                              var w = GefuehlteTemperatur(t,v);
                                              log('Gefühlte Temperatur: ' + Math.round(w * 10) / 10 + ' °C');
                                          }
                                          
                                          Start();
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • JohGre
                                            JohGre @Peter666666 last edited by

                                            @peter666666 Versteh ich nicht, der Adapter kriegt doch die Daten geliefert, ich glaub so alle 10 Minuten. Das sollte dann so funktionieren wie @Codierknecht es vorgeschlagen hat.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            465
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            45
                                            1416
                                            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