# RegisterVariable > Symcon Dokumentation · Deutsch · erzeugt am 2026-09-26 > Index: https://www.symcon.de/de/llms.txt Quelle: https://www.symcon.de/de/service/dokumentation/modulreferenz/kern-instanzen/registervariable/ RegisterVariable stellt eine Datenweiterleitungs- und -verarbeitungsschnittstelle zur Verfügung. ### Konfiguration Das RegisterVariable Modul verbindet sich nicht automatisch mit einer übergeordneten Instanz. Es muss dafür eine übergeordnete Instanz ausgewählt oder eine Neue erstellt werden. Es können auch weitere Splitter (z.B. Cutter) hinzugefügt werden, um die ankommenden Daten vor der Auswertung direkt synchronisieren zu lassen. Die übergeordnete Instanz kann unkompliziert über die Funktion "Gateway ändern" oben in der Konfiguration angepasst werden. ![Gateway ändern](https://www.symcon.de/media/pages/service/dokumentation/modulreferenz/kern-instanzen/registervariable/b990342c74-1790424938/registervariable-gateway-aendern.png) Die Ausführung der Skripte erfolgt __seriell__. Das Bedeutet, dass die Skripte nicht mit Semaphoren geschützt werden müssen. ### Datenverarbeitung Werden von der übergeordneten Instanz (Kommunikationsschnittstelle) neue Daten empfangen, wird das Ziel-Skript der RegisterVariable-Instanz ausgeführt. In diesem stehen die empfangenen Daten über $_IPS['VALUE'] zur Verfügung. Sollte die übergeordnete Instanz ein [ServerSocket](serversocket.md) sein, stehen zusätzlich noch die Daten $_IPS['CLIENTIP'] und $_IPS['CLIENTPORT'] zur Verfügung. > **Hinweis:** Skripte, die durch die RegisterVariable ausgeführt werden, beinhalten diese [Systemvariablen](../concepts/automations.md) Es gibt Datenquellen, bei denen erst mehrere empfangene Datensendungen eine sinnvolle Auswertung ermöglichen. Daher müssen die empfangenen Daten zwischengespeichert werden. Da Probleme auftreten können, wenn man binäre Daten in einer normalen String-Variable in IP-Symcon speichert (defekte IP-Symcon-Konfiguration), gibt es die Funktion RegVar_SetBuffer(integer $InstanzID, string $Puffer), die Daten im einen zur RegisterVariable-Instanz gehörigen Puffer speichert. Die im Puffer gespeicherten Daten lassen sich mit der Funktion RegVar_GetBuffer(integer $InstanzID) auslesen. Mit der Funktion RegVar_SendText(integer $InstanzID, string $Text) lassen sich Datenstrings über die Kommunikationsschnittstelle senden. Intern wird hierbei die passende Sendefunktion, wie z.B. COMPort_SendText, ausgeführt. > **Hinweis:** Der Puffer wird nach einem Neustart von IP-Symcon gelöscht! > **Achtung:** Es soll KEINE VARIABLE als Puffer genutzt werden. Andernfalls kann es zu Instabilitäten innerhalb von IP-Symcon kommen und im schlimmsten Fall eine komplett zerstörte Konfiguration verursachen. Da sich dieses Problem auch inkrementell auf den Backup Ordner auswirken kann, ist dann unter Umständen nicht einmal eine Backup Konfiguration vorhanden. Es sollen die internen Puffer der Instanz genutzt werden, um Daten zwischenzuspeichern. > [RegVar_SetBuffer](registervariable.md) / [RegVar_GetBuffer](registervariable.md) ### Beispiele #### Aufbau Das folgende Bild zeigt den typischen Aufbau und die Schritte für eine Registervariable. So kann die I/O Instanz in Form eines WWW-Readers zum Beispiel eine Webseite einlesen, der Cutter den Datenstrom aufbereiten und und die Registervariable im Skript einzelne Werte einer Homepage nutzbar machen und abspeichern. ![Registervariable im Beispiel](https://www.symcon.de/media/pages/service/dokumentation/modulreferenz/kern-instanzen/registervariable/2ce0fdc7e8-1790424938/registervariable-beispielfluss.png) #### Skript Folgendes Beispiel verkettet empfangene Daten und gibt durch ; separierte Datensätze bei Vervollständigung aus: ```php // wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist 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']; // wenn das Trennzeichen ; in $data gefunden worden ist if (strpos($data, ';')) { // $data in durch ; separierte Datensätze zerlegen $datasets = explode(';', $data); // alle nicht durch ; terminierten Datensätze ausgeben for ($i = 0; $i < count($datasets) - 1; $i++) { echo "empfangener Datensatz: ".$datasets[$i]."\n"; } // $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen $data = $datasets[count($datasets) - 1]; } // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern RegVar_SetBuffer($_IPS['INSTANCE'], $data); } ``` Folgendes Beispiel verkettet empfangene Daten und gibt Blöcke von einer Länge von genau 16 Zeichen aus: ```php // wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist 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']; // wenn $data mindestens 16 Zeichen lang ist if (strlen($data) >= 16) { // $data in Blöcke von bis zu 16 Zeichen zerlegen $datasets = str_split($data, 16); // $data leeren $data = ""; // alle Datensätze durcharbeiten for ($i = 0; $i < count($datasets); $i++) { // vollständige Datensätze (genau 16 Zeichen lang) ausgeben if (strlen($datasets[$i]) == 16) { echo "empfangener Datensatz: ".$datasets[$i]."\n"; } else { // Unvollständige Datensätze in $data schreiben $data = $datasets[$i]; } } } // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern RegVar_SetBuffer($_IPS['INSTANCE'], $data); } ``` ### Tipps & Tricks #### Sich alle übergeben Variable anzeigen lassen ```php unset($_SERVER['argv']); unset($_SERVER['argc']); foreach ($_SERVER as $key => $value) { IPS_LogMessage(IPS_GetName($IPS_INSTANCE), "Key: $key; Value: $value"); } ``` ## RegVar_GetBuffer Quelle: https://www.symcon.de/de/service/dokumentation/modulreferenz/kern-instanzen/registervariable/regvar-getbuffer/ `bool RegVar_GetBuffer(int $InstanzID)` **Parameter** - `$InstanzID` (int): ID des zu schaltenden Geräts **Rückgabewert** (bool): String des aktuellen Puffers ID des zu schaltenden Geräts **Beispiel** ```php $buf = RegVar_GetBuffer(12345); $buf .= $_IPS['VALUE']; //konkatenieren //verarbeiten ... RegVar_SetBuffer(12345, $buf); //Restpuffer zurückschreiben ``` ## RegVar_SendEvent Quelle: https://www.symcon.de/de/service/dokumentation/modulreferenz/kern-instanzen/registervariable/regvar-sendevent/ `bool RegVar_SendEvent(int $InstanzID, int $ReportID, string $Text)` _Benötigt Symcon >= 4.1_ sendet ein Event an die übergeordnete HID-Instanz **Parameter** - `$InstanzID` (int): ID der RegisterVariable-Instanz - `$ReportID` (int): Der Datensatztyp als ReportID - `$Text` (string): Zu sendender Puffer **Rückgabewert** (bool): Konnte der Befehl erfolgreich ausgeführt werden, liefert er als Ergebnis __TRUE__, andernfalls __FALSE__. Zu sendender Puffer **Beispiel** ```php // Sendet ein Event "Hallo Welt" an die übergeordnete Instanz mit der ReportID 0 RegVar_SendEvent(12345, 0, "Hallo Welt"); ``` ## RegVar_SendPacket Quelle: https://www.symcon.de/de/service/dokumentation/modulreferenz/kern-instanzen/registervariable/regvar-sendpacket/ `bool RegVar_SendPacket(int $InstanzID, string $Text, string $ClientIP, string $ClientPort)` _Benötigt Symcon >= 4.1_ sendet ein Datenpaket an die angegebene IP-Adresse **Parameter** - `$InstanzID` (int): ID der RegisterVariable-Instanz - `$Text` (string): Zu sendender Puffer - `$ClientIP` (string): IP-Adresse an die gesendet werden soll - `$ClientPort` (string): Port an den gesendet werden soll **Rückgabewert** (bool): Konnte der Befehl erfolgreich ausgeführt werden, liefert er als Ergebnis __TRUE__, andernfalls __FALSE__. Port an den gesendet werden soll **Beispiel** ```php // Sendet via ServerSocket an die IP:Port 192.168.1.2:1234 das Paket "Hallo Welt" RegVar_SendPacket(12345, "Hallo Welt", "192.168.1.2", 1234); ``` ## RegVar_SendText Quelle: https://www.symcon.de/de/service/dokumentation/modulreferenz/kern-instanzen/registervariable/regvar-sendtext/ `bool RegVar_SendText(int $InstanzID, string $Text)` sendet Daten an die übergeordnete Instanz **Parameter** - `$InstanzID` (int): ID des zu schaltenden Geräts - `$Text` (string): Zu sendender Puffer **Rückgabewert** (bool): Konnte der Befehl erfolgreich ausgeführt werden, liefert er als Ergebnis __TRUE__, andernfalls __FALSE__. Zu sendender Puffer **Beispiel** ```php RegVar_SendText(12345, "Hallo Welt"); ``` ## RegVar_SetBuffer Quelle: https://www.symcon.de/de/service/dokumentation/modulreferenz/kern-instanzen/registervariable/regvar-setbuffer/ `bool RegVar_SetBuffer(int $InstanzID, string $Puffer)` **Parameter** - `$InstanzID` (int): ID des zu schaltenden Geräts - `$Puffer` (string): Daten, die in den Puffer geschrieben werden sollen **Rückgabewert** (bool): Konnte der Befehl erfolgreich ausgeführt werden, liefert er als Ergebnis __TRUE__, andernfalls __FALSE__. Daten, die in den Puffer geschrieben werden sollen **Beispiel** ```php $buf = RegVar_GetBuffer(12345); $buf .= $_IPS['VALUE']; //konkatenieren //verarbeiten ... RegVar_SetBuffer(12345, $buf); //Restpuffer zurückschreiben ```