So ich bin nun fertig und es hat alles gut geklappt. Da ich nicht der PHP-Guru bin, bin ich über Verbesserungsvorschläge dankbar.
Also folgende Hardware ist vorhanden:
Logarex Elektrozähler Gebrauchsanleitung_LK13BE8030x9.pdf (1.63 MB)
RS485-Ethernet Konverter: Brainboxes ES-413
Baumansicht IPS:
ClientSocket:
Cutter:
RegVar:
Die Initialisierung (PullModus) des Zählers:
<?
RegVar_SendText(43427 /*[Zähler\eHZ\RegVar eHZ]*/, "/?!
");
IPS_Sleep(1000);
RegVar_SendText(43427 /*[Zähler\eHZ\RegVar eHZ]*/, chr(0x06)."050
");
?>
Auswertungsskript der Daten aus der RegVar:
<?
// Auswertung der eHZ-Daten am RS485 Port A
// Zählernummer Obiskennung:1-0:96.1.0*255 Hex:31 2d 30 3a 39 36 2e 31 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x39).chr(0x36).chr(0x2e).chr(0x31).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x39).chr(0x36).chr(0x2e).chr(0x31).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$hersteller = substr($wert[1], 1, 16);
SetValueString(25110 /*[Zähler\eHZ\RegVar eHZ\Hersteller]*/, $hersteller);
}
// Import Obiskennung:1-0:1.8.0*255 Hex:31 2d 30 3a 31 2e 38 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$import = substr($wert[1], 1, 11);
SetValue(14055 /*[Zähler\eHZ\RegVar eHZ\1.8.0 Import EVU]*/, $import);
}
// Export Obiskennung:1-0:2.8.0*255 Hex:31 2d 30 3a 32 2e 38 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x32).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x32).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$export = substr($wert[1], 1, 11);
SetValue(10193 /*[Zähler\eHZ\RegVar eHZ\2.8.0 Export EVU]*/, $export);
}
// Export Obiskennung:1-0:16.7.0*255 Hex:31 2d 30 3a 31 36 2e 37 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x36).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x36).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$stromeff = substr($wert[1], 1, 7);
SetValue(10335 /*[Zähler\eHZ\RegVar eHZ\Stromeffektivwert]*/, $stromeff);
}
// Export Obiskennung:1-0:32.7.0*255 Hex:31 2d 30 3a 33 32 2e 37 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x33).chr(0x32).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x33).chr(0x32).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$spannungL1 = substr($wert[1], 1, 5);
SetValue(22834 /*[Zähler\eHZ\RegVar eHZ\Spannung L1]*/, $spannungL1);
}
// Export Obiskennung:1-0:52.7.0*255 Hex:31 2d 30 3a 35 32 2e 37 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x35).chr(0x32).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x35).chr(0x32).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$spannungL2 = substr($wert[1], 1, 5);
SetValue(22377 /*[Zähler\eHZ\RegVar eHZ\Spannung L2]*/, $spannungL2);
}
// Export Obiskennung:1-0:72.7.0*255 Hex:31 2d 30 3a 37 32 2e 37 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x37).chr(0x32).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x37).chr(0x32).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$spannungL3 = substr($wert[1], 1, 5);
SetValue(28019 /*[Zähler\eHZ\RegVar eHZ\Spannung L3]*/, $spannungL3);
}
// Export Obiskennung:1-0:31.7.0*255 Hex:31 2d 30 3a 33 31 2e 37 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x33).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x33).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$stromL1 = substr($wert[1], 1, 6);
SetValue(15011 /*[Zähler\eHZ\RegVar eHZ\Strom L1]*/, $stromL1);
}
// Export Obiskennung:1-0:51.7.0*255 Hex:31 2d 30 3a 35 31 2e 37 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x35).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x35).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$stromL2 = substr($wert[1], 1, 6);
SetValue(29366 /*[Zähler\eHZ\RegVar eHZ\Strom L2]*/, $stromL2);
}
// Export Obiskennung:1-0:71.7.0*255 Hex:31 2d 30 3a 37 31 2e 37 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x37).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x37).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$stromL3 = substr($wert[1], 1, 6);
SetValue(15642 /*[Zähler\eHZ\RegVar eHZ\Strom L3]*/, $stromL3);
}
// Export Obiskennung:1-0:81.7.1*255 Hex:31 2d 30 3a 38 31 2e 37 2e 31 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x38).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x31).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x38).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x31).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$winkelUL2UL1 = substr($wert[1], 1, 3);
SetValue(30399 /*[Zähler\eHZ\RegVar eHZ\Phasenwinkel UL2 : UL1]*/, $winkelUL2UL1);
}
// Export Obiskennung:1-0:81.7.2*255 Hex:31 2d 30 3a 38 31 2e 37 2e 32 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x38).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x32).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x38).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x32).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$winkelUL3UL1 = substr($wert[1], 1, 3);
SetValue(43442 /*[Zähler\eHZ\RegVar eHZ\Phasenwinkel UL3 : UL1]*/, $winkelUL3UL1);
}
// Export Obiskennung:1-0:81.7.4*255 Hex:31 2d 30 3a 38 31 2e 37 2e 34 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x38).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x34).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x38).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x34).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$winkelIL1UL1 = substr($wert[1], 1, 3);
SetValue(30582 /*[Zähler\eHZ\RegVar eHZ\Phasenwinkel IL1 : UL1]*/, $winkelIL1UL1);
}
// Export Obiskennung:1-0:81.7.15*255 Hex:31 2d 30 3a 38 31 2e 37 2e 31 35 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x38).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x31).chr(0x35).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x38).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x31).chr(0x35).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$winkelIL2UL2 = substr($wert[1], 1, 3);
SetValue(25119 /*[Zähler\eHZ\RegVar eHZ\Phasenwinkel IL2 : UL2]*/, $winkelIL2UL2);
}
// Export Obiskennung:1-0:81.7.26*255 Hex:31 2d 30 3a 38 31 2e 37 2e 32 36 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x38).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x32).chr(0x36).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x38).chr(0x31).chr(0x2e).chr(0x37).chr(0x2e).chr(0x32).chr(0x36).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$winkelIL3UL3 = substr($wert[1], 1, 3);
SetValue(15654 /*[Zähler\eHZ\RegVar eHZ\Phasenwinkel IL3 : UL3]*/, $winkelIL3UL3);
}
// Export Obiskennung:1-0:14.7.0*255 Hex:31 2d 30 3a 31 34 2e 37 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x34).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x34).chr(0x2e).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$netzfrequenz = substr($wert[1], 1, 4);
SetValue(14058 /*[Zähler\eHZ\RegVar eHZ\Netz Frequenz]*/, $netzfrequenz);
}
// Export Obiskennung:1-0:1.8.0*96 Hex:31 2d 30 3a 31 2e 38 2e 30 2a 39 36
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x39).chr(0x36)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x39).chr(0x36), $_IPS['VALUE']);
$energie1d = substr($wert[1], 1, 7);
SetValue(32468 /*[Zähler\eHZ\RegVar eHZ\Energieverbrauch letzter Tag]*/, $energie1d);
}
// Export Obiskennung:1-0:1.8.0*97 Hex:31 2d 30 3a 31 2e 38 2e 30 2a 39 37
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x39).chr(0x37)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x39).chr(0x37), $_IPS['VALUE']);
$energie7d = substr($wert[1], 1, 7);
SetValue(10194 /*[Zähler\eHZ\RegVar eHZ\Energieverbrauch letzte Woche]*/, $energie7d);
}
// Export Obiskennung:1-0:1.8.0*98 Hex:31 2d 30 3a 31 2e 38 2e 30 2a 39 38
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x39).chr(0x38)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x39).chr(0x38), $_IPS['VALUE']);
$energie30d = substr($wert[1], 1, 7);
SetValue(25295 /*[Zähler\eHZ\RegVar eHZ\Energieverbrauch letzter Monat]*/, $energie30d);
}
// Export Obiskennung:1-0:1.8.0*99 Hex:31 2d 30 3a 31 2e 38 2e 30 2a 39 39
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x39).chr(0x39)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x39).chr(0x39), $_IPS['VALUE']);
$energie365d = substr($wert[1], 1, 7);
SetValue(10337 /*[Zähler\eHZ\RegVar eHZ\Energieverbrauch letztes Jahr]*/, $energie365d);
}
// Export Obiskennung:1-0:1.8.0*100 Hex:31 2d 30 3a 31 2e 38 2e 30 2a 31 30 30
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x31).chr(0x30).chr(0x30)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x31).chr(0x2e).chr(0x38).chr(0x2e).chr(0x30).chr(0x2a).chr(0x31).chr(0x30).chr(0x30), $_IPS['VALUE']);
$energierueck = substr($wert[1], 1, 7);
SetValue(21961 /*[Zähler\eHZ\RegVar eHZ\Energieverbrauch seit letzter Rückstellung]*/, $energierueck);
}
// Export Obiskennung:1-0:0.2.0*255 Hex:31 2d 30 3a 30 2e 32 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x30).chr(0x2e).chr(0x32).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x30).chr(0x2e).chr(0x32).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$firmware = substr($wert[1], 1, 20);
SetValueString(22843 /*[Zähler\eHZ\RegVar eHZ\Firmware Version]*/, $firmware);
}
// Export Obiskennung:1-0:96.90.2*255 Hex:31 2d 30 3a 39 36 2e 39 30 2e 32 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x39).chr(0x36).chr(0x2e).chr(0x39).chr(0x30).chr(0x2e).chr(0x32).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x39).chr(0x36).chr(0x2e).chr(0x39).chr(0x30).chr(0x2e).chr(0x32).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$pruefsumme = substr($wert[1], 1, 4);
SetValueString(11964 /*[Zähler\eHZ\RegVar eHZ\Prüfsumme]*/, $pruefsumme);
}
// Export Obiskennung:1-0:97.97.0*255 Hex:31 2d 30 3a 39 37 2e 39 37 2e 30 2a 32 35 35
if(strpos($_IPS['VALUE'], chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x39).chr(0x37).chr(0x2e).chr(0x39).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35)) !== false) {
$wert = explode(chr(0x31).chr(0x2d).chr(0x30).chr(0x3a).chr(0x39).chr(0x37).chr(0x2e).chr(0x39).chr(0x37).chr(0x2e).chr(0x30).chr(0x2a).chr(0x32).chr(0x35).chr(0x35), $_IPS['VALUE']);
$statusreg = substr($wert[1], 1, 8);
SetValue(28032 /*[Zähler\eHZ\RegVar eHZ\Status Register]*/, $statusreg);
}
?>
Den Eigenverbrauch der PV-Leistung habe ich dann aus Erzeugung-Export errechnet.
Übrigens hat paresy #3 nicht ganz Recht … ich habe meinen Itron schon vor 6 Jahren im Pullmodus betrieben.
https://www.symcon.de/forum/threads/20880-Elektroz%C3%A4hler-Gas-und-Wasseruhr-an-IP-Symcon
Würde mich freuen wenn Feedback kommt.