Stromverbrauch erfassen

beim Einsatz des EM 1010 ist die aktuelle Software V1.5 und FW 1.4 unbedingt zu empfehlen. Erst mit dieser Version sind zuverlässige Werte möglich.
Die vorhergehenden Versionen aktualisieren die EM1010-Datenbank völlig stochastich bzw. schreiben z.T. falsche Daten in die Datenbank.
Die aktuelle Verson arbeitet sehr Zeitsyncron.
Zur Vermeidung von doppelt eingelesenen Messwerten sollte die Einlesezeit mit verarbeitet werden:

$DateiEM->execute("SELECT TOP 1 Data_orig, Time_orig FROM Sensor1 ORDER BY Time_orig DESC");

Data_orig ist dabei der aktuelle Messwert (Umdrehungen der Scheibe) und Time_orig die Auslesezeit (Hier von Sensor 1)
Die weiteren Sensoren können dann entsprechend ausgewertet werden.

Hallo,
wie kann ich den letzten Tag, Monat usw aus der Datenbank auslesen.

cu uwe

Ich habe mit Hilfe von MSAccess das Script etwas erweitert und eine Abfrage für den aktuellen Tag, den aktuellen Monat und das gesammt Jahr eingebaut:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : EM_1010.ips.php
Trigger  : 
Interval : 
*/

//Datenbank Klasse importieren
include("class_mdb.php");

//Datenbank open
$DateiEM = new mdb("c:\Programme\elv\Energy Professional\EnergyProf.mdb");

//Abfrage ausführen Momentanwert
$DateiEM->execute("SELECT TOP 1 Data_orig FROM Sensor5 ORDER BY Time_orig DESC");

if(!$DateiEM->eof())
{
$DateiEM->movefirst();
$wert = $DateiEM->fieldvalue("Data_orig");
echo $wert."
";
}
else {$DateiEM->close();exit;}

$wert = $wert*0.001;
SetValueFloat("Sensor_5", $wert);

//Abfrage ausführen Tageswert
$datum=date("d.m.Y");
$DateiEM->execute("SELECT DISTINCTROW Format$([Sensor5].[Time_orig],'Long Date') AS [Time_orig nach Tagen], Sum(Sensor5.Data_orig) AS [Summe von Data_orig]
FROM Sensor5
GROUP BY Format$([Sensor5].[Time_orig],'Long Date')
ORDER BY Format$([Sensor5].[Time_orig],'Long Date') DESC");

if(!$DateiEM->eof())
{
$DateiEM->movefirst();
$wert = $DateiEM->fieldvalue("Summe von Data_orig");
echo $wert."
";
}
else {$DateiEM->close();exit;}

$wert = $wert*0.001;
SetValueFloat("Sensor_5_Tag", $wert);

//Abfrage ausführen Monatswert
$datum=date("d.m.Y");
$DateiEM->execute("SELECT DISTINCTROW Format$([Sensor5].[Time_orig],'mmmm yyyy') AS [Time_orig nach Monaten], Sum(Sensor5.Data_orig) AS [Summe von Data_orig]
FROM Sensor5
GROUP BY Format$([Sensor5].[Time_orig],'mmmm yyyy'), Year([Sensor5].[Time_orig])*12+DatePart('m',[Sensor5].[Time_orig])-1");

if(!$DateiEM->eof())
{
$DateiEM->movefirst();
$wert = $DateiEM->fieldvalue("Summe von Data_orig");
echo $wert."
";
}
else {$DateiEM->close();exit;}

$wert = $wert*0.001;
SetValueFloat("Sensor_5_Monat", $wert);

//Abfrage ausführen Jahreswert
$datum=date("d.m.Y");
$DateiEM->execute("SELECT DISTINCTROW Format$([Sensor5].[Time_orig],'yyyy') AS [Time_orig nach Jahren], Sum(Sensor5.Data_orig) AS [Summe von Data_orig]
FROM Sensor5
GROUP BY Format$([Sensor5].[Time_orig],'yyyy'), Year([Sensor5].[Time_orig])");

if(!$DateiEM->eof())
{
$DateiEM->movefirst();
$wert = $DateiEM->fieldvalue("Summe von Data_orig");
echo $wert."
";
}
else {$DateiEM->close();exit;}

$wert = $wert*0.001;
SetValueFloat("Sensor_5_Jahr", $wert);

$DateiEM->close();

?>

Man könnte nun noch um 23:59 ein Script laufen lassen was den Tageswert in eine eine neue Variable schreibt um den Wert des Vortages ablesen zu können.

… oder auch so als „rolling window“ und mit ODBC zur Ausgabe über das Webinterface. Kann man sicherlich auch noch eleganter machen.

Tommi


<h2>Strom</h2>
<?
//ODBC Verbindung
$DSN="EM1010";
$user="";
$PW="";
//Zaehlerkonstante
$z_const=75;

$conn = odbc_connect($DSN, $user, $PW) or die("Verbindung fehlgeschlagen");
//alle Einträge der letzte Stunde
$sql = "SELECT Time_rounded, Data_orig,Error_occured FROM Sensor1 where (Time_rounded >(dateadd('n',-60,now())))";
$result=odbc_prepare($conn,$sql);
$r=odbc_execute($result);
echo "<table><tr><th>Zeit</th><th>Counter</th><th>KW</th><th>Status</th></tr>
";
while(odbc_fetch_row($result)){
	$time=odbc_result($result, 1);
	$counter=odbc_result($result, 2);
	$error=(odbc_result($result, 3))?"Error":"OK";
	$value=$counter/$z_const;
	echo "<tr><td>$time</td><td align='right'>".sprintf("%d",$counter)."</td><td align='right'>".sprintf("%4.2f",$value)."</td><td> $error</td></tr>
";
}
echo "</table>
";
odbc_free_result($result);

echo "<h3>History</h3>";

echo "<table><tr><th>Range</th><th>Counter</th><th>KW</th></tr>";
//letzte Stunde
$sql = "SELECT sum(Data_orig) FROM Sensor1 where Error_occured=0 and (Time_rounded >(dateadd('n',-60,now())))";
$result=odbc_exec($conn,$sql);
while(odbc_fetch_row($result)){
	$counter=odbc_result($result, 1);
	$value=$counter/$z_const;
	echo "<tr><td>Last Hour</td><td align='right'>".sprintf("%d",$counter)."</td><td align='right'>".sprintf("%4.2f",$value)."</td></tr>
";
}
odbc_free_result($result);

//letzter Tag
$sql = "SELECT sum(Data_orig) FROM Sensor1 where Error_occured=0 and (Time_rounded >(dateadd('d',-1,now())))";
$result=odbc_exec($conn,$sql);
while(odbc_fetch_row($result)){
	$counter=odbc_result($result, 1);
	$value=$counter/$z_const;
	echo "<tr><td>Last Day</td><td align='right'>".sprintf("%d",$counter)."</td><td align='right'>".sprintf("%4.2f",$value)."</td></tr>
";
}
odbc_free_result($result);

//letzte Woche
$sql = "SELECT sum(Data_orig) FROM Sensor1 where Error_occured=0 and (Time_rounded >(dateadd('ww',-1,now())))";
$result=odbc_exec($conn,$sql);
while(odbc_fetch_row($result)){
	$counter=odbc_result($result, 1);
	$value=$counter/$z_const;
	echo "<tr><td>Last Week</td><td align='right'>".sprintf("%d",$counter)."</td><td align='right'>".sprintf("%4.2f",$value)."</td></tr>
";
}
odbc_free_result($result);

//letzter Monat
$sql = "SELECT sum(Data_orig) FROM Sensor1 where Error_occured=0 and (Time_rounded >(dateadd('m',-1,now())))";
$result=odbc_exec($conn,$sql);
while(odbc_fetch_row($result)){
	$counter=odbc_result($result, 1);
	$value=$counter/$z_const;
	echo "<tr><td>Last Month</td><td align='right'>".sprintf("%d",$counter)."</td><td align='right'>".sprintf("%4.2f",$value)."</td></tr>
";
}
odbc_close_all();
echo "</table>
";
?>

Auch nicht schlecht, danke.

Hallo xlarissax,

Du schreibst da einiges Interssante vor einiger Zeit:

Ich habe den Conrad Energy Sensor 3000. Nun kann ich aus den diversen Mails entnehmen das dieser offensichtlich baugleich sein soll mit Deinem.

Kannst Du mir bitte einen Link senden wo ich neuere Software bekommen.
Kann man das Ding auch Direkt von der Usb Schnittstelle. Auslesen?
Ich verwende primaer linux und bin mit Schnittstellenprogrammierung nicht so bewandert. Weist Du/jemand mehr darüber?

Der Gassensor funktioniert überhaupt nicht das heisst er registriert eine bewegung der Zahlen nicht…

lg

emmerich

ELV-Kunden bekommen das Update hier: Softwaredownload-Service - ELV Elektronik AG

Kann man das Ding auch Direkt von der Usb Schnittstelle. Auslesen?

ja

Ich verwende primaer linux und bin mit Schnittstellenprogrammierung nicht so bewandert. Weist Du/jemand mehr darüber?

Google mal nach „fhem“

Der Gassensor funktioniert überhaupt nicht das heisst er registriert eine bewegung der Zahlen nicht…

Das ist ein Feature:D
Im Ernst, sogar in der Bedienungsanleitung steht, das man selbst mit peinlichster Justierung kein 100%-Ergebnis bekommt.

Tommi