Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Berechnung der abs. Luftfeuchte - komisches Verhalten

    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

    Berechnung der abs. Luftfeuchte - komisches Verhalten

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

      Guten Morgen zusammen

      Ich benötige eure Hilfe, denn ich komme nicht mehr weiter. Bevor ich zu meinem Problem komme, erst einmal der Ist-Zustand und eine kurze Erläuterung dazu.

      Ich habe bis vor zwei Wochen den Accuweather Adapter verwendet, um die Wetterdaten und eine Berechnung der absoluten Luftfeuchte in meiner Lovelace UI anzeigen zu lassen. Da die Anzeige der Accuweather Daten im Lovelace nicht einwandfrei funktionierte, bin ich nun auf den Adapter DasWetter umgestiegen. Mit diesem klappt die Wetteranzeige im Lovelace einwandfrei, aber die Berechnung der absoluten Luftfeuchte klappt aus irgendeinem Grund nicht vernünftig.

      Für diese Berechnung habe ich folgenden Code verwendet:

      on({id: new RegExp('daswetter.0.NextHours.Location_1.Day_1.current.temp_value' + "|" + 'daswetter.0.NextHours.Location_1.Day_1.current.humidity_value'), change: "ne"}, function (obj) {
          setStateDelayed("javascript.0.Luftfeuchtigkeit.OutdoorAbsoluteHumidity", Math.round(((6.112 * Math.pow(Math.E, ((17.67 * getState("daswetter.0.NextHours.Location_1.Day_1.current.temp_value").val) / (getState("daswetter.0.NextHours.Location_1.Day_1.current.temp_value").val + 243.5))) * getState("daswetter.0.NextHours.Location_1.Day_1.current.humidity_value").val * 2.1674)) / (273.15 + getState("daswetter.0.NextHours.Location_1.Day_1.current.temp_value").val) * 100) / 100, 5000, false);
      });
      

      Jedoch wurde dann die Variable "javascript.0.Luftfeuchtigkeit.OutdoorAbsoluteHumidity" mit einem unplausiblen Wert beschrieben. Ich habe dann rum gerätselt, was es sein könnte und am Ende kann es nur sein, dass die an die BErechnung übergebenen Werte nicht richtig sind.

      175470c9-31fb-4df4-a0a6-6f0880e6986a-image.png
      73b36c38-fe99-4971-b365-4481b1982dd4-image.png
      Wie man sehen kann, steht der Wert der Variable auf 3,45g/m³ und die Ausgangswerte von DasWetter auf 70% bzw. 20°C. Wenn ich mit diesem Wert auf jeweils einen der Ausgangswerte zurück rechne, kommt folgendes raus.
      cb2c78ac-48a8-4e8a-8b0e-1e32972c2c6c-image.png
      Bei dieser Rechnung wurde 3,45g/m³ und 20°C eingegeben und es würde eine rel. Luftfeuchte von 20% raus kommen, was unrealistisch ist.

      Ich habe dann die Werte von DasWetter mal mit einem 5 Sekunden Delay in eine neue Variable geschrieben (siehe Code unten), aber das Problem bleibt das gleich. Wobei ich nicht weiß, wann das verzögerte schreiben einer Variable den Wert ermittelt... direkt beim ausführen des Befehls oder erst nachdem das Delay abgelaufen ist?!?

      Kurios wird es aber, wenn ich die Variable "javascript.0.Luftfeuchtigkeit.OutdoorTemperature" erneut auf die Temperatur schreibe (in diesem Fall steht vorher 20 drin und ich setze noch einmal die 20), wird die Berechnung sauber durchgeführt. Wenn ich das ganze mit der rel. Luftfeuchte mache, bleibt alles beim alten. Also ist irgendetwas mit dem Wert der Temperatur im argen.
      e72f7765-2f19-476f-9001-79ce59f320ee-image.png

      Aber hier nun der Code den ich aktuell im ioBroker drin habe. Vielleicht erkennt ja jemand das Problem und kann mir helfen.

      createState(`javascript.0.Luftfeuchtigkeit.OutdoorAbsoluteHumidity`, { name: `Absolute Luftfeuchtigkeit`, type: `number`, read: true, write: false, unit: `g/m³` });
      createState(`javascript.0.Luftfeuchtigkeit.OutdoorTemperature`, { name: `Temperatur Außen`, type: `number`, read: true, write: true, default: `0`, min: `-30`, max: `40` });
      createState(`javascript.0.Luftfeuchtigkeit.OutdoorRelativeHumidity`, { name: `Rel. Luftfeuchte Außen`, type: `number`, read: true, write: true, default: `0`, min: `1`, max: `100` });
      on({id: new RegExp('daswetter.0.NextHours.Location_1.Day_1.current.humidity_value' + "|" + 'daswetter.0.NextHours.Location_1.Day_1.current.temp_value'), change: "ne"}, function (obj) {
          setStateDelayed("javascript.0.Luftfeuchtigkeit.OutdoorTemperature", getState("daswetter.0.NextHours.Location_1.Day_1.current.temp_value").val, 5000, false);
          setStateDelayed("javascript.0.Luftfeuchtigkeit.OutdoorRelativeHumidity", getState("daswetter.0.NextHours.Location_1.Day_1.current.humidity_value").val, 5000, false);
      });
      on({id: new RegExp('javascript.0.Luftfeuchtigkeit.OutdoorTemperature' + "|" + 'javascript.0.Luftfeuchtigkeit.OutdoorRelativeHumidity'), change: "ne"}, function (obj) {
          setStateDelayed("javascript.0.Luftfeuchtigkeit.OutdoorAbsoluteHumidity", Math.round(((6.112 * Math.pow(Math.E, ((17.67 * getState("javascript.0.Luftfeuchtigkeit.OutdoorTemperature").val) / (getState("javascript.0.Luftfeuchtigkeit.OutdoorTemperature").val + 243.5))) * getState("javascript.0.Luftfeuchtigkeit.OutdoorRelativeHumidity").val * 2.1674)) / (273.15 + getState("javascript.0.Luftfeuchtigkeit.OutdoorTemperature").val) * 100) / 100, 5000, false);
      });
      

      Und wie gesagt... mit dem ersten Code (lediglich die Variablen von Accuweather), hat die Berechnung einwandfrei funktioniert.

      Gruß aus dem Rheinland.
      Tobi

      Homoran 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @dontobi last edited by Homoran

        @dontobi sagte in Berechnung der abs. Luftfeuchte - komisches Verhalten:

        Bei dieser Rechnung wurde 3,45g/m³ und 20°C eingegeben und es würde eine rel. Luftfeuchte von 20% raus kommen, was unrealistisch ist.

        Ist es nicht.
        3,45g sind unrealistisch.

        Ich kann mich nicht erinnern, das es jemals unter 7g war und höchstens bei 17g.
        Screenshot_20200802-082947_Chrome.jpg

        dontobi Basti97 2 Replies Last reply Reply Quote 0
        • dontobi
          dontobi @Homoran last edited by

          @Homoran Danke für die Antwort. Aber mir ist klar, dass 3,45 unrealistisch ist. Deshalb sind ja auch die 20% unrealistisch. Richtig wäre die Angabe im unteren Bild (nachdem ich die 20 neu eingegeben habe).

          Jey Cee 1 Reply Last reply Reply Quote 0
          • Jey Cee
            Jey Cee Developer @dontobi last edited by Jey Cee

            @dontobi die Lösung ist ganz einfach: Die 20 sind keine Zahl sondern ein String.
            Das ist ein Fehler im Adapter.
            Du kannst dem entgegen wirken in dem du mit parseInt() den String in eine Zahl umwandelst.

            Edit: Ich hab dazu ein issue aufgemacht.

            1 Reply Last reply Reply Quote 0
            • Basti97
              Basti97 Most Active @Homoran last edited by

              @Homoran Wie machst du das mit den Pfeilen bezüglich Steigung oder Fallen der Temperaturwertes. Muss man bei dem Pfeil nur den Temperatur Datenpunkt angeben. Oder braucht man für die Auswertung. Ob dieser gestiegen (winkel des Pfeiles) ist ein zweiten Datenpunkt.

              Homoran 1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators @Basti97 last edited by

                @Basti97 das sind Widgets mit "indicator"
                Die sind aber nur korrekt, wenn der View offen bleibt.

                Basti97 1 Reply Last reply Reply Quote 0
                • Basti97
                  Basti97 Most Active @Homoran last edited by

                  @Homoran Aso Danke👍

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  726
                  Online

                  31.9k
                  Users

                  80.2k
                  Topics

                  1.3m
                  Posts

                  4
                  7
                  778
                  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