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. Fehler beim Auslesen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Fehler beim Auslesen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
13 Beiträge 5 Kommentatoren 1.6k 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.
  • S Offline
    S Offline
    skorpil
    schrieb am zuletzt editiert von
    #2

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

    1 Antwort Letzte Antwort
    0
    • bahnuhrB Online
      bahnuhrB Online
      bahnuhr
      Forum Testing Most Active
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • Mr. BurnsM Offline
          Mr. BurnsM Offline
          Mr. Burns
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • Mr. BurnsM Offline
              Mr. BurnsM Offline
              Mr. Burns
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • Mr. BurnsM Offline
                  Mr. BurnsM Offline
                  Mr. Burns
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • Mr. BurnsM Offline
                      Mr. BurnsM Offline
                      Mr. Burns
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      • C Offline
                        C Offline
                        Centurytt
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • Mr. BurnsM Offline
                          Mr. BurnsM Offline
                          Mr. Burns
                          schrieb am zuletzt editiert von
                          #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 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

                          593

                          Online

                          32.7k

                          Benutzer

                          82.4k

                          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