
Vraiment, où va le monde ??? Heureusement que ma box ne me demande pas trop de choses
En discutant un peu avec Mickael, je lui ai proposé de voir un peu ce que pouvait faire Asterisk avec d’autres éléments connectés de ma maison, tout de suite il m’a dit : «ton eedomus !».

Ma eedomus possédant un RFXCOM Lan (Cf. cet article pour plus d’information), j’ai orienté mes recherches sur le protocole xPL. Si vous ne connaissez pas trop le protocole xPL je vous invite à lire cet article d’explications !

Voici le but de mon article : je vais vous expliquer comment mettre en place sur Asterisk et sur la Eedomus la possibilité de les faire dialoguer, afin de rendre mes appels entrants et sortants plus parlants à ma box domotique !
Bon, je ne vais pas vous faire le coup du «c’est simple !», car j’ai bien cherché pour trouver la solution…
Je me suis bien inspiré du post de GuiguiABloc, et je le remercie d’avoir mis à dispo son script !
[divider]
Première étape : Mettre en place AGI sur Asterisk
C’est quoi un AGI (Asterisk Gateway Interface) ?
AGI est une interface permettant de faire communiquer le plan de numérotation (extensions.conf) avec des programmes extérieurs à Asterisk, écrits avec des langages de programmation aussi divers que PHP, Perl, Python, C, shell Linux.
Le principe
AGI est matérialisé par l’écriture de scripts qui sont exécutés dans le plan de numérotation.
À chaque lancement d’un script AGI, Asterisk envoie au script un ensemble de variables avec leurs valeurs. Lorsque toutes les variables sont émises, Asterisk envoie une ligne vide pour préciser au script qu’il peut commencer ce pourquoi il a été écrit (suite d’instructions).
Comment appeller un script AGI ?
Par défaut, les scripts sont créés et stockés dans [highlight]/var/lib/asterisk/agi-bin#[/highlight] (cela permet de ne pas mentionner le chemin complet d’appel des scripts). Il faudra toujours que les scripts disposent du droit d’exécution.

Mise en place du script
Je vais vous mettre à dispo mon script qui est le même utilisé par les appels entrants et sortants. La base est le même script que GuiGuiabloc.
Il faut le recopier dans un fichier Asterisk2xPL.agi.
Attention il faudra faire une modification :
À [highlight]if outgoingnumber == « Mettre son numéro de téléphone Freebox » [/highlight] (ligne 29), vous devez mettre votre numéro de téléphone fixe commençant par 09.
voici le script
#!/usr/bin/python # -*- coding: ISO-8859-1 -*- # # Asterisk2xPL # https://https://www.planete-domotique.com/blog # By Kragg import sys,os,socket hostname = socket.gethostname() # On défini un broadcast sur tout le réseau (tous les périphériques recevrons l'information) xpladdr = ("255.255.255.255",3865) xplport = 3865 UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) UDPSock.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1) AGIENV={} env = "" while(env != "\n"): env = sys.stdin.readline() envdata = env.split(":") if len(envdata)==2: AGIENV[envdata[0].strip()]=envdata[1].strip() incomingnumber = AGIENV['agi_callerid'] outgoingnumber = AGIENV['agi_extension'] if outgoingnumber == "mettresonnumérodetelephone": body = 'device=telephone\ntype=AppelEntrant\ncurrent=N'+incomingnumber msg = "xpl-trig\n{\nhop=1\nsource=rfxcom-lan-asterisk."+hostname+"\ntarget=*\n}\nsensor.basic\n{\n" + body + "\n}\n" UDPSock.sendto(msg,xpladdr) else: body = 'device=telephone\ntype=AppelSortant\ncurrent=N'+outgoingnumber msg = "xpl-trig\n{\nhop=1\nsource=rfxcom-lan-asterisk."+hostname+"\ntarget=*\n}\nsensor.basic\n{\n" + body + "\n}\n" UDPSock.sendto(msg,xpladdr)
Avant de faire quoi que ce soit, il faut rendre le scripts exécutables et aussi changer le propriétaire
Pour rendre le script exécutable :
chmod u+x Asterisk2xPL.agi
Pour changer le propriétaire :
chown -R asterisk:asterisk /var/lib/asterisk/agi-bin/Asterisk2xPL.agi
[box type= »warning » ]Attention : faites bien le chown –R sur le fichier et non sur la racine, style /var/lib…, car sinon cela va modifier l’ensemble des droits du /Lib laissant votre asterisk dans les choux…[/box]
Le script est la, il est exécutable, son propriétaire est Asterisk …maintenant il faut l’intégrer dans votre plan de numérotation…
Intégration du script dans le plan de numérotation
Pour cela nous passons dans le dossier [highlight]/etc/asterisk#[/highlight]. Dans ce dossier vous avez l’ensemble des fichiers de configuration de votre Asterisk.
Nous allons nous intéresser au fichier suivant : [highlight]extensions_custom.conf[/highlight]
En rentrant dedans, vous allez vous apercevoir qu’il est peut être vide. Du coup, il faut faire une copie du fichier extensions_custom.conf.sample (le fichier d’exemple) vers le fichiers custom.
Voici la commande :
cp extensions_custom.conf.sample extensions_custom.conf

Maintenant il faut éditer le fichier et y rajouter en dessous de :
[from-internal-custom] exten => 1234,1,Playback(demo-congrats) ; extensions can dial 1234 exten => 1234,2,Hangup() exten => h,1,Hangup() include => custom-recordme ; extensions can also dial 5678
Ceci, l’appel de notre script AGI !
[from-pstn-custom] exten => _X.,1,AGI(/usr/bin/python,"/var/lib/asterisk/agi-bin/Asterisk2xPL.agi)

L’ajout des capteurs côté eedomus
Voila maintenant, si on passait sur la eedomus ?
Il vous suffit de créer 2 devices xPL : un pour les appels entrants et un pour les appels sortants

Voici l’adresse du capteur : [highlight]telephone:AppelEntrant[/highlight]

Et pour l’appel sortant c’est ..? [highlight]telephone:AppelSortant[/highlight]
Il ne vous reste plus qu’a appeler chez vous pour que vous voyiez l’appelant sur le capteur ! Et essayez d’appeler votre téléphone portable depuis votre maison pour voir l’appel sortant.
Sympa, non ?

Merci à l’équipe d’Eedomus pour avoir rajouté le champ Texte dans le type de données ! Cela me permet maintenant de créer des règles en fonctions des appels.
Bientôt un autre article qui va mêler encore la eedomus et Asterisk !
Génial ! Fallait justement que je me monte un serveur Asterisk 😀