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.