Anel Hut Integration ins Ips

Hallo zusammen

wer könnte mir behilflich sein eine Anel Hut IP Schalter ins IPS zu integrieren ?
Ich habe zwar das Script von hier schon versucht zu aktivieren bei mir. Aber leider ohne Erfolg

es ist ein Anel Hut mit Firmware 6.2

so sieht es aus:
<?

// Def
//$hutschiene_ip = „192.168.0.82“; // Schranke ANEL HUT
$hutschiene_ip = "192.168.0.82; //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“, „io1“,„io2“,„io3“,„io4“,„io5“,„io6“,„io7“,„io8“,„temp“,„firm“,„ver“,„power“,„exttemp“,„exthum“,„extbright“,„encrypt“,),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;
}

?>

was fehlt noch?

Spontan fallen mir ein:

[ul]
[li]Satzzeichen[/li][li]Groß- und Kleinschreibung[/li][li]PHP Code in die entsprechenden Tags schreiben[/li][/ul]

Und auf den Code bezogen: Dort ist nichts vernünftig eingerückt. Daher ist er nur sehr schwer lesbar.

habe das script von hier:Steckdose von ANEL - Seite 2

aber leider kann ich nicht programmieren…
es fehlt auch die Integervariable usw

Schau an, dort wo Du es her hast, ist es sogar lesbar. :cool:

Wenn Du jetzt noch Groß- und Kleinschreibung und Satzzeichen verwendest, dann hilft Dir vielleicht auch jemand.

Was hast Du denn bisher an Variablen angelegt bzw wo ist das Skripr zugewiesen? Vielleicht machst Du mal ein Bild vom Objektbaum.

Vielen Dank für die Erste Hilfe, es sieht so aus:

Es fehlen noch die einzelnen Kanäle oder?
Außerdem muss ich ja auch noch einen Script Timer erstellen?

Gibt es Fehlermeldungen wenn du es ausführst?

paresy

Ja:

aber komisch das PW und Benutzer stimmt

In Zeile 5 fehlt das Anführungszeichen am Ende der IP Adresse vor dem ; (Semikolon)

stimmt genau richtig, jetzt kommt dieser Fehler:

Außerdem muss ich ja noch die Schaltvariablen anlegen?

Ein Skript darf in IPS immer nur 30 Sekunden laufen. Die Fehlermeldung bedeutet, dass dieses Skript länger läuft und daher abgebrochen wird.

Ja schon klar, aber was nun?

Das gleiche Problem wurde hier ja auch schon beschrieben:

Steckdose von ANEL - Seite 3

Wenn man das Script über eine Boolean Variable ausführt auf den jeweiligen Kanal, kann man den Anel schalten also mit AUS - AUS und mit EIN -EIN allerdings kommt KEINE Anzeige des Schaltzustands und das Script meldet einen Fehler weil es zulange ausgeführt wird. Die Frage ist, wo liegt der Fehler im Script das es nicht endet?

Hat jemand eine Idee?
Wäre über jeden Tip dankbar

Ich kenne das Gerät nicht, wird denn zur Steuerung eine Socket benötigt der dauerhaft offen ist? Wenn ja dann sollte man das Gerät eher über ein UDP Socket in IP Symcon ansteuern, dann bekommt man auch kein Timeout. Oder liefert das Gerät auch keine Rückmeldung über den Socket dann würde es in der Tat reichen nur zum Schalten eine Socket Verbindung aufzubauen.

Was passiert denn wenn Du Dir ein UDP Socket auf Port 75 anlegst und dort das Debug Fenster öffnest? Kommen da regelmäßig automatisch Benachritigungen rein über den Socket?

Was kommt denn im Socket zurück wenn Du


USCK_SendText(12345, "wer da?
"); // 12345 OBjekt ID UDP Socket

verschickst?

Ansonsten würde ich das Gerät dann an Deiner Stelle über ein UDP Socket steuern und die Rückmeldung mit einer Registervariable entgegennehmen, dann hast Du auch keine Timeout Probleme.

Anscheinend braucht man zwei UDP Sockets einen auf Port 75 zum Senden und einen auf Port 77 zum Empfangen. Wenn müste die Antwort also beim UDP Socket mit Port 77 zu sehen sein.

Vielen Dank für die Tips, werde das später ausprobieren.
Ich denke der Ansatz von dem Script war das man die Schaltvorgänge welche der ANEL HUT selber schaltet im IPS zu sehen sind.
Also wie eine dauerhafte Abfrage.
Nötig ist das sicher nicht, es würde auch Abfrage alle 60s reichen.
Die Anel Geräte haben immer einen eigenen Webserver und können auch selber Timer Funktionen auslösen.
das steht in der Anleitung:

Ich habe dafür ein Modul geschrieben, nur zur Info, falls es sich jemand gerade ebenfalls anschaut.
Sobald es komplett fertig ist, werde ich es auch posten.

Grüße,
Kai

Hi,

hier ist der Dump:
dump (1).txt (14.6 KB)
Alle Ports von 1-8 jeweils an und aus, beim Port 5 auch mal den text geändert.

VG

kea

anel.PNG

Ich frage jetzt mal ganz doof, ist das Gerät was du hast ein anderes als Anel Hut?
Wie heißt das genau? Muss ich dafür evtl. ein extra Modul schreiben?

Grüße,
Kai

Moin,
es handelt sich um das Ding:
ANEL-Elektronik AG : NET-PwrCtrl PRO
aus der ersten Generation.
https://de.anel.eu/home-site/Vergleich_der_Leisten.htm
VG
Kea