<?
$GLOBALS['ip_alarme'] = getArg('ip_alarme');
$GLOBALS['password'] = getArg('password');
$GLOBALS['force_refresh'] = getArg('force_refresh', false, false);
$GLOBALS['force_login_after_minutes'] = 15;
$action = getArg('action');
$GLOBALS['code'] = array(
'A1' => '', 'A2' => '', 'A3' => '', 'A4' => '', 'A5' => '',
'B1' => '', 'B2' => '', 'B3' => '', 'B4' => '', 'B5' => '',
'C1' => '', 'C2' => '', 'C3' => '', 'C4' => '', 'C5' => '',
'D1' => '', 'D2' => '', 'D3' => '', 'D4' => '', 'D5' => '',
'E1' => '', 'E2' => '', 'E3' => '', 'E4' => '', 'E5' => '',
'F1' => '', 'F2' => '', 'F3' => '', 'F4' => '', 'F5' => ''
);
function sdk_somfy_login($force_login = false)
{
$http_result = httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/login.htm");
if (strpos($http_result, "Session déjà ouverte") > 0)
{
if ($force_login)
{
httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/error.htm", "POST", "btn_ok=OK", NULL, NULL, true);
$http_result = httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/login.htm");
}
else
{
return false;
}
}
$login_code = $GLOBALS['code'][substr($http_result, strpos($http_result, "Code d'authentification") + 27, 2)];
httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/login.htm", 'POST', "login=u&password=" . $GLOBALS['password'] . "&key={$login_code}&btn_login=Connexion", NULL, NULL, true);
return true;
}
function sdk_somfy_logout() {
httpQuery("http://" . $GLOBALS['ip_alarme'] . "/logout.htm", "GET", NULL, NULL, NULL, true);
}
function sdk_somfy_get_status()
{
$status = httpQuery("http://" . $GLOBALS['ip_alarme'] . "/status.xml", "GET", NULL, NULL, NULL, true);
$status = str_replace("é", "é", $status);
$statutZones = 0;
if (strpos($status, "<zone0>on</zone0>") !== false)
{
$statutZones += 1;
}
if (strpos($status, "<zone1>on</zone1>") !== false)
{
$statutZones += 2;
}
if (strpos($status, "<zone2>on</zone2>") !== false)
{
$statutZones += 4;
}
$statutDefauts = 0;
if (strpos($status, "<defaut0>nok</defaut0>") !== false) // Piles
{
$statutDefauts += 1;
}
if (strpos($status, "<defaut1>nok</defaut1>") !== false) // Communication
{
$statutDefauts += 2;
}
if (strpos($status, "<defaut2>nok</defaut2>") !== false) // Portes
{
$statutDefauts += 4;
}
if (strpos($status, "<defaut3>nok_int</defaut3>") !== false) // Intrusion
{
$statutDefauts += 8;
}
if (strpos($status, "<defaut3>nok_dom/defaut3>") !== false) // Domestic Default Detection
{
$statutDefauts += 8;
}
if (strpos($status, "<defaut4>nok</defaut4>") !== false) // Boitiers
{
$statutDefauts += 16;
}
$xml_items = sdk_somfy_get_items();
if ($xml_items == null) // items retrieval has failed, we send back the previous successful status
{
saveVariable('last_alarm_access_try', time());
$status = loadVariable('last_status');
}
else
{
$status = str_replace("</response>", "<statutzones>" . $statutZones . "</statutzones><statutdefauts>" . $statutDefauts . "</statutdefauts><maj>" . date("c", time()) . "</maj>" . $xml_items . "</response>", $status);
saveVariable('last_alarm_access', time());
saveVariable('last_alarm_access_try', time());
saveVariable('last_status', $status);
}
return $status;
}
function sdk_somfy_get_items()
{
$http_result = httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/u_listelmt.htm", 'GET', NULL, NULL, NULL, true);
$array_elt_code = sdk_somfy_get_item_array($http_result, "var elt_code");
if ($array_elt_code == null)
{
return null;
}
$array_item_label = sdk_somfy_get_item_array(str_replace("Tél", "Tél", $http_result), "var item_label");
$array_item_pause = sdk_somfy_get_item_array($http_result, "var item_pause");
$array_elt_pile = sdk_somfy_get_item_array($http_result, "var elt_pile");
$array_elt_maison = sdk_somfy_get_item_array($http_result, "var elt_maison");
$array_elt_onde = sdk_somfy_get_item_array($http_result, "var elt_onde");
$array_elt_porte = sdk_somfy_get_item_array($http_result, "var elt_porte");
$array_elt_zone = sdk_somfy_get_item_array($http_result, "var elt_zone");
$i = 0;
$xml_items = "<items>";
foreach ($array_elt_code as $elt_code)
{
$xml_items = $xml_items . "<item code = \"" . $elt_code . "\">";
$xml_items = $xml_items . "<label>" . $array_item_label[$i] . "</label>";
$xml_items = $xml_items . "<pause>" . $array_item_pause[$i] . "</pause>";
$xml_items = $xml_items . "<pile>" . $array_elt_pile[$i] . "</pile>";
$xml_items = $xml_items . "<maison>" . $array_elt_maison[$i] . "</maison>";
$xml_items = $xml_items . "<onde>" . $array_elt_onde[$i] . "</onde>";
$xml_items = $xml_items . "<porte>" . $array_elt_porte[$i] . "</porte>";
$xml_items = $xml_items . "<zone>" . $array_elt_zone[$i] . "</zone>";
$xml_items = $xml_items . "</item>";
$i++;
}
if ($i < 2)
{
return null;
}
$xml_items = $xml_items . "</items>";
return $xml_items;
}
function sdk_somfy_get_item_array($str_to_search, $var_to_search, $start_char = "[", $stop_char = "]")
{
$pos_var = strpos($str_to_search, $var_to_search);
if ($pos_var === false) // string has not been found, we return NULL
{
return null;
}
$pos_var_start = strpos($str_to_search, $start_char, $pos_var);
$pos_var_end = strpos($str_to_search, $stop_char, $pos_var);
$var_value = substr($str_to_search, $pos_var_start + 1, $pos_var_end - $pos_var_start - 1);
$var_value = str_replace("\"", "", $var_value);
$var_value = str_replace(" ", "", $var_value);
$var_array = explode(",", $var_value);
return $var_array;
}
switch($action) {
case 'status':
$refresh_status = 0;
if (time() > loadVariable('last_alarm_access_try') + 60) // every 60 seconds
{
$refresh_status++;
}
if ($GLOBALS['force_refresh'])
{
$refresh_status++;
}
if ($refresh_status > 0)
{
$login_success = sdk_somfy_login($GLOBALS['force_refresh']);
if ($login_success == false)
{
if (time() > loadVariable('last_alarm_access') + 60 * $GLOBALS['force_login_after_minutes'])
{
$login_success = sdk_somfy_login(true);
}
}
if ($login_success)
{
$status = sdk_somfy_get_status();
sdk_somfy_logout();
}
else
{
saveVariable('last_alarm_access_try', time());
$status = loadVariable('last_status');
}
}
else
{
$status = loadVariable('last_status');
}
sdk_header('text/xml');
echo $status;
break;
case 'alarm_off':
$login_success = sdk_somfy_login(true);
if ($login_success)
{
httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/u_pilotage.htm", 'POST', "hidden=hidden&btn_zone_off_ABC=Arr%C3%AAt+A+B+C", NULL, NULL, true);
$status = sdk_somfy_get_status();
sdk_somfy_logout();
}
else
{
$status = loadVariable('last_status');
}
sdk_header('text/xml');
echo $status;
break;
case 'alarm_on':
$login_success = sdk_somfy_login(true);
if ($login_success)
{
httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/u_pilotage.htm", 'POST', "hidden=hidden&btn_zone_on_ABC=Marche+A+B+C", NULL, NULL, true);
$status = sdk_somfy_get_status();
sdk_somfy_logout();
}
else
{
$status = loadVariable('last_status');
}
sdk_header('text/xml');
echo $status;
break;
case 'alarm_on_zone_a':
$login_success = sdk_somfy_login(true);
if ($login_success)
{
httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/u_pilotage.htm", 'POST', "hidden=hidden&btn_zone_on_A=Marche+A", NULL, NULL, true);
$status = sdk_somfy_get_status();
sdk_somfy_logout();
}
else
{
$status = loadVariable('last_status');
}
sdk_header('text/xml');
echo $status;
break;
case 'alarm_on_zone_b':
$login_success = sdk_somfy_login(true);
if ($login_success)
{
httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/u_pilotage.htm", 'POST', "hidden=hidden&btn_zone_on_B=Marche+B", NULL, NULL, true);
$status = sdk_somfy_get_status();
sdk_somfy_logout();
}
else
{
$status = loadVariable('last_status');
}
sdk_header('text/xml');
echo $status;
break;
case 'alarm_on_zone_c':
$login_success = sdk_somfy_login(true);
if ($login_success)
{
httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/u_pilotage.htm", 'POST', "hidden=hidden&btn_zone_on_C=Marche+C", NULL, NULL, true);
$status = sdk_somfy_get_status();
sdk_somfy_logout();
}
else
{
$status = loadVariable('last_status');
}
sdk_header('text/xml');
echo $status;
break;
case 'reset_defauts_alarmes':
$login_success = sdk_somfy_login(true);
if ($login_success)
{
httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/u_listelmt.htm", 'POST', "btn_del_alm=Alarmes", NULL, NULL, true);
$status = sdk_somfy_get_status();
sdk_somfy_logout();
}
else
{
$status = loadVariable('last_status');
}
sdk_header('text/xml');
echo $status;
break;
case 'reset_defauts_piles':
$login_success = sdk_somfy_login(true);
if ($login_success)
{
httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/u_listelmt.htm", 'POST', "btn_del_pil=Piles", NULL, NULL, true);
$status = sdk_somfy_get_status();
sdk_somfy_logout();
}
else
{
$status = loadVariable('last_status');
}
sdk_header('text/xml');
echo $status;
break;
case 'reset_defauts_comm':
$login_success = sdk_somfy_login(true);
if ($login_success)
{
httpQuery("http://" . $GLOBALS['ip_alarme'] . "/fr/u_listelmt.htm", 'POST', "btn_del_lia=Liaisons", NULL, NULL, true);
$status = sdk_somfy_get_status();
sdk_somfy_logout();
}
else
{
$status = loadVariable('last_status');
}
sdk_header('text/xml');
echo $status;
break;
break;
}
?>
stefanski a écrit:Bonjour,
J'avais eu la même réflexion en fin d'année dernière, entre Somfy et MyFox. Mais ce qui m'avait gené c'était justement le manque de sirène extérieure et de capteurs de mouvements, du coup j'avais choisi Somfy et j'ai modifié le script pour l'eedomus pour faire ce que je voulais (voir un des messages dans ce thread pour le script).
Mais en regardant maintenant, ils indiquent sur leur site que ces périphériques vont arriver à l'automne. Ca peut valoir le coup de regarder coté MyFox et de se renseigner pour en apprendre plus sur ces nouveaux périphériques.
J'avais posé une question par mail à leur support, ils répondent vite, tu peux essayer.
stefanski a écrit:Je n'ai pas tout fait, j'ai repris le script posté à l'origine dans ce thread, je l'ai juste amélioré pour prendre en compte des cas d'usage que je souhaitais.
Retour vers Scripts & Périphériques du store
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 51 invité(s)