bisher läuft alles ohne Probleme. Der Debugger hat nicht mehr zugeschlagen.
Code: Alles auswählen
$aktuelleDaten["SMA"] = trim($funktionen->Hex2String(substr($Daten,0,8)));
$aktuelleDaten["TAG0"] = substr($Daten,12,4);
$aktuelleDaten["Gruppe"] = substr($Daten,16,8);
$aktuelleDaten["Datenlaenge"] = hexdec(substr($Daten,24,4));
$aktuelleDaten["SMA_NET_2"] = substr($Daten,28,4);
$aktuelleDaten["Protokoll_ID"] = substr($Daten,32,4);
$aktuelleDaten["Susy-ID"] = hexdec(substr($Daten,36,4));
$aktuelleDaten["SerNo"] = hexdec(substr($Daten,40,8));
$aktuelleDaten["Ticker_ms"] = hexdec(substr($Daten,48,8));
$aktuelleDaten["Wh_Bezug"] = (hexdec(substr($Daten,strpos($Daten,"00010800",72)+8,16))/3600);
$aktuelleDaten["Wh_Einspeisung"] = (hexdec(substr($Daten,strpos($Daten,"00020800",112)+8,16))/3600);
$aktuelleDaten["PF_Leistung"] = (hexdec(substr($Daten,strpos($Daten,"000d0400",296)+8,8))/1000);
$aktuelleDaten["Frequenz"] = round((hexdec(substr($Daten,strpos($Daten,"000e0400",312)+8,8))/1000),2);
$aktuelleDaten["BezugPhase_R"] = (hexdec(substr($Daten,strpos($Daten,"00150400",312)+8,8))/10);
$aktuelleDaten["EinspeisungPhase_R"] = (hexdec(substr($Daten,strpos($Daten,"00160400",352)+8,8))/10);
$aktuelleDaten["AC_Leistung_R"] = ((hexdec(substr($Daten,strpos($Daten,"00150400",312)+8,8))/10) - (hexdec(substr($Daten,strpos($Daten,"00160400",352)+8,8))/10));
$aktuelleDaten["AC_Strom_R"] = (hexdec(substr($Daten,strpos($Daten,"001f0400",552)+8,8))/1000);
$aktuelleDaten["AC_Spannung_R"] = round((hexdec(substr($Daten,strpos($Daten,"00200400",568)+8,8))/1000),2);
$aktuelleDaten["PF_R"] = (hexdec(substr($Daten,strpos($Daten,"00210400",584)+8,8))/1000);
$aktuelleDaten["BezugPhase_S"] = (hexdec(substr($Daten,strpos($Daten,"00290400",600)+8,8))/10);
$aktuelleDaten["EinspeisungPhase_S"] = (hexdec(substr($Daten,strpos($Daten,"002a0400",640)+8,8))/10);
$aktuelleDaten["AC_Leistung_S"] = ((hexdec(substr($Daten,strpos($Daten,"00290400",600)+8,8))/10) - (hexdec(substr($Daten,strpos($Daten,"002a0400",640)+8,8))/10));
$aktuelleDaten["AC_Strom_S"] = (hexdec(substr($Daten,strpos($Daten,"00330400",840)+8,8))/1000);
$aktuelleDaten["AC_Spannung_S"] = round((hexdec(substr($Daten,strpos($Daten,"00340400",856)+8,8))/1000),2);
$aktuelleDaten["PF_S"] = (hexdec(substr($Daten,strpos($Daten,"00350400",872)+8,8))/1000);
$aktuelleDaten["BezugPhase_T"] = (hexdec(substr($Daten,strpos($Daten,"003d0400",888)+8,8))/10);
$aktuelleDaten["EinspeisungPhase_T"] = (hexdec(substr($Daten,strpos($Daten,"003e0400",928)+8,8))/10);
$aktuelleDaten["AC_Leistung_T"] = ((hexdec(substr($Daten,strpos($Daten,"003d0400",888)+8,8))/10) - (hexdec(substr($Daten,strpos($Daten,"003e0400",928)+8,8))/10));
$aktuelleDaten["AC_Strom_T"] = (hexdec(substr($Daten,strpos($Daten,"00470400",1128)+8,8))/1000);
$aktuelleDaten["AC_Spannung_T"] = round((hexdec(substr($Daten,strpos($Daten,"00480400",1144)+8,8))/1000),2);
$aktuelleDaten["PF_T"] = (hexdec(substr($Daten,strpos($Daten,"00490400",1160)+8,8))/1000);
$Firmware = substr($Daten,strpos($Daten,"007f0400",0)+8,8); // gibt es nicht im Protokoll
$aktuelleDaten["Firmware"] = substr($Firmware,4,1).".".substr($Firmware,5,1).".".strtoupper(substr($Firmware,6,1)).".".substr($Firmware,7,1); // gibt es nicht im Protokoll
$aktuelleDaten["AC_Leistung"] = ($aktuelleDaten["AC_Leistung_R"] + $aktuelleDaten["AC_Leistung_S"] + $aktuelleDaten["AC_Leistung_T"]);
$aktuelleDaten["GesamterLeistungsbedarf"] = ($aktuelleDaten["Wh_Bezug"] + $aktuelleDaten["Wh_Einspeisung"]);
//$aktuelleDaten["Bezug"] = ((hexdec(substr($Daten,strpos($Daten,"00150400",0)+8,8))/10) + (hexdec(substr($Daten,strpos($Daten,"00290400",0)+8,8))/10) + (hexdec(substr($Daten,strpos($Daten,"003d0400",0)+8,8))/10));
//$aktuelleDaten["Einspeisung"] = ((hexdec(substr($Daten,strpos($Daten,"00160400",0)+8,8))/10) + (hexdec(substr($Daten,strpos($Daten,"002a0400",0)+8,8))/10) + (hexdec(substr($Daten,strpos($Daten,"003e0400",0)+8,8))/10));
//$aktuelleDaten["AC_Strom"] = ((hexdec(substr($Daten,strpos($Daten,"001f0400",0)+8,8))/1000) + (hexdec(substr($Daten,strpos($Daten,"00330400",0)+8,8))/1000) + (hexdec(substr($Daten,strpos($Daten,"00470400",0)+8,8))/1000));
$aktuelleDaten["Bezug"] = $aktuelleDaten["BezugPhase_R"] + $aktuelleDaten["BezugPhase_S"] + $aktuelleDaten["BezugPhase_T"];
$aktuelleDaten["Einspeisung"] = $aktuelleDaten["EinspeisungPhase_R"] + $aktuelleDaten["EinspeisungPhase_S"] + $aktuelleDaten["EinspeisungPhase_T"];
$aktuelleDaten["AC_Strom"] = $aktuelleDaten["AC_Strom_R"] + $aktuelleDaten["AC_Strom_S"] + $aktuelleDaten["AC_Strom_T"];
P.S. - ich hänge die PHP zur Sicherheit nochmal an. Ab Zeile 190 sind die Sachen, die ich zum Debugging eingebaut hatte.