+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 15
  1. #1
    Registriert seit
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,673

    Lightbulb Archive: Mittelwert

    Das folgende Beispiel zeigt, wie man für eine Steuerung einer Beschattung den Mittelwert über 30 Minuten erhält.
    Dies ist darum wichtig, damit die Rollläden bei jeder kleinen Wolke sich nicht wieder öffnen.
    ACHTUNG: man erhält NICHT den zeitlich gewichteten Mittelwert,
    da die Werte nur bei jeder Änderung im Archiv gespeichert werden.
    Beispiel: über 10 Stunden haben wir 20 Grad und 5 Minuten 30 Grad
    Es gibt dann 2 Datensätze im Archiv - logisch, daß es nicht 25 Grad im Durchschnitt waren.

    MST

    Demo-Skript (IDs sind anzupassen, 'echo' zu Testzwecken):
    PHP-Code:
    $archiveID 23247 /*[Archive Handler]*/;
    $objectID 37855 /*[Wetter\Pyranometer\Helligkeit]*/;
    $endtime time(); // time() for "now"
    $starttime time()-(30*60); // for n minutes ago
    $limit 0// kein Limit

    //print_r(AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit));
    $buffer AC_GetLoggedValues($archiveID$objectID$starttime$endtime$limit);
    $anzahl 0;
    $summe 0;
    foreach (
    $buffer as $werte){
        
    $wert $werte["Value"];
        
    $anzahl $anzahl +1;
        
    $summe $summe $wert;
    }
    echo 
    "N-Werte: ".$anzahl"\n";
    $mittelw $summe $anzahl;
    echo 
    "Mittelwert: " $mittelw "\n";
    SetValue(35648 /*[Wetter\Pyranometer\Helligkeit Mittel 30min]*/,$mittelw); 
    Geändert von steiner (07.06.10 um 12:42 Uhr)

  2. #2
    Registriert seit
    Jan 2007
    Ort
    Heimbach
    Beiträge
    478

    Hallo Michael,

    danke für das Script

    Gibt es auch noch die Möglichkeit den TimeStamp zu jedem Wert zu bekommen? Wenn Ja wie lautet da der IPS-Befehl?

    Danke & Gruß

    Philipp

  3. #3
    Registriert seit
    May 2006
    Ort
    Hannover
    Beiträge
    3,079

    Es gibt dann 2 Datensätze im Archiv - logisch, daß es nicht 25 Grad im Durchschnitt waren.
    Ich würde vermuten, überhaupt nicht . Es gibt die Zwischenwerte ja nicht.
    MfG Ralf

  4. #4
    Registriert seit
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,673

    @Ralf,

    was möchtest Du mir sagen

    @Philipp,

    PHP-Code:
    print_r(AC_GetLoggedValues($archiveID$objectID$starttime$endtime$limit)); 
    damit sollten alle Klarheit beseitigt sein

    MST

  5. #5
    Registriert seit
    May 2006
    Ort
    Hannover
    Beiträge
    3,079

    Zitat Zitat von steiner Beitrag anzeigen
    @Ralf,
    was möchtest Du mir sagen
    Sorry, die Antwort sollte an Phillip gehen. Er möchte ja den "TimeStamp zu jedem Wert" herausfinden.

    Und so wie du es beschrieben hast
    Zitat Zitat von steiner Beitrag anzeigen
    Beispiel: über 10 Stunden haben wir 20 Grad und 5 Minuten 30 Grad
    Es gibt dann 2 Datensätze im Archiv ...
    und wenn ich das dann richtig verstanden habe, bekommt er die Zwischentimestamps nur bedingt per Abfrage.
    Er kann den ersten Wert abfragen und muss dann jeweils solange das Abfrageintervall addieren bis der nächste Datensatz erreicht ist.
    MfG Ralf

  6. #6
    Registriert seit
    Mar 2006
    Beiträge
    3,421

    Hallo steiner,

    interessantes Script.
    Ich hatte meine Rollladensteuerung bisher über drei Hilfsvariablen realisiert.
    Einmal der addierte Helligkeitswert(*1) und als zweites einen Counter(*2).
    Nach fünf addierten Werten wurde *1 durch *2 geteilt und dann der Mittelwert in die Durchschnittsvariable (*3) geschrieben, welche dann bei Aktualisierung das Rollladenscript triggerte. Das habe ich nun schon seit IPS V1 in Anwendung.
    Da gabs ja noch kein Logging von Daten

    Ich werde auf alle Fälle mal deine Version ausprobieren und dann eventuell ein paar Variablen einsparen können...
    Gruß nancilla

  7. #7
    Registriert seit
    Jan 2007
    Ort
    Heimbach
    Beiträge
    478

    Sorry, die Antwort sollte an Phillip gehen. Er möchte ja den "TimeStamp zu jedem Wert" herausfinden.
    Hallo Ralf,

    nein nicht von jedem Wert, sondern von den gespeicherten und abgerufenen Werten. Damit kann ich dann die Dauer der einzelnen Werte herausfinden, und damit einen gewichteten Mittelwert ermitteln.

    @Michael: Danke für den Hinweis

    Hat auch geklappt

    ANbei das Script um die gewichtete Mittelwertbildung angepasst:

    PHP-Code:
    <?
    $archiveID 
    29117 /*[Archive Handler]*/;
    $objectID 37549 /*[LCN\Schopf\Helligkeit\Helligkeit]*/;
    $endtime time(); // time() for "now"
    $starttime time()-(30*60); // for n minutes ago
    $limit 0// kein Limit

    //print_r(AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit));
    $buffer AC_GetLoggedValues($archiveID$objectID$starttime$endtime$limit);
    $anzahl 0;
    $summe 0;
    $totaldauer 0;
    foreach (
    $buffer as $werte){
        
    $wert $werte["Value"];
        
    $dauer $werte["Duration"];
        
    $anzahl $anzahl 1;
        
    $totaldauer $totaldauer $dauer;
         
    $summe $summe + ($wert*$dauer);
    }
    echo 
    "N-Werte: ".$anzahl"\n";
    $mittelw $summe $totaldauer;
    echo 
    "Mittelwert: " $mittelw "\n";

    ?>
    Gruß Philipp

  8. #8
    Registriert seit
    Mar 2006
    Beiträge
    3,421

    Standard Logging bis die DB "platzt"?

    Für alle, die nicht ewig die Helligkeitswerte mitloggen wollen, habe ich nochmal das Script von *philipp* modifiziert.
    Dabei werden alle Werte, ab 2 Tage vorher bis zum relevanten Zeitraum, aus der Datenbank gelöscht.... unwiderruflich!
    Zum besseren Verständnis habe ich dazu neue Variablennamen verwendet.

    PHP-Code:
    <?
    $archiveID 
    30962 /*[Archive Handler]*/ ;
    $objectID 42405 /*[-Wetter-\Helligkeit]*/ ;
    $endtime time(); // time() for "now"
    $starttime time()-(30*60); // for n minutes ago
    $limit 0// kein Limit

    //print_r(AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit));
    $buffer AC_GetLoggedValues($archiveID$objectID$starttime$endtime$limit);
    $anzahl 0;
    $summe 0;
    $totaldauer 0;
        foreach (
    $buffer as $werte)
        {
       
    $wert $werte["Value"];
       
    $dauer $werte["Duration"];
       
    $anzahl $anzahl 1;
       
    $totaldauer $totaldauer $dauer;
       
    $summe $summe + ($wert*$dauer);
        }
    echo 
    "N-Werte: ".$anzahl"\n";
    $mittelw $summe $totaldauer;
    echo 
    "Mittelwert: " $mittelw "\n";
    SetValueFloat(34586 /*[Test\Helligkeit-Mittelwert]*/ ,$mittelw);

    // Gespeicherte Werte, die älter sind als zur Bewertung relevant (bis 2 Tage zurück) aus DB löschen
    $starttime_del time()-(2880*60);
    $endtime_del $starttime;
    AC_DeleteVariableData($archiveID$objectID$starttime_del$endtime_del);
    ?>
    Gruß nancilla

  9. #9
    Registriert seit
    Sep 2007
    Ort
    Didderse
    Beiträge
    682

    Kurze Frage, wird das Script über die Helligkeit getriggert ? oder alle 30 Minuten gestartet ? Ich kann das irgendwie nicht rauslesen ...

  10. #10
    Registriert seit
    Mar 2006
    Beiträge
    3,421

    Zitat Zitat von _muckel_ Beitrag anzeigen
    Kurze Frage, wird das Script über die Helligkeit getriggert ?
    Ja.
    Sonst würde es ja nicht dynamisch reagieren und am sturen "Halbe Stunde-Rythmus" kleben.
    Gruß nancilla

Ähnliche Themen

  1. Archive Handler
    Von Clipper_l im Forum Skripte, PHP, SQL
    Antworten: 0
    Letzter Beitrag: 19.03.10, 13:52
  2. Datenbank, Archive Handler, "Objekt #15185 existiert nicht"
    Von audi2010 im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 6
    Letzter Beitrag: 30.01.10, 11:38
  3. Archive Handler / Utils Handler
    Von Bussard013 im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 1
    Letzter Beitrag: 16.09.09, 21:42