Migration - Smarthome-Components

Migration - Smarthome-Components Migration - Smarthome-Components

smarthome.components.de
von smarthome.components.de Mehr von diesem Publisher
06.01.2013 Aufrufe

RegisterVariable RegisterVariable stellt eine Datenweiterleitungs- und -verarbeitungsschnittstelle zur Verfügung. Konfiguration Falls Sie ihr Gerät noch nicht eingerichtet haben, folgen sie bitte den Schritten auf dieser Seite: Geräte einbinden Das RegisterVariable Modul verbindet sich nicht automatisch mit einer übergeordneten Instanz. Sie müssen dafür übergeordenete Instanz auswählen oder eine neue erstellen. Sie können auch weitere Splitter hinzufügen (z.B. Cutter), um die ankommenden Daten vor der Auswertung direkt synchronisieren zu lassen. Die Ausführung der Skripte erfolgt seriell. Das Bedeutet, dass Sie ihre Skripte nicht mit Semaphoren schützen 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. 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. Der Puffer wird nach einem Neustart von IP-Symcon gelöscht! Verwenden Sie bitte KEINE VARIABLE als Puffer. 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, haben Sie dann unter Umständen nicht einmal eine Backup Konfiguration. Nutzen Sie den internen Puffer der Instanz, um Daten zwischenzuspeichern. RegVar_SetBuffer / RegVar_GetBuffer Beispiele Folgendes Beispiel verkettet empfangene Daten und gibt durch ; separierte Datensätze bei Vervollständigung aus: // 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: // 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) { } else { } echo "empfangener Datensatz: ".$datasets[$i]."\n"; // 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 Sie können sich alle übergeben Variable anzeigen lassen

RegisterVariable<br />

RegisterVariable stellt eine Datenweiterleitungs- und -verarbeitungsschnittstelle zur Verfügung.<br />

Konfiguration<br />

Falls Sie ihr Gerät noch nicht eingerichtet haben, folgen sie bitte den Schritten auf dieser Seite: Geräte einbinden<br />

Das RegisterVariable Modul verbindet sich nicht automatisch mit einer übergeordneten Instanz. Sie müssen dafür<br />

übergeordenete Instanz auswählen oder eine neue erstellen. Sie können auch weitere Splitter hinzufügen (z.B. Cutter), um<br />

die ankommenden Daten vor der Auswertung direkt synchronisieren zu lassen.<br />

Die Ausführung der Skripte erfolgt seriell. Das Bedeutet, dass Sie ihre Skripte nicht mit Semaphoren schützen müssen.<br />

Datenverarbeitung<br />

Werden von der übergeordneten Instanz (Kommunikationsschnittstelle) neue Daten empfangen, wird das Ziel-Skript der<br />

RegisterVariable-Instanz ausgeführt. In diesem stehen die empfangenen Daten über $_IPS[‘VALUE’] zur Verfügung.<br />

Es gibt Datenquellen, bei denen erst mehrere empfangene Datensendungen eine sinnvolle Auswertung ermöglichen.<br />

Daher müssen die empfangenen Daten zwischengespeichert werden. Da Probleme auftreten können, wenn man binäre<br />

Daten in einer normalen String-Variable in IP-Symcon speichert (defekte IP-Symcon-Konfiguration), gibt es die Funktion<br />

RegVar_SetBuffer(integer $InstanzID, string $Puffer), die Daten im einen zur RegisterVariable-Instanz gehörigen Puffer<br />

speichert. Die im Puffer gespeicherten Daten lassen sich mit der Funktion RegVar_GetBuffer(integer $InstanzID)<br />

auslesen. Mit der Funktion RegVar_SendText(integer $InstanzID, string $Text) lassen sich Datenstrings über die<br />

Kommunikationsschnittstelle senden. Intern wird hierbei die passende Sendefunktion, wie z.B. COMPort_SendText,<br />

ausgeführt.<br />

Der Puffer wird nach einem Neustart von IP-Symcon gelöscht!<br />

Verwenden Sie bitte KEINE VARIABLE als Puffer. Andernfalls kann es zu Instabilitäten innerhalb von IP-Symcon<br />

kommen und im schlimmsten Fall eine komplett zerstörte Konfiguration verursachen. Da sich dieses Problem auch<br />

inkrementell auf den Backup Ordner auswirken kann, haben Sie dann unter Umständen nicht einmal eine Backup<br />

Konfiguration. Nutzen Sie den internen Puffer der Instanz, um Daten zwischenzuspeichern.<br />

RegVar_SetBuffer / RegVar_GetBuffer<br />

Beispiele<br />

Folgendes Beispiel verkettet empfangene Daten und gibt durch ; separierte Datensätze bei Vervollständigung aus:<br />

// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist<br />

if ($_IPS['SENDER'] == "RegisterVariable")<br />

{<br />

// bereits im Puffer der Instanz vorhandene Daten in $data kopieren<br />

$data = RegVar_GetBuffer($_IPS['INSTANCE']);<br />

// neu empfangene Daten an $data anhängen<br />

$data .= $_IPS['VALUE'];<br />

// wenn das Trennzeichen ; in $data gefunden worden ist<br />

if (strpos($data, ';'))<br />

{<br />

// $data in durch ; separierte Datensätze zerlegen<br />

$datasets = explode(';', $data);<br />

// alle nicht durch ; terminierten Datensätze ausgeben<br />

for ($i = 0; $i < count($datasets) - 1; $i++)<br />

{<br />

}<br />

echo "empfangener Datensatz: ".$datasets[$i]."\n";<br />

// $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!