Frage zu Script "Vormonatsverbrauch"

Guten Morgen,

ich benutze folgendes Script für die Auswertung des Vormonatsverbrauch:


<?

$werte = AC_GetAggregatedValues(44061 /*[Archiv]*/, 15622, 3/* Täglich */,  mktime(0, 0, 0, 1, 1, 2013), mktime(23, 59, 59, 12, 31, 2013), 0);

foreach($werte as $wert) {

SetValue(30498 /*[Energie - Wasser\Geschirrspühler Küche\Vormonatsverbrauch]*/, $wert['Avg']);
}


?>


und dieses für die Erfassung des Jahresverbrauchs:



<?

$werte = AC_GetAggregatedValues(44061 /*[Archiv]*/, 16341, 4/* Täglich */,  mktime(0, 0, 0, 1, 1, 2013), mktime(23, 59, 59, 12, 31, 2013), 0);

foreach($werte as $wert) {
 date("d.m.Y H:i:s", $wert['TimeStamp']) . " -> " . $wert['Avg'] . PHP_EOL;


SetValue(57062 /*[Energie - Wasser\Waschmaschine Technikraum\Jahresverbrauch]*/, $wert['Avg']);
}


?>

Nun wollt ich fragen wie man dieses Script so ändern kann, das das Jahr Automatisch erkannt wird?
Denn dieses Script ist ja nur für das Jahr 2013.

Danke!

Moin

echo date('Y');

also einfach date(‚Y‘) anstatt 2013.

Irgendwie versteh ich nicht die Berechnung des Vormonats :confused:
Mit

$werte = AC_GetAggregatedValues(44061 /*[Archiv]*/, 15622, 3/* Täglich */,  mktime(0, 0, 0, 1, 1, 2013), mktime(23, 59, 59, 12, 31, 2013), 0); 

liefert dir ein array mit 12 Werten , Monate ( Kommentar /* Täglich */ ist falsch ) .
Danach schreibst du den Durchschnitt ( ‚Avg‘ ) 12mal in die Variable .
Am Ende hast du den Durchschnitt vom Januar in deiner Variablen.

Hmm, naja ich logge ja die Variable des Zählers, und mit dem Script lese ich den Vormonatsverbrauch vom Archiv aus?
Dachte ich halt :slight_smile:

Wenn du mit einer festen Jahreszahl arbeitest hast du im Januar ein Problem.
Vielleicht kannst du hiermit was anfangen.

	$Ende  = time();                    // aktuelle Zeit
	$Start = time() - ( 7776000 ) ;     // 3 Monate frueher
	$Zeitraum = 3 ;                     // lese Monatswerte
	$Limit = 2;                         // nur 2 Monate lesen
	$Archiv = 25204;
	$Variable = 21174;
	
 	$werte = AC_GetAggregatedValues($Archiv, $Variable , $Zeitraum ,  $Start, $Ende,$Limit);

	if ( isset ( $werte[0] ) )    // aktueller Monat
	   {
		$Avg = $werte[0]['Avg'];
		$Min = $werte[0]['Min'];
		$Max = $werte[0]['Max'];

		$MinTime = $werte[0]['MinTime'];
		$MaxTime = $werte[0]['MaxTime'];
		$Timestamp = $werte[0]['TimeStamp'];

		$string  = "
" . date("m.Y ",$Timestamp)  ;
		$string .= "
      Minimalwert  :" . date("d.m.Y H:i:s",$MinTime) ."  - ".$Min ;
		$string .= "
      Maximalwert  :" . date("d.m.Y H:i:s",$MaxTime) ."  - ".$Max ;
		$string .= "
      Durchschnitt :" . $Avg ;

		echo $string;
	   }
	   
	if ( isset ( $werte[1] ) )    // voriger Monat
	   {
		$Avg = $werte[1]['Avg'];
		$Min = $werte[1]['Min'];
		$Max = $werte[1]['Max'];

		$MinTime = $werte[1]['MinTime'];
		$MaxTime = $werte[1]['MaxTime'];
		$Timestamp = $werte[1]['TimeStamp'];

		$string  = "
" . date("m.Y ",$Timestamp)  ;
		$string .= "
      Minimalwert  :" . date("d.m.Y H:i:s",$MinTime) ."  - ".$Min ;
		$string .= "
      Maximalwert  :" . date("d.m.Y H:i:s",$MaxTime) ."  - ".$Max ;
		$string .= "
      Durchschnitt :" . $Avg ;

		echo $string;
	   }

Ist bei mir ein Temperaturfuehler:
11.2013
Minimalwert :12.11.2013 02:56:33 - 0.6
Maximalwert :07.11.2013 11:44:25 - 17.7
Durchschnitt :7.5433656982981
10.2013
Minimalwert :31.10.2013 05:50:29 - 0.7
Maximalwert :22.10.2013 15:00:43 - 23.5
Durchschnitt :12.385298107826

Danke!

Noch eine Frage :slight_smile:
Dieses Script benutze ich jetzt für den Jahresverbrauch


<?
$jahr=date("Y");
$timestamp = mktime(0,0,0,1,1,$jahr);
$werte=AC_GetAggregatedValues(44061 /*[Archiv]*/,16341,4,$timestamp, time(),0);
SetValue(57062 /*[Energie - Wasser\Waschmaschine Technikraum\Jahresverbrauch]*/ , $werte[0] ['Avg']);


?>


Bin am Überlegen wie ich dies Script in ein Script für „Vormonatsverbrauch“ umbauen könnte?
Der Wert 4 bedeutet ja „Jährlich“
Der Wert 3 bedeutet „Monatlich“

Aber für Vormonat gibt’s ja nichts?

Mein Script gibt dir 2 Werte ,den Wert fuer den aktuellen Monat und den Vormonat.
Probiere mal diese Version bei dir.

	$Ende  = time();                    // aktuelle Zeit
	$Start = time() - ( 7776000 ) ;     // 3 Monate frueher
	$Zeitraum = 3 ;                     // lese Monatswerte
	$Limit = 2;                         // nur 2 Monate lesen
	$Archiv = 25204 /*[Archive Handler]*/;
	$Variable = 21174 /*[Hardware\FS20\Wetterstation\KS300 Wetterstation\Temperatur]*/;
	
 	$werte = AC_GetAggregatedValues($Archiv, $Variable , $Zeitraum ,  $Start, $Ende,$Limit);

	print_r($werte);

Wenn dein Zaehler einfach immer hoch zaehlt dann hast am Monatsanfang den „MIN“ Wert und am Ende
den „MAX“ Wert. Die Differenz ist dein Wert den du suchst.

Wird ich mal probieren!
Danke erst mal :wink: