Wie würdet ihr das lösen ?

Hallo Gemeinde und „Happy New Year“ an alle :slight_smile:

Ich versuche gerade eine Seite in WF zu machen, wo alle Monate aufgelistet sind, und mir meinen Stromverbrauch anzeigen.

Das funktioniert soweit ganz gut…
Nur gehe ich anscheinend zu sehr mit „Excel“ Methoden als mit „PHP“ Programmierkunst an die Sache.

ich habe für jeden Monat ein Script, das mittels zyklischem Ereignis vom 1. bis 30./31. ausgeführt wird.

Die schlagen gleich die Hände über Kopf zusammen, wenn sie mein Script sehen

Habt ihr ne idee, wie das schicker werden kann ? Stellt euch mal mein Script im Dezember vor ? Da muß ich ja ne Klopapierrolle in den Drucker spannen, wenn ichs mal ausdrucken will…

Ganz lieb wäre nicht nur ein Lösungsvorschlag in Textform, sondern anhand meiner Daten, der Start eines „echten“ Scripts, das ich dann fortführen kann.

Vielen Lieben Dank
Euer ewiger Anfänger :slight_smile:

<?

$Stand2010Haus = GetValue(58928 /*[Mein Haus\Stromzähler Haus\Endstand 2010]*/);
$AktuellHaus = GetValue(57628 /*[Mein Haus\Stromzähler Haus\Kosten]*/);

$Stand2010Heizung = GetValue(32547 /*[Mein Haus\Stromzähler Heizung\Endstand 2010]*/);
$AktuellHeizung = GetValue(44189 /*[Mein Haus\Stromzähler Heizung\Kosten]*/);

$JanuarHaus = GetValue(29532 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\Januar\Haus]*/);
$JanuarHeizung = GetValue(20358 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\Januar\Heizung]*/);

$FebruarHaus = GetValue(50889 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\Februar\Haus]*/);
$FebruarHeizung = GetValue(32921 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\Februar\Heizung]*/);

$MaerzHaus = GetValue(20844 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\März\Haus]*/);
$MaerzHeizung = GetValue(20011 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\März\Heizung]*/);

$AprilHaus = GetValue(49023 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\April\Haus]*/);
$AprilHeizung = GetValue(41014 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\April\Heizung]*/);

$VormonateHaus = $JanuarHaus+$FebruarHaus+$MaerzHaus+$AprilHaus;
$VormonateHeizung = $JanuarHeizung+$FebruarHeizung+$MaerzHeizung+$AprilHeizung;



SetValue(36690 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\Mai\Haus]*/,$AktuellHaus-$Stand2010Haus-$VormonateHaus);
SetValue(25413 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\Mai\Heizung]*/,$AktuellHeizung-$Stand2010Heizung-$VormonateHeizung);

IPS_Sleep (2000);

$Haus = GetValue(36690 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\Mai\Haus]*/);
$Heizung = GetValue(25413 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\Mai\Heizung]*/);

IPS_Sleep (300);

SetValue(34071 /*[Mein Haus\Stromkostenerfassung\Monate 2011 Links\Mai\Summe]*/,$Haus+$Heizung);





?>

Nutz das Archive Control, damit sollte es machbar sein! Da kannst du geloggte Werte schon auf Monate aggregiert in ein Array holen und dann weiterverarbeiten:

$MonthValues = AC_GetAggregatedValues(IPS_GetInstanceIDByName('Archive Handler', 0), $id, 3, time() - 12 * 31 * 24 * 3600, time() , 10000 /*[Objekt #10000 existiert nicht]*/);

$id ist die VariablenID
3 bedeutet aggregiert nach monaten
danach die startzeit = jetzt - 1 Jahr (in Sekunden)
danach die endzeit = jetzt
danach das Limit der Treffer

Hallo,

Jetzt wo ich das sehen, eine Dokumentation dadrüber gibt es noch nicht oder?
Hab zumindest noch keine hier gefunden was alles mit dem archivhandler geht.

Gruß

ok,

konnte mir mit der Funktionsliste selber helfen

/**
* AC_GetAggregatedValues
* 
* @returns array
* @param integer $InstanceID
* @param integer $VariableID
* @param integer $AggregationType
*   enum[0=Hour, 1=Day, 2=Week, 3=Month, 4=Year]
* @param float $StartTime
* @param float $EndTime
* @param integer $Limit
*/

function AC_GetAggregatedValues( $InstanceID,$VariableID,$AggregationType,$StartTime,$EndTime,$Limit ) {


Hi Hollowman,

kannst du hier mal dein neues Script einstellen, ich habe so was auch vor, sitze momentan aber völlig auf dem Schlauch wie ich das Anfangen soll.

gruß Uwe

Hallo Uwe,

Neues Skript? Ich habe kein Skript geschrieben. Mir ging es nur um die Dokumentation generell über die Funktionen vom Archiv Handler, weil in der normalen Dokumentation hier nichts drüber zu finden ist.

Gruß
Boris

Scripts dazu gibt es im Forum doch zur Genüge.