PHP-Code:
<?
// 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)."\r\n";
$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)."\r\n";
$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?\r\n");
$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;
}
?>