Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
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

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
7 Beiträge 2 Kommentatoren 471 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Lenny.CBL Offline
    Lenny.CBL Offline
    Lenny.CB
    Most Active
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                Antworten
                • In einem neuen Thema antworten
                Anmelden zum Antworten
                • Älteste zuerst
                • Neuste zuerst
                • Meiste Stimmen


                Support us

                ioBroker
                Community Adapters
                Donate

                729

                Online

                32.6k

                Benutzer

                82.1k

                Themen

                1.3m

                Beiträge
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                ioBroker Community 2014-2025
                logo
                • Anmelden

                • Du hast noch kein Konto? Registrieren

                • Anmelden oder registrieren, um zu suchen
                • Erster Beitrag
                  Letzter Beitrag
                0
                • Home
                • Aktuell
                • Tags
                • Ungelesen 0
                • Kategorien
                • Unreplied
                • Beliebt
                • GitHub
                • Docu
                • Hilfe