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] Rechnen mit Datenpunkt --> NaN

    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] Rechnen mit Datenpunkt --> NaN

    This topic has been deleted. Only users with topic management privileges can see it.
    • Lenny.CB
      Lenny.CB Most Active last edited by Lenny.CB

      ich brauche mal einen Tipp.

      bei diesem Teil meines Programmes habe ich etwas Schwierigkeiten meinen Knoten im Kopf zu lösen. Hier soll eine Höhe aus einem DP geholt und ein Volumen errechnet werden. Wo ich das Programm erstellt hatte (ein gutes Jahr her) funktionierte das. Heut wollte ich etwas ändern bekomme für das Volumen nur noch NaN angezeigt. Kann leider nicht sagen seit wann das nicht mehr geht.
      Zum Vergleich hatte ich die "Füllhöhe h2" direkt im Script definiert. Damit wird das Volumen korrekt berechnet.
      Der DP von h1 selbst ist auch auf "Number" gestellt. Hmmm, nun weis ich nicht mehr weiter...

      var r1 = 0.93;
      var L1 = 0.55;
      
      function rechnen () {
      let h1 = getState('mqtt.0.ESP-Zisterne.Füllstand.Füllhöhe').val / 100;  //--> im DP ist zum Testen auf 1.8 eingetragen
      let h2 = 180 / 100;;
      
      //Formel
      let Vh1 = (r1 * (r1 * 2 * Math.acos(1 - h1 / r1)) / 2 - (2 * Math.sqrt(2 * r1 * h1 - Math.pow(h1, 2))) * (r1 - h1) / 2) * L1;
      let Vh2 = (r1 * (r1 * 2 * Math.acos(1 - h2 / r1)) / 2 - (2 * Math.sqrt(2 * r1 * h2 - Math.pow(h2, 2))) * (r1 - h2) / 2) * L1;
      
      log('typeof h1: ' + typeof h1);
      log('typeof h2: ' + typeof h2);
      log('Vh1: ' + Vh1);
      log('Vh2: ' + Vh2);
      }	
      schedule('*/1 * * * *', rechnen);
      rechnen();
      

      Ergebnis:

      javascript.1	2020-05-03 13:20:19.046	info	(1452) script.js.Verbrauch.Zisterne_Test: Vh2: 1.4798840966802418
      javascript.1	2020-05-03 13:20:19.045	info	(1452) script.js.Verbrauch.Zisterne_Test: Vh1: NaN
      javascript.1	2020-05-03 13:20:19.044	info	(1452) script.js.Verbrauch.Zisterne_Test: typeof h2: number
      javascript.1	2020-05-03 13:20:19.043	info	(1452) script.js.Verbrauch.Zisterne_Test: typeof h1: number
      javascript.1	2020-05-03 13:20:18.994	info	(1452) Start javascript script.js.Verbrauch.Zisterne_Test
      

      Mir war so als hätte ich dazu schon einmal was im Forum gelesen. Wenn, dann finde ich den Beitrag nicht mehr. 😞

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Lenny.CB last edited by

        @Lenny-CB sagte

        let h1 = getState('mqtt.0.ESP-Zisterne.Füllstand.Füllhöhe').val / 100; //--> im DP ist zum Testen auf 1.8 eingetragen

        let h1 = parseFloat(getState('mqtt.0.ESP-Zisterne.Füllstand.Füllhöhe').val) / 100; 
        
        Lenny.CB 1 Reply Last reply Reply Quote 0
        • Lenny.CB
          Lenny.CB Most Active @paul53 last edited by

          @paul53 das hatte ich auch schon probiert, leider ohne Erfolg.
          Mir ist jetzt beim Testen aufgefallen, dass es am mqtt-DP liegen muss. Baue ich den DP unter javascript.1.xxxxx nach, klappt es wunderbar.

          var r1 = 0.93;
          var L1 = 0.55;
          
          function rechnen () {
          let h1 = parseFloat(getState('mqtt.0.ESP-Zisterne.Füllstand.Füllhöhe').val) / 100;
          let h2 = getState('javascript.0.Variablen.Füllstand.Füllhöhe').val / 100;
          
          //Formel
          let Vh1 = (r1 * (r1 * 2 * Math.acos(1 - h1 / r1)) / 2 - (2 * Math.sqrt(2 * r1 * h1 - Math.pow(h1, 2))) * (r1 - h1) / 2) * L1;
          let Vh2 = (r1 * (r1 * 2 * Math.acos(1 - h2 / r1)) / 2 - (2 * Math.sqrt(2 * r1 * h2 - Math.pow(h2, 2))) * (r1 - h2) / 2) * L1;
          
          log('typeof h1: ' + typeof h1);
          log('typeof h2: ' + typeof h2);
          log('Vh1: ' + Vh1);
          log('Vh2: ' + Vh2);
          }	
          schedule('*/1 * * * *', rechnen);
          rechnen();
          
          20:09:00.002	info	javascript.1 (1452) script.js.Verbrauch.Zisterne_Test: typeof h1: number
          20:09:00.003	info	javascript.1 (1452) script.js.Verbrauch.Zisterne_Test: typeof h2: number
          20:09:00.003	info	javascript.1 (1452) script.js.Verbrauch.Zisterne_Test: Vh1: NaN
          20:09:00.003	info	javascript.1 (1452) script.js.Verbrauch.Zisterne_Test: Vh2: 1.4798840966802418
          

          hier noch die RAW der DP:
          mqtt:

          {
            "from": "system.adapter.mqtt.0",
            "user": "system.user.admin",
            "ts": 1578062686565,
            "common": {
              "name": "ESP-Zisterne/Füllstand/Füllhöhe",
              "type": "number",
              "def": 0,
              "write": true,
              "read": true
            },
            "native": {},
            "acl": {
              "object": 1636,
              "owner": "system.user.admin",
              "ownerGroup": "system.group.administrator",
              "state": 1636
            },
            "_id": "mqtt.0.ESP-Zisterne.Füllstand.Füllhöhe",
            "type": "state"
          }
          

          und noch der JS:

          {
            "from": "system.adapter.admin.0",
            "user": "system.user.admin",
            "ts": 1588528781710,
            "common": {
              "name": "Variablen/Füllstand/Füllhöhe",
              "type": "number",
              "unit": "cm",
              "def": 0,
              "read": true,
              "write": true
            },
            "native": {},
            "acl": {
              "object": 1636,
              "owner": "system.user.admin",
              "ownerGroup": "system.group.administrator",
              "state": 1636
            },
            "_id": "javascript.0.Variablen.Füllstand.Füllhöhe",
            "type": "state"
          }
          

          weis grad nicht weiter...

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Lenny.CB last edited by paul53

            @Lenny-CB
            Was liefert ?

            log(getState('mqtt.0.ESP-Zisterne.Füllstand.Füllhöhe').val);
            log(parseFloat(getState('mqtt.0.ESP-Zisterne.Füllstand.Füllhöhe').val));
            
            Lenny.CB 1 Reply Last reply Reply Quote 0
            • Lenny.CB
              Lenny.CB Most Active @paul53 last edited by

              @paul53 sagte in Rechnen mit Datenpunkt --> NaN:

              log(getState('mqtt.0.ESP-Zisterne.Füllstand.Füllhöhe').val); log(parseFloat(getState('mqtt.0.ESP-Zisterne.Füllstand.Füllhöhe').val));

              beides dasselbe. Genau was in DP steht.

              22:05:07.866	info	javascript.1 (1452) script.js.Verbrauch.Zisterne_Test: 189.98
              22:05:07.866	info	javascript.1 (1452) script.js.Verbrauch.Zisterne_Test: 189.98
              
              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Lenny.CB last edited by paul53

                @Lenny-CB sagte:

                beides dasselbe. Genau was in DP steht.

                Dann bin ich mit meinem Latein am Ende.

                Edit: Doch nicht.
                1 - 1.8998/0.93 ist kleiner als -1 und kann mit Math.acos() nicht berechnet werden (Ergebnis: NaN).

                Lenny.CB 1 Reply Last reply Reply Quote 0
                • Lenny.CB
                  Lenny.CB Most Active @paul53 last edited by

                  @paul53

                  Edit: Doch nicht.
                  1 - 1.8998/0.93 ist kleiner als -1 und kann mit Math.acos() nicht berechnet werden (Ergebnis: NaN).

                  genau der entscheidende Punkt! Ich hatte mir Math.acos() und den Bereich von -1 bis 1 auch schon angesehen, da ich aber in den "manuellen DP" immer 180cm eingetragen hatte, passte die Rechnung. Zwischenzeitlich regnete es aber und die Zisterne füllte sich bin in den Dome rein.
                  Daher ging es mit dem javascript-DP und mit dem mqtt-DP nicht.

                  Was ist nun passiert:
                  die Messung ergab 189cm Füllhöhe die von mqtt-DP abgebildet wurden. Der Durchmesser meines berechneten Zylinders (ohne Dome) beträgt 93cm.
                  93cm * 2 = 186cm. Wenn ich nun ein Volumen berechen will, welches mehr als den doppelten Radius als Füllhöhe hat, wird es immer mit NaN enden.

                  @paul53 nochmal vielen Dank, das war wieder der richtig Tipp! 👍

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  783
                  Online

                  31.9k
                  Users

                  80.2k
                  Topics

                  1.3m
                  Posts

                  javascript
                  2
                  7
                  414
                  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