Je profite de l'intégration des scripts sur notre box préférée pour vous faire part du mien.
Je l'ai modifié hier pour qu'il tourne sur la eedomus.
Attention, avant de voir le code, je préviens tout le monde: il s'agit d'une bidouille consistant à se connecter sur l'interface web de l'alarme (protexiom 600 pour ma part) afin de se connecter dessus. Il n'existe, a ma connaissance, aucune autre solution pour s'identifier sur l'alarme.
J'espère qu'un jour, Somfy ouvrira un peu plus ses périphériques.
Quoi qu'il en soit, le script va se faire passer pour un humain et se connecter sur l'IHM en rentrant le mot de passe utilisateur.
Vous aurez besoin de modifier dans le script les codes du carton Somfy que vous avez imprimé.
Pour exécuter le script, vous devrez indiquez l'ip de l'alarme (je ne sais pas si ça marche en https), ainsi que votre code secret utilisateur:
- Code : Tout sélectionner
http://ip_eedomus/script/?exec=alarme_somfy.php&ip_alarme=xxx.xxx.xxx.xxx&password=xxxx
Le script sortira un fichier XML contenant l'état de l'alarme. C'est un copier/coller de ce que l'alarme donne comme indication.
Les chemins xpath:
/response/defaut1 -> état des communications de l'alarme
/response/defaut0 -> état des piles
/response/defaut4 -> état général de l'alarme
/response/defaut2 -> portes ouvertes ou non
/response/defaut3 -> intrusions
/response/zone0 -> zone a activée
/response/zone1 -> zone b activée
/response/zone2 -> zone c activée
Le code du script:
- Code : Tout sélectionner
<?
$ip_alarme = getArg('ip_alarme');
$password = getArg('password');
$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' => ''
);
if (time() + 60 > loadVariable('last_alarm_access')) { // every 60 seconds
$http_result = httpQuery("http://{$ip_alarme}/");
$login_code = $code[substr($http_result, strpos($http_result, "Code d'authentification") + 27, 2)];
httpQuery("http://{$ip_alarme}/m_login.htm", 'POST', "login=u&password={$password}&key={$login_code}&action=Connexion&img.x=51&img.y=14");
$status = httpQuery("http://{$ip_alarme}/status.xml");
httpQuery("http://{$ip_alarme}/m_logout.htm");
saveVariable('last_alarm_access', time());
saveVariable('last_status', $output);
} else {
$status = loadVariable('last_status');
}
sdk_header('text/xml');
echo $status;
?>
N'oubliez pas de rentrer tout les codes du carton !
Le script vérifira tout changement sur l'alarme toutes les minutes. Il stock dans une variable tampon la sortie durant ce laps de temps.
N'hésitez pas à me dire si quelque chose ne marche pas. Pour ma part, je ne manquerais pas de vous prévenir si je change quelque chose.
Encore une fois, je m'excuse pour la bidouille, mais je n'ai pas trouvé d'autres solutions pour que la box connaisse l'état de l'alarme.
Stéphan