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);