Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS Mittelwert

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Featurewunsch] LBS Mittelwert

    Da ich null Ahnung von Programmiersprachen habe etc., frage ich mal ganz dreist, ob jemand schon mal einen LBS gemacht hat mit dem er einen Mittelwert bildet.

    Z.b. den Mittelwert einer Temperatur, über Zeitraum X oder bis reset.
    Für den HS gab es mal solch einen Baustein, dem konnte man noch sagen wie oft der Mittelwert berechnet werden soll.

    Beim HS gibt es hier im Forum z.b. den Baustein 19957



    #2
    Der Baustein kummuliert lediglich die Werte (nehme ich mal an - ich kenne die HS-Syntax nicht wirklich). Für einen "echten" Mittelwert (gleitender Durchschnitt, etc.) müssen aber alle Daten des entsprechenden Zeitraums vorliegen (Array) - ansonsten genügt die "Formel" Mittelwert=(letzter_Mittelwert+x)/2
    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

    Kommentar


      #3
      Wollte es über einen Zeitraum "x"

      Z.b. Außentemp. über Zeitraum x -> so könnte man die Heizungsaktoren automatisch auf Sommer/Winter stellen.

      Kommentar


        #4
        Ich baue gerade so einen Baustein rudimentär hier:

        https://service.knx-user-forum.de/?c...ad&id=19000130

        Ich bastle aber noch an den remanent Geschichten, und an einer anderen Auswertung.
        Mfg Micha
        Qualifizierte und richtige Antworten gibts nur von Leuten, die während des Neustarts des HS Zeit für einen Post haben!

        Kommentar


          #5
          Super genau sowas habe ich gesucht, danke...

          Kommentar


            #6
            Und ich werde mal einen LBS bauen, der einen Mittelwert (u.a.) aus einem Archiv berechnet. Macht m.E. durchaus Sinn und vereinfacht das Arbeiten mit einem Baustein dieser Art.
            EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

            Kommentar


              #7
              Soooo, bittesehr Wird im nächsten Update als 18000020 dabei sein:

              PHP-Code:
              ###[DEF]###
              [name        =Archiv: Mittelwert/Min/Max    ]

              [e#1        =Trigger >0            ]
              [e#2        =DatenarchivID             ]
              [e#3        =Modus 0/1/2/3/4 #init=0    ]

              [a#1        =AVG        ]
              [a#2        =MIN        ]
              [a#3        =MAX        ]
              [a#4        =CNT        ]
              [a#5        =Fehler        ]
              ###[/DEF]###


              ###[HELP]###
              Dieser Baustein berechnet den Mittelwert, den Minimum-/Maximumwert und die Anzahl der Einträge innerhalb eines Intervalls in einem Datenarchiv.

              E3 (Modus) definiert die Art des Intervalls: Es kann entweder eine bestimmte Anzahl von Einträgen bestimmt werden (E3=0) oder ein definierter Zeitraum in Sekunden/Minuten/Stunden/Tagen (E3=1..4).
              Das Intervall bezieht sich dabei stets auf das "Ende" des Datenarchivs, d.h. es wird vom aktuellsten Eintrag ausgegangen. Ale Referenzzeit für ein Zeitintervall (E3=1..4) wird stets das aktuelle Datum bzw. Uhrzeit verwendet.

              Die gewünschte Anzahl der Einträge bzw. die Anzahl der Zeitintervalle werden mit E1 bestimmt, jedes neue Telegramm >0 an E1 triggert den Baustein.

              Sind keine Einträge im gewählten Intervall vorhanden wird A5=1 gesetzt (Fehler), A4 wird auf 0 gesetzt und A1..A3 bleiben unverändert.


              E1: Ein neues Telegramm >0 triggert den Baustein (je nach Modus bestimmt E1 die Anzahl der Einträge oder einen Zeitraum)

              E2: Auswahl der Datenarchiv-ID (wird in der Konfiguration in Klammern angezeigt)

              E3: Modus: 
              <ul>
                  <li>0=E1 bestimmt die Anzahl der Einträge (ausgehend vom aktuellsten/letzten Eintrag)</li>
                  <li>1=E1 bestimmt den Zeitraum in Sekunden (die Referenzzeit ist die aktuelle Zeit)</li>
                  <li>2=E1 bestimmt den Zeitraum in Minuten (die Referenzzeit ist die aktuelle Zeit)</li>
                  <li>3=E1 bestimmt den Zeitraum in Stunden (die Referenzzeit ist die aktuelle Zeit)</li>
                  <li>4=E1 bestimmt den Zeitraum in Tagen (die Referenzzeit ist die aktuelle Zeit)</li>
              </ul>

              A1: AVG (Mittelwert): Bei jedem Triggern des Bausteins wird hier ggf. der Mittelwert des Intervalls ausgegeben.
              A2: MIN (Minimum): Bei jedem Triggern des Bausteins wird hier ggf. der kleinste Wert innerhalb des Intervalls ausgegeben.
              A3: MAX (Maximum): Bei jedem Triggern des Bausteins wird hier ggf. der größte Wert innerhalb des Intervalls ausgegeben.
              A4: CNT (Anzahl): Bei jedem Triggern des Bausteins wird hier die Anzahl der Einträge innerhalb des Intervalls ausgegeben.

              A5: Fehler: Bei jedem Triggern des Bausteins wird A5 auf 0, im Fehlerfall auf 1 gesetzt: 
              <ul>
                  <li>0=kein Fehler</li>
                  <li>1=Fehler (Archiv nicht vorhanden, keine Einträge im gewählten Intervall vorhanden oder Parameter unvollständig bzw. fehlerhaft)</li>
              </ul>
              ###[/HELP]###


              ###[LBS]###
              <?
              function LB_LBSID($id) {
                  if ($E=getLogicEingangDataAll($id)) {
                  
                      if ($E[1]['refresh']==1 && $E[1]['value']>0) {

                          $E[1]['value']=abs(intVal($E[1]['value']));
                          $E[2]['value']=abs(intVal($E[2]['value']));
                          $E[3]['value']=abs(intVal($E[3]['value']));

                          if ($E[1]['value']>0 && $E[2]['value']>0 && $E[3]['value']>=0 && $E[3]['value']<=4) {

                              if ($E[3]['value']==0) {$ss1=sql_call("SELECT COUNT(gavalue) AS vanz,AVG(CAST(gavalue AS DECIMAL(20,4))) AS vavg,MIN(CAST(gavalue AS DECIMAL(20,4))) AS vmin,MAX(CAST(gavalue AS DECIMAL(20,4))) AS vmax FROM (SELECT gavalue FROM edomiLive.archivKoData WHERE (targetid=".$E[2]['value'].") ORDER BY datetime DESC,ms DESC LIMIT 0,".$E[1]['value'].") void");}
                              else if ($E[3]['value']==1) {$ss1=sql_call("SELECT COUNT(gavalue) AS vanz,AVG(CAST(gavalue AS DECIMAL(20,4))) AS vavg,MIN(CAST(gavalue AS DECIMAL(20,4))) AS vmin,MAX(CAST(gavalue AS DECIMAL(20,4))) AS vmax FROM (SELECT gavalue FROM edomiLive.archivKoData WHERE (targetid=".$E[2]['value']." AND UNIX_TIMESTAMP(datetime)>=".strtotime('now -'.$E[1]['value'].' seconds').")) void");}
                              else if ($E[3]['value']==2) {$ss1=sql_call("SELECT COUNT(gavalue) AS vanz,AVG(CAST(gavalue AS DECIMAL(20,4))) AS vavg,MIN(CAST(gavalue AS DECIMAL(20,4))) AS vmin,MAX(CAST(gavalue AS DECIMAL(20,4))) AS vmax FROM (SELECT gavalue FROM edomiLive.archivKoData WHERE (targetid=".$E[2]['value']." AND UNIX_TIMESTAMP(datetime)>=".strtotime('now -'.$E[1]['value'].' minutes').")) void");}
                              else if ($E[3]['value']==3) {$ss1=sql_call("SELECT COUNT(gavalue) AS vanz,AVG(CAST(gavalue AS DECIMAL(20,4))) AS vavg,MIN(CAST(gavalue AS DECIMAL(20,4))) AS vmin,MAX(CAST(gavalue AS DECIMAL(20,4))) AS vmax FROM (SELECT gavalue FROM edomiLive.archivKoData WHERE (targetid=".$E[2]['value']." AND UNIX_TIMESTAMP(datetime)>=".strtotime('now -'.$E[1]['value'].' hours').")) void");}
                              else if ($E[3]['value']==4) {$ss1=sql_call("SELECT COUNT(gavalue) AS vanz,AVG(CAST(gavalue AS DECIMAL(20,4))) AS vavg,MIN(CAST(gavalue AS DECIMAL(20,4))) AS vmin,MAX(CAST(gavalue AS DECIMAL(20,4))) AS vmax FROM (SELECT gavalue FROM edomiLive.archivKoData WHERE (targetid=".$E[2]['value']." AND UNIX_TIMESTAMP(datetime)>=".strtotime('now -'.$E[1]['value'].' days').")) void");}

                              if ($n=sql_result($ss1)) {
                                  if ($n['vanz']>0) {
                                      setLogicLinkAusgang($id,1,$n['vavg']);
                                      setLogicLinkAusgang($id,2,$n['vmin']);
                                      setLogicLinkAusgang($id,3,$n['vmax']);
                                      setLogicLinkAusgang($id,4,$n['vanz']);
                                      setLogicLinkAusgang($id,5,0);
                                  } else {
                                      setLogicLinkAusgang($id,4,0);
                                      setLogicLinkAusgang($id,5,1);
                                  }
                              } else {
                                  setLogicLinkAusgang($id,5,1);
                              }
                              sql_close($ss1);

                          } else {
                              setLogicLinkAusgang($id,5,1);
                          }
                          
                      }
                  }
              }
              ?>
              ###[/LBS]###


              ###[EXEC]###
              <?

              ?>
              ###[/EXEC]###
              EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

              Kommentar

              Lädt...
              X