Daten im Buffer, kannst Du so löschen.
RegVar_SetBuffer($_IPS['INSTANCE'], "");
Oder noch besser, erklär mir wie ich den Buffer steuern kann. Aktualisieren oder anreihen?
Das kommt, wie oben schon geschrieben auf deine Gegebenheiten an.
Daten anhängen kannst Du mit .=$daten
Wenn deine Daten vollständig sind, löschst Du den Buffer mit obigen Befehl.
Aufteilen in Variablen, kann man z.B. über ein Array oder auch den Inhalt über stringbefehle teilen.
Beispiel in array aufteilen. Wenn die Daten, komma getrennt sind.
$data = explode(",", $_IPS['VALUE']);
SetValue(12345, $data[0]);
SetValue(23456, $data[1]);
//usw...
jenachdem wieviele Blöcke dann vorhanden sind.
Daten über einen String zerlegen.
if($_IPS['SENDER'] == "RegisterVariable")
{
$mac = strstr(urldecode($_IPS['VALUE']), " ", true);
$value = trim(stristr(urldecode($_IPS['VALUE']), " "));
if(strpos($value, "playlist newsong") !== false)
{
$befehl = substr($value, 0, 16);
$play = substr(utf8_decode($value), 16);
if(strrpos($play, "0") !== false)
{
$sender = substr($play, 0, -1);
if($mac == $wohnzimmer) SetValue(25596 /*[Squezzeboxen\Wohnzimmer\Sender]*/, $sender." # ");
if($mac == $buero) SetValue(57152 /*[Squezzeboxen\Büro\Sender]*/, $sender." # ");
}
Das ist nur ein Ausschnitt.
Wenn es dich weiter interessiert, schreib ich dir mal was zusammen, womit Du selber testen kannst.
Hier ist noch mal ein Ausschnitt mit Auslesen, Rückschreiben und leeren des Buffers.
if($IPS_SENDER == "RegisterVariable")
{
$parentID = 0;
$CatID = IPS_GetCategoryIDByName("ELV Bussystem HS485", $parentID );
$CatModuleID = IPS_GetCategoryIDByName("Module", $CatID); // prüfen ob KategorieID Module exsistiert
$CatLinkID = IPS_GetCategoryIDByName("HS485 Linkvariablen", $CatID);
// Steuerzeichen definieren
define ("FD", "\xFD"); // Startzeichen
define ("FE", "\xFE");
define ("FC", "\xFC"); // ESCAPE-Zeichen
$startzeichengefunden = false;
$frameAktiv = false;
$CRC16 = 1;
$daten = "";
$newFrame = "";
$datenFrame = RegVar_GetBuffer($IPS_INSTANCE); // Buffer Registervariable auslesen
$datenFrame .= $IPS_VALUE;
$lastFrame = strpos($datenFrame, FD, 1);
if(strlen($datenFrame) && $lastFrame)
{
$frameAktiv = true;
$newFrame = substr(strrchr($datenFrame, FD), 0);
$datenFrame = substr($datenFrame, 0, $lastFrame);
if($newFrame == $datenFrame) $newFrame = "";
}
//print_r(Str2Hex($datenFrame));
for($i=0; $i<strlen($datenFrame) && $CRC16 != 0; $i++)
{
$chr = $datenFrame[$i]; // Zeichen einlesen
if(!$startzeichengefunden) // STARTZEICHEN schon gefunden?
{
if($chr == FD) // nein, daher suchen nach STARTZEICHEN
{
$startzeichengefunden = true; // STARTZEICHEN gefunden
$daten = $chr;
}
continue; // STARTZEICHEN immer noch nicht gefunden
}
if($chr == FC) // falls ESCAPE gefunden wurde
{
$i++; // ESCAPE verwerfen
$chr = @chr(ord($datenFrame[$i]) | 0x80); // und nachfolgendes Zeichen korrigieren
}
$daten .= $chr; // ab hier Checksumme suchen
$CRC16 = CRC16($daten);
}
if($CRC16 != 0)
{
RegVar_SetBuffer($IPS_INSTANCE, $daten); // keine gültigen Daten empfangen, daher in Buffer schreiben
if(strlen($daten) > 18) // wenn Buffer größer .. löschen
{
RegVar_SetBuffer($IPS_INSTANCE, "");
}
return;
}
else
{
RegVar_SetBuffer($IPS_INSTANCE, ""); // Daten gültig, Buffer kann gelöscht werden
if($frameAktiv) RegVar_SetBuffer($IPS_INSTANCE, $newFrame);
}