Ich selbst habe noch nie ein Modul geschrieben,
aber würde ein Modul für das HCL nicht sogar sinn machen?
Für mich habe ich das ganze jetzt umgemodelt.
Jetzt läuft Installation automatisch und es lassen sich Schalter und Rolladen im Webfront bedienen.
Ist bestimmt noch stark Erweiterungsfähigkeit.
Und bestimmt auch schöner in eine syntax zu setzen…
<?php
$ip = "192.168.***.***"; // IP HCL
$user_pw = "**************************************"; // Zugangsdaten HCL user:pw base64
$json = "";
$user = "name@provider.de";
$PW = "1234568790";
$a = "'VALUE'";
$b = "'VARIABLE'";
$c = "'ObjectInfo'";
//*** Bolean Skript
$boleanscript = IPS_CreateScript(0);
IPS_SetName($boleanscript, "Aktion-Bolean");
$inhalt='<?php
SetValue($_IPS['.$b.'], $_IPS['.$a.']);
$deviceID = IPS_GetObject ($_IPS['.$b.']);
if ($_IPS['.$a.'] == false) $action = "turnOff";
if ($_IPS['.$a.'] == true) $action = "turnOn" ;
file_get_contents("http://'.$user.':'.$PW.'@'.$ip.'/api/callAction?deviceID=".$deviceID['.$c.']."&name=".$action);
';
IPS_SetScriptContent($boleanscript, $inhalt);
//*** Shutter skript
$shutterscript = IPS_CreateScript(0);
IPS_SetName($shutterscript, "Aktion-Shutter");
$inhalt='<?php
SetValue($_IPS['.$b.'], $_IPS['.$a.']);
$deviceID = IPS_GetObject ($_IPS['.$b.']);
$action = ($_IPS['.$a.']);
file_get_contents("http://'.$user.':'.$PW.'@'.$ip.'/api/callAction?deviceID=".$deviceID['.$c.']."&name=setValue&arg1=".$action);
';
IPS_SetScriptContent($shutterscript, $inhalt);
//*** Setpoint skript
$Setpointscript = IPS_CreateScript(0);
IPS_SetName($Setpointscript, "Aktion-Setpoint");
$inhalt='<?php
SetValue($_IPS['.$b.'], $_IPS['.$a.']);
$deviceID = IPS_GetObject ($_IPS['.$b.']);
$action = ($_IPS['.$a.']);
file_get_contents("http://'.$user.':'.$PW.'@'.$ip.'/api/callAction?deviceID=".$deviceID['.$c.']."&name=setTargetLevel&arg1=".$action);
';
IPS_SetScriptContent($Setpointscript, $inhalt);
//*** Aktualisierungs Skript
$ScriptID = IPS_CreateScript(0);
$ScriptName = "HCL-Run.ips.php"; //Skriptdatei
$Parent = IPS_GetParent($_IPS['SELF']);
IPS_SetParent($ScriptID, $Parent);
IPS_SetName($ScriptID, $ScriptName);
$content='<?php
$ip = "'.$ip.'";
$user_pw = "'.$user_pw.'";
$json = "" ;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://".$ip."/api/devices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTP_VERSION => "HTTP/1.1",
CURLOPT_HTTPHEADER => array("authorization: Basic ".$user_pw),
));
$response = curl_exec($curl);
$json = json_decode($response); //Dekodierung nach Json
curl_close($curl);
foreach ($json as $i) {
switch ($i->id) {
';
// Funktion HCL Devices lesen
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://".$ip."/api/devices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTP_VERSION => "HTTP/1.1",
CURLOPT_HTTPHEADER => array("authorization: Basic ".$user_pw),
));
$response = curl_exec($curl);
$json = json_decode($response); //Dekodierung nach Json
curl_close($curl);
$cat = IPS_CreateCategory();
IPS_SetParent($cat, 0);
IPS_SetName($cat, "HCL-Zwave");
foreach ($json as $i)
{
If ($i->parentId == 1)
{
$Dummy = IPS_CreateInstance ("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetParent($Dummy, $cat);
IPS_SetName($Dummy, $i->name);
IPS_SetInfo($Dummy, $i->id);
IPS_SetPosition($Dummy, $i->id);
//** ID variable
$IPS_id_ID_HCL = ips_CreateVariable(1);
IPS_SetParent($IPS_id_ID_HCL, $Dummy);
IPS_SetName($IPS_id_ID_HCL, "ID-HCL");
IPS_SetInfo($IPS_id_ID_HCL, "");
IPS_SetPosition($IPS_id_ID_HCL,1);
$ziel = '$i->id';
$content.="case '";
$content.=$i->id;
$content.="':
";
$zielid = $i->id;
setvalue ($IPS_id_ID_HCL,$zielid);
//Nodeid
$info = "nodeId";
$ziel = '$i->properties->nodeId';
$nodeIDinh = $i->properties->nodeId;
if (array_key_exists ($info,$i->properties ))
{
$vab_A = ips_CreateVariable(1);
IPS_SetParent($vab_A, $Dummy);
IPS_SetName($vab_A, $info);
IPS_SetPosition($vab_A,2);
setvalue ($vab_A,$nodeIDinh);
}
IPS_SetPosition($Dummy,$nodeIDinh);
//ZWversion
$info = "zwaveVersion";
$ziel = '$i->properties->zwaveVersion';
$ZWversion = $i->properties->zwaveVersion;
if (array_key_exists ($info,$i->properties ))
{
$vab_A = ips_CreateVariable(3);
IPS_SetParent($vab_A, $Dummy);
IPS_SetName($vab_A, $info);
IPS_SetInfo($vab_A,$i->id);
IPS_SetPosition($vab_A,3);
setvalue ($vab_A,$ZWversion);
}
}
if ($i->parentId > 2)
{
//** ermittlung des mutterobjektes
$childs = IPS_GetChildrenIDs ($cat);
foreach ($childs as $j)
{
$ob = @IPS_GetObjectIDByName("ID-HCL", $j);
$iid = getvalue ($ob);
If ($iid==$i->parentId)
{
$Dummy = $j;
}
}
$info = "categories";
$Texta = $i->properties->categories;
$Textb = substr($Texta,2);
$categorie = substr($Textb,0,-2);
$typea = $i->type;
$type = substr($typea,11);
$caktion = 0;
if (array_key_exists ($info,$i->properties ))
{
if ($categorie == 'blinds')
{
$var_type=1;
$var_pro="~Intensity.100";
$ziel = '$i->properties->value';
$caktion = "Ja";
$zielaktion = "$shutterscript";
}
if ($categorie == 'lights')
{
$var_type=0;
$var_pro="~Switch";
$ziel = '$i->properties->value';
$caktion = "Ja";
$zielaktion = $boleanscript;
}
if ($categorie == 'remotes')
{
$var_type=1;$var_pro="";
$ziel = '$i->properties->deviceControlType';
}
if ($categorie == 'climate')
{
If ($type == 'setPoint')
{
$var_type=2;
$var_pro="~Temperature.Room";
$ziel = '$i->properties->value';
$caktion = "Ja";
$zielaktion = $Setpointscript;
}
else
{
$var_type=2;
$var_pro="~Temperature.Room";
$ziel = '$i->properties->value';
}
}
if ($categorie == 'safety')
{
$var_type=0;
$var_pro="";
$ziel = '$i->properties->value';
}
if ($categorie == 'security')
{
$var_type=0;
$var_pro="";
$ziel = '$i->properties->value';
}
if ($categorie == 'ambience')
{
$var_type=2;
$var_pro="~Illumination.F";
$ziel = '$i->properties->value';
}
if ($categorie == 'other')
{
If ($type == 'accelerometer')
{
$var_type=3;
$var_pro="";
$ziel = '$i->properties->value';
}
}
$vab_B = ips_CreateVariable($var_type);
IPS_SetVariableCustomProfile($vab_B,$var_pro);
IPS_SetName($vab_B, $type);
IPS_SetInfo($vab_B,$i->id);
IPS_SetPosition($vab_B,$i->id);
If ($caktion == "Ja")
{
IPS_SetVariableCustomAction($vab_B,$zielaktion);
}
IPS_SetParent($vab_B, $Dummy);
$content.="case'";
$content.=$i->id;
$content.="':
setvalue (";//':
$content.=$vab_B;
$content.=",";
$content.=$ziel;
$content.=");";
$ziel = '$i->properties->batteryLevel';
if (array_key_exists ("batteryLevel",$i->properties ))
{
$VariablenID = @IPS_GetVariableIDByName("batteryLevel", $Dummy);
if ($VariablenID == false)
{
$vab_c = ips_CreateVariable(1);
IPS_SetVariableCustomProfile($vab_c,"~Battery.100");
IPS_SetParent($vab_c, $Dummy);
IPS_SetName($vab_c, "batteryLevel");
IPS_SetInfo($vab_c,$i->id);
IPS_SetPosition($vab_c,$i->id);
$content.="
setvalue (";//':
$content.=$vab_c;
$content.=",";
$content.='$i->properties->batteryLevel';
$content.=");
break;
";
}
}
else
{
$content.="
break;
";
}
}
IPS_Sleep (1);
}
}
$content.="}}";
$cat_skripte=IPS_CreateCategory();
IPS_SetParent($cat_skripte,$cat);
IPS_SetName ($cat_skripte,"Skripte");
IPS_SetPosition($cat_skripte,99999);
IPS_SetScriptContent($ScriptID, $content);
IPS_SetParent($ScriptID, $cat_skripte);
IPS_SetPosition($ScriptID,1);
IPS_RunScript ($ScriptID);
IPS_SetScriptTimer($ScriptID,12);
IPS_SetParent($boleanscript, $cat_skripte);
IPS_SetParent($Setpointscript, $cat_skripte);
IPS_SetParent($shutterscript, $cat_skripte);