Récupération de l'état de votre alarme Somfy

Discussion et échanges de scripts pour la box eedomus

Récupération de l'état de votre alarme Somfy

Messagepar slider » 09 Avr 2014 09:40

Bonjour tout le monde.

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
slider
 
Messages : 48
Inscription : 10 Jan 2012

Re: Récupération de l'état de votre alarme Somfy

Messagepar DomotiFred » 09 Avr 2014 13:20

Bonjour,

Personne n'a fait la même "bidouille" pour une alarme EPS ?
3 Eedomus+ 96 Zwave 6 EnOcean 3 Xee 14 cam IP 1 Connexoon 8 SONOS 8 Google Home 7 ChromeCast 1 Synology 1513+ 1 Smartcoffee 1 robot tondeuse 1 Lametric Time 1 Nokia Cardio SARAH Infra Ubiquiti NUKI V1 et V2 - Membre de la Fédération Francaise de Domotique
DomotiFred
 
Messages : 1239
Inscription : 15 Mars 2013
Localisation : 78

Re: Récupération de l'état de votre alarme Somfy

Messagepar slider » 23 Juin 2014 14:05

Bonjour,

Voilà une mise à jour pour le script des alarmes somfy.

Grosse mise à jour ! Nous pouvons enfin gérer la mise en route et l'arrêt de l'alarme ! Attention, cette mise à jour nécessite un firmware qui sera bientôt disponible, et qui permettra de gérer les cookies de session dans les appels http des scripts!

Grace à cela, le script permet aussi de corriger le logout. Il était impossible de se déconnecter avant. Il en résultait que le compte utilisé par le script était tout le temps connecté, et il était impossible de s'en servir pour se connecter à l'interface de l'alarme. Maintenant, la session est correctement fermée !

Bref, je suis assez contenant de cette version.

Merci eedomus d'avoir pris en compte ma demande !!

En plus de l'action "status", vous pouvez maintenant demander "alarm_on" et "alarm_off"
Et n'oubliez pas, vous aurez besoin de modifier dans le script les codes du carton Somfy que vous avez imprimé.

Le script:

Code : Tout sélectionner
<?
$GLOBALS['ip_alarme'] = getArg('ip_alarme');
$GLOBALS['password'] = getArg('password');
$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() {
  $http_result = httpQuery("http://" . $GLOBALS['ip_alarme'] . "/");
  $login_code = $GLOBALS['code'][substr($http_result, strpos($http_result, "Code d'authentification") + 27, 2)];

  httpQuery("http://" . $GLOBALS['ip_alarme'] . "/m_login.htm", 'POST', "login=u&password=" . $GLOBALS['password'] . "&key={$login_code}&action=Connexion&img.x=51&img.y=14", NULL, NULL, true);
}

function sdk_somfy_logout() {
  httpQuery("http://" . $GLOBALS['ip_alarme'] . "/m_logout.htm", "GET", NULL, NULL, NULL, true);
}

switch($action) {
  case 'status':
    if (time() > loadVariable('last_alarm_access') + 60) { // every 60 seconds
       sdk_somfy_login();

       $status = httpQuery("http://" . $GLOBALS['ip_alarme'] . "/status.xml", "GET", NULL, NULL, NULL, true);
      $status = str_replace("</response>", "<instance>new</instance>" . "</response>", $status);
       sdk_somfy_logout();

       saveVariable('last_alarm_access', time());
       saveVariable('last_status', $status);
    } else {
       $status = str_replace("new", "old", loadVariable('last_status'));
    }

    sdk_header('text/xml');
    echo $status;
    break;
  case 'alarm_off':
    sdk_somfy_login();
    httpQuery("http://" . $GLOBALS['ip_alarme'] . "/mu_pilotage.htm", 'POST', "hidden=hidden&zone=Arr%EAt+A+B+C&img.x=8&img.y=29", NULL, NULL, true);
    sdk_somfy_logout();
    break;
  case 'alarm_on':
    sdk_somfy_login();
    httpQuery("http://" . $GLOBALS['ip_alarme'] . "/mu_pilotage.htm", 'POST', "hidden=hidden&zone=Marche+A+B+C&img.x=8&img.y=29", NULL, NULL, true);
    sdk_somfy_logout();
    break;
}
?>
slider
 
Messages : 48
Inscription : 10 Jan 2012

Re: Récupération de l'état de votre alarme Somfy

Messagepar DomotiFred » 23 Juin 2014 14:16

Bonjour,

Je dis Bravo.
Reste plus qu'à trouver quelqu'un qui sache faire la même chose avec l'alarme EPS...
3 Eedomus+ 96 Zwave 6 EnOcean 3 Xee 14 cam IP 1 Connexoon 8 SONOS 8 Google Home 7 ChromeCast 1 Synology 1513+ 1 Smartcoffee 1 robot tondeuse 1 Lametric Time 1 Nokia Cardio SARAH Infra Ubiquiti NUKI V1 et V2 - Membre de la Fédération Francaise de Domotique
DomotiFred
 
Messages : 1239
Inscription : 15 Mars 2013
Localisation : 78

Re: Récupération de l'état de votre alarme Somfy

Messagepar bubu » 05 Sep 2014 14:46

Top l'idée du script. Merci beaucoup.

Perso je n'y connais rien en programmation php.
J'ai donc fait un copié-collé de ton script en modifiant les valeurs A1->F5. sauvegardé en alarme_somfy.php
Et lorsque je l'importe dans l'eedomus, j'ai plusieurs lignes d'erreurs.
Aurais-tu la solution stp?

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in alarme_somfy.php on line 17

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in alarme_somfy.php on line 18

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in alarme_somfy.php on line 19

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in alarme_somfy.php on line 20

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in alarme_somfy.php on line 21

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in alarme_somfy.php on line 22

Parse error: syntax error, unexpected T_STRING, expecting ')' in alarme_somfy.php on line 22
bubu
 
Messages : 109
Inscription : 05 Sep 2014

Re: Récupération de l'état de votre alarme Somfy

Messagepar Tinto » 05 Sep 2014 15:18

Salut,

Tu as un antislash \ interdit dans les lignes 17 a 22

et une parenthese inattendue ligne 22 ( en trop certainement ) ...
Tinto
 
Messages : 534
Inscription : 10 Jan 2014

Re: Récupération de l'état de votre alarme Somfy

Messagepar bubu » 05 Sep 2014 15:23

Malgré mon niveau zéro en programmation c'est aussi ce que j'avais compris.
Mais je n'ai pas ces antislash ni paranthese manquante, ET j'ai juste fais un copié collé du code php qui est censé fonctionner...

des idées?
bubu
 
Messages : 109
Inscription : 05 Sep 2014

Re: Récupération de l'état de votre alarme Somfy

Messagepar Tinto » 05 Sep 2014 15:26

publies le code ... on est pas devin :)
Tinto
 
Messages : 534
Inscription : 10 Jan 2014

Re: Récupération de l'état de votre alarme Somfy

Messagepar bubu » 05 Sep 2014 15:29

bah c'est le code publié par slider du sujet
bubu
 
Messages : 109
Inscription : 05 Sep 2014

Re: Récupération de l'état de votre alarme Somfy

Messagepar Tinto » 05 Sep 2014 17:27

Ben apparemment le sien fonctionne et pas le tiens ...

quelle ligne as-tu modifié ?

Remets le tiens ...
Tinto
 
Messages : 534
Inscription : 10 Jan 2014

Re: Récupération de l'état de votre alarme Somfy

Messagepar bubu » 05 Sep 2014 17:39

J'ai fait la modif sur textedit puis sauvegardé en php. J'ai bon? :?:
bubu
 
Messages : 109
Inscription : 05 Sep 2014

Re: Récupération de l'état de votre alarme Somfy

Messagepar slider » 06 Sep 2014 06:50

Bonjour,

Désolé de ne répondre que maintenant, mais voyant que personne ne semblait interessé, j'ai un peu déserté cette partie du forum.

Je te suggère de poster sur le code modifié. Je pourrais plus facilement t'aider !
slider
 
Messages : 48
Inscription : 10 Jan 2012

Re: Récupération de l'état de votre alarme Somfy

Messagepar ArnaudP » 06 Sep 2014 07:37

Bonjour,
je n'ai pas encore d'eedomus par contre une Zibase...
Mais je me pose de plus en plus de question si je ne vais pas rajouter une eedomus a ma domotique ..

Pour rentrer dans le vif du sujet comment faite vous via l'Eedomus pour allumer ou eteindre l'alarme ?
Si j'ai bien compris le script permet de se connecter à l'alarme (en simulant une présence humaine mais en tache automatique via script) et en ressort un fichier log ?
Par contre comment la eedomus gère a ce moment l'extinction/allumage de l'alarme ?

Merci pour ces précisions ..

Arnaud P
ArnaudP
 
Messages : 51
Inscription : 06 Sep 2014

Re: Récupération de l'état de votre alarme Somfy

Messagepar bubu » 06 Sep 2014 08:30

Tout d'abord Merci Slider,
Pour info je suis passé de la Zibase à la eedomus pour pouvoir faire tourner ton scipt ( et ceux de Netatmo, freebox...)
J'ai essayé avec ton code initial et ton code modifié en changeant bien sur à chaque fois les codes de la carte. Et j'ai les mêmes erreurs.
Je pense que je me trompe dans la manière de sauvegarder le code en php puisque ca marche chez toi.
Voilà ce que j'ai fait:
-je fais un copié collé de ton script dans textedit sur mac
-je rentre tous les chiffres de ma carte entre les ' '
-je sauvegarde en .rtf (textedit ne permet pas le .php)
-je change le nom en .php
-j'importe dans la eedomus qui me donne le message d'erreur des l'importation (je suppose qu'il fait sa verif à ce moment là)

Est ce que je dois utiliser un logiciel special pour editer?

Merci

PS: je ne pense pas que ca serve à grand chose de vous refaire un copié collé de mon textedit...
bubu
 
Messages : 109
Inscription : 05 Sep 2014

Re: Récupération de l'état de votre alarme Somfy

Messagepar Orel' » 06 Sep 2014 10:17

Bonjour,

pour éviter tout problème d'enregistrement du fichier php, utilises un logiciel d'edition de code, perso j'utilise smultron (sur mac), c'est gratuit et efficace :)
Eedomus +
Orel'
 
Messages : 214
Inscription : 01 Mars 2014
Localisation : Val d'Oise - France

Re: Récupération de l'état de votre alarme Somfy

Messagepar bubu » 06 Sep 2014 11:34

ok j'essai ca asap. Merci
bubu
 
Messages : 109
Inscription : 05 Sep 2014

Re: Récupération de l'état de votre alarme Somfy

Messagepar ArnaudP » 07 Sep 2014 04:14

Bonjour,
Possible d’héberger le script sur un Syno et l'utiliser avec une autre box ?
Je ne comprend pas trop comment l'eedomus récupère le status de l'alarme et est capable de l'allumer ou l’éteindre ?
Possible d'avoir un peu de détail ?
PAr avance Merci beaucoup
ArnaudP
 
Messages : 51
Inscription : 06 Sep 2014

Re: Récupération de l'état de votre alarme Somfy

Messagepar slider » 07 Sep 2014 07:57

Je pense que ca ne marche pas, car tu enregistre au format rtf.

Le format rtf un peu comme un format doc si tu préfères. Tu n'enregistres pas du texte brut dans ton fichier, mais pleins de balises supplémentaires pour indiquer en plus le format de ton texte (gras, italique, etc...).

Je te conseille de faire exactement ce que tu faisais, mais en utilisant un autre éditeur de texte (je te conseille par exemple atom, qui est gratuit sur mac: https://atom.io/).

Tiens moi au courant de ce qui se passe après avoir utilisé ce logiciel.
slider
 
Messages : 48
Inscription : 10 Jan 2012

Re: Récupération de l'état de votre alarme Somfy

Messagepar slider » 07 Sep 2014 08:00

ArnaudP a écrit:Bonjour,
Possible d’héberger le script sur un Syno et l'utiliser avec une autre box ?
Je ne comprend pas trop comment l'eedomus récupère le status de l'alarme et est capable de l'allumer ou l’éteindre ?
Possible d'avoir un peu de détail ?
PAr avance Merci beaucoup


Le script se connecte sur l'interface web de l'alarme, et rentre les mots de passe. Ensuite il fonctionne de 2 manières différentes:
- pour récupérer l'état, il regarde le fichier status.xml, qui est un fichier hébergé directement sur l'alarme. On ne peux y accéder qu'en y étant connecté
- pour allumer, éteindre, etc... je ne fais qu'appeler une url sur l'alarme avec différents paramètres. Ces urls correspondent à celle envoyer quand tu cliques, par exemple, sur le bouton "on" de l'alarme via son interface web. C'est une simple URL "POST" avec un cookie.

J'espère que cela est plus clair maintenant.
slider
 
Messages : 48
Inscription : 10 Jan 2012

Re: Récupération de l'état de votre alarme Somfy

Messagepar ArnaudP » 08 Sep 2014 09:07

Bonjour,

MErci deja pour le retour :)
Par contre n’étant de loin pas un expert en PHP serait il possible de donner un coup de pouce concernant ma demande, je suis certain que plusieurs personnes sont dans le même cas que moi.

Je m'explique
. Utiliser un fichier PHP que j'appellerai SOMFY_ON.PHP dans lequel se trouve une partie de votre code pour se connecter a l'alarme et y rajouter la commande d'allumage de l'alarme

Utiliser un autre fichier PHP qui s'appelerai SOMFY_OFF.PHP dans lequel se trouve une partie de votre code pour se connecter a l'alarme et y rajouter la commande d'extinction de l'alarme.


Comme beaucoup de passionné de la domotique j''utilise un Synology sur lequel j'heberge des DATAs de sondes diverses ... le top serait d'heberger sur le syno dans le repertoire web les deux fichiers PHP et de faire un appel HTTP via n'importe quelle box domotique

--> cela serait une solution universelle :)

Je ne sais pas si cela est aussi simple que je l'imagine mais je pense que j'aurai rapidement votre feedback a ce sujet !
En tous cas par avance merci bp de votre retour
Arnaud P
ArnaudP
 
Messages : 51
Inscription : 06 Sep 2014

Suivant

Retour vers Scripts & Périphériques du store

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)