Conrad Artikelnummer 197730
Diese Skript erstellt eine Dummy Instanz und verknüft diese mit einer Status Variable, sodass ein Relais über das WebFront geschaltet werden kann. Durch Replikation des Skriptes können alle Relais aller Karte angesprochen werden.
<?
$karte = 1; //1-255, 0 = broadcast
$relais = 1; //1-8
$io = 0; //I/O Instanz -> 19200,8,1,N
//AB HIER NICHTS MEHR ÄNDERN
//-----------------------------------------------------------------------------
if($io == 0)
die("Keine I/O Instanz angegeben!");
IPS_SetHidden($IPS_SELF, true);
IPS_SetName($IPS_SELF, "Handler");
$object = IPS_GetObject($IPS_SELF);
$parentID = $object['ParentID'];
$parentObject = IPS_GetObject($parentID);
if ($parentObject['ObjectType'] !== 1)
{
$instanceID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetParent($instanceID, $parentID);
$parentID = $instanceID;
IPS_SetParent($IPS_SELF, $parentID);
IPS_SetName($instanceID, "Karte ".$karte.", Relais ".$relais);
}
$vid = CreateVariableByName($parentID, "Status", 0);
IPS_SetVariableCustomProfile($vid, "~Switch");
IPS_SetVariableCustomAction($vid, $IPS_SELF);
if($IPS_SENDER == "WebFront" || $IPS_SENDER == "Switch")
{
if($IPS_VALUE) {
SetOn();
} else {
SetOff();
}
} else {
if(!GetValue($vid)) {
SetOn();
} else {
SetOff();
}
}
function SetOn()
{
global $karte, $relais, $vid;
SendData(chr(6).chr($karte).chr(1 << ($relais-1)));
SetValue($vid, true);
}
function SetOff()
{
global $karte, $relais, $vid;
SendData(chr(7).chr($karte).chr(1 << ($relais-1)));
SetValue($vid, false);
}
function SendData($data)
{
global $io;
$chk = chr(ord($data{0}) ^ ord($data{1}) ^ ord($data{2}));
COMPort_SendText($io, $data.$chk);
}
function CreateVariableByName($id, $name, $type)
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
}
return $vid;
}
?>
In weiteren Skripten können die Relais folgendermaßen geschaltet werden:
//An
IPS_RunScriptEx($id_vom_obrigen_skript, Array("IPS_SENDER" => "Switch", "IPS_VALUE" => true));
//aus
IPS_RunScriptEx($id_vom_obrigen_skript, Array("IPS_SENDER" => "Switch", "IPS_VALUE" => false));