Script alarme Somfy Protexiom 600

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: Script alarme Somfy Protexiom 600

Message par Seb13 »

Voilà ce que cela me donne :

Code : Tout sélectionner

pi@raspberrypi:~/domoticz/scripts/shell $ ./SomfyProtexiom.sh -v
viewonly=1 allon=0 alloff=0 zonea=0 zoneb=0 zonec=0
login=x&password=xxxx&key=xxxx&action=Connexion&img.x=51&img.y=14
Zone A Error
Zone B Error
Zone C Error
mvmlt
Messages : 25
Inscription : 28 mai 2016, 12:45

Re: Script alarme Somfy Protexiom 600

Message par mvmlt »

bonjour,
je remonte le sujet. Dans l'espoir d'une solution ...
Seb13
Messages : 273
Inscription : 07 janv. 2016, 23:46

Re: Script alarme Somfy Protexiom 600

Message par Seb13 »

mvmlt a écrit :bonjour,
je remonte le sujet. Dans l'espoir d'une solution ...
Je dois me mettre dessus, mais je n'ai pas eu le temps pour l'instant, je pense que je vais pouvoir le faire en Août car en CP :lol:
Entre 2 têtes dans la piscine je devrais pouvoir le faire.
mvmlt
Messages : 25
Inscription : 28 mai 2016, 12:45

Re: Script alarme Somfy Protexiom 600

Message par mvmlt »

Bonjour,
ah oui! Très bonne nouvelle ca !
Merci d'avance !
fdp1nm
Messages : 8
Inscription : 27 juin 2016, 23:02

Re: Script alarme Somfy Protexiom 600

Message par fdp1nm »

Je tombe par hasard sur ce poste suite à une recherche google et souhaite apporter ma contribution.
Je suis le développeur du plugin J***** cité ci dessus.

D'abord, pêtite mise au point:
deennoo a écrit : Le recrutement pour les autres soft peuvent ce faire en mp stp ?

Quand je lis les problèmes qu'ils ont avec rflink (du a manque de simplicité de l'application) je pourrais aussi leurs répondre de venir chez Domoticz ou tout fonctionne nickel, mais je ne le fais pas.
Ben dit donc... Curieuse vision du partage opensource...
deennoo a écrit : En lisant ceci :

https://github.com/jeedom/plugin-protex ... x.asciidoc

Il n'y a aucune vrai intégration, sauf de transformer une page web en une interface Jeedom.
Qu'est ce qui te permet d'affirmer ça?
Ce plugin apporte au contraire une intégration totale et parfaite. Avec remontée en live de toutes les infos disponibles dans l'interface Somfy.
L'intégration est sous la forme d'un hack, parceque Somfy n'implémente pas d'API permettant de le faire autrement.
Il permet également d'toutes les commandes disponibles dans l'interface Somfy, et de récupérer tous les retours d'états disponibles également dans cette interface.
Toutes les actions comme la remontée d'état sont utilisables depuis des scénarios. Il y a un widget disponible dans le dashboard, y compris version mobile.
Quelques dizaines d'utilisateurs l'utilisent depuis fin 2014 avec satisfaction.
Je suis curieux de savoir ce qu'il manque, selon toi, pour parvenir à une "vrai intégration"
deennoo a écrit : J'espère que le plugin est gratuit...
Il est non seulement gratuit mais open source. Tu as d'ailleurs toi-même mis un lien vers le repo github correspondant...

Si tu avais pris la peine de lire le code source, tu aurais vu qu'il intègre une classe protexiom séparée. Celle ci a volontairement été séparée pour être réutilisable dans d'autres système domotique que Jeedom, et pour être facilement traduite dans d'autre langages...
deennoo a écrit :Raslittel a donner une très bonne source
Celà interdit-il d'en donner d'autres?
deennoo a écrit : , elle demande juste a être adapter a domoticz (ce qui a été fait par le concurrent français pour une solution d'alarme francaise connu uniquement en France), pour une intégration.
Le script de touteladomotique a effectivement servit de base pour le développement de mon plugin. J'ai d'ailleurs posté sur le forum en question pour remercier l'auteur original, et poster le plugin Vera que j'avais écrit à ce sujet avant de passer sous Jeedom. Mon frère a porté ce code pour en faire l'unique plugin fibaro pour cette même alarme. Code qu'il a largement partagé. J'ai enfin écrit le plugin Jeedom, que j'ai une nouvelle fois partagé.
N'est-ce pas là l'esprit de l'opensource? Quel est le problème exactement?

Après, si tu vois Jeedom comme un "concurrent", c'est ton problème...
Enfin, que Somfy ne soit connu qu'en France est bien le dernier de mes soucis. C'est le produit que j'utilise, j'en suis content, j'ai fait un dev pour l'intégrer à ma domotique, et je le partage. Si d'autres s'en servent, tant mieux pour eux. Si je suis le seul, ça ma va aussi.
deennoo a écrit : Après soit la démarche est consommateur/passif soit elle est consommateur/participatif.
Effectivement. Il y a ceux qui font du bruit, et ceux qui font tout court...
deennoo a écrit : Les deux ce respectent
Merci de respecter également les contributions de ceux qui essaient de faire avancer le shmilblick


Sinon, pour les autres:
Je ne connais rien a Domoticz, et n'ai pas l'intention de développer un nouveau plugin.
Toutefois, je partage avec plaisir mon code source et suis OK pour donner un petit coup de pouce à ceux qui veulent essayer. J'ai passé pas mal de temps sur le sujet, et si ça peut aider, c'est avec plaisir.

@Seb13, si tu veux essayer avec la version PHP, qui est assez complète, je te pousse quelques explications ci dessous.
En cas de question, manifestes toi. Je t'aiderai autant que possible, mais j'avoue n'avoir que très peu de temps à accorder à ce sujet. Donc il faudra être patient...

Enfin, je précise que le Repo a été déplacé, et que le lien posté ci dessus par @deennoo ne fonctionne plus.
Le lien est maintenant le suivant:
https://github.com/fdp1nm/plugin-protexiom

C'est toujours gratuit, et en plus, il y a plus J***** dans le nom :-)
Elle est pas belle la vie?
fdp1nm
Messages : 8
Inscription : 27 juin 2016, 23:02

Re: Script alarme Somfy Protexiom 600

Message par fdp1nm »

En résumé:
Le code source du plugin complet est disponible sous Github:
https://github.com/fdp1nm/plugin-protexiom

La classe qui implémente l'API (non officielle...) a été prévue pour pouvoir être réutilisée seule dans n'importe quel autre dev PHP. Donc tout ce dont vous avez besoin se trouve ici:
https://github.com/fdp1nm/plugin-protex ... pProtexiom
Je n'ai pas généré la Documentation, mais le code est "self documented" au format phpdoc, donc ça doit être facilement réutilisable.

Enfin, un petit exemple vaut encore mieux qu'un long discours, elle s'utilise de la manière suivante:

Code : Tout sélectionner

<?php

require_once './phpProtexiom/phpProtexiom.class.php';

$somfyHost="192.168.1.254";
$userPw="1234";
$authCard=array(
	'A1' => '0000', 'A2' => '0000', 'A3' => '0000', 'A4' => '0000', 'A5' => '0000',
	'B1' => '0000', 'B2' => '0000', 'B3' => '0000', 'B4' => '0000', 'B5' => '0000',
	'C1' => '0000', 'C2' => '0000', 'C3' => '0000', 'C4' => '0000', 'C5' => '0000',
	'D1' => '0000', 'D2' => '0000', 'D3' => '0000', 'D4' => '0000', 'D5' => '0000',
	'E1' => '0000', 'E2' => '0000', 'E3' => '0000', 'E4' => '0000', 'E5' => '0000',
	'F1' => '0000', 'F2' => '0000', 'F3' => '0000', 'F4' => '0000', 'F5' => '0000'
);

echo("Starting test RUN:\r\n");
echo("==================\r\n");
//===========================

$myError="";
$mySP=new phpProtexiom($somfyHost, 0);
$mySP->userPwd=$userPw;
$mySP->authCard=$authCard;
if($myError=$mySP->detectHwVersion()){
 	echo "An error occured while trying to get the HW version\r\n";
 	echo $myError."\r\n";
 }

if($myError=$mySP->doLogin()){
	echo "An error occured during logon\r\n";
	echo $myError."\r\n";
}else{
	echo "Login successfull\r\n";
	if($myError=$mySP->doAction("ALARME_OFF")){
		echo $myerror;
	}else{
		echo "\r\n Alarme Off OK\r\n";
	}
	echo $mySP->pullStatus();
 	if($myError=$mySP->doLogout()){
		echo "An error occured during logout\r\n";
		echo $myError."\r\n";
	}else{
		echo "Logout successfull\r\n";
	}
}
?>
Je précise pour finir que bien que la classe s'appelle protexiom, elle a été testée avec succès sur des modèles de la gamme protexial.
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Script alarme Somfy Protexiom 600

Message par deennoo »

Merci pour tes explications
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
fdp1nm
Messages : 8
Inscription : 27 juin 2016, 23:02

Re: Script alarme Somfy Protexiom 600

Message par fdp1nm »

Avec plaisir.

@seb13 j'ai oublié de préciser:
Il y a différentes versions dans l'interface web de somfy. La forme des requêtes ainsi que la reconnaissance du code tournant peut changer entre certaines version. Le script que tu utilises n'en gère qu'une seule. Si tu n'a pas celle ci, ça peut expliquer qu'il ne marche pas chez toi.
Au fil du temps, j'en ai rencontrer 4. Elles sont toutes gérée par la classe PHP.
La méthode detectHwVersion de la classe permet de détecter automatiquement ma version et de paramétrer l'instance en fonction.

L'auto détection systématique est intéressante au début, mais ce procès prends plusieurs secondes. Il est possible de faire une auto-détermination la première fois, puis de récupérer la valeur, et de la stocker quelque part en cache pour la fixee manuellement ensuite.

Je pense que somfy en est resté la, et n'a pas fait d'autres variantes. Ceci dit, la manière dont est implémenté le parametrage des versions permettrait d'ajouter très facilement des variantes, dans l'hypothèse peu probable où il en surviendrait.
S1eepy
Messages : 21
Inscription : 03 juil. 2016, 13:24

Re: Script alarme Somfy Protexiom 600

Message par S1eepy »

merci beaucoup @fdp1nm, ta classe marche très bien. J'arrive à me connecter à mon alarme, et la fonction de désactivation dans ton exemple marche bien.

J'ai 2 questions:
- lorsque le script se connecte, la centrale émet un BIP. Je pense qu'il est possible de le désactiver, car lorsque j'utilise l'appli android, il n'y a pas de bip. Est-ce que tu sais comment faire?
- je ne suis pas expert, mais je me demande comment afficher le statut des éléments. Je vois la fonction "echo $mySP->pullStatus();" dans ton exemple de code, celle-ci s'execute, mais ne renvoie rien. Dans la classe, j'ai essayé d'activer certains "print", mais pas de changement. Une idée? Exemple, comment afficher le status de l'élément "239195" (détecteur PIR)
- dernière question: le but du script est de récupérer le status des éléments de façon récurrente. Est-ce que tu peux expliquer comment c'est géré dans Jeedom? Il faut j'imagine faire un "pull" toutes les minutes? voir plus souvent? Le but pour moi est d'avoir un statut à jour des détecteurs de présence

Merci bcp.
fdp2
Messages : 2
Inscription : 28 juin 2016, 10:32

Re: Script alarme Somfy Protexiom 600

Message par fdp2 »

Hello @S1eepy,

@fdp1nm confirmera ou completera mes réponses, mais voici les éléments que je peux apporter :
S1eepy a écrit : - lorsque le script se connecte, la centrale émet un BIP. Je pense qu'il est possible de le désactiver, car lorsque j'utilise l'appli android, il n'y a pas de bip. Est-ce que tu sais comment faire?
Je n'ai pas ce BIP chez moi, et je n'ai encore entendu aucun autre utilisateur en parler. Je ne vois pas ce que la classe pourrait faire qui soit différent de l'appli. Vérifie à tout hazard dans les logs de ton alarme que ce BIP ne vient pas d'une commande (par exemple alarme OFF) qui serait envoyée par ton script par erreur. Sinon je ne vois pas. @Fdp1nm ?
S1eepy a écrit : - je ne suis pas expert, mais je me demande comment afficher le statut des éléments. Je vois la fonction "echo $mySP->pullStatus();" dans ton exemple de code, celle-ci s'execute, mais ne renvoie rien. Dans la classe, j'ai essayé d'activer certains "print", mais pas de changement. Une idée? Exemple, comment afficher le status de l'élément "239195" (détecteur PIR)
L'exemple de @fdp1nm est en fait incomplet.
La methode pullStatus permet d'interroger l'alarme, et de stocker les infos de status dans un attribut privé de la classe. Tu dois ensuite appeler la methode getStatus() pour récupérer ces valeurs. Cette methode te retourne un tableau avec toutes les infos de status ed l'alarme. Tu ne retrouve ici QUE les infos globales, et pas les éléments. Ces infos varient selon la version detectée de ton alarme.
Tu as au minimum l'état des zones A, B, C, ainsi que les status porte ouvert, etat des liaisons, defaut batterie, et la présence d'une alarme (alarme intrusion, ou domestique si fumée ou inondation).

apres avoir executer le pull, un code du genre ci-dessous devrait te permettre de retrouver les infos :

Code : Tout sélectionner

$status=$mySP->getStatus();
foreach($status as $key => $val){
  echo ($key." : ".$val);
}
La liste exaustive des infos de status que l'onpeut obtenir (selon le type d'alarme) est :
ZONE_A : ON/OFF
ZONE_B : ON/OFF
ZONE_C : ON/OFF
BATTERY : Battery default OK/NOK
LINK : Communication default OK/NOK
DOOR : Open door or window OK/NOK
ALARM : Alarm triggered OK/NOK_INT/NOK_DOM
TAMPERED : Opened device box OK/NOK
GSM_LINK : "GSM connecté au réseau" or ?
GSM_SIGNAL : Reception level (Interger, 1, 2, 3, 4)
GSM_OPERATOR : Orange, ...
CAMERA : Web cam connected (disabled or ?)

Pour retrouver l'état de touts tes éléments (capteurs) tu retrouve le même principe avec les methodes pullElements() et getElements()

Pour chaque élément, tu accède à :
Name : Nom de l'élément
Id : UID de l'élément
Battery : Etat des piles (itembattok | itembattnok | itemhidden)
Tampered :Etat de l'autopotection (itemboxok | itemboxnok | itemhidden)
Alarm : Alarme déclenchée (itemhouseok | itemhousedomestic | itemhouseintrusion)
Link : Etat liaison radio (itemcomok | itemcomnok | itemhidden)
Door : Porte ouverte / fermée (itemdoorok | itemdoornok | itemhidden)
Zone : Zone de l'élément (SYS | AT | A | B | C | TEC | AT (f)| A (f) | B (f) | C (f))
S1eepy a écrit : - dernière question: le but du script est de récupérer le status des éléments de façon récurrente. Est-ce que tu peux expliquer comment c'est géré dans Jeedom? Il faut j'imagine faire un "pull" toutes les minutes? voir plus souvent? Le but pour moi est d'avoir un statut à jour des détecteurs de présence
En effet, dans les systèmes ou cette solution a été intégrée, nous faisons un pull / get à interval de temps régulier. C'est paramétrable par l'utilisateur, mais personellement, je le fais toutes les 10 secondes.

Dans notre solution, nous ne fermont pas la session sur l'alarme. On augmente le timeout au maximum (99 minutes) sur l'alarme pour maintenir une session ouverte, et on fait ensuite des pull sans avoir besoin de se reconnecté. On fait ça parce que la connexion à l'alarme est tres longue. C'est bien plus réactif si la session reste ouverte.

La contrainte de ce système est que l'alarme ne permet d'ouvrir qu'une session à la fois. La session est donc monopolisée par ta solution domotique qui devient le point de controle. Tu ne peux plus utiliser l'application mobile. De toute façon le polling échourais si ta domotique tente de se connecter alors que tu as une session en cours dans l'application mobile.

Il faut égallement savoir que ce polling régulier ne permet pas la mise en veille de l'alarme et augment considérablement la conso des piles sur le transmetteur

Enfin, tu obtiendra l'état de tes capteurs de porte (ouvert /fermé) même si l'alarme n'est pas activée, ce qu ipermet de l'es utiliser dans ta solution domotique.
En revanche les autres capteur (mouvement) ne remontent leur état qu'en cas de déclenchement de l'alarme. (la limitte viens de l'alarme, pas de la classe. Tu ne peut rien obtenir par cette classe qui ne soit disponible via l'interface web de l'alarme).
Répondre