EKM - Stromverbrauch loggen

Hallo zusammen,

das frisch gelieferte EKM 868 liegt nun hier und blinkt vor sich hin. Ich sehe die Werte Current und Counter im IPS, das heißt hardwaretechnisch läuft schon mal alles :loveips: Ich habe schon hin und her programmiert, aber irgendwie will das alles nicht so, wie ich :slight_smile:

Habe einen S0-Zähler mit 1000 Impulsen pro kw/h. Ich möchte einfach nur den gesamten Tagesverbrauch in kw/h in eine Variable schreiben, sodass ich am Ende des Tages weiß, ich habe x kw/h verbraucht.

Kann mir jemand mathematische Starthilfe geben?

Danke und Gruß,
Christoph

Hallo Christoph,

hast Du das hinbekommen? wenn ja, wie? würde mich auch interessieren.
Gruß Robert

Starthilfe on

$impulse_am_tag = $impulse_jetzt - $impulse_gestern_um_2359;
$kwh_tag = $impulse_am_tag/1000;

Event auf jeden Tag 23:59 setzen.

Starthilfe off

oder so:


// Abfrage Verbrauch gestern
$temp = AC_GetAggregatedValues($archiveID, $objectID, 1, $start_gestern, $ende_gestern, 1);
$verbrauch = ($temp[0]['Avg']);
setvalue(31004 /*[Smart Metering\berechnete Werte\Statistik\Server\gestern]*/ , number_format($verbrauch,2,",", "."));

Start der Abfrage irgendwann nach 0:00 Uhr;)

Hallo Raketenschnecke,

ähm wenn Du jetzt noch eine kleine Erklärung mitlieferst, was

$archiveID, $objectID, 1, $start_gestern, $ende_gestern, 1

ist, versteh ich hoffentlich ein wenig was G :slight_smile:

vielen Dank! Gruß
Robert

ich glaube, das hab ich sogar einigermaßen verstanden :slight_smile: wie bekommt man das jetzt noch hin, das ich über wochen und monate meinen Verbrauch täglich sehe? einfach auf die Variable ein logging aktivieren?

Danke!
Gruß Robert

äh, ja, natürlich :wink:
$temp = AC_GetAggregatedValues($archiveID, $objectID, 1, $start_gestern, $ende_gestern, 1);

$archiveID => ID des Archive-Handlers
$objectID => ID der Stromzähler-Variable
1 => Parameter für Verdichtungsintervall, 1= Tagesintervall wird ausgegeben
$start_gestern => Timestamp Beginn des Betrachtungszeitraumes
$ende_gestern => Timestamp Ende des Betrachtungszeitraumes
1 => Begrenzung auf max n Ausgabe-Datensätze

Hallo Raketenschnecke,

ahhh, etwas licht im Dunkeln :slight_smile: aber noch nicht ganz, bin halt doch noch anfänger …

Was ist denn der Archive-Handler? also wie bekomme ich dessen ID raus?
Mit Stromzählervariable meinst Du vermutlich den Counter?
start_gestern wäre dann 15.04.2012 23:59 und ende dann 16.04.2012 23:59?
gibts dafür ne Systemdatumausgabe die man nutzen kann oder in welchem format muss man das angeben?

Danke Dir!

Gruß Robert

sorry, das war mir nicht klar.
Also versuchen wir es mal mit einem kompletten Script:

den Archive-Handler findest du im Objektbaum unter Kern-Instanzen. Hier kannst du alle geloggten Variablen sehen und ggf. in gewissen Grenzen manipulieren. Für AC_GetAggregatedValues wird dessen ID benötigt (AC_GetAggregatedValues greift über den Archive-Handler auf die Datenbank zu).
Die ID kannst du entweder vorher im Script einer Variablen zuweisen (Beispiel: $archiveID = 12345 // ID des Archive-handlers) und diese Variable dann in die Funktion AC_GetAggregatedValues eintragen - oder die ID statt der Variable $archiveID direkt in die Funktion eintragen,

mit Stromzähler-Variable ist „Counter“ unter der EKM-Instanz gemeint, ja

die Start- und Endzeiten kann man z.B. so ermitteln und Variablen zuweisen:


$start_gestern = strtotime(date("d.m.Y",strtotime("-1 day"))." 00:00:00"); //Startzeit gestern
$ende_gestern = strtotime(date("d.m.Y",strtotime("-1 day"))." 23:59:59"); //Endzeit gestern

alternativ z.B. so:


$start_gestern = mktime(0,0,0, date("m", time()), date("d",time())-1, date("Y",time())); // gestern 00:00 Uhr
$ende_gestern = mktime(23, 59,59, date("m", time()), date("d",time())-1, date("Y",time())); // gestern 23:59 Uhr,

Wenn Du mehrere Werte sehen willst ist Rakete’s Weg der bessere, aber halt auch komplizierter.

Hallo ihr beiden,

ich hab jetzt mal aus dem Link den mir Rakete geschickt hat ein wenig was zusammen gebastelt, allerdings kommen mir die Werte (nur heute -0 Day) etwas hoch vor, hab das logging gerade eingeschaltet, habe einen verbrauch von 250watt und bin jetzt schon bei 0,61€ ? ich nutze die EKM-868 Hardware von IP-Symcon mit S0 zählern mit 1000 Impulse pro KW


<?

$ende = time(); // JETZT
$start_30T = time()-(60*60*24*30); // Datenbank auslesen letzte 30 Tage
$start_gestern = strtotime(date("d.m.Y",strtotime("-0 day"))." 00:00:05"); //Startzeit gestern
$ende_gestern = strtotime(date("d.m.Y",strtotime("-0 day"))." 23:59:59"); //Endzeit gestern


//// EG Phase 1 ////

$archiveID = 44034 /*[Archive Handler]*/ ;   // Archive-Handler-ID
$objectID = 36370  /*Stromverbrauch*/ ; // Variablen-ID
$verbrauch_akt=getvalue($objectID);

// 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(12923  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-1\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(59034  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-1\Verbrauch letzte 30 Tage]*/ , number_format($verbrauch_30T,0,",", "."));




//// EG Phase 2 ////

$archiveID = 44034 /*[Archive Handler]*/ ;   // Archive-Handler-ID
$objectID = 35132  /*[Verwaltung\1 Hs7\Strom\EKM-868 (Counter1) EG-2\Counter]*/ ; // Variablen-ID
$verbrauch_akt=getvalue($objectID);

// 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(16081  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-2\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(28040  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-2\Verbrauch letzte 30 Tage]*/ , number_format($verbrauch_30T,0,",", "."));




//// EG Phase 3 ////

$archiveID = 44034 /*[Archive Handler]*/ ;   // Archive-Handler-ID
$objectID = 18130  /*[Verwaltung\1 Hs7\Strom\EKM-868 (Counter1) EG-3\Counter]*/; // Variablen-ID
$verbrauch_akt=getvalue($objectID);

// 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(26023  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-3\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(59728  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-3\Verbrauch letzte 30 Tage]*/ , number_format($verbrauch_30T,0,",", "."));




//// Gesamtverbrauch EG ////

$verbrauch_EG_gestern_gesamt = getvalue(12923  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-1\Verbrauch Gestern]*/) + getvalue(16081  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-2\Verbrauch Gestern]*/)+ getvalue(26023  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-3\Verbrauch Gestern]*/);
setvalue(30456  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-Gesamt\Verbrauch Gestern]*/, $verbrauch_EG_gestern_gesamt);

$verbrauch_EG_30Tage_gesamt = getvalue(59034  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-1\Verbrauch letzte 30 Tage]*/) + getvalue(28040  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-2\Verbrauch letzte 30 Tage]*/) + getvalue(59728  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-3\Verbrauch letzte 30 Tage]*/);
setvalue(41306  /*[Verwaltung\4 Variablen\Haus 7\Strom\Counter EG-Gesamt\Verbrauch letzte 30 Tage]*/, $verbrauch_EG_30Tage_gesamt);



?>

kann ich das Script auf die 1000Takte zählung so vielleicht garnicht anwenden?

wäre Super wenn einer von Euch nochmal ein Auge darauf werfen könnte :slight_smile:

Gruß Robert

das wird vermutlich das Problem sein: wahrscheinlich hat der EKM schon xxxx Counts gezählt. Wenn du das Logging gerade einschaltest hast Du einen Sprung von 0-> xxxx.
Also wird das erst ab morgen funktionieren (für einen ganzen Tag). Stundenwerte ab der nächsten vollendeten Stunde

Dann lass ich mich mal auf morgen überraschen G :slight_smile: danke Dir vielmals für Deine Hilfe, ich hoffe ich kann morgen berichten!

Gruß Robert

… oder du löschst die bereits geloggten Werte der Variable im Archive-Handler, machst den EKM kurz stromlos und fängst neu mit Null an :wink:

Du meinst, damit ich den Verbrauch von heute schon berechnen kann?
hmmm, aktueller Verbrauch wäre natürlich auch interessant, aber ich glaub mir reicht das wenn ich morgen sehe was ich heute verbraucht habe :slight_smile:

da hast du mich falsch verstanden (oder ich habs nicht gut genug beschrieben): du wirst morgen den gleichen Fehler haben, wenn Du die Summe für heute ermitteln willst (merke: heute ist morgen schon gestern :D).
Wenn Du morgen ein brauchbares Ergebnis für heute sehen willst: geloggte Werte löschen, EKM stromlos machen.
Ansonsten wird es korrekte Tages-Summen erst für morgen geben (und damit übermorgen sichtbar)