Ac_AggregatedValues / stündlich minimal und maximal finden

Hallo Zusammen,
Ich habe mir ein Skript gebaut um mir die tägliche Temperaturerhöhung und daraus resultierende Energiemenge meines Solarabsorbers für den Pool auszurechnen und loggen.
Dazu möchte ich Ac_AggregatedValues nutzen, stündliche Aggregation.

Generell wäre täglich auch okay, aber die Temperatur ist um 0:00 noch höher als um 8:00 wenn die Sonne scheint. Damit stimmt das Ergebnis nicht.
Daher würde ich gerne Werte ab 8:00 nehmen.
Das geht aber nicht mit täglicher Aggregation. (außer zum nächsten Tag).

Sinnvoll wäre stündlich, von ca. 8:00 bis 17:00.
Aber hier kommt mein Problem:

Ich bekomme damit ein Array mit vielen Werten, welche mir stündliche. Min / Max Werte geben. Ich bräuchte aber die (zu jeder Abfragezeit) absoluten minimalen und maximalen Werten.

Hat hier jemand eine Idee bzw Hilfe?
Gruß,
Maeffjus

So - das war vom Handy, hier noch der aktuelle (tägliche) Code:

$werte_heute = AC_GetAggregatedValues(44373, 56599, 1 /* Täglich */, strtotime("today 00:00"), time(), 0); //56599 ist die ID der Variable, 44373 vom Archiv        
//var_dump ($werte_heute);

$min_heute= ($werte_heute["0"]["Min"]);
$max_heute= ($werte_heute["0"]["Max"]);
$dT=$max_heute-$min_heute;
$energie = (($dT*8600*4.18)/3600);
$energie = round ($energie,2);

SetValueFloat(52994,$energie); //in kWh
SetValueFloat(52725,$dT); 

Hi,
vielleicht selbst ist der Mann:

Statt AC_GetAggregatedValues lieber AC_GetLoggedValues nehmen und das Array dann „von Hand“ so auswerten wie man möchte.

Ralf

Es ist wohl schon geschickter über die aggregierten Werte zu gehen und nicht über die Rohwerte. Da musst du deutlich weniger Werte betrachten und kommst am Ende auf das gleiche Ergebnis.

Du kannst ja die stündlichen Werte wie skizziert abfragen. Dann bekommst du dein Array und müsstest dies einmal ablaufen. Dann musst du daraus halt selbst das Minimum und Maximum bestimmen.

@Ralf: Wenn ich gewusst hätte wie, dann hätte ich ja nicht gefragt…
@Dr.Niels: Guuute Idee, Du meinst, ich frage die Variable in den ich Min / Max schreibe nochmal ab, oder? (Dann aber z.B. mit täglicher Aggregation)

Ich habe es einfach „wenig“ elegant gelöst, indem ich das Skript nur von 8:00-17:00 laufen lasse :wink:

Hey Maeffjus ich versuche heute mal mit deinem Scriptbeispiel meine Tageshöchstwerte des Solarinputs zu berechnen. Ich würd mir ja gern so eine Art „Live“ Anzeige basteln… welche mir den höchsten erreichten Wert Anzeigt… sprich wenn jetzt um 9:10 plötzlich mal 1,3kw Solar angelegen haben und das bis Dato der Höchstwert des Tages war … würd ich das gerne direkt sehen.

Wenn ich deine Frage richtig verstehe würde ich die stündlichen min/max Werte von 8 bis 17 Uhr ermitteln und dann in einer Schleife daraus den absoluten min/max Wert.

Die Schleife würde so aussehen:


$minimum = 1000;        
$maximum = 0;

foreach($werte_heute as $wert) 
{
  // echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Min'] . " -> " . $wert['Max'] . PHP_EOL;
  if ($wert['Min'] < $minimum) {
    $minimum = $wert['Min'];
  }
  if ($wert['Max'] < $maximum) {
    $maximum = $wert['Max'];
  }
}

Das ist jetzt nur grob skizziert, aber du verstehst hoffentlich was ich meine. Die Einschränkung auf 8-17 Uhr kannst du im Zeitfenster bei GetAggregatedValues unterbringen.

edit: Ich sehe gerade dass ich auf eine Frage aus 2020 geantwortet habe und @kallii sich da drangehängt hat mit einer ganz anderen Frage. Den bisherigen Tageshöchwert kann man doch sehr einfach ermitteln indem man den Max-Wert um MItternacht auf Null setzt und dann bei jeder Änderung des Eingangswertes schaut ob dieser größer als der Max-Wert ist.

Viel Erfolg!
Volker