berndh
15. Januar 2024 um 09:55
1
Hallo
Ich will mir den COP der Wärmepumpe ausrechenen gemittelt auf die letzten 24 Stunden.
$thermisch = AC_GetAggregatedValues(25692, 57384, 1 /* Täglich */, strtotime("time() - 24*60*60"), time(), 0); //57384 57384ist die ID der Variable, 25692 vom Archiv
$elektrisch = AC_GetAggregatedValues(25692, 58317, 1 /* Täglich */, strtotime("time() - 24*60*60"), time(), 0); //58317 ist die ID der Variable, 25692 vom Archiv
$COP = ($thermisch[0] ['Avg']) / ($elektrisch[0] ['Avg']);
Setvalue (26036, $COP);
habe dann aber immer über 0.00 Uhr einen Einbruch.
Doe WP läuft durch.
Welchen Fehler machen ich?
Bernd
berndh
14. Dezember 2024 um 16:10
3
Hallo
der Fehler ist immer noch da.
Niemand eine Idee?
Kann ich nicht irgendwie einen einzelnen Wert aus dem Archiv ziehen,
der 24 Stunden zurück ab dem Abfragezeitpunkt liegt?
Dann kann ich einfach den aktl. Wert minus des alten Wert zur Berechnung nehmen.
Bernd
bumaas
14. Dezember 2024 um 16:50
4
Ja, das kannst du mit AC_GetLoggedValues . Im Array ist der erste Eintrag der jüngste. Es muss aber der Abfragezeitraum groß genug sein, damit auf jeden Fall ein Wert enthalten ist.
So müsste es funktionieren:
<?php
declare(strict_types=1);
const ID_ELEKRTISCH = 58317;
const ID_THERMISCH = 57384;
const ID_COP = 26036;
$archiveID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0];
$elektrisch = AC_GetLoggedValues($archiveID, ID_ELEKRTISCH, strtotime('-10 days'), strtotime('-1 day'), 1);
$thermisch = AC_GetLoggedValues($archiveID, ID_THERMISCH, strtotime('-10 days'), strtotime('-1 day'), 1);
$elektrisch_alt = $elektrisch[0]['Value'];
$thermisch_alt = $thermisch[0]['Value'];
$COP = (GetValue(ID_THERMISCH) - $thermisch_alt) / (GetValue(ID_ELEKRTISCH) - $elektrisch_alt);
SetValueFloat(ID_COP, $COP);
1 „Gefällt mir“
berndh
14. Dezember 2024 um 17:15
5
Ich probiere es aus, vielen Dank!
Warum -10Days?
Ich will ja nur den Wert der letzten 24 Stunden wissen
berndh
15. Dezember 2024 um 09:05
6
Moin, hat funktioniert.
Nochmal Danke!
Bernd