Hallo Leute,
habe mir gestern IP-Symcom gekauft und weil meine Sensoren noch nicht da sind einfach mal geschaut was ich schon da habe:
Webcam an der Haustür tut.
Davis Wetterstation über WSWin tut
Aber an meinem Stromzähler hänge ich gerade ein wenig, kann mir evtl. jemand ein bisschen weiterhelfen? Wäre nett…
Habe alles mal durchgeschaut was ich im Forum zu COM-1 gefunden habe, hauptsächlich geholfen hat dieser Thread:
Ich blicks aber noch nicht ganz…
Vorhanden ist ein eHZ-Zähler der ENBW.
Laut ENBW gibt der garkeine Daten raus, mit EDL-Cockpit zeigt er mir aber den Stromverbrauch an. Leider sonst nicht viel…
Ich verwende einen optischen Lesekopf von CO.MET und den Netzwerk-Adapter COM-1.
Mit EDL-Cockpit funktioniert die Verbindung einwandfrei, aber die Software ist nicht so wirklich der Brüller.
Habe mir einen Client-Socket installiert, IP 192.168.5.139 (mein COM-1) und Port 5000.
Im Debug-Modus gibt es folgende Daten:
28.11.2013 07:36:15.00 | RECEIVED | /EMH5----eHZ-E0028E
1-0:0.0.0*255(20570795)
1-0:1.8.1*255(020328.2305)
1-0:2.8.1*255(008337.8534)
1-0:96.5.5*255(82)
0-0:96.1.255*255(0002240640)
!
15721818
DE0000000000000000000000000000007
28.11.2013 07:36:16.00 | RECEIVED | /EMH5----eHZ-E0028E
1-0:0.0.0*255(20570795)
1-0:1.8.1*255(020328.2308)
1-0:2.8.1*255(008337.8534)
1-0:96.5.5*255(82)
0-0:96.1.255*255(0002240640)
!
15721819
DE0000000000000000000000000000007
28.11.2013 07:36:18.00 | RECEIVED | /EMH5----eHZ-E0028E
1-0:0.0.0*255(20570795)
1-0:1.8.1*255(020328.2311)
1-0:2.8.1*255(008337.8534)
1-0:96.5.5*255(82)
0-0:96.1.255*255(0002240640)
!
1-0:0.0.0 dürfte die Zählernummer sein?
1-0:1.8.1 ist der Bezug
1-0:2.8.1 ist die Einspeisung
1-0:96.5.5 ist der Status
0-0:96.1 Fabriknummer?
Nachdem die Daten angezeigt werden habe ich mir eine Registervariable angelegt
Übergeordnete Instanz ist der obige Socket. Gehe ich auf Debug werden hier dieselben Werte angezeigt.
Mit Ziel-ID konnte ich nicht viel anfangen, habe da einfach mal Zähler ausgewählt, Zähler ist mein Script.
Die Daten kommen im Sekundentakt, anscheinend wird jetzt das Script Zähler jede Sekunde abgearbeitet.
Das Script habe ich aus dem genannten Thread kopiert und leicht angepasst (sorry, bin noch absoluter Einsteiger):
<?
$eHZdata = array("1-0:0.0.0*255" => 27454, // Zaehlernummer
"1-0:1.8.1*255" => 28174, // Strom Bezug
"1-0:2.8.1*255" => 25310, // Strom Einspeisung
"1-0:96.5.5*255" => 59298, // Status Hex
"0-0:96.1.255*255" => 22074, // Fabriknummer
);
$Netzperiodendauer = 0; // VariablenID der Obis Kennzahl der Netzperiodendauer
$var1 = 0; // VariablenID der Obis Kennzahl der Daten welche nicht umgerechnet werden
$var2 = 0; // VariablenID der Obis Kennzahl der Daten welche nicht umgerechnet werden
$var3 = 0; // VariablenID der Obis Kennzahl der Daten welche nicht umgerechnet werden
//Dateneingang von Registervariable
$string = explode("
", trim($IPS_VALUE));
for($i = 0; $i < count($string); $i++)
{
$id = strstr($string[$i], "(", true); // split nach Obis Kennzahl
$value = strstr($string[$i], "("); // split nach Daten
$check = strpos($value, "*"); // suche nach Daten mit Angaben V-A-W
if($check !== false) // Daten mit V-A-W ausgeben und formatieren auf 2 Stellen nach dem Komma
{
$value = strstr($value, "*", true); // split nach *V-A-W
$data = substr($value, 1);
SetValue($eHZdata[$id], number_format((float)$data, 2, ',', ''));
}
else // alle anderen Daten ausgeben
{
$data = substr(trim($value), 1, -1);
if(strlen($data) <= 4) // Daten mit bis zu 2 Byte
{
if($eHZdata[$id] == $Netzperiodendauer)
{
$data = hexdec($data)/100; // Daten umrechnen 1/100 in ms
}
elseif(($eHZdata[$id] == $var1) || ($eHZdata[$id] == $var2) || ($eHZdata[$id] == $var3))
{
$data = $data; // Daten ohne Umrechnung
}
else
{
$data = hexdec($data); // Daten von Hex nach Dec umrechnen
}
}
SetValue($eHZdata[$id], (float)$data);
}
}
?>
Soweit habe ich es verstanden: im Array habe ich die Werte die mein Zähler liefert, die werden auf die jeweiligen Variablen abgebildet.
Die Variable 28174 ändert sich auch im Sekundentakt. Schön. Einspeisung ist nichts weil dunkel.
Was ich nicht ganz verstehe - wieso läuft das Script überhaupt? Wo kommen die Daten her?
Folgende Fehlermeldungen gibt es:
Notice: Undefined variable: IPS_VALUE in C:\IP-Symcon\scripts\20484.ips.php on line 15
Notice: Undefined offset: 0 in C:\IP-Symcon\scripts\20484.ips.php on line 33
Notice: Undefined offset: 0 in C:\IP-Symcon\scripts\20484.ips.php on line 46
Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\20484.ips.php on line 46
Wenn ich das richtig verstehe sollen die Werte aus $IPS_VALUE ausgelesen werden, die gibts aber nicht. Wieso gibts dann trotzdem Daten? Wo kommen die her?
Brauche ich für meinen Zähler Netzperiodendauer, Var1-Var3?
Wie bekomme ich die Fehler weg?
Und da ich den Verbrauch gerne loggen würde:
kann ich den Takt der Abfrage irgendwie auf 30sekunden oder 1 Minute ändern? Mit 1 Sekunden läuft mir ja sonst bald die Platte voll.
Kann ich aus dem Verbrauch irgendwie die Leistung berechnen?
Variablen Strom-Bezug (28174) und Strom-Einspeisung (25310) funktionieren.
Die Bezugsleistung müsste dann (Strom-Bezug(letzte Messung) - Strom-Bezug(aktuelle Messung)/Messintervall) sein, richtig?
Gleiches für Einspeiseleistung. Hat mir jemand einen Tipp wie ich das im Script korrekt implementiere?
Die Co-Met Software zeigt die aktuelle Leistung an. Der Zähler gibt die aber nicht aus, also muss die ja berechnet sein?
Wäre toll wenn mir jemand weiterhelfen könnte. Im genannten Thread ging es ja am Ende nur noch um „moderne“ Zähler mit anderem Protokoll.