Hier ein Script zum auswerten des EMH Bezugzähler, 2 Tarife.
Das Script kann zeitgesteuert aufgerufen werden, nach Wunsch einbauen.
Cutter und Registervariable anlegen, nach Bild einrichten und mit entsprechendem Port verbinden.
Im Anhang noch ein paar Bilder von einem Zusatzmodul zur direkten Anzeige.
<?
if($_IPS['SENDER'] == "RegisterVariable")
{
// HerstellerID Obiskennung:129-129.199.130.3*255 Hex:81 81 C7 82 03 FF
if(strpos($_IPS['VALUE'], chr(0x81).chr(0x81).chr(0xC7).chr(0x82).chr(0x03).chr(0xFF)) !== false)
{
$herstellerID = explode(chr(0x81).chr(0x81).chr(0xC7).chr(0x82).chr(0x03).chr(0xFF), $_IPS['VALUE']);
SetValue(50710 /*[eHZ\SML\Hersteller]*/, substr($herstellerID[1], 5, 3));
}
else
{
LogMessage();
}
// Zählerstand (Wirk-Energie Total Bezug) Obiskennung:1-0.1.8.0*255 Hex:01 00 01 08 00 FF
if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x00).chr(0xFF)) !== false)
{
$zaehlerstand = explode(chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x00).chr(0xFF), $_IPS['VALUE']);
SetValue(35552 /*[eHZ\SML\Zählerstand]*/, hexdec(Str2Hex(substr($zaehlerstand[1], 9, 5)))/10000);
}
else
{
LogMessage();
}
// Wirkleistung (Wirk-Leistung Total) Obiskennung:1-0.15.7.0*255 Hex:01 00 0F 07 00 FF
if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x0F).chr(0x07).chr(0x00).chr(0xFF)) !== false)
{
$wirkleistung = explode(chr(0x01).chr(0x00).chr(0x0F).chr(0x07).chr(0x00).chr(0xFF), $_IPS['VALUE']);
SetValue(45421 /*[eHZ\SML\Wirkleistung]*/, hexdec(Str2Hex(substr($wirkleistung[1], 7, 4)))/10);
}
else
{
LogMessage();
}
// Bezug Tarif 1 (Wirk-Energie Tarif 1 Bezug) Obiskennung:1-0.1.8.1*255 Hex:01 00 01 08 01 FF
if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF)) !== false)
{
$bezugTarif1 = explode(chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF), $_IPS['VALUE']);
SetValue(31449 /*[eHZ\SML\Bezug Tarif 1]*/, hexdec(Str2Hex(substr($bezugTarif1[1], 7, 5)))/10000);
}
else
{
LogMessage();
}
// Bezug Tarif 2 ((Wirk-Energie Tarif 2 Bezug) Obiskennung:1-0.1.8.2*255 Hex:01 00 01 08 02 FF
if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x02).chr(0xFF)) !== false)
{
$bezugTarif2 = explode(chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x02).chr(0xFF), $_IPS['VALUE']);
SetValue(11116 /*[eHZ\SML\Bezug Tarif 2]*/, hexdec(Str2Hex(substr($bezugTarif2[1], 7, 5)))/10000);
}
else
{
LogMessage();
}
}
function Str2Hex($daten)
{
$hex = "";
for($i=0; $i<strlen($daten); $i++)
$hex .= sprintf("%02X ", ord($daten[$i]));
return $hex;
}
function LogMessage()
{
// Fehlermeldung nach logs schreiben
$log = IPS_GetKernelDir()."logs\\Error eHZ_EMH.txt";
$fp = fopen($log, "a");
fwrite($fp, date("H:i:s ")."Datenlaenge: ".strlen($_IPS['VALUE'])." Daten: ".Str2Hex($_IPS['VALUE'])."
");
fclose($fp);
}
?>