Steckdose von ANEL

Hallo zusammen,
bin begeisterter Neuling und lerne das ganze System gerade erst kennen. Ich habe hier bei mir eine via IP steuerbare Steckdosenleiste und interessiere mich ganz besonders für dieses neue Hutschienenmodul von Anel:
Netzwerk - Steckdosenleiste - Anel-Elektronik AG.

Hat jemand schon Erfahrungen mit diesen Geräten oder eine Idee, wie sich diese Module in IP-Symcon einbinden lassen? Bin jetzt nicht so der grosße Programmierer…wenn ich das richtig interpretiere, dann besteht die Möglichkeit die einzelnen Dosen über das UDP-Protokoll anzusteuern.

Würde mich über Tips freuen.:rolleyes:

Moin…

Ich denke das sollte kein großes Problem sein die Teile mit IPS zu steuern!!

Versuch mal die Steuerbefehle zu finden und poste sie mal!! Wird entweder mit UDP Socket oder per „http“ funktionieren!!!

Gruß,

Peter

Im Forum auf der Herstellerseite sind Beispiele in Java, Ruby, C#, usw. Da kann man sehen, was man senden muss.

Ich habe vorhin mal die PDF dazu überflogen… da steht das beschrieben.
Sollte, via UDP-Socket kein Problem sein, die Anbindung in IPS zu realisieren.

Hallo zusammen,

ich hatte jetzt mal wieder etwas Zeit mich um mein System zu kümmern und habe erst jetzt mal an dem Thema Anbindung/Steuerung der UDP-Steckdose weiterarbeiten können.

Das heißt, da meine PHP-Kenntnisse quasi gegen null gehen, habe ich einen Kollegen mit mehr Know-How gebeten mal zu helfen… er hat (ohne IP-Symcon zu kennen) mal ein Script entwickelt, das irgendwie funktioniert - aber irgendwie auch nicht…:mad:

Hier erstmal das Script:


<?
// Def
$hutschiene_ip = "192.168.1.41";
$schalter_nr = 1;
// Global
$object = IPS_GetObject($IPS_SELF);
// auslesen


if($IPS_SENDER == "WebFront" || $IPS_SENDER == "Switch"){
	//schalten
	if($IPS_VALUE){
	// schalter ein
		schalter_schalten_ein($hutschiene_ip,$schalter_nr);
	}else{
	// schalter aus
		schalter_schalten_aus($hutschiene_ip,$schalter_nr);
	}
	//aktualisieren
	$out = auslesen_in_array($hutschiene_ip);
	$parentID = $object['ParentID'];
	$ac = IPS_GetObject($parentID);
	$status = IPS_GetVariableIDByname("Status", $ac["ObjectID"]);
	//setzen
	SetValue($status, $out["surge"][$schalter_nr]["state"]);
}else{
	// aktualisieren
	$out = auslesen_in_array($hutschiene_ip);
	$parentID = $object['ParentID'];
	$ac = IPS_GetObject($parentID);
	$status = IPS_GetVariableIDByname("Status", $ac["ObjectID"]);
	//setzen
	SetValue($status, $out["surge"][$schalter_nr]["state"]);
}





function schalter_schalten_ein($ip,$surge_no,$state=1,$port=75,$password="anel") {
   $port = intval($port);
   $surge_no = intval($surge_no);

   if(!$ip || !$port || !strlen($password) || !$surge_no)
      return false;

   $cmd = (!$state ? "Sw_off" : "Sw_on").$surge_no.$password.chr(0)."
";

   $fp = fsockopen("udp://".$ip, $port,$errno,$errstr);
   if (!$fp) return false;
    fwrite($fp, $cmd);
    fclose($fp);

    return true;
}


function schalter_schalten_aus($ip,$surge_no,$state=0,$port=75,$password="anel") {
   $port = intval($port);
   $surge_no = intval($surge_no);

   if(!$ip || !$port || !strlen($password) || !$surge_no)
      return false;

   $cmd = (!$state ? "Sw_off" : "Sw_on").$surge_no.$password.chr(0)."
";

   $fp = fsockopen("udp://".$ip, $port,$errno,$errstr);
   if (!$fp) return false;
    fwrite($fp, $cmd);
    fclose($fp);

    return true;
}



function auslesen_in_array($ip,$listen_port=77,$port=75) {

   if(!$ip || !$port || !$listen_port)
      return false;

   $opts = array('socket' => array('bindto' => '0.0.0.0:'.$listen_port));
   $context = stream_context_create($opts);
   $fp = stream_socket_client("udp://".$ip.":".$port, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
   if (!$fp) {
      echo $errstr;
      return false;
   }
    //fwrite($fp, $cmd);

    usleep(500000);
    fwrite($fp, "wer da?
");
    $data = fread($fp,1024);
    fclose($fp);
    $surgeinfo = array_combine(array("type","name","ip","mask","gateway","mac","surge1","surge2","surge3","surge4","surge5","surge6","surge7","surge8","disabled","http_port", "io1","io2","io3","io4","io5","io6","io7","io8","temp","firm",),explode(":",trim($data)));
    foreach ($surgeinfo as $k=>$v) {
       if (preg_match("/^surge(\d)$/i",$k,$regs)) {
          $no = $regs[1];
          $surgeinfo["surge"][$no] = array_combine(array("name","state"),explode(",",$v));
          $surgeinfo["surge"][$no]["disabled"] = ($surgeinfo["disabled"] & pow(2,$no-1)) >> ($no-1);
          unset($surgeinfo[$k]);
       }
    }
    unset($surgeinfo["disabled"]);
    $surgeinfo["mac"] = array_reduce(explode(".",$surgeinfo["mac"]),create_function('$a,$b','return strtoupper((strlen($a) ? $a.":" : "").($b>15 ? dechex($b) : "0".dechex($b)));'));

    return $surgeinfo;
}


?>

Die grundsätzliche Idee von uns war es, zu jeder Steckdose eine DummyInstanz anzulegen:

Grundsätzlich scheint der Ansatz nicht ganz falsch zu sein, denn manuell ausgeführt klappt es manchmal:D und manchmal nicht:confused:

Dann erscheint im Logfile folgende Fehlermeldung:

[Innenhof\Wegbeleuchtung\Handler] = 
Warning:  stream_socket_client() [function.stream-socket-client]: failed to bind to '0.0.0.0:77', system said: No error in D:\IP-Symcon\scripts\49310.ips.php on line 84

Fatal error:  Maximum execution time of 30 seconds exceeded in D:\IP-Symcon\scripts\49310.ips.php on line 92

Wir vermuten, das das öffnen und schließen des Sockets irgendwie nicht richtig klappt. Wir sind hier auch nicht sicher, ob man evtl. manuell erstmal eine UDP-Socket Instanz in IP-Symcon anlegen müsste?

Da ich mich nicht so gut in PHP auskenne und mein Kollegen keinen echten Einblick in IP-Symcon und die Besonderheiten bzw. Konzepte hat, kommen wir nicht mehr weiter. Leider ist die Doku hinsichtlich UDP-Steuerung auch etwas dünn und im Forum gibts dazu auch nichts substantielles.

Ich fände es toll, wenn sich jemand hier mit einbringen könnte - vielleicht interessiert sich ja noch jemand für die Möglichkeit eine solche Steckdose via UDP zu steuern.

Hi,

wollte nur mal eventuellen Fortschritten fragen.

LG

Kea

hab auch so ein Teil zu Hause im Einsatz,

deshalb frage ich hier mal nach, obs was neues gibt.

Hallo,

habe mit folgenden Beispielen mal ein bisschen gespielt:
(Dem Forum des Herstellers entnommen:
Netzwerk - Steckdosenleiste - Anel-Elektronik AG.
FAQ - FORUM - ANEL-Elektronik AG • Thema anzeigen - PHP-Datei zum schalten bitte Hilfe!)

Damit schaffe ich es einen Kanal ein bzw. auszuschalten:

<?
$fp = fsockopen("udp://192.168.0.70",75);
fwrite($fp,"Sw_on1user1anel"); 
fclose($fp);
?>

zum zum ausschalten:
<?
$fp = fsockopen("udp://192.168.0.70",75);
fwrite($fp,"Sw_off1user1anel");
fclose($fp);
?>

"Sw_on1user1anel" bedeutet: 
Sw_on -> einschalten | Sw_off -> ausschalten
1 -> stecker @ position 1
user1 -> username
anel -> passwort


Mit den anderen Scripten (auch dem im oberen Teil des Threads) bekomme ich nichts geschaltet, geschweige den ausgelesen.

Vielleicht könnte sich mal ein PHP-Gott der Sache annehmen, wäre toll.

Viele Grüße aus OBC

kea

Und wo, ist jetzt dein Problem. Ich denke es funktioniert.

Hallo,

ich hatte an sch an ein „schönes“ Script (ähnlich einer fertigen Instanz) gedacht, mit Parametern zur Stausabfrage und zum schalten.

Habe dazu auch ein „Fetaure-Request“ eingestellt :smiley:

Viele Grüße

Den Featurerequest hättest dir sparen können. Es wird mit Sicherheit kein Modul dafür geben.

z.B. so. Pass dir die Ausgänge noch an. Testen kann ich nicht.

Leg dir eine Integervariable mit den Assoziationen an, das Script als Aktionsscript übergben und los geht es. :wink:

<?
if($_IPS['SENDER'] == "WebFront")
{
   SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
   
    switch($_IPS['VALUE'])
    {
        case 1:
            if($_IPS['VALUE']) SendSocket("Sw_on1");
            else SendSocket("Sw_off1");
        break;
        case 2
            if($_IPS['VALUE']) SendSocket("Sw_on2");
            else SendSocket("Sw_off2");
        break;
        case 3:
            if($_IPS['VALUE']) SendSocket("Sw_on3");
            else SendSocket("Sw_off3");
       break;
        case 4:
          if($_IPS['VALUE']) SendSocket("Sw_on1");
            else SendSocket("Sw_off1");
      break;
        case 5:
            if($_IPS['VALUE']) SendSocket("Sw_on1");
            else SendSocket("Sw_off1");
       break;
        case 6:
           if($_IPS['VALUE']) SendSocket("Sw_on1");
            else SendSocket("Sw_off1");
       break;
    }
}


function SendSocket($state)
{
    $fp = fsockopen("udp://192.168.0.70",75);
    fwrite($fp, $state."user1anel");
    fclose($fp);
}
?>

Hallo,

wollte mal kurz Rückmeldung geben.

Das System funktioniert jetzt zu 3/4:
1/2 Auslesen des Zustandes und setzen der Variablen
1/4 Einschalten der Steckdose
0/4 Ausschalten der Steckdose

Folgendes habe ich gemacht:

  1. Dummy Instanz angelegt, unterhalb dieser dann:
  2. Variable (Boolean: Switch) "Status erstellt
  3. Script von ullricho angelegt, Ereigniss erstellt
    -> Variable wird je nach Zustand der Steckdose geändert
  4. Script von RWN angelegt (gekürzt auf eine Steckdose)
  5. Der Variable „Status“ als „Eigene Aktion“ das Script von Pos. 4 eingetragen
    -> Im Webfront ist jetzt eine Aktion möglich.

Und jetzt die Herausforderung:
Einschalten funktioniert, Ausschalten jedoch leider nicht :frowning:
Leider habe ich keine Möglichkeit das ganze zu debuggen, habe mal den Netzwerkverkehr mal mitgesniffert: Bei der Aktion „Ausschalten“ via Web-Interface wird keine Aktion gestartet. Bei Einschalten kann ich den Befehl im Netz sehen.
Wie kann ich jetzt den Ablauf, bzw. den Start des Scripts von Pos. 4) überprüfen? Im Log sehe ich leider nichts, debuggen kann ich nur eine echte Instanz.

Viele Grüße aus OBC

kea

  1. Variable (Boolean: Switch) "Status erstellt

Dann müsstest Du das ganze ein bischen abwandeln.

z.B. so

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
   
    
     if((int)$_IPS['VALUE']) SendSocket("Sw_on1");
     else SendSocket("Sw_off1");

und die Function noch dabei.

Hallo Rainer,

es funktioniert!! :slight_smile:
Jetzt kann ich die restlichen Anel-Steckdosenleisten auch einbinden (Fleißarbeit für den Sonntagnachmittag :D).

Vielen Dank und schöne Grüße

kea

Hallo,

ich bins noch mal, leider :frowning:

Nachdem ich jetzt 6 Ports (2 Leisten mit je 3 Steckdosen) eingerichtet habe, tritt bei mir der Fehler von ullricho ebenfalls auf. :mad:

Zur Zeit sind 7 Auslesescripte im Einsatz, diese laufen alle 20 Sekunden und sind mit jeweils 2 Sekunden Versatz angelegt.

Kann ich das Auslesescript (siehe Posting vom 28.07.11 von ullricho) irgendwie „entschlacken“ das es ggf. weinger Resourcen braucht).

Hier noch ein Vorschlag zum Auslesen, von der Herstellerseite, meiner Meinung nach könnte der Broadcast-Anteil entfallen. Die Adressen sind ja bekannt. Nur leider ist der Rest des Codes für mich sehr Ägyptisch :confused:.

/**
* Search Anel NET surges via UDP broadcast
*
* @param integer $listen_port
* @param string $ip
* @param integer $port
* @return array or false on failure
*/
function find_surge_switch($listen_port=77,$ip="255.255.255.255",$port=75) {

   if(!$ip || !$port || !$listen_port)
      return false;

   $opts = array('socket' => array('bindto' => '0.0.0.0:'.$listen_port));
   $context = stream_context_create($opts);
   $fp = stream_socket_client("udp://".$ip.":".$port, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
   if (!$fp) {
      echo $errstr;
      return false;
   }
    fwrite($fp, $cmd);

    usleep(500000);
    fwrite($fp, "wer da?
");
    $data = fread($fp,1024);
    fclose($fp);
    
    $surgeinfo = array_combine(array("type","name","ip","mask","gateway","mac","surge1","surge2","surge3","surge4","surge5","surge6","surge7","surge8","disabled","http_port",),explode(":",trim($data)));
    foreach ($surgeinfo as $k=>$v) {
       if (preg_match("/^surge(\d)$/i",$k,$regs)) {
          $no = $regs[1];
          $surgeinfo["surge"][$no] = array_combine(array("name","state"),explode(",",$v));
          $surgeinfo["surge"][$no]["disabled"] = ($surgeinfo["disabled"] & pow(2,$no-1)) >> ($no-1);
          unset($surgeinfo[$k]);
       }
    }
    unset($surgeinfo["disabled"]);
    $surgeinfo["mac"] = array_reduce(explode(".",$surgeinfo["mac"]),create_function('$a,$b','return strtoupper((strlen($a) ? $a.":" : "").($b>15 ? dechex($b) : "0".dechex($b)));'));

    return $surgeinfo;
}

Viele Grüße aus OBC

kea

Hallo zusammen , wer weis wie ich es hinbekomme das IPS den Status im Anlel abfragt ( ausließt) und den Status im IPS richtig setzt .

Das Problem : Wenn ich aus dem Webfront ein oder ausschalte geht alles, jedoch sobald man über den Anel ein oder ausschaltet , hat IPS einen anderen Status.
Wer hat so ein Script ?

Hallo, da ich schon eine App für iOS geschrieben habe hab ich auch Interesse, das IPS meine Anels steuert.

Ich habe das Script einmal erweitert und mit entsprechendem Ereignis werden auch Aktionen angezeigt wenn man auf der Anel etwas ändert zb.Text oder zustand des Ausgänge.

<?

// Def
//$hutschiene_ip = "192.168.100.111"; // Schranke ANEL HUT
$hutschiene_ip = "192.168.125.129"; //Test NET-Control
$schalter_nr = 1;
$listen_port=50100;
$user="admin";
$password="anel";
$port = 75;
$DO1 = 47271 /*[AnelHUT\Nr. 1]*/ ;
$DO2 = 43264 /*[AnelHUT\Nr. 2]*/;
$DO3 = 56907 /*[AnelHUT\Nr. 3]*/  ;
$DO4 = 23954 /*[AnelHUT\Nr. 4]*/  ;
$DO5 = 52289 /*[AnelHUT\Nr. 5]*/  ;
$DO6 = 20310 /*[AnelHUT\Nr. 6]*/  ;
$DO7 = 32843 /*[AnelHUT\Nr. 7]*/ ;
$DO8 = 10102 /*[AnelHUT\Nr. 8]*/ ;
$TS = 0 /* Schalter ist Taster*/;
// Global
$object = IPS_GetObject($IPS_SELF);
// auslesen


if($IPS_SENDER == "Execute")
{
//aktualisieren
    $out = auslesen_in_array($hutschiene_ip,$listen_port,$port);
    $parentID = $object['ParentID'];
    $ac = IPS_GetObject($parentID);

	 SetValue($DO1, $out["surge"][1]["state"]);
	 IPS_SetName($DO1, $out["surge"][1]["name"]);

     SetValue($DO2, $out["surge"][2]["state"]);
	 IPS_SetName($DO2, $out["surge"][2]["name"]);

	  SetValue($DO3, $out["surge"][3]["state"]);
	 IPS_SetName($DO3, $out["surge"][3]["name"]);

	  SetValue($DO4, $out["surge"][4]["state"]);
	 IPS_SetName($DO4, $out["surge"][4]["name"]);

	  SetValue($DO5, $out["surge"][5]["state"]);
	 IPS_SetName($DO5, $out["surge"][5]["name"]);

	  SetValue($DO6, $out["surge"][6]["state"]);
	 IPS_SetName($DO6, $out["surge"][6]["name"]);

	  SetValue($DO7, $out["surge"][7]["state"]);
	 IPS_SetName($DO7, $out["surge"][7]["name"]);

	  SetValue($DO8, $out["surge"][8]["state"]);
	 IPS_SetName($DO8, $out["surge"][8]["name"]);
}
if($IPS_SENDER == "WebFront" || $IPS_SENDER == "Switch"){

    switch ($_IPS['VARIABLE'])
    {
    case $DO1:
              $schalter_nr = 1;
            break;
    case $DO2:
              $schalter_nr = 2;
            break;
    case $DO3:
              $schalter_nr = 3;
            break;
    case $DO4:
              $schalter_nr = 4;
            break;
    case $DO5:
              $schalter_nr = 5;
            break;
    case $DO6:
              $schalter_nr = 6;
            break;
    case $DO7:
              $schalter_nr = 7;
            break;
    case $DO8:
              $schalter_nr = 8;            
            break;
            }
            
    if($IPS_VALUE){
    // schalter ein
        schalter_schalten_ein($hutschiene_ip,$schalter_nr,$port,$user,$password);
        
    }else{
    // schalter aus
        schalter_schalten_aus($hutschiene_ip,$schalter_nr,$port,$user,$password);
    }
    
    // aktualisieren
     $out = auslesen_in_array($hutschiene_ip,$listen_port,$port);
    $parentID = $object['ParentID'];
    $ac = IPS_GetObject($parentID);
    $temperatur = IPS_GetVariableIDByname("Temp", $ac["ObjectID"]);

	 SetValue($DO1, $out["surge"][1]["state"]);
	 IPS_SetName($DO1, $out["surge"][1]["name"]);

     SetValue($DO2, $out["surge"][2]["state"]);
	 IPS_SetName($DO2, $out["surge"][2]["name"]);

	  SetValue($DO3, $out["surge"][3]["state"]);
	 IPS_SetName($DO3, $out["surge"][3]["name"]);

	  SetValue($DO4, $out["surge"][4]["state"]);
	 IPS_SetName($DO4, $out["surge"][4]["name"]);

	  SetValue($DO5, $out["surge"][5]["state"]);
	 IPS_SetName($DO5, $out["surge"][5]["name"]);

	  SetValue($DO6, $out["surge"][6]["state"]);
	 IPS_SetName($DO6, $out["surge"][6]["name"]);

	  SetValue($DO7, $out["surge"][7]["state"]);
	 IPS_SetName($DO7, $out["surge"][7]["name"]);

	  SetValue($DO8, $out["surge"][8]["state"]);
	 IPS_SetName($DO8, $out["surge"][8]["name"]);
    
    if($TS){
    // schalter wieder aus wenn TS gesetzt
        schalter_schalten_aus($hutschiene_ip,$schalter_nr,$port,$user,$password);
    }
    
}else{
    // aktualisieren
     $out = auslesen_in_array($hutschiene_ip,$listen_port,$port);
    $parentID = $object['ParentID'];
    $ac = IPS_GetObject($parentID);
    $temperatur = IPS_GetVariableIDByname("Temp", $ac["ObjectID"]);
   
	 SetValue($DO1, $out["surge"][1]["state"]);
	 IPS_SetName($DO1, $out["surge"][1]["name"]);

     SetValue($DO2, $out["surge"][2]["state"]);
	 IPS_SetName($DO2, $out["surge"][2]["name"]);
	 
	  SetValue($DO3, $out["surge"][3]["state"]);
	 IPS_SetName($DO3, $out["surge"][3]["name"]);
	 
	  SetValue($DO4, $out["surge"][4]["state"]);
	 IPS_SetName($DO4, $out["surge"][4]["name"]);
	 
	  SetValue($DO5, $out["surge"][5]["state"]);
	 IPS_SetName($DO5, $out["surge"][5]["name"]);
	 
	  SetValue($DO6, $out["surge"][6]["state"]);
	 IPS_SetName($DO6, $out["surge"][6]["name"]);
	 
	  SetValue($DO7, $out["surge"][7]["state"]);
	 IPS_SetName($DO7, $out["surge"][7]["name"]);

	  SetValue($DO8, $out["surge"][8]["state"]);
	 IPS_SetName($DO8, $out["surge"][8]["name"]);
}



function schalter_schalten_ein($ip,$surge_no,$port,$user,$password,$state=1) {
   $port = intval($port);
   $surge_no = intval($surge_no);

   if(!$ip || !$port || !strlen($password) || !$surge_no)
      return false;

   $cmd = (!$state ? "Sw_off" : "Sw_on").$surge_no.$user.$password."
";

  // $fp = fsockopen("udp://".$ip, $port,$errno,$errstr);
    $fp = fsockopen("udp://".$ip,$port);
   if (!$fp) return false;
   // echo ($cmd);
    switch ($surge_no)
    {
   			case 1:
              fwrite($fp,"Sw_on1adminanel");
            break;
   			case 2:
              fwrite($fp,"Sw_on2adminanel");
            break;
            case 3:
              fwrite($fp,"Sw_on3adminanel");
            break;
            case 4:
              fwrite($fp,"Sw_on4adminanel");
            break;
            case 5:
              fwrite($fp,"Sw_on5adminanel");
            break;
            case 6:
              fwrite($fp,"Sw_on6adminanel");
            break;
            case 7:
              fwrite($fp,"Sw_on7adminanel");
            break;
            case 8:
              fwrite($fp,"Sw_on8adminanel");
            break;
            }
    
  //  fwrite($fp, $cmd);
    fclose($fp);
    
    return true;
}


function schalter_schalten_aus($ip,$surge_no,$port,$user,$password,$state=0) {
   $port = intval($port);
   $surge_no = intval($surge_no);

   if(!$ip || !$port || !strlen($password) || !$surge_no)
      return false;

   $cmd = (!$state ? "Sw_off" : "Sw_on").$surge_no.$user.chr(0).$password.chr(0)."
";

 //  $fp = fsockopen("udp://".$ip, $port,$errno,$errstr);
   $fp = fsockopen("udp://".$ip,$port  );
   if (!$fp) return false;
   
	 //echo $surge_no;
	 
    switch ($surge_no)
    {
   			case 1:
              fwrite($fp,"Sw_off1adminanel");
            break;
   			case 2:
              fwrite($fp,"Sw_off2adminanel");
            break;
            case 3:
              fwrite($fp,"Sw_off3adminanel");
            break;
            case 4:
              fwrite($fp,"Sw_off4adminanel");
            break;
            case 5:
              fwrite($fp,"Sw_off5adminanel");
            break;
            case 6:
              fwrite($fp,"Sw_off6adminanel");
            break;
            case 7:
              fwrite($fp,"Sw_off7adminanel");
            break;
            case 8:
              fwrite($fp,"Sw_off8adminanel");
            break;
            }
            

    fclose($fp);
    
    return true;
}



function auslesen_in_array($ip,$listen_port,$port) {

   if(!$ip || !$port || !$listen_port)
      return false;

   $opts = array('socket' => array('bindto' => '0.0.0.0:'.$listen_port));
   $context = stream_context_create($opts);
   $fp = stream_socket_client("udp://".$ip.":".$port, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
   if (!$fp) {
      echo $errstr;
      return false;
   }
    //fwrite($fp, $cmd);

    usleep(5000);
    fwrite($fp, "wer da?
");
    $data = fread($fp,1024);
    fclose($fp);
   // echo $data;
   // ANEL HUT STRING
//    $surgeinfo = array_combine(array("type","name","ip","mask","gateway","mac","surge1","surge2","surge3","surge4","surge5","surge6","surge7","surge8","disabled","http_port", "io1","io2","io3","io4","io5","io6","io7","io8","temp","firm",),explode(":",trim($data)));
	//ANEL NET_CONTROL STRING
    $surgeinfo = array_combine(array("type","name","ip","mask","gateway","mac","surge1","surge2","surge3","surge4","surge5","surge6","surge7","surge8","disabled","http_port",),explode(":",trim($data)));

	 foreach ($surgeinfo as $k=>$v) {
       if (preg_match("/^surge(\d)$/i",$k,$regs)) {
          $no = $regs[1];
          $surgeinfo["surge"][$no] = array_combine(array("name","state"),explode(",",$v));
          $surgeinfo["surge"][$no]["disabled"] = ($surgeinfo["disabled"] & pow(2,$no-1)) >> ($no-1);
          unset($surgeinfo[$k]);
       }
    }
    unset($surgeinfo["disabled"]);
    $surgeinfo["mac"] = array_reduce(explode(".",$surgeinfo["mac"]),create_function('$a,$b','return strtoupper((strlen($a) ? $a.":" : "").($b>15 ? dechex($b) : "0".dechex($b)));'));
    //echo json_encode($surgeinfo);
    return $surgeinfo;
}


?>

Im oberen Teil werden die Definitionen gesetzt.

// Def
//$hutschiene_ip = "192.168.100.111"; // Schranke ANEL HUT
$hutschiene_ip = "192.168.125.129"; //Test NET-Control
$schalter_nr = 1;
$listen_port=50100;
$user="admin";
$password="anel";
$port = 75;
$DO1 = 47271 /*[AnelHUT\Nr. 1]*/ ;
$DO2 = 43264 /*[AnelHUT\Nr. 2]*/;
$DO3 = 56907 /*[AnelHUT\Nr. 3]*/  ;
$DO4 = 23954 /*[AnelHUT\Nr. 4]*/  ;
$DO5 = 52289 /*[AnelHUT\Nr. 5]*/  ;
$DO6 = 20310 /*[AnelHUT\Nr. 6]*/  ;
$DO7 = 32843 /*[AnelHUT\Nr. 7]*/ ;
$DO8 = 10102 /*[AnelHUT\Nr. 8]*/ ;
$TS = 0 /* Schalter ist Taster*/;

Die DO Variablen werden anhand der ID gefunden also bitte Eure ID`s eintragen. TS ist eine Variable mir der im Code Der Ausgang sofort wieder aus geschaltet wird um einen Taster zu Simulieren.
In meinem Script wird der Variablenname überschrieben also ist es egal welcher Name die Variable in IPS hat.
Der Name wird auf der Anel gelesen.

WICHTIG!
Da Die HUT noch IO (Digitale Eingänge) hat ist der String auch länger also bitte im Script folgende Zeile anpassen.


// ANEL HUT String
//$surgeinfo = array_combine(array("type","name","ip","mask","gateway","mac","surge1","surge2","surge3","surge4","surge5","surge6","surge7","surge8","disabled","http_port", "io1","io2","io3","io4","io5","io6","io7","io8","temp","firm",),explode(":",trim($data)));
	//ANEL NET_CONTROL STRING
$surgeinfo = array_combine(array("type","name","ip","mask","gateway","mac","surge1","surge2","surge3","surge4","surge5","surge6","surge7","surge8","disabled","http_port",),explode(":",trim($data)));

Zu Automatischen Abfragen der Anel bitte ein Ereignis erstellen welche in eurer gewünschten Zeit das Script ausführt. Ich habe 3sec .

Ansonsten ist alles selbst erklärend. Wenn Fragen sind, gerne stellen ich werde wahrscheinlich auch noch einige haben.

Hallo Jens,

vielen Dank für Dein super script. Habe es direkt eingelötet (habe ein paar Anels im Einsatz).
Das Auslesen funktioniert prima, habe es mit der HUT getestet, an der Adaption an eine Pro und Home werde ich mich am Wochenende mal versuchen.

Nur jetzt habe ich zwei kurze Fragen:

  1. Bei mir motzt IPS wegen einer nicht defineirten Variable in Zeile 136 (Temperatur), habe erfolglos versucht diese anzulegen …?
  2. Sehe ich das richtig, daß zur Zeit nur das Auslesen möglich ist?

Viele Grüße aus OBC

kea

zu1. komisch aber Temperatur geht nur bei der HUT, nicht vergessen. probier mal die Variable „String“ anzulegen.

zu2. Doch du kannst schalten und lesen alles sollte funktionieren du musst nur oben im Script deine BOOL Variablen ID`s eintragen.
Am besten legst du dir erst einmal 8 BOOL Variablen an und kopierst dann die ID in Script. Ich habe ein eigenes Profil für die Bool Variable angelegt mit " false" Text „aus“ und „true“ Text „an“ und farbe „grün“ max Wert 1. Wen Der Schalter nun gedrückt wird ist $IPS_Value 1 oder 0 und das Script schaltet. Du musst natürlich die Variable an das Script hängen(über Variable ändern Eigene Aktion)

Hallo,
vielen Dank für das Super Script - funktioniert einwandfrei :slight_smile:
Anbei die Array-Definitionen für die neuen Firmware Versionen 6.0 / 6.1


// ANEL HUT STRING v5.x
//$surgeinfo = array_combine(array("type","name","ip","mask","gateway","mac","surge1","surge2","surge3","surge4","surge5","surge6","surge7","surge8","disabled","http_port", "io1","io2","io3","io4","io5","io6","io7","io8","temp","firm",),explode(":",trim($data)));
	
// ANEL HUT STRING v6.0
// $surgeinfo = array_combine(array("type","name","ip","mask","gateway","mac","surge1","surge2","surge3","surge4","surge5","surge6","surge7","surge8","disabled","http_port", "io1","io2","io3","io4","io5","io6","io7","io8","temp","firm","ver","power",),explode(":",trim($data)));
	
// ANEL HUT STRING v6.1
// $surgeinfo = array_combine(array("type","name","ip","mask","gateway","mac","surge1","surge2","surge3","surge4","surge5","surge6","surge7","surge8","disabled","http_port", "io1","io2","io3","io4","io5","io6","io7","io8","temp","firm","ver","power","exttemp","exthum","extbright","encrypt",),explode(":",trim($data)));

Gruss
Stefan