Ich hatte so eine ähnliche Aufgabenstellung: Zur Ermittlung der Verbrauchskennlinie das Datenpaar aus Verbrauch und mittlerer Tagestemperatur bereitstellen, aber die Werte ausserhalb der Heizperiode weglassen.
Dazu habe ich mir zwei Hilfsvariable erzeugt (Verbrauch und Temperatur der Heizperiode) und aus dem Archiv mit Daten befüllt, aber nur für solche Werte bei denen die Temperatur einen bestimmten Wert unterschreitet.
Vielleicht hilft mein Script, wenn du es auf eine Einzelvariable umbaust und die Bedingung anpasst.
$targetIDtemp und $targetIDverbrauch sind die beiden Hilfsvariablen für die Daten der Heizperiode, die zu Beginn des Scripts erstmal gelöscht und dann neu aus dem Archiv (vollständige Verbrauchs- und Temperaturdaten) erzeugt werden.
Viele Grüße
Volker
<?php
// Verbrauch und Temperatur Vortag aus Archiv übernehmen, dabei Daten ausserhalb Heizperiode weglassen über Temperatur als Filterkriterium
$oneday = 24*60*60; // Sekunden pro Tag
// Zeitraum Ende und Anzahl der Tage
$lastday = strtotime("yesterday");
$num_days = 3*365;
$archiveID = 18193;
$targetIDtemp = 25569;
$targetIDverbrauch = 32507;
// alte Werte löschen
AC_DeleteVariableData($archiveID, $targetIDtemp, strtotime("now")-2000*$oneday, strtotime("now"));
AC_DeleteVariableData($archiveID, $targetIDverbrauch, strtotime("now")-2000*$oneday, strtotime("now"));
IPS_Sleep(1000);
for ($offset = 0; $offset < $num_days; $offset++) {
$timestop = $lastday - $offset*$oneday;
$timestart = $timestop - $oneday;
// echo sprintf ("%s bis %s \n", date("d.m.y H:i:s", $timestart), date("d.m.y H:i:s", $timestop));
// Temperaturwert holen (Tagesmittel)
$werte = AC_GetAggregatedValues($archiveID,41683 , 1, $timestart, $timestop, 0);
$Temp = $werte[0]['Avg'];
// Verbrauchswert holen (Tagesmittel)
$werte = AC_GetAggregatedValues($archiveID,21946 , 1, $timestart, $timestop, 0);
$Verbrauch = $werte[0]['Avg'];
// Werte in Archiv eintragen, aber nur bei niedriger Temperatur (Heizperiode)
if ($Temp < 17) {
// Temperatur
AC_AddLoggedValues($archiveID, $targetIDtemp,[
[
'TimeStamp' => $timestop,
'Value' => $Temp
]
]);
// Verbrauch
AC_AddLoggedValues($archiveID, $targetIDverbrauch,[
[
'TimeStamp' => $timestop,
'Value' => $Verbrauch
]
]);
}
}
IPS_Sleep(500);
AC_ReAggregateVariable($archiveID,$targetIDtemp);
AC_ReAggregateVariable($archiveID,$targetIDverbrauch);