+ Antworten
Seite 1 von 4 1 2 3 ... LetzteLetzte
Ergebnis 1 bis 10 von 39
  1. #1
    Registriert seit
    Oct 2007
    Ort
    Villach,Kärnten,Österreich
    Beiträge
    2,901

    Standard Gleitenden Mittelwert oder gleitenden Median berechnen

    Hallo Freunde

    es kommt ja öfter mal vor das man aus anfallenden Daten den gleitenden Mittelwert oder den Median berechnen möchte.
    d.h. den Mittelwert (oder Median) aus den Werten welche in den letzten x Sekunden gelogged wurden.
    Nur mit Variablen ist das ein rechter Krampf und nicht flexibel, aber wir haben ja unsere Datenbank.
    Die nackten AC_Getxxx Funktionen geben das allerdings in dieser Form auch nicht nicht her.

    Hier also zwei kleine Funktionen die dieses erledigen:

    PHP-Code:
    <?
    $IDArchiveHandler 
    22801 /*your Archive Handler ID*/;
    $varId 37190 /*Var Id you want to examine*/;
    $interval 50/*Timespan in seconds for Mean/Median Calculation*/;
    $default 0/* default value in case no data capturd */

    echo "Mean: ".getMean ($IDArchiveHandler,$varId,$interval,$default);
    echo 
    chr (13). chr (10);
    echo 
    "Median: ".getMedian ($IDArchiveHandler,$varId,$interval,$default);



    function 
    getMean ($IDArchivehandler,$varId,$log_interval,$default) {
    $logData AC_GetLoggedValues ($IDArchivehandler$varIdtime()- $log_interval,time(),-1);
    if (
    count($logData) <1) return $default;
    foreach (
    $logData as $key => $data)
    {
        
    $value[$key] = $data['Value'];
    }
    return 
    array_sum($value)/count($value);
    }

    function 
    getMedian ($IDArchivehandler,$varId,$log_interval,$default) {
    $logData AC_GetLoggedValues ($IDArchivehandler$varIdtime()-$log_interval,time(),-1);
    if (
    count($logData) <1) return $default;
    foreach (
    $logData as $key => $data)
    {
        
    $value[$key] = $data['Value'];
    }
    asort($value);
    return 
    $value[count($value)/2];
    }
    ?>
    edit 05.12.2014 : Fehlerbehandlung eingebaut, wenn im Zeitraum keine Daten gelogged wurden

    Verwendung ist wohl selbsterklärend
    Gruß
    bb
    Geändert von bbernhard (05.12.14 um 15:19 Uhr)

  2. #2
    Registriert seit
    Sep 2014
    Ort
    Limeshain (Hessen)
    Beiträge
    5,265

    Danke für das Skript, sieht gut aus und macht was es soll


    Hatte bisher dieses hier verwendet:
    http://www.ip-symcon.de/forum/thread...295#post228295
    ...und das hat mir teilweise komische Werte ausgegeben (vlt. war ich aber auch zu doof ).


    Hatte beim 1. Aufruf vom Skript (Zeitspanne 30 Sek.) einen Fehler in Zeile 18 und Folgefehler, dass das array_sum was anderes erwarten würde und keine Ahnung, dann hab ich die Zeitspanne erhöht auf 900, dann lief das Skript. Dann die Zeitspanne zum Testen auf 1 gestellt, funktioniert trotzdem. Seltsam Egal, mehrere Variablen getestet und es funktioniert Danke!

    Grüße,
    Chris
    IP-Symcon Module >> www.bayaro.net << Verfügbare Module: BatterieMonitor, BundesligaTabelle, Enigma2BY, HeizölPreise, Horoskop, HostMonitor, IPSInformations, MELCloud, Müllabfuhr, PJLink, RSS, TankerkönigSpritpreise, xREL
    IPS Unlimited, ~1200 Scripte, ~7000 Variablen

  3. #3
    Registriert seit
    Sep 2014
    Ort
    Limeshain (Hessen)
    Beiträge
    5,265

    Eben hatte ich wieder einen Fehler, Variable geändert, Skript mit Zeitspanne 60 Sekunden ausgeführt, Fehler, mehrmals ausgeführt und beim 3. oder 4. Mal ausführen wurden mir auf einmal Werte ausgespuckt und jetzt läuft es wieder... Hmmm...


    Fehler:
    PHP-Code:
    Notice:  Undefined variablevalue in C:\IP-Symcon\scripts\30198.ips.php on line 18

    Warning
    :  array_sum() expects parameter 1 to be array, null given in C:\IP-Symcon\scripts\30198.ips.php on line 18

    Notice
    :  Undefined variablevalue in C:\IP-Symcon\scripts\30198.ips.php on line 18

    Warning
    :  Division by zero in C:\IP-Symcon\scripts\30198.ips.php on line 18
    Mean


    Warning:  asort() expects parameter 1 to be array, null given in C:\IP-Symcon\scripts\30198.ips.php on line 27
    Median


    Jetzt hab ich noch mehrmals das Skript ausführen lassen und immer mal den Interval geändert und auf einmal lief es wieder nicht mehr, dann kurz gewartet und dann nach ein paar weiteren Versuchen wurden dann wieder Werte ausgegeben Als würde der Archiv-Handler dicht machen und das Skript bekommt keine Werte und deswegen der Fehler...seltsam...
    Geändert von Bayaro (05.12.14 um 11:03 Uhr)
    IP-Symcon Module >> www.bayaro.net << Verfügbare Module: BatterieMonitor, BundesligaTabelle, Enigma2BY, HeizölPreise, Horoskop, HostMonitor, IPSInformations, MELCloud, Müllabfuhr, PJLink, RSS, TankerkönigSpritpreise, xREL
    IPS Unlimited, ~1200 Scripte, ~7000 Variablen

  4. #4
    Registriert seit
    Oct 2007
    Ort
    Villach,Kärnten,Österreich
    Beiträge
    2,901

    Servus

    Sehr merkwürdig.Es läuft heir seit 2 tagen.
    Ich rufe es für 4 variablen im 50sec Intervall auf. Soweit hab ich noch kein Fehlverhalten beobachtet.

    Wär natürlich möglich eine Abfrage einzubauen damit es zumindest keinen Fehler gibt, im falle das vom Archive Handler nix zurückkommt.

    gruß
    bb

  5. #5
    Registriert seit
    Sep 2014
    Ort
    Limeshain (Hessen)
    Beiträge
    5,265

    Vermutlich kommt auch kein Fehler, wenn man das "normal" benutzt

    Man könnte etwas einbauen um den Fehler abzufangen, dass sich ein Timer stellt und dann nach X Sekunden erneut versucht wird die Werte zu holen. Das vlt. 3 Mal und wenn es bis dahin nicht geklappt hat, dann ERROR und Ende... Aber das kann ja jeder für sich machen

    Grüße,
    Chris
    IP-Symcon Module >> www.bayaro.net << Verfügbare Module: BatterieMonitor, BundesligaTabelle, Enigma2BY, HeizölPreise, Horoskop, HostMonitor, IPSInformations, MELCloud, Müllabfuhr, PJLink, RSS, TankerkönigSpritpreise, xREL
    IPS Unlimited, ~1200 Scripte, ~7000 Variablen

  6. #6
    Registriert seit
    Apr 2012
    Ort
    127.0.0.1 / ::1
    Beiträge
    1,140

    Zitat Zitat von Bayaro Beitrag anzeigen
    Hatte bisher dieses hier verwendet:
    http://www.ip-symcon.de/forum/thread...295#post228295
    Bei diesem hatte ich ein ähnliches Problem (Division by Zero), wenn Änderungen erfolgt sind oder gerade nicht kontinuierlich Werte vorhanden waren. Es ließ sich durch einfügen von
    PHP-Code:
    //echo "N-Werte: ".$anzahl. "\n";
    If ($anzahl == 0) {
          
    $anzahl 1;

    recht einfach umgehen.

    Beim Spielen mit bb's Skript kann ich das von @Bayaro beschriebene Verhalten bestätigen. Wenn nach kurzer Zeit kontinuierlich Werte vorhanden sind, läuft`s absolut schmerzfrei.

    Ich frage mich aber gerade ob der Archive Handler ein Problem hat oder das normales Verhalten ist?

    Cheers
    /Jens
    "The condition of any backup is unknown until a restore is attempted." - E. Schrödinger

    Symcon V5.x UNL Ninja / ~4k VARs
    HM, SONOS, LevelJet, Alexa, Cyberdyne Systems, ...

  7. #7
    Registriert seit
    Oct 2007
    Ort
    Villach,Kärnten,Österreich
    Beiträge
    2,901

    OK,OK wenn keine Daten da sind, kann man auch nix berechnen.

    Hab euch eine passende Abfrage und Defaultwert eingebaut.
    bitte von erstem Post neu kopieren.

    Hatte bei mir nix bemerkt, da meine Daten von 1Wire kommen und immer hundertprozentig vorhanden sind.

    viel Spass
    bb
    Geändert von bbernhard (05.12.14 um 15:20 Uhr)

  8. #8
    Registriert seit
    Oct 2010
    Ort
    HH
    Beiträge
    4,613

    Kleines Detail-Genörgel *Schpässle*

    Beim Ermitteln des Durchschnitts sollte man darauf achten, dass die Messintervalle gleich sind, ansonsten kommt Murks raus (bzw. sollte man dann mit gewichtetem Durchschnitt arbeiten)

    Beim ermitteln des Medians ist es besser, mit ungerader Anzahl (und einer möglichst hohen Anzahl => Statistiker sagen: mindestens 30 Messwerte) von Messwerten zu arbeiten.

    Hier mal eine Median-Funktion, die etwas fehlertoleranter ist

    PHP-Code:
    function median($array = array())
    {
        
    $count count($array);
        if(
    $count <= 0)
        {
           return 
    false;
        }
        
    sort($arraySORT_NUMERIC);
        
        if(
    $count == 0)
        {
           return (
    $array[floor($count/2)-1] + $array[floor($count/2)]) / 2;
        }
        else
        {
           return 
    $array[$count/2];
        }

    mit gebücktem Gruss
    Raketenschnecke
    IPS-Projekte und -Tools auf
    www.raketenschnecke.net

  9. #9
    Registriert seit
    Oct 2007
    Ort
    Villach,Kärnten,Österreich
    Beiträge
    2,901

    Servus Schnecke

    Zitat Zitat von Raketenschnecke Beitrag anzeigen
    (und einer möglichst hohen Anzahl => Statistiker sagen: mindestens 30 Messwerte) von Messwerten zu arbeiten.
    .. hast dafür eine Quelle ?
    Beruflich verwende ich den Median recht oft, von einer Mindestmesswertanzahl hab ich bis jetzt nichts gehört. Was aber nix heisen muß.

    Kommt aber wohl eher darauf an was man erreichen will:
    - Mittelwert für kontinuierliche ausreißerbereinigte Daten
    - Median für Daten wo mit Ausreißern gerechnet werden muß.

    gruß
    bb

  10. #10
    Registriert seit
    Oct 2010
    Ort
    HH
    Beiträge
    4,613

    ja, die Quelle ist mein Haus- und Hof-Mathematiker, mit dem ich regelmäßig meine Projekte durchkaue (na ja, jetzt nicht mehr so oft )
    Und Wenn Du SixSigma-Kurse, insbesondere Statistik eingeflößt bekommst, sollte das auch ein Thema sein
    Grundsätzlich gilt: je mehr Messwerte in der Grundgesamtheit, desto belastbarer der Mittelwert oder Median.

    Wie Du schon sagst: man muss wissen, was man erreichen will. Am besten schaut man sich die Ergebnisse aus den Messreihen nach beiden Modellen an und entscheidet dann, was besser zur gewünschten Aussage passt.
    mit gebücktem Gruss
    Raketenschnecke
    IPS-Projekte und -Tools auf
    www.raketenschnecke.net

Ähnliche Themen

  1. Graphendarstellung: Steigend statt Mittelwert
    Von pleibling im Forum WebFront
    Antworten: 2
    Letzter Beitrag: 13.02.14, 14:59
  2. Mittelwert aus zwei DS1820
    Von Borastoni im Forum Skripte, PHP, SQL
    Antworten: 13
    Letzter Beitrag: 22.12.11, 20:55
  3. Wie kann man berechnen ob Tag oder Nacht ist?
    Von mws im Forum Skripte, PHP, SQL
    Antworten: 4
    Letzter Beitrag: 03.10.11, 16:24
  4. Archive: Mittelwert
    Von steiner im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 14
    Letzter Beitrag: 21.07.10, 16:40
  5. Wärmemenge berechnen
    Von Doctor Snuggles im Forum Haustechnik
    Antworten: 5
    Letzter Beitrag: 27.03.06, 21:40