+ Antworten
Ergebnis 1 bis 9 von 9
  1. #1
    Registriert seit
    May 2013
    Ort
    München Ost
    Beiträge
    106

    Question Werte Ausschlag begrenzen um zB kurze Temperaturänderungen zu ignorieren.

    Servus,

    leider hab ich nix gefunden weil ich schon nicht weiss nach was ich suchen soll :-(

    Thema:
    Ich regle eine Wärmepumpe eines kl. Pools u.a. abhängig von der Außentemperatur da es unter bestimmten Werten wenig effizient ist und ich sie dann lieber ausschalten lasse.
    Derzeit hab ich eine Einschalt-Temp die ich Vorgebe und je eine Hysterese von 4 Kelvin die ich bei Änderung mit ausrechne. zB Wärmepumpe EIN wenn über 15 Grad, AUS wenn unter 11 Grad.
    Problem:
    Es kommt vor dass ich mal 6-10 Grad Temp Sprünge habe, weil eben grad ein kurzer eisiger Wind vorbei zieht etc. Daher kommt es immer wieder mal vor dass die WP AUS schaltet obwohl es 3 Min später wieder warm genug ist.
    Ausreißer nach oben sind genauso doof wenn es mal für 2 Min zB 18 Grad hat, aber dann laufend 14 Grad, sprang die WP eigentlich ungewünscht an.
    Gesucht:
    Eine Möglichkeit wie ich Temperatur Ausreißer (nach oben und unten) limitieren kann.
    Wie stellt man das am Schlauesten an um trotzdem noch mitzubekommen wenn es eben warm genug ist oder zu kalt wird?

    Dankbar für ein paar Ideen bei überschaubarem Aufwand :-)

    Cheers Seppm

  2. #2
    Registriert seit
    Feb 2010
    Ort
    Kreis Wesel
    Beiträge
    256

    Hallo Seppm,

    du könntest einen Script-Timer setzen und den Schaltvorgang nach Scriptablauf (z.B. 3 Minuten) starten, wenn die Bedingungen weiterhin erfüllt sind.

    Gruß, Peter

  3. #3
    Registriert seit
    Dec 2011
    Ort
    Bad Bramstedt
    Beiträge
    347

    Mittelwert über die letzten x Messwerte bilden?
    Titus
    IPS 5.4 | Raspberry Pi 4 | RaspberryMatic | Homematic Wetterstation | Pure Multiroom-System | Kodi | FritzBox 7590 | Echos | Tasmota | 9,6 kWp PV | 12,5 kW Sonnen-Batterie | SolarEdge WR

  4. #4
    Registriert seit
    Jul 2011
    Beiträge
    151

    Hallo Seppm,

    du könntest auch den Median der geloggten Variablenwerte heranziehen.
    Der sollte nicht so starke Schwankungen aufweisen.

    PHP-Code:
    <?php

    // Skript zur Ermittlung des Medians der Werte einer geloggten Variablen

    // Archiv- und Variablen ID angeben
    $archivID 50305;
    $variableID 12075;

    // Zeitspanne für die der Median bestimmt werden soll definieren.
    // Länge des zu berücksichtigenden Zeitintervalls in Sekunden
    $intervall 1800
    // Ende des Zeitintervalls. time() falls die zuletzt geloggten Werte berücksichtigt werden sollen,
    // ansonsten Timestamp des gewünschten Endes.
    $endTS time();
    // Startzeitpunkt berechnen
    $startTS $endTS $intervall;

    // Innerhalb des Zeitraums geloggte Werte ermitteln
    $loggedValues AC_GetLoggedValues($archivID,$variableID,$startTS,$endTS,0);

    // Array der geloggten Werte nach dem Variablenwert sortieren
    usort($loggedValuesbuild_sorter("Value"));

    // Anzahl der geloggten Werte ermitteln
    $nValues count($loggedValues);

    // Median der geloggten Werte bestimmen
    if($nValues%== 0){
        
    $median = ($loggedValues[($nValues/2)-1]['Value'] + $loggedValues[$nValues/2]['Value']) / 2;
    }else{
        
    $median $loggedValues[floor($nValues/2)]['Value'];
    }

    // Kontrolle
    //print $nValues."\n";
    //print ($nValues/2)."\n";
    print $median."\n";
    //print_r($loggedValues);

    // Funktion von https://stackoverflow.com/questions/2699086/how-to-sort-multi-dimensional-array-by-value entliehen
    function build_sorter($key) {
       return function (
    $a$b) use ($key) {
          return 
    strnatcmp($a[$key], $b[$key]);
       };
    }
    Die IDs und den gewünschten Zeitraum müsstest du natürlich anpassen.

    Gruß,
    Ralla

    P.S.
    Wäre es nicht schön, wenn AC_GetAggregatedValues den Median mit liefern würde?
    Geändert von Ralla (19.09.20 um 16:30 Uhr)

  5. #5
    Registriert seit
    Apr 2019
    Ort
    Etelsen bei Bremen
    Beiträge
    775

    Hi,
    wenn AC_GetLoggedValues die Werte nicht vor der Rückgabe sortiert liefert deine Funktion nur den mittleren Wert aber nicht den Median. In diesem Fall wären weiterhin große Ausreißer möglich.

    Bei Median müssen die Werte erst der Größe nach sortiert werden bevor der mittlere Wert zurückgeliefert wird.

    Gleitender Mittelwert wäre einfacher und nicht so rechenintensiv.

    Ralf
    IPS 5.5 Unlimited / Docker / Synology DS415+

  6. #6
    Registriert seit
    Jul 2011
    Beiträge
    151

    @HarmonyFan

    Ja, wenn der Ausdruck usort($loggedValues, build_sorter("Value")) nicht dazu führen würde, dass das Array $loggedValues anschliessend nach Value sortiert vorläge, hättest du fast recht (vielleicht ein bisschen viel Konjunktiv), denn der Median ist nicht einfach der mittlere Wert der sortierten Liste.

    Bei einer geraden Anzahl von Listenelementen gibt es ja schliesslich keinen mittleren Wert.

    Daher berücksichtigt dieser Abschnitt
    PHP-Code:
    // Median der geloggten Werte bestimmen
    if($nValues%== 0){
        
    $median = ($loggedValues[($nValues/2)-1]['Value'] + $loggedValues[$nValues/2]['Value']) / 2;
    }else{
        
    $median $loggedValues[floor($nValues/2)]['Value'];

    den Unterschied zwischen einer geraden und ungeraden Anzahl von Listenelementen.

    Die Verwendung des Medians hat halt den Vorteil, dass er im Gegensatz zum arithmetischen Mittel kaum von Ausreissern beeinflusst wird und um die Unterdrückung der Wirkung von Ausreissern ging es Seppm doch.

    Wenn jemandem mein Vorschlag dazu zu kompliziert oder zu rechenintensiv erscheint, muss er ihn ja nicht verwenden.
    War ja nur ein Vorschlag.

    Gruß,
    Ralla

  7. #7
    Registriert seit
    Apr 2019
    Ort
    Etelsen bei Bremen
    Beiträge
    775

    Hi,
    sorry hast recht. Ich habe das usort übersehen.

    Bei gerader Anzahl nehme ich eher nur einen Wert denn der Median soll Kanten erhalten und das ich bei gerade Anzahl nicht gegeben.

    Ralf
    IPS 5.5 Unlimited / Docker / Synology DS415+

  8. #8
    Registriert seit
    Jul 2011
    Beiträge
    151

    Hi HarmonyFan,

    es gibt keinen Grund für ein "sorry", alles gut.

    Einen schönen Sonntagabend noch,

    Gruß,
    Ralla

    P.S.
    Entschuldigung an alle Anderen, für das Abgleiten ins off-topic.

  9. #9
    Registriert seit
    May 2013
    Ort
    München Ost
    Beiträge
    106

    Standard Danke!

    Ui, Leute,
    Danke Euch für die gleich mehrfachen Ideen!
    Werde ich mir ansehen was ich am einfachsten einbauen kann!
    Aber damit komm ich erstmal weiter!
    👍
    Cheers Seppm

Ähnliche Themen

  1. Event zeitlich begrenzen
    Von wolfgangb im Forum Skripte, PHP, SQL
    Antworten: 13
    Letzter Beitrag: 01.09.19, 08:29
  2. Zählerwert unter null Ignorieren
    Von BlueDragon im Forum Skripte, PHP, SQL
    Antworten: 3
    Letzter Beitrag: 15.02.18, 13:35
  3. Antworten: 13
    Letzter Beitrag: 13.12.17, 16:25
  4. Log File Einträge begrenzen
    Von Lukky im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 2
    Letzter Beitrag: 30.11.11, 11:41