Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Fehler beim Auslesen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

Fehler beim Auslesen

Fehler beim Auslesen

Scheduled Pinned Locked Moved Skripten / Logik
13 Posts 5 Posters 1.5k 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.
  • Mr. BurnsM Offline
    Mr. BurnsM Offline
    Mr. Burns
    wrote on last edited by
    #1

    Halo zusammen,

    ich bräute mal Hilfe. Ich lese den Füllstands meines Öltanks aus und möchte diesen gerne in Volumen umrechnen.

    Leider bekomme ich den Wert nicht ausgelesen. Ich bekomme immer nur die Datenpunkt (anstelle des Wertes) zurück.

    //createState('Oelstand', 0);
    
    var Hoehe = 'hm-rpc.1.LEQ02XXXXX.21.VALUE'; //Fuellhoehe des Oeltanks
    var Dichte = 0.84;
    var Flaeche = 4;
    var Oelstand = 0;
    
    function dp() {
       setState('Oelstand', getState(Hoehe).val * getState(Flaeche).val);
       log(Oelstand);
    log(Hoehe);
    }
    
    on (Hoehe, function () {
        dp();
    
    });
    

    Das Ergebnis des log:

    6:19:23.187	[info]	javascript.0 script.js.Skript2: 0
    16:19:23.187	[info]	javascript.0 script.js.Skript2: hm-rpc.1.LEQ02XXXXX.21.VALUE
    16:19:34.494	[info]	javascript.0 script.js.Skript2: 0
    16:19:34.494	[info]	javascript.0 script.js.Skript2: hm-rpc.1.LEQ02XXXXX.21.VALUE
    16:19:42.046	[info]	javascript.0 script.js.Skript2: 0
    

    Der Wert kommt an aus einem HM 12/14 er Analogeingang.

    1040_bildschirmfoto_2017-02-11_um_16.30.10.png

    Jemand einen Tip in welche Richtung ich muss?

    Gruß

    Thomas

    1 Reply Last reply
    0
    • S Offline
      S Offline
      skorpil
      wrote on last edited by
      #2

      Was kommt beim log(Hoehe), wenn Du das direkt nach der Definition der var Hoehe='hm….. setzt?

      1 Reply Last reply
      0
      • bahnuhrB Online
        bahnuhrB Online
        bahnuhr
        Forum Testing Most Active
        wrote on last edited by
        #3

        2 x mal val geht nicht !
        filename="bild1.jpg" index="0">~~


        Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
        Danke.
        gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
        ScreenToGif :https://www.screentogif.com/downloads.html

        1 Reply Last reply
        0
        • paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4
          //createState('Oelstand', 0);
          
          var Hoehe = 'hm-rpc.1.LEQ02XXXXX.21.VALUE'; //Fuellhoehe des Oeltanks
          var Dichte = 0.84;
          var Flaeche = 4;
          
          on (Hoehe, function (dp) {
             var Oelstand = dp.state.val * Flaeche;
             setState('Oelstand', Oelstand);
             log('Ölstand: ' + Oelstand);
             log('Höhe: ' + dp.state.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

          1 Reply Last reply
          0
          • Mr. BurnsM Offline
            Mr. BurnsM Offline
            Mr. Burns
            wrote on last edited by
            #5

            Funktioniert! Vielen Dank.

            Wenn ich einmal dabei bin. Hat jemand schon mal eine Mittelwertbildung geschrieben?

            Also addiere x Werte, und teile das Ergebnis durch x?

            Gruß

            Thomas

            P.S. Kann mir einer erklären warum mein Weg falsch und der von Paul richtig war?

            Vielleicht versteh ich dann irgendwann was ich da eigentlich programmiere :-D.

            1 Reply Last reply
            0
            • paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #6

              @Mr. Burns:

              Hat jemand schon mal eine Mittelwertbildung geschrieben? `
              Ja, für http://www.iobroker.net/?page_id=3670&lang=de.
              @Mr. Burns:

              Kann mir einer erklären warum mein Weg falsch und der von Paul richtig war? `

                 setState('Oelstand', getState(Hoehe).val * getState(Flaeche).val);
              

              getState(id) kann nur auf einen Datenpunkt angewendet werden, nicht auf eine Skriptvariable (Flaeche).

                 log(Oelstand);
              log(Hoehe);
              

              Die Skriptvariable Oelstand wird nicht aktualisiert, sondern enthält ihren Initialisierungswert.

              Die Skriptvariable Hoehe enthält den ID-String des Datenpunktes, nicht den Wert.

              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

              1 Reply Last reply
              0
              • Mr. BurnsM Offline
                Mr. BurnsM Offline
                Mr. Burns
                wrote on last edited by
                #7

                Danke für deine Erklärung. So ganz verstanden hab ich es nicht, aber dafür fehlen mir wahrscheinlich die Grundlagen.

                Das die Scriptvariable nicht gelesen werden muss bevor ich sie weiterverarbeite versteh ich noch…ist ja schon da. Aber weshalb kann ich das einlesen des Datenpunktes überspringen...

                Dein Script zur Mittelwertbildung hatte ich zwischenzeitlich auch gefunden...ist aber zu hoch für mich. Ich benötige eine feste Anzahl von werten (z.B 10 o. 20) welche gemittelt werden sollen. Da meine Werte nicht zeitabhängig gelesen Werten, sondern auf Änderung getriggert sind müßte ich das Script umschreiben...Ich werd mal den langen Weg mit zwischenvariablen versuchen und gucken wie weit ich komme.

                Danke für die Hilfe!

                Thomas

                1 Reply Last reply
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by
                  #8

                  @Mr. Burns:

                  Aber weshalb kann ich das einlesen des Datenpunktes überspringen… `
                  Welchen Datenpunkt meinst Du ? Wo wird etwas übersprungen ?

                  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

                  1 Reply Last reply
                  0
                  • Mr. BurnsM Offline
                    Mr. BurnsM Offline
                    Mr. Burns
                    wrote on last edited by
                    #9

                    Hi,

                    Der Datenpunkt:

                    var Hoehe = 'hm-rpc.1.LEQ02XXXXX.21.VALUE'; //Fuellhoehe des Oeltanks
                    

                    muss der nicht eingelesen werden bevor dieser weiterverarbeitet werden kann…getState?

                    Hab mir die Geschichte mit dem Mittelwert noch mal angesehen.

                    Wenn ich Zeitvariable (n, über T oder tc wegen der umwandlung in Ganzzahlen) durch einen festen wert ersetze und den intervall Trigger durch einen ON Trigger ersetze müsste es doch eigentlich funktionieren oder...? Ich bin beruflich unterwegs und kann nicht so gut testen (VPN geht nicht überall)...

                    Gruß

                    Thomas

                    1 Reply Last reply
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      wrote on last edited by
                      #10

                      @Mr. Burns:

                      …muss der nicht eingelesen werden bevor dieser weiterverarbeitet werden kann...getState? `

                      on(id, function(mein_Datenpunkt) {...callback-Funktion...});
                      

                      übergibt ebenfalls den Zustand (state) des Datenpunktes an das Objekt (hier: mein_Datenpunkt), das in der callback-Funktion ausgewertet werden kann.

                      mein_Datenpunkt.state.val
                      

                      innerhalb der callback-Funktion entspricht

                      getState(id).val
                      

                      an beliebiger Stelle des Skripts. getState(id).val verursacht aber eine höhere CPU-Belastung, da (im Prinzip) ein zusätzlicher Datenbankzugriff erfolgt.

                      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

                      1 Reply Last reply
                      0
                      • Mr. BurnsM Offline
                        Mr. BurnsM Offline
                        Mr. Burns
                        wrote on last edited by
                        #11

                        Ich möchte mich sehr für die Hilfe bedanken und das Thema hiermit abschließen.

                        Das auslesen umrechnen und die Mittelwertbildung des Öltanks über eine Pneumatische Füllstandsmessung…funktioniert.

                        `// Oelstand errechnen und gleitenden Mittelwert von "x" werten bilden
                        
                        // Konstanten
                        var T = 100;         // Anzahl der Werte
                        var Dichte = 0.84;  // Heizöldichte
                        var Flaeche = 4;    // Fläche des Öltanks (bei einer Rechteckigigen oder Zylindrischen Form) in m2
                        
                        // IDs aller benötigten Datenpunkte
                        var Hoehe   = 'hm-rpc.1.LEQ02XXXXX.21.VALUE';
                        var average = 'vis.Keller.Oelstand';
                        var listid = 'vis.Keller.Oelstand-Liste';
                        
                        var n = Math.round(T); // Anzahl der Werte
                        var list  = new Array(n);
                        
                        function calc() {
                          list.pop();
                          var x = getState(Hoehe).val * Flaeche / Dichte;
                          list.unshift(x);
                          setState(listid, list.toString());
                          var sum = 0.0;
                          for (var i = 0; i < n; i++) {
                            var s = parseFloat(list[i]); 
                           sum = sum + s;
                          }
                          setState(average, parseFloat((sum / n).toFixed(1)));
                          //log (n);
                        }   
                        
                        // Script start: Liste aus String-Datenpunkt einlesen
                        var slist = getState(listid).val;
                        if (slist) {
                           list = slist.split(",");
                        } else {
                           // 1\. Script start: Liste und String-Datenpunkt füllen
                           var x = getState(Hoehe).val * Flaeche / Dichte;
                           for (var i = 0; i < n; i++) list[i] = x;
                           calc();
                        }
                        
                        // Triggert die Funktion bei Änderung der Eingangsgröße
                        on (Hoehe, function (dp) {
                            calc();
                        });`[/i][/i]
                        
                        1 Reply Last reply
                        0
                        • C Offline
                          C Offline
                          Centurytt
                          wrote on last edited by
                          #12

                          @Mr. Burns:

                          Ich möchte mich sehr für die Hilfe bedanken und das Thema hiermit abschließen.

                          Das auslesen umrechnen und die Mittelwertbildung des Öltanks über eine Pneumatische Füllstandsmessung…funktioniert.

                          `// Oelstand errechnen und gleitenden Mittelwert von "x" werten bilden
                           
                          // Konstanten
                          var T = 100;         // Anzahl der Werte
                          var Dichte = 0.84;  // Heizöldichte
                          var Flaeche = 4;    // Fläche des Öltanks (bei einer Rechteckigigen oder Zylindrischen Form) in m2
                           
                          // IDs aller benötigten Datenpunkte
                          var Hoehe   = 'hm-rpc.1.LEQ02XXXXX.21.VALUE';
                          var average = 'vis.Keller.Oelstand';
                          var listid = 'vis.Keller.Oelstand-Liste';
                           
                          var n = Math.round(T); // Anzahl der Werte
                          var list  = new Array(n);
                           
                          function calc() {
                            list.pop();
                            var x = getState(Hoehe).val * Flaeche / Dichte;
                            list.unshift(x);
                            setState(listid, list.toString());
                            var sum = 0.0;
                            for (var i = 0; i < n; i++) {
                              var s = parseFloat(list[i]); 
                             sum = sum + s;
                            }
                            setState(average, parseFloat((sum / n).toFixed(1)));
                            //log (n);
                          }   
                          
                          // Script start: Liste aus String-Datenpunkt einlesen
                          var slist = getState(listid).val;
                          if (slist) {
                             list = slist.split(",");
                          } else {
                             // 1\. Script start: Liste und String-Datenpunkt füllen
                             var x = getState(Hoehe).val * Flaeche / Dichte;
                             for (var i = 0; i < n; i++) list[i] = x;
                             calc();
                          }
                          
                          // Triggert die Funktion bei Änderung der Eingangsgröße
                          on (Hoehe, function (dp) {
                              calc();
                          });`
                          
                          Hi,
                          
                          was hast du da im Einsatz (Hardware zum Füllstand anzeigen) ? würde mich auch interessier das zu realisieren.
                          
                          Danke
                          
                          lg
                          
                          Tom[/i][/i]
                          ``` ` 
                          1 Reply Last reply
                          0
                          • Mr. BurnsM Offline
                            Mr. BurnsM Offline
                            Mr. Burns
                            wrote on last edited by
                            #13

                            Hi,

                            Einen Drucktransmitter 4..20mA, einen Wandler von 4..20mA auf 0..10V, Eingang auf das 12/14 Modul.

                            Ich hab ein Röhrchen, welches bis zum Tankboden geht. Oben ist ein T-Stück, an welchem der Drucktransmitter sitzt. auf dem anderem Anschluss des T-Stücks ist eine Membranpumpe (alte Aquarium Luftpumpe) und ein Nadelventil. Nach der Einperlmethode messe ich den Druck am Boden des Tanks.

                            Mittlerweile messe ich aber direkt über eine SPS und übergebe den Wert an den ioBroker.

                            Parallel messe ich noch den Durchfluss über ein Braun Ölzähler, auch an direkt an der SPS…

                            Gruß

                            Thomas

                            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

                            588

                            Online

                            32.4k

                            Users

                            81.3k

                            Topics

                            1.3m

                            Posts
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            ioBroker Community 2014-2025
                            logo
                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Recent
                            • Tags
                            • Unread 0
                            • Categories
                            • Unreplied
                            • Popular
                            • GitHub
                            • Docu
                            • Hilfe