Register Variable >8Kb (gabs schon mal)

Eine Register Variable bekommt nun immer die o.g. Meldung. Frage mich aber nur warum. Wenn ich am Anfang mir den Buffer hole. Hab ich zum Test einmal die Länge ausgegeben. Diese ist aber kurz.

Eigentlich sieht mein Code nicht anders aus wie im ersten Beispiel in der Doku. Gibts da ne Idee?

if ($IPS_SENDER == "RegisterVariable")
{
  // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
  $data  = RegVar_GetBuffer($IPS_INSTANCE);
  // neu empfangene Daten an $data anhängen
  $data .= $IPS_VALUE;

	// prüfen auf protokoll beginn
	$a55a=chr(165).chr(90);//.chr(5).chr(10);
  // wenn das Trennzeichenfolge a55a in $data gefunden worden ist
  if (strpos($data, $a55a)>=0)
  {
      // $data in durch a55a separierte Datensätze zerlegen
      $datasets = explode($a55a, $data);

      // alle nicht durch a55a terminierten Datensätze ausgeben
      for ($i = 0; $i < count($datasets) - 1; $i++)
      {
         $hexstring='';
			for ($x=0;$x<strlen($datasets[$i]);$x++)
			{
			 	$hexstring.=substr("0".dechex(ord(substr($datasets[$i],$x,1))),-2);
         	//$hexstring.=dechex(ord(substr($datasets[$i],$x,1)));
			}

			echo "empfangenes protokoll: "."a55a".$hexstring."
";
			action($hexstring);
      }

      // $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen
      $data = $datasets[count($datasets) - 1];
  }

  // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
  //$data=""; // leeren
  RegVar_SetBuffer($IPS_INSTANCE, $data);

Das Problem hatte ich auch:

  // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
  //$data=""; // leeren
  RegVar_SetBuffer($IPS_INSTANCE, $data);  

im letzten Teil wird der Buffer wieder zurückgeschrieben, aber das leeren ist auskommentiert.

so schreibt er den Buffer immer fort.
Ich habe das bei mir durch schreiben des leeren Buffers gelöst.:

  // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
  $data=""; // leeren
  RegVar_SetBuffer($IPS_INSTANCE, $data);  

Das leeren ist ja mit Absicht auskommentiert damit der restliche Inhalt des Buffers, welcher nicht genutzt wird wieder zurückgeschrieben. Es kann ja sein, das bei Aufruf des Script noch nicht alle Protokollinformationen eingelaufen sind.

so ist es auch im beispiel script.

$data = $datasets[count($datasets) - 1];

Ich kann mir nur vorstellen das dort „Reste“ drin stehen.
Das wiederspricht aber meiner Prüfung mit der Länge.