- La téléphonie Internet libre basée sur Asterisk par Sylvain Thérien - http://www.tux89.com -

Domotique via Asterisk et X10

Vous connaissez l’histoire d’Ali Baba et les quarante voleurs [1] où Ali entend le chef des quarante voleurs prononcer la formule magique qui permet d’ouvrir une porte dans la roche : « Sésame, ouvre-toi ! » et la formule magique pour la fermer : « Sésame, ferme-toi ! ». Et bien, nous tenterons de revivre cette histoire en remplaçant Ali par Asterisk mais cette fois sans les quarante voleurs.

Asterisk ouvre toi

Dans ce projet, nous utiliserons Asterisk afin de contrôler l’ouverture et la fermeture d’une porte de garage. Pour réaliser ce projet, nous aurons besoins de quelques éléments et dispositifs. Premièrement, nous aurons besoin d’Asterisk qui servira d’interface téléphonique. Deuxièmement, nous aurons besoin d’un mécanisme d’ouverture de porte de garage automatisé.

Finalement, nous aurons besoin de deux dispositifs de communication X10 [2], soit un contrôleur d’interface téléphonique TR16A ainsi qu’un module à contacts isolés pour le contrôle de dispositifs à basse tension.

[3]

TR16A

Le TR16A est un dispositif de contrôle utilisant le protocole X10 permettant de s’interfacer à un système téléphonique. Ce contrôleur permet de mettre en marche jusqu’à 10 modules X10, soit des lumières ou des appareils, à partir d’un téléphone. Vous pouvez ainsi contrôler toute sorte d’appareils tels que votre système de chauffage ou de climatisation, les luminaires et prises électriques ou encore l’ouverture de porte via un dispositif de contrôle à basse tension.

Grâce à Asterisk, nous interfacerons ce contrôleur au plan de numérotation afin de contrôler l’ouverture et la fermeture d’une porte de garage. Ainsi, nous pourrons sans même sortir de l’automobile, appeler avec notre téléphone portable la RVI d’Asterisk et commander l’ouverture ou la fermeture de la porte.

Lorsque le contrôleur TR16A répond à un appel entrant, il émet trois tonalités de suite (3 BEEP) afin d’indiquer que l’appelant est en communication avec le contrôleur. Par la suite, il s’attend à ce que l’appelant entre un code de sécurité à trois chiffre.  Afin de confirmer que le code est valide, il émet une autre fois trois tonalités de suite. Le contrôleur s’attend maintenant à ce qu’un numéro de module X10 et une action soient entrés. Le numéro de module est un chiffre de zéro à neuf ,0 correspondant au module 10 et l’action peut-être * pour allumer ou # pour éteindre. Le contrôleur coupe la ligne téléphonique trente secondes après avoir reçu la dernière commande.

[4]

Le TR16A est également une télécommande permettant de contrôler jusqu’à 8 lumières et appareils situés sur le même circuit électrique dans votre résidence. Il permet d’allumer ou d’éteindre simultanément toutes les lumières et prises murales connectées aux modules de communication X10 par la touche d’un seul bouton.

On peut aussi programmer le TR16A afin de faire clignoter une lumière choisie dans la maison lorsque le téléphone sonne. Cela peut-être utile pour simuler une présence humaine.

Les caractéristiques du TR16A sont les suivantes :

À titre indicatif, voici un lien vers le manuel utilisateur du TR16A [5].

UM506

[6]Le module UM506 utilise des contacts isolés afin de contrôler des dispositifs à basse tension tels que ceux que l’on retrouve dans les systèmes de gicleurs, les contrôles automatisés de rideaux, les ouvres portes de garage, et les systèmes d’éclairage de cour extérieure. Il a la caractéristique de fonctionner en tant que contact de fermeture permanent ou momentané et possède un dispositif de carillon intégré. Son contact de fermeture a une fonction nominale de 5 ampères à 24 Volts DC.

Configuration X10

[7]

Nous devons effectuer quelques configurations au contrôleur TR16A ainsi qu’au module UM506. Tel qu’illustré dans le graphique ci-haut, voici les réglages à effectuer :

Une fois les configurations effectuées, raccordez le contrôleur TR16A ainsi que le module UM506 tel que représenté dans le diagramme en début d’article. Faites maintenant un test en appuyant sur les touches « 1 » et « ON » afin de faire ouvrir la porte de garage. Lorsque la portion X10 fonctionne, raccordez le câble téléphonique du TR16A dans un port RJ11 FXS de votre système Asterisk.

Asterisk

Maintenant que nous savons que la partie X10 du projet fonctionne bien, nous allons valider en appelant le numéro de poste correspondant au port FXS auquel nous avons raccordé le contrôleur TR16A, dans mon cas j’utilise le poste 111. Suivez les étapes décrites ci-dessous :

Surveillez votre porte de garage, elle devrait s’ouvrir

Raccrochez afin de terminer l’appel

Effectuez la même manœuvre afin de fermer la porte. Notez que l’action peut aussi être « * » plutôt que « # » pour la fermeture puisque le module UM506 est un contact à fermeture isolé et ne possède donc pas d’état allumé ou éteint.

Puisque le système de communication X10 et son interface téléphonique sont fonctionnels, il ne reste plus qu’à automatiser le tout en utilisant Asterisk.

Première étape, installer l’application qui contrôlera le TR16A et fera ouvrir ou fermer la porte. Éditer le fichier /etc/Asterisk/extensions_custom.conf via votre éditeur préféré ou simplement utiliser l’interface FreePBX « Outils – Édition configuration – /etc/asterisk – extensions_custon.conf ».

[8]

Insérez à la fin du fichier le code suivant et n’oubliez pas de recharger la configuration dans Asterisk  via FreePBX « Outils – Édition configuration – Re-Read Configs » ou via la ligne de commande « asterisk –rx reload » :

; custom-app-tr16-ouvrir-garage,s,1
; controle du module X10 pour ouverture de la porte de garage
[custom-app-tr16-ouvrir-garage]
exten => s,1,Playback(beep)
exten => s,n,Set(MODULE=1)
exten => s,n,Set(ACTION=*)
exten => s,n,Dial(SIP/111,40,mD(wwwwww000wwwwww${MODULE}${ACTION}wwwwww)S(20))
; 000 est le code de securite du TR16A
; D(sequence): Apres la prise de l appel, envoie la SEQUENCE DTMF au TR16A
; ‘w’ permet de produire une pause de .5 seconde
; MODULE represente le module a controler (0 a 9)
; ACTION represente l action sur le module (* = allumer, # = eteindre)
; S(N): Termine l appel N seconde après la reception de cette commande
exten => s,n,Hangup

Le code de l’application est assez simple à comprendre, il ne fait que cinq lignes.

Premièrement, à la réception de l’appel, l’application joue à l’appelant un timbre sonore (BEEP), question d’indiquer que nous sommes en communication.

exten => s,1,Playback(beep)

Deuxièmement, l’application utilise une variable nommée MODULE et y met la valeur 1.

exten => s,n,Set(MODULE=1)

Troisième étape, l’application utilise une variable nommée ACTION et y met la valeur *.

exten => s,n,Set(ACTION=*)

Quatrième étape, envoyer une séquence au contrôleur TR16A afin de prendre action sur notre porte.

exten => s,n,Dial(SIP/111,40,mD(wwwwww000wwwwww${MODULE}${ACTION}wwwwww)S(20))

Voici quelques explications relativement à cette dernière commande. Dial () compose une extension, soit le poste « SIP/111 », le poste auquel notre contrôleur TR16A est attaché. Le chiffre « 40 » représente le délai en seconde que l’application s’attend pour une réponse du poste avant d’annuler l’appel. La lettre « m » signifie que nous aurons de la musique d’attente durant l’appel. La séquence D() représente l’envoi de la séquence au TR16A. Cette séquence est la suivante. « w » permet de produire une pause de .5 seconde, dans notre cas nous avons une pause totale de 3 secondes. « 000 » est le code de sécurité configuré sur le TR16A. Une autre pause de trois secondes. Envoie de la valeur du MODULE et de l’ACTION à contrôler, soit dans notre cas « 1* ». Nous terminons cette séquence avec une autre pause de trois secondes. La séquence S() représente le temps d’attente en seconde que l’application attendra avant de terminer l’appel suite à prise de l’appel par le poste 111. Nous avons utilisé ici un délai de 20 secondes.

Dernière étape, l’application termine en mettant fin à l’appel avec l’appelant.

exten => s,n,Hangup

L’application étant installée, nous allons maintenant créer une destination personnalisée nommée « Ouverture-garage » et y rattacher l’application en utilisant l’interface FreePBX « Outils – Destinations personnalisées ».

[9]

Via l’interface FreePBX « Configuration – Misc Applications », nous allons rattacher la destination personnalisée à un code de fonction « Feature code ». Ainsi lorsque l’on composera le numéro 123, nous serons directement dirigés vers la destination personnalisée « Ouverture-garage ». Cependant, avant de procéder à l’assignation du numéro, je dois m’assurer que 123 n’est pas déjà assigné quelque part dans Asterisk. Si c’est le cas, simplement choisir un autre numéro.

[10]

Toujours en utilisant l’interface FreePBX « Configuration – Feature Codes », nous pouvons valider que le « Feature code » nommé « Ouverture-garage 123 » est activé.

[11]

Maintenant que tout est en place, prononcez la phrase suivante « Asterisk ouvre toi ». Si après une minute votre porte de garage ne s’est pas ouverte, prenez le combiné téléphonique et composez 123 et surveillez votre porte car elle devrait s’ouvrir. C’est magique !

Si vous désirez, vous pouvez aussi étendre votre RVI en définissant un code pour contrôler votre porte. Simplement utiliser l’interface FreePBX « Configuration – IVR » et y définir votre code d’accès pointant sur la destination personnalisée « Ouverture-garage ».

[12]

Visualisez la vidéo

Extra, extra !

En supplément, j’ai joint ci-dessous une autre application qui permet de contrôler un module ainsi qu’une action particulière via Asterisk. Pour mettre en place cette application, basez-vous simplement sur les étapes énumérées précédemment.

; custom-app-tr16,s,1
; control d un module X10
[custom-app-tr16]
exten => s,1,Playback(custom/choix_module_X10)
exten => s,n,Read(MODULE,,1)
exten => s,n,SayNumber(${MODULE})
exten => s,n(boucle),Playback(custom/choix_action_X10)
exten => s,n,Read(ACTION,,1)
exten => s,n,SayNumber(${ACTION})
exten => s,n,Gotoif($[${ACTION} = 1]?allumer:continue)
exten => s,n(allumer),Set(ACTION=*)
exten => s,n,Goto(controle_tr16)
exten => s,n(continue),Gotoif($[${ACTION} = 0]?eteindre:erreur)
exten => s,n(eteindre),Set(ACTION=#)
exten => s,n,Goto(controle_tr16)
exten => s,n(erreur),Goto(boucle)
exten => s,n(controle_tr16),Dial(SIP/111,40,mD(wwwwww000wwwwww${MODULE}${ACTION})S(20))
exten => s,n,Hangup

Vous devrez enregistrer deux messages vocaux qui guideront l’appelant. Ces messages devront être placés dans le répertoire suivant :

/lib/asterisk/sounds/custom

Le premier message doit être nommé « choix_module_X10 » et peut être dicté comme ceci :

« Pour contrôler la porte de garage appuyez sur la touche 1, pour la lampe du salon sur 2, pour la lampe de la chambre sur 3,  ou pour le ventilateur appuyez sur la touche 4. »

Le deuxième message doit être nommé « choix_action_X10 » et peut être dicté comme ceci :

« Pour fermer, appuyez sur la touche 0 ou pour ouvrir sur la touche 1 ».

Références :

http://fr.wikipedia.org/wiki/Domotique [13] http://fr.wikipedia.org/wiki/Ali_Baba_et_les_Quarante_Voleurs [1] http://fr.wikipedia.org/wiki/X10_%28informatique%29 [2] http://www.smarthomeusa.com/ShopByManufacturer/X-10-Pro/Item/PHC06/ [14] http://www.x10.com/products/x10_tr16a.htm [15] http://www.x10.com/products/x10_um506.htm [16] pixelstats trackingpixel