Stromverbrauch erfassen

Kann man denn den IR-Sensor EM1000IR einfach an den TFK anschließen? Ich habe mir die Schaltung mal kurz angesehen. Welche Spannung kommt denn da raus bei silberner bzw. roter Scheibe?

Der Sensor für den Gaszähler ist etwas anders aufgebaut. Da gibt es 2 Signalausgänge (+ und -). Hat dazu jemand eine Idee?

bei mir wird der aktuelle Verbrauch über den normalen EM1010 PC in IPS ausgewertet und im Designer angezeigt.
Die Strom- und Gaszähler werden mit dem EM1010PC ausgelesen - ohne Umbau. Im Hintergrund muss das zum EM1010 mitgelieferte Programm laufen - stört ja keinen. jeweils alle 5 Minuten werden die Daten von den Sensoren ausgelesen .
Mit ein paar PHP-Zeilen lese ich dann die Daten direkt in IPS ein. Die Funkbelastung ist bei dieser Variante nicht so gross wie mit einem TFK, da nur alle 5 Minuten die Anzahl der Umdrehungen der Strom (Gas) Zählerscheibe gesendt wird. Die Genauigkeit reicht völlig aus - die Funkbelastung ist geringer und die Verbrauchdaten kommen sehr sicher in IPS und damit im Designer an

Hallo
könntest du die paar Zeilen mal hier posten, würde mich auch sehr interessieren.
Habe auch vor mir den EM 1010 PC zuzulegen.

cu uwe

Genau so habe ich es gemacht. Da sich der Stromverbrauch auch in Grenzen hält (wir heizen nicht m. Strom) ist das auch keine große Funkbelastung. Der FS20 Piri im Flur sendet öfter. Wer hier noch zusätzlich FHZ’s und WLan hat sollte nicht mit mir über Funkbelastung diskutieren. :smiley: :smiley: :smiley:

Doc

Aha, dein Piri im Flur sendet öfter! - Wohnst Du im Kaufhaus ?
Mein Stromzähler macht in 5 Minuten wenn normales Leben in der Bude ist, zwischen 10 und 20 Umdrehungen, der Gaszähler ist da auch nicht viel zurückhaltender … Also das sind bis zu 30 Impulse in der Minute. bei Einsatz eines TFK muss da doch schon einiges gesendet werden ( auch wenn man nicht mit Strom, sondern mit Gas heizt).
Von den verlorenen Daten (weil ein anderes Gerät gerade sendet) ganz zu schweigen. Um die reine Funkbelastung ging es garnicht - ich glaube die ist heute in jedem modernen Haushalt eh vorhanden - also bitte nicht so bissig -(niemand von der Herren hier sollte sich auf den Schlips getreten fühlen)

Ich lasse den Energy Monitor parallel laufen - aller 5 Minuten empfängt dieser die Daten von den Strom- und Gaszählern, das zum EM1010 mitgelieferte Proggi (läuft im Hintergrund) und schreibt die empfangenen Daten in seine Datenbank. In IPS auslesen und (fast) fertig ist die "Momentan"verbrauchsanzeige.
Das ganze läuft bei mir sehr zuverlässig

Hier das Programm:

<?
/*


EM1010 LESEN


*/

//Datenbank Klasse importieren
include(„class_mdb.php“);

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

if(!$DateiEM)
{SetValueInteger(„Strom-Sensor1-Last“, -1);$DateiEM->close();exit;}

//Verbindung öffnen
if(!$DateiEM->open())
{SetValueInteger(„Strom-Sensor1-Last“, -2);$DateiEM->close();exit;}

//Abfrage ausführen

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

//Datensatz holen
if(!$DateiEM->eof())
{
$DateiEM->movefirst();
$wert = $DateiEM->fieldvalue(„Data_orig“);
echo $wert."
";
}
else { SetValueInteger(„Strom-Sensor1-Last“, -3);$DateiEM->close();exit;}

SetValueInteger(„Strom-Sensor1-Last“, $wert);

if($wert > „2“ )
SetValueBoolean („Strom-Sensor1-ANWESEND“, TRUE);
ELSE
SetValueBoolean („Strom-Sensor1-ANWESEND“, FALSE);

//150 Impulse = 1 KW / Messintervall 5 min.
$wert = $wert*0.006666666667; SetValueFloat(„Strom-Sensor1-akt-Verbrauch“, $wert);
SetValueFloat(„Strom-Sensor1-akt-Verbrauch“, $wert);

$DateiEM->close();

?>

Je nach Zählertyp muss noch der Multiplikator angepasst werden.
Der Rest ist selbsterklärend.

Bei mir sieht es dann so aus

WZ.jpg

Ist das die Datenbank-Klasse, die (ich glaube von steiner) mal in einem Beispiel zum Auslesen von Datenbanken gepostet wurde?

Wie läuft das bei mehreren Zählern unterschiedlichen Typs?

Die mdb class kommt von www.ingoknito.de
(muss in scripts reinkopiert werden)

Ich habe 4 Sensoren angeschlossen (3 x Stom 1 x Gas)
jenachdem wie die Sensoren in EneryProf definiert wurden (es sind 12 Sensoren 8 Strom/4 Gas möglich)
können diese jeweils über Sensor1 … Sensor 12 angesprochen werden, nur den entsprechenden SELECT anpassen.

SELECT TOP 1 Data_orig FROM Sensor1 ORDER BY Time_orig D

Ich werte nur die Impulse d.h. die gemessenen Umdrehungen aus und verarbeite alles in IPS.
Auf den Stromzählern steht drauf, wie oft sich die Scheibe für 1 KWh drehen muss.
Beim Gaszähler ist keine Umrechnung notwendig es ist immer dezimal.

Meiner braucht im normalen Betrieb mehrere Minuten für eine Umdrehung. Ich denke das könnte durchaus von Typ zu Typ und Hersteller zu Hersteller unterschiedlich sein.

Toni

Meiner auch, deshalb liess sich das auch mit einem HMS100TFK einfach realisieren.

Doc

Hallo,

kann mir jemand erklären was es mit der Datenbank Klasse importieren funktioniert. Was brauche ich da.
Was wird hier geladen include(„class_mdb.php“);
Da ich von PHP nicht viel verstehe brauch ich Hilfe. Es wäre schön wenn mir jemand dazu was erklären könnte. Schon mal vielen Dank.

cu uwe

hier wird eine vorgefertigte PHP-Datei mit diesem Namen geladen und später auf die dort enthaltenen Funktionen zurückgegriffen. Im Detail ermöglichen es die Methoden (Funktionen), welche in einer Class (Class kommt aus objektorientierter Programmierung) in dieser Datei enthalten sind, mittels ADO(Active Data Objects)-die Access-Datei zu öffnen und zu ändern.
Die beschriebene „class_mdb.php“ muss von der angebenen URL erst runtergeladen und dann in das Scripts-verzeichnis zu dem Auslesescript kopiert werden.

HTH
Tommi

vielen Dank, habe es jetzt hinbekommen. Es werden alle 5min die Daten aus der Datenbank ausgelesen. Damit habe ich den aktuellen wert. Aber wie kann ich jetzt per IPS aus diesem Wert, also die Umdrehungen von 5 min, weiterverarbeiten ? z.B. letzte Stunde, Tag, Monat und so weiter.

cu uwe

entweder Du machst eine Abfrage auf die vorhandenen Daten in der Access-DB oder halt was eigenes.
Den Faktor für die Umrechnung „Umdrehungen per Kwh“ findest Du auf dem Zähler (meistens 75U/kwh oder 150 U/Kwh).
Der Rest ist eigentlich nur noch Schreibarbeit, sprich entsprechende Variablen für den gewünschten Zeitraum anlegen und dann entsprechen befüllen.
Tommi

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