Daten aus Datenbank-Logging zur Berechnung nutzen

Hallo zusammen,

ich möchte mit den Daten aus dem Datenbank-Logging
Berechnungen machen.
Z.B. Speichere ich jeden Tag um 24:00 Uhr den Tagesverbrauch meiner
Pelletsheizung in eine Variable. Die bekomme ich über die serielle Anbindung
meines Heizkessel als Zählerstände geliefert.

Diese möchte ich dann als Wochen oder Monatswerte berechnen und als Zahlenwert
darstellen.

Ich stehe aber noch ein wenig auf dem Schlauch.
Wie kann ich z.B. alle Werte für einen bestimmten Zeitraum aus der
Datenbank auslesen und addieren?
Also nicht über einen Graphen sondern als Variable fürs Webfront.

Vielleicht ist jemand so nett und kann mir einen Denkanstoß geben.

Vielen Dank im Voraus

Udo

Moin Udo,

IPS liefert dazu ein paar pfiffige Befehle mit. Du kannst Dir für einen gewünschten Zeitraum die Daten schon entspr. verdichtet aus der Datenbank ausgeben lassen. Hier ein Beispiel, in dem ich mir aus der Variable ID 24010 die Werte pro Monat ausgeben lasse. Diese landen dann in dem Array $temp, das ist dann wiederum weiter in einer Schleife auswerte.
Denkbar wäre natürlich auch, nur eine Variable mit einem verdichteten Wert zu füllen und die dann mittels SetValue zur weiteren Anzeige im Webfront in eine Variable zu schreiben.


$liste=array();
$beginn=strtotime("01.01.2012");
$count=0;
$temp = AC_GetAggregatedValues(19907 /*[Archive Handler]*/, 24010, 3,$beginn, time(), 0); // 1 = day, 2 = Week, 3 = month,4 =year, 0 = Hour

for ($count=0; $count <count($temp); $count++)
{

	$verbrauch=round($temp[$count]['Avg'],2); // Durchschnittswert
	$zahl_s=(string) $verbrauch;
	$zahl_neu=str_replace(".",",",$zahl_s); // Punkt durch Komma ersetzen 
	$dat=date("d.m.Y", $temp[$count]['TimeStamp']);
	$liste[$count]=$dat.";".$zahl_neu;
	echo $liste[$count]."
";

}

Schau mal hier in der Doku.

Des weiteren gibt es diesen Befehl, der nur die geloggten Daten über einen Zeitraum in ein Array schreibt.

Ich hoffe, ich konnte Dir ein bisschen weiterhelfen.

Gruß
Walter

Hallo Walter,

vielen Dank für den Denkanstoß.

Ich kannte die Befehle AC_Getxxxxxxvalues noch nicht.

Da ich den Tagesverbrauch immer um 24h in eine Variable schreibe,
kann ich es damit noch einfacher lösen.

Ich brauche dann nur AC_Getloggedvalues mit dem entsprechenden Start und Enddatum
und diese wenigen Variablen zu addieren.

Ich wollte zuerst einfach den Zählerwert vom Start und Enddatum nehmen und damit den Verbrauch ausrechnen.
Aber zum einen kann der Zähler resetet werden und zum anderen ist der Verbrauch pro Zähleinheit vom ermittelten
Durchfluß und damit von der Pelletsqualität abhängig die ich bei neuen Lieferungen in einer Variable hinterlege und
auch gelegentlich schon mal zwischendurch neu justiere.

Daher ist die Addition der Tagesverbrauchswerte die genaueste Verbrauchsmessung.

Da werde ich mir jetzt mal ein paar Scripte schreiben für Verbrauch ab Heizbeginn, Verbrauch pro Woche , pro Monat etc.
Dann kann ich im Sommer auch mal ausrechnen was das Warmwasser wirklich kostet, da ich am Warmwasser eine Wasseruhr dran habe.

Gruß Udo

Hallo zusammen.

Ich logge auch eine Variable und zwar die des Wasserverbrauches. Die Daten bekomme ich vom ekm868.
Habe dann eine Grafik angelegt wo ich den Monatsverbrauch sehe!
Funktioniert bestens :slight_smile: Aber ich möchte ja gerne:

Die Monatswerte in eine Variable schreiben lassen!

Die Daten werden ja im Archiv Handler gespeichert?!
Ich kann ja auch mit dem Befehl AC_GetAggregatedValues die Daten aus dem Archiv Handler heraus hohlen?

Aber wie kann ich wenn ich 12 Variablen Anlege mit Jan bis Dez diese Variablen immer zum Monatsletzten befüllen?
Z.b.: Ende September um 0:00 wird in die Variable September der Monatsverbrauch geschrieben.

Danke

Hallo,

bei mir läuft jede Nacht um 0.00 Uhr ein Skript, in dem solche Sachen abgehandelt werden.

So in etwa könnte man den Monats / Jahreswechsel feststellen :

$jahreswechsel = FALSE;
$mon_jetzt   = (int) date("m",time());
$mon_gestern = (int) date("m",time()-3600);
$mon         = $mon_jetzt;

IF ( $mon_jetzt <> $mon_gestern )
	 {
	      $mon = $mon_gestern;
	      IF (  $mon_gestern == 12 and $mon_jetzt == 1 )
	     	{
				$jahreswechsel=TRUE;
	      }
	 }

In einem Array speichere ich die 12 IDs der Monatsvariablen :

$varis=array(52637,36519,16936,17966,26522,45216,16092,15329,20385,58838,52253,32999);

Dann wird in Abhängigkeit des aktuellen Monats, der aktuelle Tageswert in diese Variable addiert:

$altwert=GetValue($varis[$mon-1]);
SetValue($varis[$mon-1],$altwert+$heute);

Wenn $jahreswechsel == TRUE, dann können z.B. Jahresüberträge gebildet werden oder Monatsvariablen z.B. in einer Schleife wieder „genullt“ werden.

Eine weitere Möglichkeit wäre, wenn Du keine Tageswerte hast, die addiert werden sollen, einfach nur den Monatswechsel zu prüfen und sollte dieser positiv sein, mit AC_GetAgg… die Summe in die entsprechende Variable schreibst.

Gruß
Walter

Hallo Walter,
danke für deine Hilfe!

Ich habe jetzt 12 Integer Variablen Angelegt (Jän-Dez)

Benutze dein Script wie oben:




```php
<?

$jahreswechsel = FALSE;
$mon_jetzt   = (int) date("m",time());
$mon_gestern = (int) date("m",time()-3600);
$mon         = $mon_jetzt;

IF ( $mon_jetzt <> $mon_gestern )
     {
          $mon = $mon_gestern;
          IF (  $mon_gestern == 12 and $mon_jetzt == 1 )
             {
                $jahreswechsel=TRUE;
          }
     }
$varis=array(44073 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\Jänner]*/,22628,21618 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\März]*/,41805,51877 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\Mai]*/,23932,37248 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\Juli]*/,53683,19757 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\September]*/,56953,25174 /*[Energie - Wasserzähler\EKM-868 Übersicht\Waschmaschine\November]*/,30508);

$altwert=GetValue($varis[$mon-1]);
SetValue($varis[$mon-1],$altwert+$heute);

?>

Leider bekomm ich immer diese Fehlermeldung:

Notice: Undefined variable: heute in C:\IP-Symcon\scripts\56072.ips.php on line 18

Wie weis das Script auf Welche geloggte Variable es zugreifen muss?

Auf die Schnelle würde ich sagen, das Du die Variable „heute“ nirgends definierst!



SetValue($varis[$mon-1],$altwert+$heute); 


Was ist denn $heute? Die ist in deinem Skript nicht zu finden…
Du mußt der Variablen etwas zuweisen bzw. diese füllen oder definieren!
Das sagt auch die Fehlermeldung! --> „Undefined variable: heute … on line 18“

Gruß,
Peter

Hallo Peter,
danke!
Ich hab mal eine Variable mit $Heute angelegt.
Trotzdem kommt die gleiche Fehlermeldung nochmal :frowning:

Aber fehlt bei dem Script nicht das Archiv des Loggings?
Bzw. woher weis das Script wo es sich den Wert holen muss?

Lg

$Heute != $heute :wink:

Das habe ich in meinem Eingangs Thread -zumindest versucht- zu erklären. Ich addiere um 0.00 Uhr Tageswerte ($heute), die den Tag über aufaddiert wurden, z.B. den Strombezug, KWh oder was auch immer in in die Monatsvariablen. Man kann das auch zum Monatsende per AC_GetAggregatedValues machen. Hab ich aber auch geschrieben… Mein Skript sollte Anregungen liefern. Es läuft alleine so nicht, kann also nicht einfach mit Cut&Paste irgendwo einkopiert werden. Es muss an Deine Variablen/Umgebung angepasst werden. Sorry.

Gruß
Walter