Hallo.
Ich habe das umgepfriemelt, bin aber noch nicht ganz fertig da es bei mir so ganz gut funktioniert und ich noch dringendere Dinge am System zu tun habe.
Ich kann senden, empfangen geht in 99.9% Prozent der Fälle. Ich vermute da habe ich bei der seriellen Schnittstelle noch eine Leiche im Keller.
<?
// Instanz ID der COM-Schnittstelle !!! MUSS ANGEPASST WERDEN !!!
$hCOM = 25193 /*[CM11]*/;
// Parent ID des Skiptes // HTG
$PARENT = IPS_GetParent ($IPS_SELF);
//$SCRIPT_NAME = "X10TRX"; // Hier muss der Name dieses Script eingtragen werden (Wieso gibt es eigentlich kein "IPS_GetScriptName" ?
$SCRIPT_NAME = $IPS_SELF;
//$COM_VAR = "COM.BUFFER"; // Dies ist die Variable Der Instanz von "Register Variable" (angehangen am richtigen COM-Port)
$COM_VAR = IPS_GetObjectIDByName("COM.BUFFER", $PARENT);
// Ist der Name, der im Log auftaucht. Sollte gleich bleiben
$LOG_NAME = "X10"; // Ist der Name, der im Log auftaucht. Sollte gleich bleiben
//$STATE = "X10.State"; // Intern verwendet. Sollte gleich bleiben
$STATE = IPS_GetObjectIDByName("X10.State", $PARENT);
//$FUNC = "X10.Func"; // Intern verwendet. Sollte gleich bleiben
$FUNC = IPS_GetObjectIDByName("X10.Func", $PARENT);
//$CRC = "X10.CRC"; // Intern verwendet. Sollte gleich bleiben
$CRC = IPS_GetObjectIDByName("X10.CRC", $PARENT);
//$RX_BUFFER = "X10.RX"; // Intern verwendet. Sollte gleich bleiben
$RX_BUFFER = IPS_GetObjectIDByName("X10.RX", $PARENT);
//$TX_BUFFER = "X10.TX"; // Hier schreibt der Anwender (bzw. andere Scripte) die X10 Kommandos rein.
$TX_BUFFER = IPS_GetObjectIDByName("X10.TX", $PARENT);
//
// STATE ist die Variable in der sich das Script merkt in welchem Kommunikationsschritt es sich befindet.
// Mögliche Werte:
// 0 -> Ruhezustand: Es wurde keine Kommunikation angestossen.
// 1 -> Das CM11 hat neue Werte, die angefordert wurden. Es werden nun die Daten vom CM11 empfangen
// 2 -> Warten auf die Checksumme eines gesendeten Befehls
// 3 -> Warten auf "Interface Ready" nach gesendetem Befehl.
//
//Tabellen für die Kommunikation
// Tabellen für die Sendedaten
$table_hcodes = array("A" => "0110", "B" => "1110", "C" => "0010", "D" => "1010", "E" => "0001", "F" => "1001", "G" => "0101", "H" => "1101",
"I" => "0111", "J" => "1111", "K" => "0011", "L" => "1011", "M" => "0000", "N" => "1000", "O" => "0100", "P" => "1100");
$table_dcodes = array("1" => "0110", "2" => "1110", "3" => "0010", "4" => "1010", "5" => "0001", "6" => "1001", "7" => "0101", "8" => "1101",
"9" => "0111", "10" => "1111", "11" => "0011", "12" => "1011", "13" => "0000", "14" => "1000", "15" => "0100", "16" => "1100",
"A" => "1111", "B" => "0011", "C" => "1011", "D" => "0000", "E" => "1000", "F" => "0100", "G" => "1100");
$table_fcodes = array("ON" => "0010", "OFF" => "0011", "DIM" => "0100", "BRIGHT" => "0101", "ALL_LIGHTS_ON" => "0001", "ALL_LIGHTS_OFF" => "0000",
"ALL_OFF" => "0000", "ALL_ON" => "0001", "ON" => "0010", "OFF" => "0011", "DIM" => "0100", "BRIGHT" => "0101",
-10 => "0100", -20 => "0100", -30 => "0100", -40 => "0100",
-15 => "0100", -25 => "0100", -35 => "0100", -45 => "0100", -5 => "0100",
-50 => "0100", -60 => "0100", -70 => "0100", -80 => "0100", -90 => "0100",
-55 => "0100", -65 => "0100", -75 => "0100", -85 => "0100", -95 => "0100", -100 => "0100",
+10 => "0101", +20 => "0101", +30 => "0101", +40 => "0101",
+15 => "0101", +25 => "0101", +35 => "0101", +45 => "0101", +5 => "0101",
+50 => "0101", +60 => "0101", +70 => "0101", +80 => "0101", +90 => "0101",
+55 => "0101", +65 => "0101", +75 => "0101", +85 => "0101", +95 => "0101", +100 => "0101",
"ALL_LIGHTS_OFF" => "0110", "EXT_CODE" => "0111", "HAIL_REQUEST" => "1000", "HAIL_ACK" => "1001",
"PRESET_DIM1" => "1010", "PRESET_DIM2" => "1011", "EXT_DATA_TRANSFER" => "1100",
"STATUS_ON" => "1101", "STATUS_OFF" => "1110", "STATUS" => "1111");
// Tabellen für die Empfangsdaten
$table_hcodes2 = array("0110" => "A", "1110" => "B", "0010" => "C", "1010" => "D", "0001"=> "E", "1001" => "F", "0101" => "G", "1101" => "H",
"0111" => "I", "1111" => "J", "0011" => "K", "1011" => "L", "0000" => "M", "1000" => "N", "0100" => "O", "1100" => "P");
$table_dcodes2 = array("0110" => "1", "1110" => "2", "0010" => "3", "1010" => "4", "0001" => "5", "1001" => "6", "0101" => "7", "1101" => "8",
"0111" => "9", "1111" => "A", "0011" => "B", "1011" => "C", "0000" => "D", "1000" => "E", "0100" => "F", "1100" => "G");
$table_fcodes2 = array("0010" => "ON", "0011" => "OFF", "0100" => "DIM", "0101" => "BRIGHT", "0001" => "ALL_LIGHTS_ON", "0000" => "ALL_UNITS_OFF",
"0111" => "EXT_CODE", "1010" => "PRESET_DIM1", "1011" => "PRESET_DIM2",
"1101" => "STATUS_ON", "1110" => "STATUS_OFF", "1111" => "STATUS");
//
// ascii2bin konvertiert einen String in eine Bitwurst
// Wir benötigen zwar immer neu ein Zeichen, aber wer weiß wofür es gut ist ;)
//
function ascii2bin($ascii) {
$binary = '';
for ($i = 0; $i < strlen($ascii); $i++) {
$byte = decbin(ord($ascii{$i}));
$byte = str_repeat('0', 8 - strlen($byte)).$byte;
$binary .= $byte;
}
return $binary;
}
//
// SetX10Var setzt eine X10 Variable entsprechend dem decodiertem Funktionscode
// Die Variablen $Data1 und $Data2 sind zusätzliche Daten für DIM und EXTENDED
//
function SetX10Var($Adress, $Function, $Data1, $Data2)
{
$VarName = '';
global $PARENT; // Parent ID des Skiptes // HTG
$tempStatus = 0;
if(($Function == "ON") || ($Function == "STATUS_ON"))
{
$VarName = $Adress . ".Status";
if(!IPS_GetObjectIDByName ($VarName, $PARENT))
{
$VARID = IPS_CreateVariable(1);
IPS_SetName($VARID, $VarName);
IPS_SetParent($VARID, $PARENT);
// IPS_CreateVariable($VarName, "Integer");
}
$VARID = IPS_GetObjectIDByName($VarName, $PARENT);
SetValueInteger($VARID, 100);
}
if(($Function == "OFF") || ($Function == "STATUS_OFF"))
{
$VarName = $Adress . ".Status";
if(!IPS_GetObjectIDByName ($VarName, $PARENT))
{
$VARID = IPS_CreateVariable(1);
IPS_SetName($VARID, $VarName);
IPS_SetParent($VARID, $PARENT);
IPS_LogMessage($LOG_NAME, $PARENT);
// IPS_CreateVariable($VarName, "Integer");
}
$VARID = IPS_GetObjectIDByName($VarName, $PARENT);
SetValueInteger($VARID, 0);
}
if($Function == "DIM")
{
$VarName = $Adress . ".Status";
if(!IPS_GetObjectIDByName ($VarName, $PARENT))
{
$VARID = IPS_CreateVariable(1);
IPS_SetName($VARID, $VarName);
IPS_SetParent($VARID, $PARENT);
// IPS_CreateVariable($VarName, "Integer");
}
$VARID = IPS_GetObjectIDByName($VarName, $PARENT);
$tempStatus = GetValueInteger($VARID); //Der alte Status wird gelesen
$tempStatus -= (int)($Data1 / 210 * 100); //Der alte - der % Wert des Dim-Befehls
if($tempStatus >= 0)
SetValueInteger($VARID, $tempStatus); //Nur schreiben wenn >= 0
else
SetValueInteger($VARID, 0); //Sonst auf 0 clippen ??????????????????????????????????????????????????
}
if($Function == "BRIGHT")
{
$VarName = $Adress . ".Status";
if(!IPS_GetObjectIDByName ($VarName, $PARENT))
{
$VARID = IPS_CreateVariable(1);
IPS_SetName($VARID, $VarName);
IPS_SetParent($VARID, $PARENT);
// IPS_CreateVariable($VarName, "Integer");
}
$VARID = IPS_GetObjectIDByName($VarName, $PARENT);
$tempStatus = GetValueInteger($VARID); //Der alte Status wird gelesen
$tempStatus += (int) ($Data1 / 210 * 100); //Der alte + der % Wert des Dim-Befehls
if($tempStatus <= 100)
SetValueInteger($VARID, $tempStatus); //Nur schreiben wenn <= 100
else
SetValueInteger($VARID, 100); //Sonst auf 100 clippen
}
if($Function == "ALL_UNITS_OFF")
{
$Vars = IPS_GetVariables();
foreach($Vars as $Var)
{
$VARID = IPS_GetObjectIDByName($VarName, $PARENT);
if((substr($VARID,0,1) == substr($Adress,0,1)) && (strpos($VARID, "Status") != false))
{ //Der Hauscode stimmt über ein.
SetValueInteger($VARID, 0);
}
}
}
if($Function == "EXT_CODE")
{ //Hier werden erweiterte Code beahndelt und als String in die Variable geschrieben.
$VarName = $Adress . ".EXT";
if(!IPS_GetObjectIDByName ($VarName, $PARENT))
{
$VARID = IPS_CreateVariable(3);
IPS_SetName($VARID, $VarName);
IPS_SetParent($VARID, $PARENT);
// IPS_CreateVariable($VarName, "String");
}
$VARID = IPS_GetObjectIDByName($VarName, $PARENT);
SetValueString($VARID, chr($Data1) . chr($Data2));
}
}
//
// GetCRC bildet eine Quersumme über einen String
// Diese Quersumme sichert die Kommunikation mit dem CM11 ab.
//
function GetCRC($Text)
{
$CRC = 0;
for($i=0; $i<strlen($Text);$i++)
$CRC += ord(substr($Text,$i,1));
$CRC = $CRC & 0xFF;
return $CRC;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//IPS_LogMessage($LOG_NAME, "$SCRIPT_NAME wude von $IPS_SENDER aufgerufen.");
if($IPS_SENDER == "Variable")
{
//Das Script wird über einen Variablentrigger aufgerufen
if($IPS_VARIABLE == $COM_VAR)
{
//Timeouttimer löschen
//IPS_SetScriptTimer($SCRIPT_NAME, 0);
//Daten aus der Variable lesen
$CM11_DATA = GetValueString($COM_VAR);
//Das Script wird von der COM-Variable aufgerufen
$temp = sprintf("Neue Daten empfangen (0x%02x)", ord($CM11_DATA));
IPS_LogMessage($LOG_NAME, $temp);
////////////////////////////////////////////////////////////////////////////////////////////////////////
if(GetValueInteger($STATE) == 1) //es kommen neue Telegramme
{
$RX_COMANDS = array();
$temp = sprintf("Das CM11 hat %d Bytes Daten gesendet.", strlen($CM11_DATA));
IPS_LogMessage($LOG_NAME, $temp);
SetValueInteger($STATE, 0); //Status auf 0
IPS_SetScriptTimer($SCRIPT_NAME, 0);
$RCV_Buffer = unpack ("C*", $CM11_DATA);
$temp = sprintf("Daten: ");
foreach ($RCV_Buffer as $Byte)
{
$temp .= $Byte . " ";
}
IPS_LogMessage($LOG_NAME, $temp);
$Len = array_shift($RCV_Buffer);
if($Len == count ($RCV_Buffer))
{
$Mask = unpack("C*", strrev(ascii2bin(chr(array_shift($RCV_Buffer)))));
for($i=0; $i < count($RCV_Buffer);$i++)
{
$BUF = explode("
", GetValueString($RX_BUFFER));
if(chr($Mask[$i+1]) == '0')
{ //Es wurde ein Adresscode empfangen
$Adr = ascii2bin(chr($RCV_Buffer[$i]));
$HCode = $table_hcodes2[substr($Adr, 0, 4)];
$DCode = $table_dcodes2[substr($Adr, 4, 4)];
IPS_LogMessage($LOG_NAME, "Adresse empfangen ($HCode$DCode).");
// Erst wenn eine Funktion ausgeführt wurde und dann eine neue Adresse kommt
// werden die alten Adressen gelöscht. Es könnte ja noch ein DIM/BRIGHT für die alten Adressen kommen.
if(GetValueBoolean($FUNC))
SetValueString($RX_BUFFER, "");
SetValueString($RX_BUFFER, GetValueString($RX_BUFFER) . $HCode . $DCode . "
");
SetValueBoolean($FUNC, false);
}
elseif(chr($Mask[$i+1]) == '1')
{ //Es wurde ein Funktionscode empfangen
$Func = ascii2bin(chr($RCV_Buffer[$i]));
$HCode = $table_hcodes2[substr($Func, 0, 4)];
$FCode = $table_fcodes2[substr($Func, 4, 4)];
IPS_LogMessage($LOG_NAME, "Funktion empfangen ($HCode $FCode).");
SetValueBoolean($FUNC, true);
//Es wird noch geprüft, ob Funktionen empfangen wurden, die zusätzliche Daten benötigen.
$D1 = 0;
$D2 = 0;
if(($FCode == "DIM") || ($FCode == "BRIGHT"))
{
$i++;
$D1 = $RCV_Buffer[$i];
}
if($FCode == "EXT_CODE")
{
$i++;
$D1 = $RCV_Buffer[$i];
$i++;
$D2 = $RCV_Buffer[$i];
}
foreach($BUF as $Item)
{
if(strlen($Item)>1)
{
if(substr($Item, 0, 1) == substr($HCode[0], 0, 1))
{
SetX10Var($Item, $FCode, $D1, $D2);
}
else
IPS_LogMessage($LOG_NAME, "X10 Adresse " . $Item ." passt nicht zur Funktionsadresse " . $HCode . ".");
}
}
}
}
}
else
{
$temp = sprintf("Headerlänge und Telegrammgröße unterschiedlich (%d / %d).", $Len, count($RCV_Buffer));
IPS_LogMessage($LOG_NAME, $temp);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
elseif(GetValueInteger($STATE) == 2)
{ //Wir warten auf die Checksumme eines gesendeten Befehls
if(strlen(GetValueString($COM_VAR)) <= 1)
{
$RX_Check = (int)ord(substr(GetValueString($COM_VAR),0,1));
$Check = GetValueInteger($CRC);
if($RX_Check == $Check)
{ //Checksumme ist plausibel
COMPort_SendText($hCOM, chr(0x00));
SetValueInteger($STATE, 3);
IPS_SetScriptTimer($SCRIPT_NAME, 10);
IPS_LogMessage($LOG_NAME, "Telegramm wurde erfolgreich gesendet.");
}
else
{ //Checksumme passt nicht
IPS_LogMessage($LOG_NAME, "Checksumme $RX_Check != $Check stimmt nicht.");
SetValueInteger($STATE, 0);
//SetValueString($TX_BUFFER, GetValueString($TX_BUFFER)); //Das Senden nochmal neu Triggern.
}
}
else
{ //Das CM11 hat mehr als ein Byte zurückgegeben. Also das ganze nochmal.
SetValueInteger($STATE, 0);
SetValueString($TX_BUFFER, GetValueString($TX_BUFFER)); //Das Senden nochmal neu Triggern.
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
elseif(GetValueInteger($STATE) == 3)
{ //Wir warten auf "Interface ready nach einem Befehl
if(strlen(GetValueString($COM_VAR)) <= 1)
{
if((int)ord(substr(GetValueString($COM_VAR),0,1)) == 0x55)
{
IPS_LogMessage($LOG_NAME, "Telegramm wurde im CM11 ausgeführt.");
//Befehl aus Puffer löschen
$TX_DATA = explode("
", GetValueString($TX_BUFFER));
array_shift($TX_DATA);
SetValueString($TX_BUFFER, implode("
", $TX_DATA));
SetValueInteger($STATE, 0);
IPS_SetScriptTimer($SCRIPT_NAME, 0);
}
else
{
$temp = sprintf("Es wurde 0x55 erwartet. Gekommen ist 0x%02x", (int)ord(substr(GetValueString($COM_VAR),0,1)));
IPS_LogMessage($LOG_NAME, $temp);
}
}
else
{
IPS_LogMessage($LOG_NAME, "Anwort auf \"Interface Ready\" ist zu lang.");
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
elseif(ord($CM11_DATA) == 0x5a) //Es liegen neue Daten im CM11 vor
{
//IPS_LogMessage($LOG_NAME, "es liegen neue Protokolle vor.");
SetValueInteger($STATE, 1); //Status auf 1 -> es werden neue Daten empfangen.
COMPort_SendText($hCOM, chr(0xc3)); //CM11 antworten
IPS_SetScriptTimer($SCRIPT_NAME, 1); //Timeouttimer setzen
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
elseif(ord($CM11_DATA) == 0xa5) //Das CM11 will nach Netzausfall ein Reset haben.
{ //Dieser Teil ist nicht getestet, da mein CM11 solche "Wünsche" noch nicht hatte.
//Uhrzeit als Antwort senden. (Vielen Dank an die Jungs von Misterhouse)
$Uhrzeit = getdate(time());
$TX_BUF = chr(0x9b); //es kommt ein Uhrzeittelegramm
$TX_BUF .= chr($Uhrzeit['seconds']); //Sekunden eintragen
$TX_BUF .= chr($Uhrzeit['minutes'] + (($Uhrzeit['hours'] % 2) * 60)); //Minuten eintragen (Warum auch immer für 2 Stunden)
$TX_BUF .= chr($Uhrzeit['hours'] / 2); //Stundeneintragen (Warum auch immer /2)
$TX_BUF .= chr($Uhrzeit['yday'] % 256);//Den Tag des Jahres total verwurschtelt eintragen
$TX_BUF .= chr((($Uhrzeit['yday'] / 256) << 7) | (0x01 << $Uhrzeit['wday'])); // Und den Wochentag dazu odern
$TX_BUF .= chr((0x06 << 4) | (0x07)); //Monitor Housecode ist "A" und die Flags eintragen
/* //Leeres Makro als Antwort senden.
IPS_LogMessage($LOG_NAME, "CM11 fordert Makros an.");
$TX_BUF = chr(0xfb);
IPS_LogMessage($LOG_NAME, "Makro Startbyte gesendet.");
COM_Port_SendText($hCOM, $TX_BUF);
IPS_Sleep(200);
$TX_BUF = '';
for($i=0;$i<42;$i++)
$TX_BUF .= chr(0x00);
*/
SetValueInteger($CRC, GetCRC(substr($TX_BUF,1,99))); //CRC ohne den Telegramm Kopf 0x9B
IPS_LogMessage($LOG_NAME, "Sende CM11 reset.");
COMPort_SendText($hCOM, $TX_BUF);
IPS_LogMessage($LOG_NAME, "Uhrzeit an CM11 gesendet.");
SetValueInteger($STATE, 2);
IPS_SetScriptTimer($SCRIPT_NAME, 5);
}
}
elseif(($IPS_VARIABLE == $TX_BUFFER) && (GetValueString($TX_BUFFER) != "") && (GetValueInteger($STATE) == 0))
{ //Es liegen neue Daten zum Senden vor.
$TX_BUF = ''; //Puffer für die Rohsendedaten
$TX_DATA = explode("
", GetValueString($TX_BUFFER));
//Abfangen von Leerzeilen im $TX_BUFFER
if($TX_DATA[0] == '')
{
array_shift($TX_DATA);
SetValueString($TX_BUFFER, implode("
", $TX_DATA));
}
if(strlen($TX_DATA[0]) <= 3)
{ //Es wurde ein Adresscode vorgegeben
IPS_LogMessage($LOG_NAME, "Die Adresse $TX_DATA[0] wird gesendet.");
$TX_BUF = chr(bindec("00000100")); //Header -> Adresse
$TX_BUF .= chr(bindec($table_hcodes[substr($TX_DATA[0],0,1)] . $table_dcodes[substr($TX_DATA[0],1,2)]));
SetValueInteger($CRC, GetCRC($TX_BUF));
COMPort_SendText($hCOM, $TX_BUF);
SetValueInteger($STATE, 2);
IPS_SetScriptTimer($SCRIPT_NAME, 1);
}
else
{ //Es wurde ein Funktionscode vorgegeben
IPS_LogMessage($LOG_NAME, "Der Befehl $TX_DATA[0] wird gesendet.");
$COMMAND = explode(" ", $TX_DATA[0]);
$IsDim = count($COMMAND) > 2; //Handelt es sich um eine DIM Funktion?
$IsExt = count($COMMAND) > 3; //Handelt es sich um eine EXT Funktion?
//Header zusammenbauen
if(($COMMAND[1] == "DIM") || ($COMMAND[1] == "BRIGHT"))
{ //Bei DIM oder BRIGHT müssen die Anzahl der DIMS im Header angegeben werden.
$DIMs = $IsDim ? $COMMAND[2] : 1; //Wenn keine DIMs angegeben wurden nehmen wir einen an.
$BitStream = substr(ascii2bin(chr($DIMs)),3,5); //Nur 5 Bits werden ausgewertet.
}
else
$BitStream = "00000"; //Kein DIM Kommando. Also keine DIMs
$BitStream .= "11" . ($IsExt ? "1":"0"); //Bei einem extended Kommando muss das letzte Bit 1 sein.
//IPS_LogMessage($LOG_NAME, "Erstes Byte: " . $BitStream . " " . bindec($BitStream));
$TX_BUF = chr(bindec($BitStream)); //Header -> Funktion
$BitStream = $table_hcodes[substr($COMMAND[0],0,1)] . $table_fcodes[$COMMAND[1]]; //Zusammenbauen der Funktion
//IPS_LogMessage($LOG_NAME, "Zweites Byte: " . $BitStream . " " . bindec($BitStream));
$TX_BUF .= chr(bindec($BitStream));
if($IsExt)
{
// Entgegen des "Interface Communication Protocol" muss nach dem Funktioncode der Device Code übertragen werden.
// Daher ist auch kein Adresstelegramm im Vorfeld nötig. Das Gerät wird direkt in einem befehl addressiert.
// Extended Code haben damit dieses Format: "A1 EXT_CODE 255 255"
// Fragt nicht, wie ich das rausbekommen hab ;)
$TX_BUF .= chr(bindec($table_dcodes[substr($COMMAND[0],1,2)]));
$TX_BUF .= chr((int)$COMMAND[2]);
//IPS_LogMessage($LOG_NAME, "Extended Code Byte: ");
$TX_BUF .= chr((int)$COMMAND[3]);
}
COMPort_SendText($hCOM, $TX_BUF);
SetValueInteger($STATE, 2);
IPS_SetScriptTimer($SCRIPT_NAME, 5);
SetValueInteger($CRC, GetCRC($TX_BUF));
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
elseif($IPS_SENDER == "TimerEvent")
{
//Der timeout ist abgelaufen
IPS_LogMessage($LOG_NAME, "Timeout ist abgelaufen. $SCRIPT_NAME wird zurückgesetzt.");
SetValueInteger($STATE, 0); //Status auf 0
IPS_SetScriptTimer($SCRIPT_NAME, 0);
SetValueString($TX_BUFFER, "");
}
else
{ //Dieser Teil wird immer durchlaufen, wenn das Script über "Execute" aufgerufen wird.
echo ("X10 Script wird initialisiert.
");
if(!IPS_VariableExists(IPS_GetVariableID($STATE)))
{
$VARID = IPS_CreateVariable(1);
IPS_SetName($VARID, $STATE);
IPS_SetParent($VARID, IPS_GetParent ($IPS_SELF));
SetValueInteger($VARID, 0);
echo ("Variable \"$STATE\" angelegt.
");
}
if(!IPS_VariableExists(IPS_GetVariableID($RX_BUFFER)))
{
$VARID = IPS_CreateVariable(3);
IPS_SetName($VARID, $RX_BUFFER);
IPS_SetParent($VARID, IPS_GetParent ($IPS_SELF));
SetValueString($VARID, "");
echo ("Variable \"$RX_BUFFER\" angelegt.
");
}
if(!IPS_VariableExists(IPS_GetVariableID($TX_BUFFER)))
{
$VARID = IPS_CreateVariable(3);
IPS_SetName($VARID, $TX_BUFFER);
IPS_SetParent($VARID, IPS_GetParent ($IPS_SELF));
SetValueString($VARID, "");
$EVENTID = IPS_CreateEvent(0);
IPS_SetParent($EVENTID, $IPS_SELF);
IPS_SetEventTrigger($EVENTID, 0, $VARID);
IPS_SetEventActive($EVENTID, true);
echo ("Variable \"$TX_BUFFER\" angelegt und Event zugeordnet.
");
}
if(!IPS_VariableExists(IPS_GetVariableID($FUNC)))
{
$VARID = IPS_CreateVariable(0);
IPS_SetName($VARID, $FUNC);
IPS_SetParent($VARID, IPS_GetParent ($IPS_SELF));
SetValueBoolean($VARID, false);
echo ("Variable \"$FUNC\" angelegt.
");
}
if(!IPS_VariableExists(IPS_GetVariableID($CRC)))
{
$VARID = IPS_CreateVariable(1);
IPS_SetName($VARID, $CRC);
IPS_SetParent($VARID, IPS_GetParent ($IPS_SELF));
SetValueInteger($VARID, 0);
echo ("Variable \"$CRC\" angelegt.
");
}
if(!IPS_VariableExists(IPS_GetVariableID($COM_VAR)))
{
$VARID = IPS_CreateVariable(3);
IPS_SetName($VARID, $COM_VAR);
IPS_SetParent($VARID, IPS_GetParent ($IPS_SELF));
SetValueString($VARID, "");
$EVENTID = IPS_CreateEvent(0);
IPS_SetParent($EVENTID, $IPS_SELF);
IPS_SetEventTrigger($EVENTID, 0, $VARID);
IPS_SetEventActive($EVENTID, true);
echo ("Variable \"$COM_VAR\" angelegt und Event zugeordnet.
");
}
echo ("X10 Script ist bereit.
");
}
?>
Wenn Bedarf besteht und ich dazu komme kann ich das gerne noch etwas „anhübschen“.
Grüsse.