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. Sprung bei Durchschnittsberechnung

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    244

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

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

Sprung bei Durchschnittsberechnung

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
12 Beiträge 5 Kommentatoren 1.1k Aufrufe 3 Watching
  • Ä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.
  • E Offline
    E Offline
    ecurb
    schrieb am zuletzt editiert von
    #1

    Hallo Zusammen,

    ich messe mit einer Wäge Zelle über einen Raspberry Pi das Gewicht meiner Gasfalsche.
    Dabei habe ich natürlich leichte Ausreißer in der einzelnen Messung.
    Aus diesem Grund versuche ich das Messergebnis etwas zu glätten.
    Leider habe ich ab und zu extreme Ausreißer.

    Aus diesem Grund habe ich mittlerweile 2 verschieden Arten wie ich den Durchschnitt berechne.

    Im Bild sind die Ergebnisse meiner Berechnungen zu sehen.

    Zu erklärung:

    • Blaue Line --> Aktueller Messwert ohne jegliche Berechnung
    • Grüne Line --> Messwert wird in einem Blockly Skript jede Minute in eine Liste gespeichert und der Durchschnitt berechnet (liste wird nur im Skript gespeichert)
    • Rote Line --> Art ist dieselbe wie grüne Line jedoch alle 10 Minuten und dann der Durchschnitt auf 24 Stunden Berechnet.
    • Lila Line --> Java-Skript speichert jede Minute den aktuellen Messwert in einem eigenem Objekt (60 Stück angelegt) danach Summiert es die 60 Objekte, teilt dies durch 60 und speichert den Wert in einem anderem Objekt ( Lila-Line ) ab.

    Gas Verbrauch.PNG

    Ich dachte am Anfang das es eventuell an einer Art Temporären Liste in Blockly liegt.
    Aus diesem Grund habe ich mir den Aufwand gemacht 60 Objekte anzulegen und die Werte Global abzuspeichern.
    Da es aber dasselbe verhalten zeigt wie das Blockly Skript weiß ich nicht mehr weiter was ich falsch mache.
    Kann mir jemand einen Tipp geben was ich falsch mache / wo mein denk Fehler ist.

    Ich verstehe vor allen nicht warum der Durchschnitt von jetzt auf gleich so fallen kann obwohl der echte Messwert gar nicht so extrem schwankt.

    Über Tipps wäre ich echt froh.
    Viele dank im Voraus
    Grüße
    Bruce

    A paul53P AsgothianA 3 Antworten Letzte Antwort
    0
    • E ecurb

      Hallo Zusammen,

      ich messe mit einer Wäge Zelle über einen Raspberry Pi das Gewicht meiner Gasfalsche.
      Dabei habe ich natürlich leichte Ausreißer in der einzelnen Messung.
      Aus diesem Grund versuche ich das Messergebnis etwas zu glätten.
      Leider habe ich ab und zu extreme Ausreißer.

      Aus diesem Grund habe ich mittlerweile 2 verschieden Arten wie ich den Durchschnitt berechne.

      Im Bild sind die Ergebnisse meiner Berechnungen zu sehen.

      Zu erklärung:

      • Blaue Line --> Aktueller Messwert ohne jegliche Berechnung
      • Grüne Line --> Messwert wird in einem Blockly Skript jede Minute in eine Liste gespeichert und der Durchschnitt berechnet (liste wird nur im Skript gespeichert)
      • Rote Line --> Art ist dieselbe wie grüne Line jedoch alle 10 Minuten und dann der Durchschnitt auf 24 Stunden Berechnet.
      • Lila Line --> Java-Skript speichert jede Minute den aktuellen Messwert in einem eigenem Objekt (60 Stück angelegt) danach Summiert es die 60 Objekte, teilt dies durch 60 und speichert den Wert in einem anderem Objekt ( Lila-Line ) ab.

      Gas Verbrauch.PNG

      Ich dachte am Anfang das es eventuell an einer Art Temporären Liste in Blockly liegt.
      Aus diesem Grund habe ich mir den Aufwand gemacht 60 Objekte anzulegen und die Werte Global abzuspeichern.
      Da es aber dasselbe verhalten zeigt wie das Blockly Skript weiß ich nicht mehr weiter was ich falsch mache.
      Kann mir jemand einen Tipp geben was ich falsch mache / wo mein denk Fehler ist.

      Ich verstehe vor allen nicht warum der Durchschnitt von jetzt auf gleich so fallen kann obwohl der echte Messwert gar nicht so extrem schwankt.

      Über Tipps wäre ich echt froh.
      Viele dank im Voraus
      Grüße
      Bruce

      A Offline
      A Offline
      AndyGR42
      schrieb am zuletzt editiert von
      #2

      @ecurb

      Moin. Hast Du dir die Werte mal über History in der Tabelle angesehen, ob da nicht tatsächlich extreme Ausreißer drin sind? Das wäre zumindest eine Erklärung.

      Ansonsten nutze ich für meinen Windmesser eine Normalverteilung / Dichtefunktion um die Daten zu glätten. Das würde die Auswirkung einzelner Ausreißer in deinem Fall praktisch gegen Null gehen lassen.

      Du müsstest das Script etwas anpassen. Es wäre auch weniger Komplex. In meinem Fall zeichnen die Sensoren mit hoher Frequenz (1 Hz) Messwerte auf und übertragen diese als Array (je 30 Werte) zu iobroker. Den Teil kannst Du dir also komplett schenken.

      Die Arrays werden persistent in JS angelegt und entsprechend gefüllt. Das Update erfolgt durch die Funktion update_wind......History (Shift). Diese Funktion must Du an deinen Bedarf anpassen. Dann natürlich auch die historyTime und die Berechnung der Array Länge.

      In den "process" Funktionen wird zunächst geprüft ob überhaupt ausreichend Daten im Array sind. Ansonsten wird der letzte Wert zurück gegeben, der auch -1 sein kann wenn gar keine Daten vorliegen.

      Die calc_PDF Funktion gibt dann den normalisierten Wert zurück.

      
      // process wind speed / guest
      
      const historyTime = 60; // minutes to cache for calculation
      const valuesPerArray = 30; // number of values per arry from sensor. MUST be the same size like configured in the device sketch!
      const windArrayLength = historyTime * 60; // 60 if sample frequence is 1Hz
      
      // create memory persistent arrays
      
      let windSpeedHistory = new Array(windArrayLength); 
      let windDirrectionHistory = new Array(windArrayLength);
      
      var i;
      
      for (i = 0; i < windArrayLength; i++){ //fill array with -1
          
          windSpeedHistory[i] = -1;
          windDirrectionHistory[i] = -1;
      }
      
      // process wind speed
      
      on({id: "0_userdata.0.IoT.WindSensor.WindSpeedArray", change: "any"}, function (obj) {
          var value = obj.state.val;
          var oldValue = obj.oldState.val;
          var windSpeed = 0;
          
          update_windSpeedHistory(get_NumArray(value));
      
          var WSHsum = windSpeedHistory.reduce((a, b) => a + b, 0);
          var WSHindex = windSpeedHistory.indexOf(-1);
          var WSHlength = windSpeedHistory.length;
          WSHsum += (WSHlength - WSHindex);
      
          if (windSpeedHistory[0] != WSHsum / WSHindex)
          {
              windSpeed = calc_PDF(windSpeedHistory);
          }
          else
          {
              windSpeed = windSpeedHistory[0];
          }
      
          setState('0_userdata.0.IoT.Weather.WindSpeed', windSpeed);  //in km/h
          setState('0_userdata.0.IoT.Weather.WindGuest', Math.max.apply(Math, windSpeedHistory));  //in km/h
      });
      
      // process wind direction
      
      on({id: "0_userdata.0.IoT.WindSensor.WindDirectionArray", change: "any"}, function (obj) {
          var value = obj.state.val;
          var oldValue = obj.oldState.val;
          var windDirectionNumeric = 0;
      
          update_windDirectionHistory(get_NumArray(value));
      
          var WDHsum = windDirrectionHistory.reduce((a, b) => a + b, 0);
          var WDHindex = windDirrectionHistory.indexOf(-1);
          var WDHlength = windDirrectionHistory.length;
          WDHsum += (WDHlength - WDHindex);
      
          if (windDirrectionHistory[0] != WDHsum / WDHindex)
          {
              windDirectionNumeric = calc_PDF(windDirrectionHistory);
          }
          else
          {
              windDirectionNumeric = windDirrectionHistory[0];
          }
      
          setState('0_userdata.0.IoT.Weather.WindDirectionNumeric', windDirectionNumeric);
          setState('0_userdata.0.IoT.Weather.WindDirection', get_WindDirectionName(windDirectionNumeric));
      });
      
      // ################################### helper funcions
      
      // split and convert string to numeric array
      
      function get_NumArray(inputString) {
      
          var strArray = inputString.split(",");
          var strArrayLength = strArray.length;
          let numArray = new Array(strArrayLength);
      
          var i = 0;
      
          for (i = 0; i < strArrayLength; i++ ) {
              numArray[i] = parseFloat(strArray[i]);
          };
      
          return numArray;
      }
      
      // shift and update the windSpeedHistory array
      
      function update_windSpeedHistory(numArray)
      {
          var numArrayLength = numArray.length;
          var windSpeedHistoryLength = windSpeedHistory.length;
      
          var i;
      
          for (i = windSpeedHistoryLength - 1; i >= 0; i--)
          {
              if (i > 29)
              {
                  windSpeedHistory[i] = windSpeedHistory[i - 30];
              }
              else
              {
                  windSpeedHistory[i] = numArray[i];
              }
          }
      }
      
      // shift and update the windDirectionHistory array
      
      function update_windDirectionHistory(numArray)
      {
          var numArrayLength = numArray.length;
          var windDirectionHistoryLength = windDirrectionHistory.length;
      
          var i;
      
          for (i = windDirectionHistoryLength - 1; i >= 0; i--)
          {
              if (i > 29)
              {
                  windDirrectionHistory[i] = windDirrectionHistory[i - 30];
              }
              else
              {
                  windDirrectionHistory[i] = numArray[i];
              }
          }
      }
      
      // ################################### get wind direction name from number
      
      function get_WindDirectionName(WindDirectionNumeric) {
      
          switch (WindDirectionNumeric) {
              case 22: return "Nord-Nordost";
              case 45: return "Nordost"; 
              case 67: return "Ost-Nordost";
              case 90: return "Ost";
              case 112: return "Ost-Südost";
              case 135: return "Südost";
              case 157: return "Süd-Südost";
              case 180: return "Süd";
              case 202: return "Süd-Südwest";
              case 225: return "Südwest";
              case 247: return "West-Südwest";
              case 270: return "West";
              case 292: return "West-Nordwest";
              case 315: return "Nordwest";
              case 337: return "Nord-Nordwest";
              case 360: return "Nord";
          }
          return "n/a";
      }
      
      // ################################### calc mean value (normal distribution)
      
      function calc_PDF(numArray) {
      
          var i = 0;
          var numArrayLength;
      
          // cualculate vaild length of array (until first -1)
          
          if(numArray.indexOf(-1) > 0) {
              numArrayLength = numArray.indexOf(-1);
          }
          else {
              numArrayLength = numArray.length;
          }
          
          // calculate the arithmetic mean
          
          var sum = 0;
      
          for (i = 0; i < numArrayLength; i++ ) {
              sum += numArray[i];
          };
          
          var arMean = sum / numArrayLength;
      
          // calculate the variant and standard deviation
      
          var x = 0;
          
          for (i = 0; i < numArrayLength; i++ ) {
              x += Math.pow(numArray[i] - arMean, 2);
          };
      
          var varinat = 1 / (numArrayLength - 1) * x;
          var stdDev = Math.sqrt(varinat);
          
          // calculate the normal distribution (Probability Density Function)
      
          let PDFArray = new Array();
          let PDFparam = new Array();
              
          PDFparam[0] = arMean;
          PDFparam[1] = stdDev;
          PDFArray = pdf("norm" ,numArray, PDFparam); 
      
          // get the median and the predicted value
      
          var median = Math.max.apply(Math, PDFArray);
          const medianNumber = (element) => element == median;
      
          var index = PDFArray.findIndex(medianNumber);
      
          //for debugging
       /*
          var max = Math.max.apply(Math, NumArray);
          var min = Math.min.apply(Math, NumArray);
      
          console.log("sum = " + sum + ", arMean = " + arMean + ", varinat = " + varinat + ", stdDev = " + stdDev + ", median = " + median + ", index = " + index);
      */
          return(numArray[index]);
      }
      
      
      // ################################### PDF algorithem (University of Utah)
      
      function pdf(type,xpdft,paramt) {
      
          var ypdf = new Array;
      
          if (xpdft.constructor != Array) { 
      
              var xpdf = new Array;
              xpdf[0] = xpdft; 
          }
          else {xpdf = xpdft;}
          
          if (paramt.constructor != Array) {
              
              var param = new Array; 
              param[0] = paramt; 
          }
          else {param = paramt}
      
      
          if (type=='norm') {    //normal, gaussian distribution
              
              if (param == null) {param = new Array(0,1);}
              
              var c1 = Math.sqrt(1 / (2 * Math.PI)) / param[1];
              
              var c2 = 1 / (2 * param[1] * param[1]);
              
              for ( var ip = 0; ip < xpdf.length; ip++ ){
      
                  ypdf[ip] = c1 * Math.exp(-(xpdf[ip] - param[0]) * (xpdf[ip] - param[0]) * c2);
              }
          }
      
          return ypdf;
      }
      
      
      E 1 Antwort Letzte Antwort
      0
      • E ecurb

        Hallo Zusammen,

        ich messe mit einer Wäge Zelle über einen Raspberry Pi das Gewicht meiner Gasfalsche.
        Dabei habe ich natürlich leichte Ausreißer in der einzelnen Messung.
        Aus diesem Grund versuche ich das Messergebnis etwas zu glätten.
        Leider habe ich ab und zu extreme Ausreißer.

        Aus diesem Grund habe ich mittlerweile 2 verschieden Arten wie ich den Durchschnitt berechne.

        Im Bild sind die Ergebnisse meiner Berechnungen zu sehen.

        Zu erklärung:

        • Blaue Line --> Aktueller Messwert ohne jegliche Berechnung
        • Grüne Line --> Messwert wird in einem Blockly Skript jede Minute in eine Liste gespeichert und der Durchschnitt berechnet (liste wird nur im Skript gespeichert)
        • Rote Line --> Art ist dieselbe wie grüne Line jedoch alle 10 Minuten und dann der Durchschnitt auf 24 Stunden Berechnet.
        • Lila Line --> Java-Skript speichert jede Minute den aktuellen Messwert in einem eigenem Objekt (60 Stück angelegt) danach Summiert es die 60 Objekte, teilt dies durch 60 und speichert den Wert in einem anderem Objekt ( Lila-Line ) ab.

        Gas Verbrauch.PNG

        Ich dachte am Anfang das es eventuell an einer Art Temporären Liste in Blockly liegt.
        Aus diesem Grund habe ich mir den Aufwand gemacht 60 Objekte anzulegen und die Werte Global abzuspeichern.
        Da es aber dasselbe verhalten zeigt wie das Blockly Skript weiß ich nicht mehr weiter was ich falsch mache.
        Kann mir jemand einen Tipp geben was ich falsch mache / wo mein denk Fehler ist.

        Ich verstehe vor allen nicht warum der Durchschnitt von jetzt auf gleich so fallen kann obwohl der echte Messwert gar nicht so extrem schwankt.

        Über Tipps wäre ich echt froh.
        Viele dank im Voraus
        Grüße
        Bruce

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #3

        @ecurb sagte: obwohl der echte Messwert gar nicht so extrem schwankt.

        Sicher? Lasse mal einen kürzeren Zeitraum (um den Aussetzer) darstellen oder schau in die History-Tabelle.

        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
        • A AndyGR42

          @ecurb

          Moin. Hast Du dir die Werte mal über History in der Tabelle angesehen, ob da nicht tatsächlich extreme Ausreißer drin sind? Das wäre zumindest eine Erklärung.

          Ansonsten nutze ich für meinen Windmesser eine Normalverteilung / Dichtefunktion um die Daten zu glätten. Das würde die Auswirkung einzelner Ausreißer in deinem Fall praktisch gegen Null gehen lassen.

          Du müsstest das Script etwas anpassen. Es wäre auch weniger Komplex. In meinem Fall zeichnen die Sensoren mit hoher Frequenz (1 Hz) Messwerte auf und übertragen diese als Array (je 30 Werte) zu iobroker. Den Teil kannst Du dir also komplett schenken.

          Die Arrays werden persistent in JS angelegt und entsprechend gefüllt. Das Update erfolgt durch die Funktion update_wind......History (Shift). Diese Funktion must Du an deinen Bedarf anpassen. Dann natürlich auch die historyTime und die Berechnung der Array Länge.

          In den "process" Funktionen wird zunächst geprüft ob überhaupt ausreichend Daten im Array sind. Ansonsten wird der letzte Wert zurück gegeben, der auch -1 sein kann wenn gar keine Daten vorliegen.

          Die calc_PDF Funktion gibt dann den normalisierten Wert zurück.

          
          // process wind speed / guest
          
          const historyTime = 60; // minutes to cache for calculation
          const valuesPerArray = 30; // number of values per arry from sensor. MUST be the same size like configured in the device sketch!
          const windArrayLength = historyTime * 60; // 60 if sample frequence is 1Hz
          
          // create memory persistent arrays
          
          let windSpeedHistory = new Array(windArrayLength); 
          let windDirrectionHistory = new Array(windArrayLength);
          
          var i;
          
          for (i = 0; i < windArrayLength; i++){ //fill array with -1
              
              windSpeedHistory[i] = -1;
              windDirrectionHistory[i] = -1;
          }
          
          // process wind speed
          
          on({id: "0_userdata.0.IoT.WindSensor.WindSpeedArray", change: "any"}, function (obj) {
              var value = obj.state.val;
              var oldValue = obj.oldState.val;
              var windSpeed = 0;
              
              update_windSpeedHistory(get_NumArray(value));
          
              var WSHsum = windSpeedHistory.reduce((a, b) => a + b, 0);
              var WSHindex = windSpeedHistory.indexOf(-1);
              var WSHlength = windSpeedHistory.length;
              WSHsum += (WSHlength - WSHindex);
          
              if (windSpeedHistory[0] != WSHsum / WSHindex)
              {
                  windSpeed = calc_PDF(windSpeedHistory);
              }
              else
              {
                  windSpeed = windSpeedHistory[0];
              }
          
              setState('0_userdata.0.IoT.Weather.WindSpeed', windSpeed);  //in km/h
              setState('0_userdata.0.IoT.Weather.WindGuest', Math.max.apply(Math, windSpeedHistory));  //in km/h
          });
          
          // process wind direction
          
          on({id: "0_userdata.0.IoT.WindSensor.WindDirectionArray", change: "any"}, function (obj) {
              var value = obj.state.val;
              var oldValue = obj.oldState.val;
              var windDirectionNumeric = 0;
          
              update_windDirectionHistory(get_NumArray(value));
          
              var WDHsum = windDirrectionHistory.reduce((a, b) => a + b, 0);
              var WDHindex = windDirrectionHistory.indexOf(-1);
              var WDHlength = windDirrectionHistory.length;
              WDHsum += (WDHlength - WDHindex);
          
              if (windDirrectionHistory[0] != WDHsum / WDHindex)
              {
                  windDirectionNumeric = calc_PDF(windDirrectionHistory);
              }
              else
              {
                  windDirectionNumeric = windDirrectionHistory[0];
              }
          
              setState('0_userdata.0.IoT.Weather.WindDirectionNumeric', windDirectionNumeric);
              setState('0_userdata.0.IoT.Weather.WindDirection', get_WindDirectionName(windDirectionNumeric));
          });
          
          // ################################### helper funcions
          
          // split and convert string to numeric array
          
          function get_NumArray(inputString) {
          
              var strArray = inputString.split(",");
              var strArrayLength = strArray.length;
              let numArray = new Array(strArrayLength);
          
              var i = 0;
          
              for (i = 0; i < strArrayLength; i++ ) {
                  numArray[i] = parseFloat(strArray[i]);
              };
          
              return numArray;
          }
          
          // shift and update the windSpeedHistory array
          
          function update_windSpeedHistory(numArray)
          {
              var numArrayLength = numArray.length;
              var windSpeedHistoryLength = windSpeedHistory.length;
          
              var i;
          
              for (i = windSpeedHistoryLength - 1; i >= 0; i--)
              {
                  if (i > 29)
                  {
                      windSpeedHistory[i] = windSpeedHistory[i - 30];
                  }
                  else
                  {
                      windSpeedHistory[i] = numArray[i];
                  }
              }
          }
          
          // shift and update the windDirectionHistory array
          
          function update_windDirectionHistory(numArray)
          {
              var numArrayLength = numArray.length;
              var windDirectionHistoryLength = windDirrectionHistory.length;
          
              var i;
          
              for (i = windDirectionHistoryLength - 1; i >= 0; i--)
              {
                  if (i > 29)
                  {
                      windDirrectionHistory[i] = windDirrectionHistory[i - 30];
                  }
                  else
                  {
                      windDirrectionHistory[i] = numArray[i];
                  }
              }
          }
          
          // ################################### get wind direction name from number
          
          function get_WindDirectionName(WindDirectionNumeric) {
          
              switch (WindDirectionNumeric) {
                  case 22: return "Nord-Nordost";
                  case 45: return "Nordost"; 
                  case 67: return "Ost-Nordost";
                  case 90: return "Ost";
                  case 112: return "Ost-Südost";
                  case 135: return "Südost";
                  case 157: return "Süd-Südost";
                  case 180: return "Süd";
                  case 202: return "Süd-Südwest";
                  case 225: return "Südwest";
                  case 247: return "West-Südwest";
                  case 270: return "West";
                  case 292: return "West-Nordwest";
                  case 315: return "Nordwest";
                  case 337: return "Nord-Nordwest";
                  case 360: return "Nord";
              }
              return "n/a";
          }
          
          // ################################### calc mean value (normal distribution)
          
          function calc_PDF(numArray) {
          
              var i = 0;
              var numArrayLength;
          
              // cualculate vaild length of array (until first -1)
              
              if(numArray.indexOf(-1) > 0) {
                  numArrayLength = numArray.indexOf(-1);
              }
              else {
                  numArrayLength = numArray.length;
              }
              
              // calculate the arithmetic mean
              
              var sum = 0;
          
              for (i = 0; i < numArrayLength; i++ ) {
                  sum += numArray[i];
              };
              
              var arMean = sum / numArrayLength;
          
              // calculate the variant and standard deviation
          
              var x = 0;
              
              for (i = 0; i < numArrayLength; i++ ) {
                  x += Math.pow(numArray[i] - arMean, 2);
              };
          
              var varinat = 1 / (numArrayLength - 1) * x;
              var stdDev = Math.sqrt(varinat);
              
              // calculate the normal distribution (Probability Density Function)
          
              let PDFArray = new Array();
              let PDFparam = new Array();
                  
              PDFparam[0] = arMean;
              PDFparam[1] = stdDev;
              PDFArray = pdf("norm" ,numArray, PDFparam); 
          
              // get the median and the predicted value
          
              var median = Math.max.apply(Math, PDFArray);
              const medianNumber = (element) => element == median;
          
              var index = PDFArray.findIndex(medianNumber);
          
              //for debugging
           /*
              var max = Math.max.apply(Math, NumArray);
              var min = Math.min.apply(Math, NumArray);
          
              console.log("sum = " + sum + ", arMean = " + arMean + ", varinat = " + varinat + ", stdDev = " + stdDev + ", median = " + median + ", index = " + index);
          */
              return(numArray[index]);
          }
          
          
          // ################################### PDF algorithem (University of Utah)
          
          function pdf(type,xpdft,paramt) {
          
              var ypdf = new Array;
          
              if (xpdft.constructor != Array) { 
          
                  var xpdf = new Array;
                  xpdf[0] = xpdft; 
              }
              else {xpdf = xpdft;}
              
              if (paramt.constructor != Array) {
                  
                  var param = new Array; 
                  param[0] = paramt; 
              }
              else {param = paramt}
          
          
              if (type=='norm') {    //normal, gaussian distribution
                  
                  if (param == null) {param = new Array(0,1);}
                  
                  var c1 = Math.sqrt(1 / (2 * Math.PI)) / param[1];
                  
                  var c2 = 1 / (2 * param[1] * param[1]);
                  
                  for ( var ip = 0; ip < xpdf.length; ip++ ){
          
                      ypdf[ip] = c1 * Math.exp(-(xpdf[ip] - param[0]) * (xpdf[ip] - param[0]) * c2);
                  }
              }
          
              return ypdf;
          }
          
          
          E Offline
          E Offline
          ecurb
          schrieb am zuletzt editiert von
          #4

          hey vielen Dank schon mal für die Antworten

          @andygr42
          Reingeschaut habe ich noch nicht in die Tabelle. Immer nur mit "Flot" wenn ich dort so na ran gehe das ich die einzelnen Messwerte als punkte sehen kann sieht es so aus das nur die Berechneten werte "Springen".

          Dein Skript muss ich mir mit etwas zeit anschauen und auf mich anpassen. (Bin in der Java Welt noch nicht ganz so sicher wie in anderen Welten).
          Ich denke aber das ich es die Tage abends schaffe.

          @paul53
          meinst du eventuelle so?
          Gas-Messwerte.PNG

          Ich finde da kann man schön sehen das alle:

          • 10 Minuten ein Roter Messwert erscheint
          • 1 Minute ein grüner & lila punkt erscheint.
          • Blaue Punkte kommen je nach geändertem Messwert. Also unregelmäßig.

          Vielen Dank noch mal sobald ich weitermachen konnte melde ich mich wieder.

          Grüße
          Bruce

          paul53P 1 Antwort Letzte Antwort
          0
          • E ecurb

            hey vielen Dank schon mal für die Antworten

            @andygr42
            Reingeschaut habe ich noch nicht in die Tabelle. Immer nur mit "Flot" wenn ich dort so na ran gehe das ich die einzelnen Messwerte als punkte sehen kann sieht es so aus das nur die Berechneten werte "Springen".

            Dein Skript muss ich mir mit etwas zeit anschauen und auf mich anpassen. (Bin in der Java Welt noch nicht ganz so sicher wie in anderen Welten).
            Ich denke aber das ich es die Tage abends schaffe.

            @paul53
            meinst du eventuelle so?
            Gas-Messwerte.PNG

            Ich finde da kann man schön sehen das alle:

            • 10 Minuten ein Roter Messwert erscheint
            • 1 Minute ein grüner & lila punkt erscheint.
            • Blaue Punkte kommen je nach geändertem Messwert. Also unregelmäßig.

            Vielen Dank noch mal sobald ich weitermachen konnte melde ich mich wieder.

            Grüße
            Bruce

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #5

            @ecurb sagte: meinst du eventuelle so?

            In dieser Darstellung sieht man keine Ausreißer unter 18,00 kg.

            EDIT: Da innerhalb einer Minute eine ausreichende Anzahl Messwerte eingehen, würde ich Ausreißer so ausschließen:

            const idMesswert = '...';
            const idMittel = '...';
            
            // vor erstem Skriptstart Wert manuell so genau wie möglich in Datenpunkt eintragen 
            var mittel = getState(idMittel).val;
            var werte = [];
            
            function mathMean(myList) {
              return myList.reduce(function(x, y) {return x + y;}) / myList.length;
            }
            
            on({id: idMesswert}, function (dp) {
              if(Math.abs(dp.state.val - mittel) < 0.05) {
                werte.push(dp.state.val);
              }
            });
            
            schedule("* * * * *", function () {
              if(werte.length) mittel = mathMean(werte);
              setState(idMittel, mittel, true);
              werte = [];
            });
            

            Blockly-Version:

            Bild_2021-08-01_190206.png

            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

            E 1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @ecurb sagte: meinst du eventuelle so?

              In dieser Darstellung sieht man keine Ausreißer unter 18,00 kg.

              EDIT: Da innerhalb einer Minute eine ausreichende Anzahl Messwerte eingehen, würde ich Ausreißer so ausschließen:

              const idMesswert = '...';
              const idMittel = '...';
              
              // vor erstem Skriptstart Wert manuell so genau wie möglich in Datenpunkt eintragen 
              var mittel = getState(idMittel).val;
              var werte = [];
              
              function mathMean(myList) {
                return myList.reduce(function(x, y) {return x + y;}) / myList.length;
              }
              
              on({id: idMesswert}, function (dp) {
                if(Math.abs(dp.state.val - mittel) < 0.05) {
                  werte.push(dp.state.val);
                }
              });
              
              schedule("* * * * *", function () {
                if(werte.length) mittel = mathMean(werte);
                setState(idMittel, mittel, true);
                werte = [];
              });
              

              Blockly-Version:

              Bild_2021-08-01_190206.png

              E Offline
              E Offline
              ecurb
              schrieb am zuletzt editiert von ecurb
              #6

              @paul53
              Hey
              ich habe das mal erstellt und gestartet. Morgen denke ich kann ich sehen ob es funktioniert.

              Es stimmt schon das der Blaue wert keine großen Ausreißer hat.
              Genau aus diesem Grund verstehe ich ja nicht warum meine durchschnitts berechnung quasi Springt.
              Gas-Messwerte_sprung.png

              links und rechts springt der wert. Wärend dessen ist der wert dann wieder konstant.

              Und ich berechne den durchschnitt ja in 2 verschiedenen Skripten und auf 2 verscheidene arten.

              Viele grüße

              Bruce

              paul53P 2 Antworten Letzte Antwort
              0
              • E ecurb

                Hallo Zusammen,

                ich messe mit einer Wäge Zelle über einen Raspberry Pi das Gewicht meiner Gasfalsche.
                Dabei habe ich natürlich leichte Ausreißer in der einzelnen Messung.
                Aus diesem Grund versuche ich das Messergebnis etwas zu glätten.
                Leider habe ich ab und zu extreme Ausreißer.

                Aus diesem Grund habe ich mittlerweile 2 verschieden Arten wie ich den Durchschnitt berechne.

                Im Bild sind die Ergebnisse meiner Berechnungen zu sehen.

                Zu erklärung:

                • Blaue Line --> Aktueller Messwert ohne jegliche Berechnung
                • Grüne Line --> Messwert wird in einem Blockly Skript jede Minute in eine Liste gespeichert und der Durchschnitt berechnet (liste wird nur im Skript gespeichert)
                • Rote Line --> Art ist dieselbe wie grüne Line jedoch alle 10 Minuten und dann der Durchschnitt auf 24 Stunden Berechnet.
                • Lila Line --> Java-Skript speichert jede Minute den aktuellen Messwert in einem eigenem Objekt (60 Stück angelegt) danach Summiert es die 60 Objekte, teilt dies durch 60 und speichert den Wert in einem anderem Objekt ( Lila-Line ) ab.

                Gas Verbrauch.PNG

                Ich dachte am Anfang das es eventuell an einer Art Temporären Liste in Blockly liegt.
                Aus diesem Grund habe ich mir den Aufwand gemacht 60 Objekte anzulegen und die Werte Global abzuspeichern.
                Da es aber dasselbe verhalten zeigt wie das Blockly Skript weiß ich nicht mehr weiter was ich falsch mache.
                Kann mir jemand einen Tipp geben was ich falsch mache / wo mein denk Fehler ist.

                Ich verstehe vor allen nicht warum der Durchschnitt von jetzt auf gleich so fallen kann obwohl der echte Messwert gar nicht so extrem schwankt.

                Über Tipps wäre ich echt froh.
                Viele dank im Voraus
                Grüße
                Bruce

                AsgothianA Offline
                AsgothianA Offline
                Asgothian
                Developer
                schrieb am zuletzt editiert von Asgothian
                #7

                @ecurb

                Zeig doch bitte mal dein Blockly Skript. Es sieht so aus als ob da etwas nicht zusammen passt.

                Die rote und grüne Linie passen prinzipiell zusammen - was mich auf einen systematischen Fehler in deine, Skript schließen lässt.

                A.

                ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                M 1 Antwort Letzte Antwort
                0
                • AsgothianA Asgothian

                  @ecurb

                  Zeig doch bitte mal dein Blockly Skript. Es sieht so aus als ob da etwas nicht zusammen passt.

                  Die rote und grüne Linie passen prinzipiell zusammen - was mich auf einen systematischen Fehler in deine, Skript schließen lässt.

                  A.

                  M Offline
                  M Offline
                  MartyBr
                  schrieb am zuletzt editiert von
                  #8

                  @ecurb
                  Ich nutze das geniale Script von @paul53 .
                  Das berechnet dir für beliebige Datenpunkte gemittelten Werte und Min und Max Werte. Das kannst du einfach um weitere DPs mit einem Eintrag im Config-Teil erweitern.
                  Das läuft bei mir mit fast allen Wetterwerten meiner Wetterstation absolut unauffällig und stabil:
                  https://forum.iobroker.net/topic/1037/gleitender-durchschnitt-min-max-über-def-zeitraum

                  Gruß
                  Martin


                  Intel NUCs mit Proxmox / Iobroker als VM unter Debian
                  Raspeberry mit USB Leseköpfen für Smartmeter
                  Homematic und Homematic IP

                  1 Antwort Letzte Antwort
                  0
                  • E ecurb

                    @paul53
                    Hey
                    ich habe das mal erstellt und gestartet. Morgen denke ich kann ich sehen ob es funktioniert.

                    Es stimmt schon das der Blaue wert keine großen Ausreißer hat.
                    Genau aus diesem Grund verstehe ich ja nicht warum meine durchschnitts berechnung quasi Springt.
                    Gas-Messwerte_sprung.png

                    links und rechts springt der wert. Wärend dessen ist der wert dann wieder konstant.

                    Und ich berechne den durchschnitt ja in 2 verschiedenen Skripten und auf 2 verscheidene arten.

                    Viele grüße

                    Bruce

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #9

                    @ecurb sagte: Es stimmt schon das der Blaue wert keine großen Ausreißer hat.

                    Oder man sieht sie nur nicht, da Werte unter 18,00 kg nicht dargestellt werden. Stelle mal das Minimum für die blaue Kurve auf 0 kg.

                    Für eine Glättung der Kurve sollte ein gleitender Mittelwert über 60 Minutenwerte ausreichend sein. Hier eine entsprechende Erweiterung:

                    Blockly_temp.JPG

                    Unter "0_userdata.0":

                    Bild_2021-08-01_185317.png

                    Das "Netto Gasgewicht" (Gewicht - Leergewicht der Gasflasche) würde ich allerdings in einem Alias abbilden.

                    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

                    E 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @ecurb sagte: Es stimmt schon das der Blaue wert keine großen Ausreißer hat.

                      Oder man sieht sie nur nicht, da Werte unter 18,00 kg nicht dargestellt werden. Stelle mal das Minimum für die blaue Kurve auf 0 kg.

                      Für eine Glättung der Kurve sollte ein gleitender Mittelwert über 60 Minutenwerte ausreichend sein. Hier eine entsprechende Erweiterung:

                      Blockly_temp.JPG

                      Unter "0_userdata.0":

                      Bild_2021-08-01_185317.png

                      Das "Netto Gasgewicht" (Gewicht - Leergewicht der Gasflasche) würde ich allerdings in einem Alias abbilden.

                      E Offline
                      E Offline
                      ecurb
                      schrieb am zuletzt editiert von
                      #10

                      Hallo Zusammen,

                      auf die schnelle hier meine beiden Skripte. Dies habe ich als zweites erstellt da ich das Problem mit dem Blocky Skript hatte. Um keine Fehler zu machen bei einer Schleife habe ich es in einzelne Bedingungen gemacht um erst einmal die Funktion zu prüfen.

                      schedule("* * * * *", async function () {
                        if (1 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_01"/*Min_01*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (2 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_02"/*Min_02*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (3 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_03"/*Min_03*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (4 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_04"/*Min_04*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (5 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_05"/*Min_05*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (6 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_06"/*Min_06*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (7 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_07"/*Min_07*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (8 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_08"/*Min_08*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (9 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_09"/*Min_09*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (10 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_10"/*Min_10*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (11 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_11"/*Min_11*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (12 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_12"/*Min_12*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (13 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_13"/*Min_13*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (14 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_14"/*Min_14*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (15 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_15"/*Min_15*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (16 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_16"/*Min_16*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (17 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_17"/*Min_17*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (18 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_18"/*Min_18*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (19 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_19"/*Min_19*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (20 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_20"/*Min_20*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (21 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_21"/*Min_21*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (22 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_22"/*Min_22*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (23 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_23"/*Min_23*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (24 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_24"/*Min_24*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (25 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_25"/*Min_25*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (26 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_26"/*Min_26*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (27 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_27"/*Min_27*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (28 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_28"/*Min_28*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (29 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_29"/*Min_29*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (30 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_30"/*Min_30*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (31 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_31"/*Min_31*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (32 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_32"/*Min_32*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (33 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_33"/*Min_33*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (34 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_34"/*Min_34*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (35 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_35"/*Min_35*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (36 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_36"/*Min_36*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (37 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_37"/*Min_37*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (38 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_38"/*Min_38*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (39 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_39"/*Min_39*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (40 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_40"/*Min_40*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (41 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_41"/*Min_41*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (42 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_42"/*Min_42*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (43 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_43"/*Min_43*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (44 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_44"/*Min_44*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (45 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_45"/*Min_45*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (46 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_46"/*Min_46*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (47 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_47"/*Min_47*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (48 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_48"/*Min_48*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (49 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_49"/*Min_49*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (50 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_50"/*Min_50*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (51 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_51"/*Min_51*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (52 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_52"/*Min_52*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (53 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_53"/*Min_53*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (54 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_54"/*Min_54*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (55 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_55"/*Min_55*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (56 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_56"/*Min_56*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (57 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_57"/*Min_57*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (58 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_58"/*Min_58*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (59 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_59"/*Min_59*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        if (0 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_60"/*Min_60*/,  (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                      
                      
                      
                      setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Schnitt"/*Schnitt*/, 
                      ((
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_01").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_02").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_03").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_04").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_05").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_06").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_07").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_08").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_09").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_10").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_11").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_12").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_13").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_14").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_15").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_16").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_17").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_18").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_19").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_20").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_21").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_22").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_23").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_24").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_25").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_26").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_27").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_28").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_29").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_30").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_31").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_32").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_33").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_34").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_35").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_36").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_37").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_38").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_39").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_40").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_41").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_42").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_43").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_44").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_45").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_46").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_47").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_48").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_49").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_50").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_51").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_52").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_53").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_54").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_55").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_56").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_57").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_58").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_59").val +
                       getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_60").val 
                       ) / 60));
                      });
                      

                      das Entspricht der Lila Linie.

                      und nun kommt die Grüne Line (hier bitte nicht verwirren lassen das da was mit Tages Durchschnitt steht)

                      Skript.PNG

                      den Rest kann ich erst heute abend (bin in einer anderen Zeitzone) testen.

                      Was ich jetzt schon mal sagen kann das wenn ich in Flote gar keine Angaben zu Skala mache geht die automatische Skala nicht auf null.

                      Vielen dank
                      Bruce

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • E ecurb

                        Hallo Zusammen,

                        auf die schnelle hier meine beiden Skripte. Dies habe ich als zweites erstellt da ich das Problem mit dem Blocky Skript hatte. Um keine Fehler zu machen bei einer Schleife habe ich es in einzelne Bedingungen gemacht um erst einmal die Funktion zu prüfen.

                        schedule("* * * * *", async function () {
                          if (1 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_01"/*Min_01*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (2 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_02"/*Min_02*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (3 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_03"/*Min_03*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (4 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_04"/*Min_04*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (5 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_05"/*Min_05*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (6 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_06"/*Min_06*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (7 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_07"/*Min_07*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (8 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_08"/*Min_08*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (9 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_09"/*Min_09*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (10 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_10"/*Min_10*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (11 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_11"/*Min_11*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (12 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_12"/*Min_12*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (13 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_13"/*Min_13*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (14 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_14"/*Min_14*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (15 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_15"/*Min_15*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (16 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_16"/*Min_16*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (17 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_17"/*Min_17*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (18 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_18"/*Min_18*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (19 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_19"/*Min_19*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (20 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_20"/*Min_20*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (21 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_21"/*Min_21*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (22 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_22"/*Min_22*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (23 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_23"/*Min_23*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (24 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_24"/*Min_24*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (25 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_25"/*Min_25*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (26 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_26"/*Min_26*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (27 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_27"/*Min_27*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (28 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_28"/*Min_28*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (29 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_29"/*Min_29*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (30 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_30"/*Min_30*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (31 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_31"/*Min_31*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (32 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_32"/*Min_32*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (33 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_33"/*Min_33*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (34 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_34"/*Min_34*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (35 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_35"/*Min_35*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (36 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_36"/*Min_36*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (37 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_37"/*Min_37*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (38 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_38"/*Min_38*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (39 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_39"/*Min_39*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (40 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_40"/*Min_40*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (41 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_41"/*Min_41*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (42 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_42"/*Min_42*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (43 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_43"/*Min_43*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (44 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_44"/*Min_44*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (45 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_45"/*Min_45*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (46 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_46"/*Min_46*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (47 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_47"/*Min_47*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (48 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_48"/*Min_48*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (49 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_49"/*Min_49*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (50 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_50"/*Min_50*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (51 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_51"/*Min_51*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (52 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_52"/*Min_52*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (53 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_53"/*Min_53*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (54 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_54"/*Min_54*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (55 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_55"/*Min_55*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (56 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_56"/*Min_56*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (57 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_57"/*Min_57*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (58 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_58"/*Min_58*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (59 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_59"/*Min_59*/, (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                          if (0 == (new Date().getMinutes())) {setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_60"/*Min_60*/,  (getState("0_userdata.0.Gas-Flasche.Messwerte.Gewicht").val - getState("0_userdata.0.Gas-Flasche.Messwerte.Flaschen-Gewicht").val));  }
                        
                        
                        
                        setState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Schnitt"/*Schnitt*/, 
                        ((
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_01").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_02").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_03").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_04").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_05").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_06").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_07").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_08").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_09").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_10").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_11").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_12").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_13").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_14").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_15").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_16").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_17").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_18").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_19").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_20").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_21").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_22").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_23").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_24").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_25").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_26").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_27").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_28").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_29").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_30").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_31").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_32").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_33").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_34").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_35").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_36").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_37").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_38").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_39").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_40").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_41").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_42").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_43").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_44").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_45").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_46").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_47").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_48").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_49").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_50").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_51").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_52").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_53").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_54").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_55").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_56").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_57").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_58").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_59").val +
                         getState("0_userdata.0.Gewichtsdurchschnitt.1-Stunde.Min_60").val 
                         ) / 60));
                        });
                        

                        das Entspricht der Lila Linie.

                        und nun kommt die Grüne Line (hier bitte nicht verwirren lassen das da was mit Tages Durchschnitt steht)

                        Skript.PNG

                        den Rest kann ich erst heute abend (bin in einer anderen Zeitzone) testen.

                        Was ich jetzt schon mal sagen kann das wenn ich in Flote gar keine Angaben zu Skala mache geht die automatische Skala nicht auf null.

                        Vielen dank
                        Bruce

                        paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von paul53
                        #11

                        @ecurb sagte: das Entspricht der Lila Linie.

                        Die Werte zur Mittelwertbildung werden unmittelbar nach dem Schreiben wieder eingelesen, was aufgrund der asynchronen Ausführung von setState() nicht (oder nur manchmal) funktioniert. Außerdem sind 60 Datenpunkte Overkill, da ein Datenpunkt vom Typ "Liste" ("array") ausreicht (siehe meine Erweiterung).

                        @ecurb sagte in Sprung bei Durchschnittsberechnung:

                        und nun kommt die Grüne Line

                        Die Liste wird bei jedem Skriptstart mit dem zufälligen Messwert gefüllt.

                        Beide Skripte sollen eigentlich das gleiche machen (gleitender Durchschnitt über 60 Minutenwerte).

                        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
                        • E ecurb

                          @paul53
                          Hey
                          ich habe das mal erstellt und gestartet. Morgen denke ich kann ich sehen ob es funktioniert.

                          Es stimmt schon das der Blaue wert keine großen Ausreißer hat.
                          Genau aus diesem Grund verstehe ich ja nicht warum meine durchschnitts berechnung quasi Springt.
                          Gas-Messwerte_sprung.png

                          links und rechts springt der wert. Wärend dessen ist der wert dann wieder konstant.

                          Und ich berechne den durchschnitt ja in 2 verschiedenen Skripten und auf 2 verscheidene arten.

                          Viele grüße

                          Bruce

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von paul53
                          #12

                          @ecurb sagte: links und rechts springt der wert. Wärend dessen ist der wert dann wieder konstant.

                          Mir fällt auf, dass die Dauer der Abweichung genau eine Stunde beträgt, d.h. in der Liste weicht ein Wert - abgetastet um 9:56 Uhr - stark nach unten ab und nach einer Stunde ist dieser Wert "raus geschoben". Dieser Wert ist wahrscheinlich 0, da die Abweichung ca. -0,3 (18,4 / 60) beträgt.

                          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
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          588

                          Online

                          32.7k

                          Benutzer

                          82.5k

                          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