geloggte Daten Engergiemesszähler auswerten

Hallo,

ich habe in mein System den Energiemeßzähler EM 1000-S von ELV integriert. Es zeigt mir auch brav die Daten des Durchschnitts- und Spitzenverbrauchs der letzten 5 min an. Diese lasse ich auch loggen. Weiß jemand von Euch, wie man aus den vorhandenen Werten den Tages/Wochen/Monatsverbrauch ermitteln kann? Ich habe mich zwar schon an AC_GetLoggedvalues versucht, aber irgendwie komm ich auf nix gescheites :confused:

Danke
Marc

Edit: habe zwischenzeitlich die Variable counter gefunden, welche brav den Verbrauch zählt. Kann mir aber trotzdem nochmal einer von euch näherbringen, wie ich z.B. den Verbrauch der letzten 24 Stunden bzw. des aktuellen Tages oder Woche hieraus ermitteln kann?

Machst Du das mit tommis EM1010-Modul?

nein, mit einem XS1 von EZ-Control.

habe zwischenzeitlich doch was ganz brauchbares im Forum gefunden :slight_smile:
hat sich erledigt…

Marc

Sagst Du uns auch, was Du gefunden hast. Interessiert bestimmt.

sorry, klar doch… guckst Du hier: http://www.ip-symcon.de/forum/f52/db-logging-wert-suchen-ausgeben-10657/#post88132

habe mich zwischenzeitlich intensiv mit diesem Thema beschäftigt. So habe ich die Auswertungen noch erweitert um:
aktueller Tag
gestern
letzte 30 Tage
aktueller Monat
alle Monate (einzeln)

Stehe für weitere Fragen gern zur Verfügung :).

Marc

Hallo,

welche Version braucht man den, wenn man nur die Stromzähler loggen will?

Schöne Grüße
Thomas

Hallo Thomas,

Du brauchst die Standardversion zzgl. der Option Empfangen (Option B). Das Scripting- sowie das Speicherkartenmodul (Option C und D) braucht man nicht, wenn man IPS im Einsatz hat.

Vorteilhaft an dem Teil ist, dass es relativ viele (preiswerte) Sensoren & Aktoren unterstützt, siehe Beschreibung des XS1.
Der Energiemesszähler ist z.B. bei ELV für 39,95 € (als Bausatz für 29,95 €) zu haben und funktioniert hervorragend. Ich werde mir noch einen zweiten für meinen Unterzähler der Heizung zulegen :).

Von meiner Seite, trotz vergleichsweise hohem Einstiegspreis, klare Kaufempfehlung.

Marc

Hallo,

ich werte zwar meine Zähler schon aus, aber finde mein vorgegen recht kompliziert, was hast du den gefunden?

Schöne Grüße
Thomas

PS: hab mir jetzt auch ein XS1 zu gelegt :-).

kuck mal hier.

Meine aktuell eingesetzte Methode ist zwar etwas umständlicher, geht aber auch. Ich hatte aber noch keine Muße, es abzuändern…


// html-ausgabe der XS1 des jeweiligen Sensors:
$file = file_get_contents('http://192.168.178.100/control?callback=cname&cmd=get_state_sensor&number=2'); 
//Stelle anspringen, wo Wert des Sensors steht:
 $jx = explode(",", $file);  
  $fertig=explode(":",$jx[5]);
//Variable auslesen und in IPS schreiben:
  $temp = (float)$fertig[1];
SetValueFloat(33761 /*[Garage\Temperatur]*/,$temp);

im Prinzip ist für jeden Sensor der Code immer der gleiche, es muss nur die Nummer des jeweiligen Sensors in der html-Adresse angepasst werden.

Marc

Hallo Marc,

würdest Du hier bitte mal Dein Script posten. Eine solche Auswertung suche ich ebenfalls.

Herzlichen Dank, Stromer

Habe heute und morgen abend keine Zeit (Termine, Termine :()
Sehe aber zu, dass ich bis zum Wochenende mal was reinstelle.

Gruß
Marc

So, hier der erste kleine Teil für gestern und die letzten 30 Tage:

<?
$archiveID = 31701 /*[Archive Handler]*/ ;   // Archive-Handler-ID
$objectID = 43719 /*Stromverbrauch*/ ; // Variablen-ID
$ende = time(); // JETZT
$verbrauch_akt=getvalue(43719 /*[Messwerte\Strom\Verbrauch heute \Hauptzähler\errchneter bisheriger Gesamtverbrauch]*/);
$start_30T = time()-(60*60*24*30); // Datenbank auslesen letzte 30 Tage
$start_gestern = strtotime(date("d.m.Y",strtotime("-1 day"))." 00:00:05"); //Startzeit gestern
$ende_gestern = strtotime(date("d.m.Y",strtotime("-1 day"))." 23:59:59"); //Endzeit gestern


// Abfrage gestern
$temp = AC_GetLoggedValues($archiveID, $objectID, $start_gestern, $ende_gestern, 0);

$anzahl = count($temp);
$wert = $temp[$anzahl-1];
$letzterWert=$wert['Value'];
$timeletzterWert = strftime("%H:%M:%S",intval($wert['TimeStamp']));
$wert=$temp[0];
$ersterWert=$wert['Value'];
$timeersterWert = strftime("%H:%M:%S",intval($wert['TimeStamp']));

$verbrauch=($ersterWert-$letzterWert)/1000;
setvalue(22374 /*[Messwerte\Strom\Verbrauch gestern]*/, number_format($verbrauch,2,",", "."));

// Abfrage 30 Tage
$buffer = AC_GetLoggedValues($archiveID, $objectID, $start_30T, $ende, 0);
$anzahl = count($buffer);
$wert = $buffer[$anzahl-1];
$ts = $wert["TimeStamp"];
$value = $wert["Value"];
$verbrauch_30T=($verbrauch_akt - $value)/1000;
setvalue(28067 /*[Messwerte\Strom\letzte 30 Tage]*/, number_format($verbrauch_30T,0,",", "."));



?>

Setz dies mal bei Dir um.
Wenns klappt, kurzes Zeichen, dann stell ich noch nen zweiten Teil bei.

Gruß Marc

Hi mrcy73,

erstmal vielen Dank für Teil eins Deiner Lösung.
Ich vermute in Deiner Variable Stromverbrauch stehen KWh und die wird als Zähler geloggt - Stimmt das? Ich würde das gerne in Verbindung mit dem EKM einsetzen und hier muss dann noch einiges geändert werden.

Neben den EKMs habe ich noch eHZ und hier bin ich gerade am Einrichten Deines Scriptes.

  1. Kennst Du einen Lösungsansatz, nachträglich aus der DB eine Auswertung nach Kalenderwochen, Kalendermonaten oder Jahren zu machen um Vergleichsauswertungen zum gleichen Zeitraum im Vorjahr machen zu können oder zu sehen, wie sich die Kosten über die Abrechnungsperioden seit der letzten Stromrechnung entwickeln, sozusagen einer live Strom- bzw. generell Verbrauchskostenrechnung?

Grüße, Stromer

ja, genau so ist es, Variable wird regelmäßig mit Daten des XS1 befüllt.
Weiß nicht ob du auch so ein Teil hast. Hier mal ein Beispiel:

//Stromverbrauch auslesen
$xml = simplexml_load_file('http://10.10.10.9/xml');#IP von XS1
$WertHauptzNEU= (float)$xml->data->t7; //aktuell ausgelesener Wert direkt vom Zähler

Zeile „t7“ ist hierbei mein aktueller Zählerwert (wird über die XS1 alle 5 min aktualisiert).
Ich habe derzeit zwar keinen Vergleich mit dem Vorjahr laufen, lasse mir aber die Daten der letzten 7 Tage und der Monate auswerfen. Ich hänge dazu mal zwei Bilder an.

Hier einen Vergleich mit den Vorjahresdaten anzustellen, dürfte am Ende auch kein allzu großes Problem sein.

Gruß
Marc

Hallo Marc,

bist du mit dem XS1 zufrieden, die Inventition ist ja nicht so unerheblich, daher würde ich gerne vorher wissen, ob das anlernen / auslesen / anbindung IPS und so weiter größere Probleme macht…

Hallo Marc,

also hier mein Zeichen, Variablen und Script angelegt und zyklischer Event täglich.

Wie gehts weiter? und vielen Dank :slight_smile:

Grüße, Stromer

Du hast recht, das Teil ist nicht ganz billig. Hierzu hatte ich mich schon mal ausgelassen, kuck auch mal nach Streuber seinem Resümee:
Stromzähler mit Scheibe - IP-Symcon Community Forum

Fazit: es ist zwar etwas teurer, dafür aber auch ganz gut :wink:
Hatte bis dato keinerlei Probleme.

Gruß
Marc

So hier Teil II :wink:

a) die letzten 30 Tage
Kategorie anlegen z.B. Verbrauch letzte 30 Tage
Hierunter müsstest Du noch 3 Variablen anlegen a) Gesamtverbrauch innerhalb der letzten 30 Tage, b) entspricht ca. in € c) Durchschnittsverbrauch pro Tag und deren Variablennr. unter setvalue ersetzen:


$ende = time(); // JETZT
$verbrauch_akt=getvalue(43719 /*[Messwerte\Strom\Verbrauch heute \Hauptzähler\errchneter bisheriger Gesamtverbrauch]*/);
$start_30T = time()-(60*60*24*30); // Datenbank auslesen letzte 30 Tage
$buffer = AC_GetLoggedValues($archiveID, $objectID, $start_30T, $ende, 0);
$anzahl = count($buffer);
$wert = $buffer[$anzahl-1];
$ts = $wert["TimeStamp"];
$value = $wert["Value"];
$verbrauch_30T=($verbrauch_akt - $value)/1000;
setvalue(28067 /*[Messwerte\Strom\letzte 30 Tage]*/, number_format($verbrauch_30T,0,",", "."));
setvalue(24958 /*[Messwerte\Strom\entspricht ca.]*/ , number_format($verbrauch_30T*0.22,2,",", "."));
setvalue(18922 /*[Messwerte\Strom\Durchschnitt pro Tag]*/, number_format($verbrauch_30T/30,1,",", "."));

b) die letzten 7 Tage
Kategorie anlegen z.B. Verbrauch letzte 7 Tage
Hierunter musst Du für jeden Tag (Montag bis Sonntag) zunächst eine String Variable anlegen, temporär mit Montag, Dienstag usw beschriften und danach wieder in der richtigen Reihenfolge der Wochentage sortieren („Objekt einsortieren“) Beim Setzen der Stromverbräuche für den jeweiligen Tag passt er dann auch die Variablenbezeichnung immer mit an (z.B. Sonntag, 28.08.) Dann musst Du bei dir die korrekten array-$Variablen einsetzen und zwar in der Reihenfolge von der LETZTEN zur ERSTEN (in meinem Fall ist die arrayvariable 11508 der Sonntag, 28.8… und Montag der 22.8. die arrayvariable 24179 (siehe Bild in meinem Beitrag weiter oben):

$Variablen=array(11508,59937,40260,51673,24487,47805,24179);
for ($x=0;$x<7;$x++)
{
unset($WTag);

$WTagtmp = date("D",strtotime("-".($x+1). "day"));
$WTagDDtmp = ", " . date("d.m.",strtotime("-".($x+1). "day"));
$start_7T=strtotime("-".($x+1). "day" ." 00:00:00");
$ende_7T=strtotime("-".($x+1). "day" ." 23:59:59");
switch ($WTagtmp)
{
	case "Mon":
   $WTag[$x]="Montag" . $WTagDDtmp;
	break;
	case "Tue":
	$WTag[$x]="Dienstag" . $WTagDDtmp;
   break;
	case "Wed":
   $WTag[$x]="Mittwoch" . $WTagDDtmp;
	break;
	case "Thu":
   $WTag[$x]="Donnerstag" . $WTagDDtmp;
   break;
	case "Fri":
   $WTag[$x]="Freitag" . $WTagDDtmp;
   break;
	case "Sat":
   $WTag[$x]="Samstag" . $WTagDDtmp;
   break;
	case "Sun":
   $WTag[$x]="Sonntag" . $WTagDDtmp;
}
$temp = AC_GetLoggedValues($archiveID, $objectID, $start_7T, $ende_7T, 0);

$anzahl = count($temp);
$wert = $temp[$anzahl-1];
$letzterWert=$wert['Value'];
$wert=$temp[0];
$ersterWert=$wert['Value'];
$verbrauch=($ersterWert-$letzterWert)/1000;

$summe=$verbrauch*0.22;
//echo $verbrauch . "
";
IPS_SetName($Variablen[$x],$WTag[$x]);
setvalue($Variablen[$x], number_format($verbrauch,0,",", ".") . "kW (" . number_format($summe,2,",", ".") . "€)");

}

Verbrauch x 0,22 ist übrigens mein angesetzter Kostensatz pro kWh, dann rechnet er dir aus, was Du ca. in € verbraucht hast.

Kuck mal ob das bei Dir geht.
Falls ja, könnte ich in Teil III meiner kleinen Vortragsreihe noch die Auswertung pro Monat reinstellen :):):slight_smile:

da gehe ich doch mal gleich ins Bett… :slight_smile: vielen Dank für Deine Mühe, Super.
Ist ne schöne Aufgabe für morgen.

Aus Deinen Scripten habe ich bereits einiges gelernt. Ich suche gerade nach Möglichkeiten übers Webfront ein Start und Enddatum eingeben zu können und für diesen Zeitraum eine Auswertung zu erstellen.

Melde mich, wenn ich für den Part 3 bereit bin,

Danke, Stromer