AC_GetAggregatedValues

Hm, diese Funktion liefert bei mir keine Sinnvollen Daten:

AC_GetAggregatedValues(12345 /[Archive Control]/,45678,1,time()-72460*60,time(),0);

sollte doch eigentlich die letzte Woche aggregiert zurückliefern. Rückgabewert ist aber ein Array mit 0 Elementen. Schaue ich direkt ins Logging, sind aber Daten der Var 45678 da (Typ Boolean)

Meine parallele version unter Win liefert die Daten wie erwartet.

Hallo TomW.

Ich bin mir nicht sicher ob das hier vorher nötig ist:

https://www.symcon.de/forum/threads/27343-Pi-Automatische-Reaggregation-aller-geloggten-Variablen?p=251256#post251256

IPS Pi ist ja noch nicht soweit mit der „Datenbank“.

Gruß
lueralba

Hast du die aktuellste Version installiert? Hast du vorher im Archiv die Variable mal neu aggregiert?

paresy

Ein nichtprogrammierer braucht hier mal wieder Eure Hilfe :confused:

Ich möchte nur die geloggten Werte als SUMME (kwh FLOAT Variable) z.B. hier von Gestern in eine neue Variable schreiben.
Mein Ansatz war folgender…

<?

//Alle gestrigen Datensätze abfragen (Tägliche Aggregationsstufe)
//z.B. um den gesterigen Verbrauch oder die durchschittliche Windgeschwindigkeit jeder Stunde zu begutachten
$werte = AC_GetAggregatedValues(19050, 33174, 1 /* Täglich */, strtotime("yesterday 00:00"), strtotime("today 00:00")-1, 0); //33174 ist die ID der Variable, 19050 vom Archiv
SetValueFloat(29981 /*[Erdgeschoss\Hauswirtschaftsraum\Gefrierschrank\POWERMETER\kWh Gestern]*/, $werte);

//Dieser Teil erstellt eine Ausgabe im Skriptfenster mit den abgefragten Werten
foreach($werte as $wert) {
	echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Avg'] . PHP_EOL;
}

?>

Ergebis:

Warning:  Cannot auto-convert value for parameter VariableValue in /var/lib/symcon/scripts/44562.ips.php on line 6
12.06.2016 00:00:00 -> 1,1482

Wie bekomme ich das Warning weg und meine Variable gefüllt ? Sie bleibt leer… wohl wegen des Fehlers

Du musst erstmal beim SetValue auf $werte[0] referenzieren. Und dann am besten den letzten Parameter auf 1 statt 0 setzen, damit auch nur ein Wert kommt :slight_smile:

paresy

:D:D:D :confused::confused::confused: Danke paresy, aber bitte was ? als Nichtprogrammierer verstehe ich gerade nur Bahnhof… sorry

SetValueFloat(29981 /*[Erdgeschoss\Hauswirtschaftsraum\Gefrierschrank\POWERMETER\kWh Gestern]*/, $werte[0]);

Das hilft auch nicht… oder wie referenziere ich darauf ?

Hallo thezepter,

ich galube paresy hat es so gemeint


//Alle gestrigen Datensätze abfragen (Tägliche Aggregationsstufe)
//z.B. um den gesterigen Verbrauch oder die durchschittliche Windgeschwindigkeit jeder Stunde zu begutachten
$werte = AC_GetAggregatedValues(19050, 33174, 1 /* Täglich */, strtotime("yesterday 00:00"), strtotime("today 00:00")-1, 1); 
SetValueFloat(29981 /*[Erdgeschoss\Hauswirtschaftsraum\Gefrierschrank\POWERMETER\kWh Gestern]*/, $wert['Avg']);

Ich glaube du musst $werte[0][Avg] benutzen

Gesendet von iPhone mit Tapatalk

Danke euch beiden. Genau so meinte ich das :slight_smile:

paresy

Dankefür euern Einsatz !! … Die Tips helfen leider auch nicht… kommt wieder eine andere Meldung.


SetValueFloat(29981 /*[Erdgeschoss\Hauswirtschaftsraum\Gefrierschrank\POWERMETER\kWh Gestern]*/, $werte['Avg']);

Ergebnis: (Variable bleibt auch unbeschrieben)

Notice:  Undefined index: Avg in /var/lib/symcon/scripts/44562.ips.php on line 6
12.06.2016 00:00:00 -> 1,1482
SetValueFloat(29981 /*[Erdgeschoss\Hauswirtschaftsraum\Gefrierschrank\POWERMETER\kWh Gestern]*/, $werte['Avg'][0]);

Ergebnis: (Variable bleibt auch unbeschrieben)

Notice:  Undefined index: Avg in /var/lib/symcon/scripts/44562.ips.php on line 6
12.06.2016 00:00:00 -> 1,1482

Hier noch mal der ganze Code:

<?

//Alle gestrigen Datensätze abfragen (Tägliche Aggregationsstufe)
//z.B. um den gesterigen Verbrauch oder die durchschittliche Windgeschwindigkeit jeder Stunde zu begutachten
$werte = AC_GetAggregatedValues(19050, 33174, 1 /* Täglich */, strtotime("yesterday 00:00"), strtotime("today 00:00")-1, 1);
SetValueFloat(29981 /*[Erdgeschoss\Hauswirtschaftsraum\Gefrierschrank\POWERMETER\kWh Gestern]*/, $werte['Avg'][0]);

//Dieser Teil erstellt eine Ausgabe im Skriptfenster mit den abgefragten Werten
foreach($werte as $wert) {
	echo date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Avg'] . PHP_EOL;
}

?>

Moin… vielleicht hilf dir das etwas weiter. Mir hat es beim Verstehen geholfen. Spiel einfach mal bissel damit und schau was Du raus bekommst.

<?
$archiveID             = 10690 /*[Archive Handler]*/;   // Archive-Handler-ID angeben
$varID                 = 22124 /*[SMARTMETERING\ELEKTRO\EG\PREISBERECHNUNG\Verbrauch heute]*/; // Variablen-ID der Ns-Zähler-Variable
$NsMenge_heute    = 27723 /*[TEST\ARCHIVE HANDLER TEST\ARCHIVE HANDLER STROMVERBRAUCH (7 Tage)\Heute]*/;    // eigene Variable für Ns-Wert "heute" angeben
$NsMenge_gestern  = 41742 /*[TEST\ARCHIVE HANDLER TEST\ARCHIVE HANDLER STROMVERBRAUCH (7 Tage)\Gestern]*/;    //    :
$NsMenge_2days    = 12632 /*[TEST\ARCHIVE HANDLER TEST\ARCHIVE HANDLER STROMVERBRAUCH (7 Tage)\Vorgestern]*/;    //    :
//$NsMenge_3days    = 12344 /*[Objekt #12344 existiert nicht]*/;    //    :
//$NsMenge_4days    = 12345 /*[Objekt #12345 existiert nicht]*/;    //    :
//$NsMenge_5days    = 12346 /*[Objekt #12346 existiert nicht]*/;    //    :
//$NsMenge_6days    = 12347 /*[Objekt #12347 existiert nicht]*/;    //    :
//$NsMenge_7days    = ;    // eigene Variable für Ns-Wert für "vor 7 tagen" angeben
$NsMenge_7day_durchschnitt = 17561 /*[TEST\ARCHIVE HANDLER TEST\ARCHIVE HANDLER STROMVERBRAUCH (7 Tage)\7 Tage Durchschnitt]*/;

$ts                     = mktime(0, 0, 0, date("m", time()), date("d", time())-7, date("Y", time())); //Startzeitvor 8 tagen 0:00 Uhr
$te                     = mktime(23, 59, 59, date("m", time()), date("d", time()), date("Y", time())); //Ende heute 23:59:59 Uhr

// IPS-DB Daten: Abfrage Ns-Max/Avg/Min-Werte
$rawData = AC_GetAggregatedValues($archiveID, $varID, 1, $ts, $te, 500);

#debug

print_r($rawData);

$durchschnitt_week = ($rawData[1]['Avg'])+($rawData[2]['Avg'])+($rawData[3]['Avg'])+($rawData[4]['Avg'])+($rawData[5]['Avg'])+($rawData[6]['Avg'])+($rawData[7]['Avg']);
$durchschnitt_week = $durchschnitt_week/7;
//echo "$durchschnitt_week";
// Variablen befüllen:
setValue($NsMenge_heute, $rawData[0]['Avg']);
setValue($NsMenge_gestern, $rawData[1]['Avg']);
setValue($NsMenge_2days, $rawData[2]['Avg']);
setValue($NsMenge_7day_durchschnitt, $durchschnitt_week);
//setValueFloat($NsMenge_3days, $rawData[3]['Avg']);
//setValueFloat($NsMenge_4days, $rawData[4]['Avg']);
//setValueFloat($NsMenge_5days, $rawData[5]['Avg']);
//setValueFloat($NsMenge_6days, $rawData[6]['Avg']);
//print ($NsMenge_7days, $rawData[7]['Avg']);

?>

Hier ein Screenshot der Variablen:

Gruß,
Peter

Du hast die [0] an der falschen Stelle. probiere es mal so


$werte = AC_GetAggregatedValues(19050, 33174, 1 /* Täglich */, strtotime("yesterday 00:00"), strtotime("today 00:00")-1, 1);
SetValueFloat(29981 /*[Erdgeschoss\Hauswirtschaftsraum\Gefrierschrank\POWERMETER\kWh Gestern]*/, $werte[0]['Avg']);

echo  $werte[0]['Avg'];



Danke Peter für deine Inspiration ! Das werde ich mir anschauen. Sowas habe ich gesucht :wink:
Danke Matze !!! Jetzt geht´s auch damit. Perfekt. Man lernt immer mehr dazu.