8 Fach Seriell Relaiskarte Conrad

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));

Hi,
wie kann mann alle Relais mit einmal Tasten, Ein oder Aus schalten?

Ich habe es schon mit einem script probiert:


<?
//AUS
IPS_RunScriptEx(29389 /*[Relaiskarte Xport\Ausgang 1 (Karte 0, Relais 1)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => false));
IPS_RunScriptEx(26601 /*[Relaiskarte Xport\Ausgang 2 (Karte 0, Relais 2)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => false));
IPS_RunScriptEx(53781 /*[Relaiskarte Xport\Ausgang 3 (Karte 0, Relais 3)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => false));
IPS_RunScriptEx(58346 /*[Relaiskarte Xport\Ausgang 4 (Karte 0, Relais 4)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => false));
IPS_RunScriptEx(34748 /*[Relaiskarte Xport\Ausgang 5 (Karte 0, Relais 5)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => false));
IPS_RunScriptEx(15646 /*[Relaiskarte Xport\Ausgang 6 (Karte 0, Relais 6)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => false));
IPS_RunScriptEx(43951 /*[Relaiskarte Xport\Ausgang 7 (Karte 0, Relais 7)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => false));
IPS_RunScriptEx(29802 /*[Relaiskarte Xport\Ausgang 8 (Karte 0, Relais 8)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => false));

?>

<?
//EIN
IPS_RunScriptEx(29389 /*[Relaiskarte Xport\Ausgang 1 (Karte 0, Relais 1)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => true));
IPS_RunScriptEx(26601 /*[Relaiskarte Xport\Ausgang 2 (Karte 0, Relais 2)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => true));
IPS_RunScriptEx(53781 /*[Relaiskarte Xport\Ausgang 3 (Karte 0, Relais 3)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => true));
IPS_RunScriptEx(58346 /*[Relaiskarte Xport\Ausgang 4 (Karte 0, Relais 4)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => true));
IPS_RunScriptEx(34748 /*[Relaiskarte Xport\Ausgang 5 (Karte 0, Relais 5)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => true));
IPS_RunScriptEx(15646 /*[Relaiskarte Xport\Ausgang 6 (Karte 0, Relais 6)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => true));
IPS_RunScriptEx(43951 /*[Relaiskarte Xport\Ausgang 7 (Karte 0, Relais 7)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => true));
IPS_RunScriptEx(29802 /*[Relaiskarte Xport\Ausgang 8 (Karte 0, Relais 8)\Handler]*/ , Array("IPS_SENDER" => "Switch", "IPS_VALUE" => true));

?>

Ich habe für jedes relais ein IPS_RunScriptEx eintrag angelegt.

Wenn ich das Skript ausführe schalten immer sporadisch ein paar relais ein!

Was mache ich falsch? Kann das sein das eine zeitüberschreitung eintritt, weil alle befehle zur selben zeit getätigt werden?

Ich wäre für eure hilfe sehr dankbar!

hast du das lösen können? Vielleicht ein kleines Delay einbauen zwischen den Befehlen? Jede Relaisschliessung dürfte eine Menge Störfunk triggern…

Kann gelöscht werden, habe das keine Fragen beit der Kategorie überlsen…

ich würde gerne 2 8-fach Relaiskarten der Firma Conrad mit IPS ansteuern.

mein Fragen:

1.)
im Scrit findet man folgende Zeile:
$io = 0; //I/O Instanz -> 19200,8,1,N

was muss hier gesetzt werden?

2.)
wie wird die Relaiskarte angeschlossen? mit 9 pol RS232 oder USB?

Danke für eure Antwort.
Martin