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. JavaScript
  5. [gelöst] Rechnen mit Datenpunkt --> NaN

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    13
    1
    142

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

[gelöst] Rechnen mit Datenpunkt --> NaN

Scheduled Pinned Locked Moved JavaScript
javascript
7 Posts 2 Posters 475 Views
  • 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.
  • Lenny.CBL Offline
    Lenny.CBL Offline
    Lenny.CB
    Most Active
    wrote on last edited by Lenny.CB
    #1

    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. :disappointed:

    paul53P 1 Reply Last reply
    0
    • Lenny.CBL 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. :disappointed:

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      @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; 
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      Lenny.CBL 1 Reply Last reply
      0
      • paul53P paul53

        @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.CBL Offline
        Lenny.CBL Offline
        Lenny.CB
        Most Active
        wrote on last edited by
        #3

        @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...

        paul53P 1 Reply Last reply
        0
        • Lenny.CBL Lenny.CB

          @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...

          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by paul53
          #4

          @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));
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          Lenny.CBL 1 Reply Last reply
          0
          • paul53P 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.CBL Offline
            Lenny.CBL Offline
            Lenny.CB
            Most Active
            wrote on last edited by
            #5

            @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
            
            paul53P 1 Reply Last reply
            0
            • Lenny.CBL Lenny.CB

              @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
              
              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by paul53
              #6

              @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).

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              Lenny.CBL 1 Reply Last reply
              0
              • paul53P 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.CBL Offline
                Lenny.CBL Offline
                Lenny.CB
                Most Active
                wrote on last edited by
                #7

                @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:

                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

                581

                Online

                32.7k

                Users

                82.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