16 fach USB Relaisboard

Hallo,
ich habe mir ein günstiges 16-fach Relaisboard aus China bestellt. Es wird u.a. bei Eb*y unter Bezeichnungen wie dieser ‚16-Kanal 9-36V USB-gesteuertes SPDT-Relaismodul Optokoppelte Platine SRD-5VDC‘ für ca. 30€ inkl. Porto angeboten.

<?php
$ch16_data = array(
    1 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x30\x30\x30\x30\x30\x46\x44\x0D\x0A", /*off*/
                "\x3A\x46\x45\x30\x35\x30\x30\x30\x30\x46\x46\x30\x30\x46\x45\x0D\x0A" /*on*/),
    2 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x31\x30\x30\x30\x30\x46\x43\x0D\x0A", /*off*/
                "\x3A\x46\x45\x30\x35\x30\x30\x30\x31\x46\x46\x30\x30\x46\x44\x0D\x0A" /*on*/),
    3 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x32\x30\x30\x30\x30\x46\x42\x0D\x0A", /*off*/
                "\x3A\x46\x45\x30\x35\x30\x30\x30\x32\x46\x46\x30\x30\x46\x43\x0D\x0A" /*on*/),
    4 => array("F\x3A\x46\x45\x30\x35\x30\x30\x30\x33\x30\x30\x30\x30\x46\x41\x0D\x0A", /*off*/
           "\x3A\x46\x45\x30\x35\x30\x30\x30\x33\x46\x46\x30\x30\x46\x42\x0D\x0A" /*on*/),
    5 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x34\x30\x30\x30\x30\x46\x39\x0D\x0A", /*off*/
            "\x3A\x46\x45\x30\x35\x30\x30\x30\x34\x46\x46\x30\x30\x46\x41\x0D\x0A" /*on*/),
    6 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x35\x30\x30\x30\x30\x46\x38\x0D\x0A", /*off*/
            "\x3A\x46\x45\x30\x35\x30\x30\x30\x35\x46\x46\x30\x30\x46\x39\x0D\x0A" /*on*/),
    7 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x36\x30\x30\x30\x30\x46\x37\x0D\x0A", /*off*/
            "\x3A\x46\x45\x30\x35\x30\x30\x30\x36\x46\x46\x30\x30\x46\x38\x0D\x0A" /*on*/),
    8 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x37\x30\x30\x30\x30\x46\x36\x0D\x0A", /*off*/
                "\x3A\x46\x45\x30\x35\x30\x30\x30\x37\x46\x46\x30\x30\x46\x37\x0D\x0A" /*on*/),
    9 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x38\x30\x30\x30\x30\x46\x35\x0D\x0A", /*off*/
            "\x3A\x46\x45\x30\x35\x30\x30\x30\x38\x46\x46\x30\x30\x46\x36\x0D\x0A" /*on*/),
   10 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x39\x30\x30\x30\x30\x46\x34\x0D\x0A", /*off*/
            "\x3A\x46\x45\x30\x35\x30\x30\x30\x39\x46\x46\x30\x30\x46\x35\x0D\x0A" /*on*/),
   11 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x41\x30\x30\x30\x30\x46\x33\x0D\x0A", /*off*/
            "\x3A\x46\x45\x30\x35\x30\x30\x30\x41\x46\x46\x30\x30\x46\x34\x0D\x0A" /*on*/),
   12 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x42\x30\x30\x30\x30\x46\x32\x0D\x0A", /*off*/
            "\x3A\x46\x45\x30\x35\x30\x30\x30\x42\x46\x46\x30\x30\x46\x33\x0D\x0A" /*on*/),
   13 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x43\x30\x30\x30\x30\x46\x31\x0D\x0A", /*off*/
            "\x3A\x46\x45\x30\x35\x30\x30\x30\x43\x46\x46\x30\x30\x46\x32\x0D\x0A" /*on*/),
   14 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x44\x30\x30\x30\x30\x46\x30\x0D\x0A", /*off*/
            "\x3A\x46\x45\x30\x35\x30\x30\x30\x44\x46\x46\x30\x30\x46\x31\x0D\x0A" /*on*/),
   15 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x45\x30\x30\x30\x30\x46\x46\x0D\x0A", /*off*/
            "\x3A\x46\x45\x30\x35\x30\x30\x30\x45\x46\x46\x30\x30\x46\x30\x0D\x0A" /*on*/),
   16 => array("\x3A\x46\x45\x30\x35\x30\x30\x30\x46\x30\x30\x30\x30\x46\x45\x0D\x0A", /*off*/
            "\x3A\x46\x45\x30\x35\x30\x30\x30\x46\x46\x46\x30\x30\x46\x46\x0D\x0A" /*on*/)
);

$ch16_id = 21410 /*[16ch usb]*/;

/** Test
for($i=1; $i<=16; $i++){
    SPRT_SendText($ch16_id,$ch16_data[$i][1]);
    IPS_Sleep(800);

    SPRT_SendText($ch16_id,$ch16_data[$i][0]);
    IPS_Sleep(150);
}
//*/

if($_IPS['SENDER']=="WebFront" || $_IPS['SENDER']=="RequestAction"){
    $i = (int) str_replace("Kanal_", "",IPS_GetObject($_IPS['VARIABLE'])['ObjectIdent']);
    if($_IPS['VALUE']){
        //ein
        SPRT_SendText($ch16_id,$ch16_data[$i][1]);
    }else{
       //aus
       SPRT_SendText($ch16_id,$ch16_data[$i][0]);
    }
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
}

Im Script findet sich die Variable $ch16_id (ID des Virtual Com Port), welche natürlich auch angepasst werden muss.

Es werden zusätzlich zu diesem Script 16 bool Variablen benötigt, welche als Aktion das Script haben sowie als IDENT die Bezeichnung Kanal_1 bis Kanal_16.

Dies könnte (ungetestet) mit folgendem Script gehen:

for($i=1;$i<=16;$i++){
  $id = IPS_CreateVariable(0);
  IPS_SetName($id, "Mein Name für Kanal ".$i); 
  IPS_SetParent($id, 12345); // parent ID angeben
  IPS_SetIdent($id,"Kanal_".$i);
  IPS_SetVariableCustomAction($id, 54321); // id des o.g. Scripts einfügen
  IPS_SetVariableCustomProfile($id, "~Switch");
}
1 „Gefällt mir“

1Fehler fand ich und die Variable sollte noch auf Switch gesetzt werden.
IPS_SetName($id, „Kanal .“$i); muß
IPS_SetName($id, „Kanal_“.$i); werden
Gruß Helmut

Habe das Profil oben ergänzt. Auch SetName war mit der Position des Punktes innerhalb der Anführungszeichen falsch. Allerdings ist der Bindestrich beim Anzeigenamen nicht notwendig. Das habe ich jetzt ebenfalls versucht oben deutlicher zu machen.

1 „Gefällt mir“