TomW
17. Juni 2015 um 18:26
1
Hm, diese Funktion liefert bei mir keine Sinnvollen Daten:
AC_GetAggregatedValues(12345 /[Archive Control] /,45678,1,time()-724 60*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
paresy
20. Juni 2015 um 16:54
3
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
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
paresy
13. Juni 2016 um 11:56
5
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
paresy
:D:D:D 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']);
mirank
13. Juni 2016 um 14:29
8
thezepter:
:D:D:D 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 ?
Ich glaube du musst $werte[0][Avg] benutzen
Gesendet von iPhone mit Tapatalk
paresy
13. Juni 2016 um 15:11
9
Danke euch beiden. Genau so meinte ich das
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
Danke Matze !!! Jetzt geht´s auch damit. Perfekt. Man lernt immer mehr dazu.