Domotique : suivi des appels entrants téléphoniques

Vous le savez, la domotique devient un passe temps de plus en plus prenant à domicile.
C’est quand même une activité qui a le mérite d’être tout de suite visible et dont les avantages ou pas, sont intégrés immédiatement à la vie quotidienne.
De plus, la communauté française est très active et peuplée de personnes amicales et prêtes a partager leurs expériences dans un domaine que l’on essaye tous, de rendre abordable.
Je salue donc au passage toutes les personnes qui partagent la même passion que moi, dont vous retrouverez les blogs/sites dans ma blogroll ou dans mes articles et avec qui j’ai eu des contacts des plus enrichissants grâce à la même passion qui nous anime 🙂

Alors que je déploie petit à petit mon installation domotique, un des éléments essentiels de la maison reste le téléphone.

Ma ligne principale n’est pas dégroupée (ouf) et je suis très attaché a garder ma ligne RTC France Telecom.

Pourquoi ? Pour plusieurs raisons  fort simple :

– J’ai besoin d’un accès téléphonique en cas de panne de courant (ah bah oui, une box adsl sans courant ça marche beaucoup moins bien…)

– Je capte très difficilement un opérateur de  téléphonie mobile chez moi (et oui, je vis dans un lieu très… isolé :p (par contre je ne suis qu’à 320m de mon NRA ce qui me donne un débit de synchro à 22Mbps… va comprendre…)

– J’aime basculer sur du RTC en cas de panne ADSL (rare mais probable et moi j’ai de l’autonomie électrique :p)

– FT m’aime si je reste chez eux (illusoire de le croire, mais les histoires de coupure physique de ma ligne m’ont donné raison puisque j’ai eu le droit à l’armada FT pour enterrer ma ligne FT, gratuitement…)

– J’aime jouer avec le réseau analogique FT, mais chut 😀

Bref, vous le comprendrez, je suis assez attaché à ma ligne FT et son numéro associé sur lequel je reçois mes appels (mais ne me prenez pas pour un débile quand même, les appels externes je les passe forcément sur ma freeteuse…)

Donc recevant mes appels sur ma ligne FT, je cherchais un moyen de stocker en base les appels reçus, de pouvoir consulter cette liste d’appels et comble du luxe, de pouvoir afficher sur mon portable quand je suis au sous-sol pour fumer mon clop (oui c’est mal, mort toussa, perte de fécondité et honte sur ma famille etc..), le numéro de l’appelant sur mon écran (accessoirement d’ailleurs sur tout les écrans des pcs de la maison).

Petit bonus que je me suis offert après, le « killer d’appel entrant ». Surnommé également le « kill -9 commercial », il me permet de décrocher et raccrocher le modem automatiquement suivant le numéro en blacklist.
Terriblement efficace après m’être fait un peu embêter avec des appels automatisés de la série des numéros 0177690400, 0173779002 et consorts de Completel. C’est j’avoue, extrêmement jouissif de savoir qu’un centre d’appel téléphonique pratiquant l’abus d’appels se mange une porteuse à chaque fois 😀

Sympa, non ? donc mise en oeuvre.

« Ké ki nous faut comme matos ? »

– Un pc sous Nux déjà (ah ah) avec la panoplie habituelle apache, mysql toussa

– Ensuite un modem RTC récent.

Et oui, en fait lors de mes premiers tests, j’avais ressorti mes vieux modems 3com USR Robotics (toute la panoplie du Voice au Voice/Fax en passant par le MessagePlus) avant de me rendre compte (après plusieurs recherches sur le nain Ternet) que la technologie CallerID ou CID  (la présentation du numéro quoi)  avait changé chez FT vers le début des années 2000 et que donc, cela ne fonctionnait plus avec ses modems :/

NB: je ne retrouve plus le lien parlant de ces modifications, donc si un lecteur le retrouve, je suis preneur 🙂

donc sur notre ami Ibêêêhhh, pour une poignée d’euros, je me suis acheté celui ci :

l’US Robotics 56k USB FaxModem USR5637.

(allez 20 euros à tout casser)

– Le service Présentation du Numéro de France Telecon (1,5 euros/mois)

– des doigts pour taper les scripts

Voila, on a tout ce qu’il nous faut.

Première étape, l’interception silencieuse des numéros.

Une fois branché sur la prise FT, il faut que le modem, réagisse passivement (pour l’instant) et ne fasse que récupérer le numéro de l’appelant.

L’outil qui  va bien pour cela : mgetty

donc apt-get install mgetty

On configure ( en supputant (j’adore ce verbe…) que votre modem est sur /dev/ttyACM0) :

cat /etc/mgetty/mgetty.config
# mgetty configuration file
debug 4
rings 3
speed 38400
port ttyACM0
init-chat "" AT#CID=1 OK
cnd-program /home/guiguiabloc/appelentrant.sh

Inutile de décrire, c’est assez explicite. La commande AT CID=1 signifie que nous activons la fonction de présentation du numéro. (Caller IDentification)

Pour le charger au boot et le recharger quand il s’achève, on rajoute a la fin du /etc/inittab :

S1:2345:respawn:/sbin/mgetty ttyACM0

Maintenant ca se complique un peu.

– On veut stocker ça en base, donc création des bases mysql toutes bêtes et des tables qui vont avec :

pour les appels :
 
CREATE DATABASE appels ;
 
CREATE TABLE appels (id INT not null AUTO_INCREMENT, date VARCHAR( 20 ) not null, numero CHAR(10), PRIMARY KEY (id));
 
Pour l'annuaire (cela peut servir ;) ) :
 
CREATE DATABASE annuaire ;
 
CREATE TABLE annuaire (id INT not null AUTO_INCREMENT, prenom VARCHAR( 30 ) not null, nom VARCHAR (30) not null , adresse VARCHAR (255) not null , numero CHAR(20), PRIMARY KEY (id));

– On veut notifier les pcs se la maison (par le pop-up graphique notify-send)

apt-get install libnotify-bin (sur tout les pcs (clients et serveur)

On crée une clé ssh sur le pc serveur (ssh-keygen, pas de mot de passe…)

Et sur les pcs recevant l’appel on rajoute la clé publique du pc serveur en verrouillant un peu l’accès :

client:~$ cat .ssh/authorized_keys
command="/home/guiguiabloc/system/ssh_notify.sh $SSH_ORIGINAL_COMMAND" ssh-dss AAA...
client:~$ cat /home/guiguiabloc/system/ssh_notify.sh
 
#!/bin/bash
DISPLAY=:0.0 XAUTHORITY=~/.Xauthority notify-send -u critical SERVEUR $SSH_ORIGINAL_COMMAND

-Maintenant le script qui s’execute à l’appel entrant :

#!/bin/sh
NOW="$(date +"%d-%m-%Y %T")"
NUMBER="$2"
 
# On se garde un petit fichier texte pour vérifier
echo "Appel entrant le $NOW de . $NUMBER" >> /tmp/appel
 
# On enregistre l'appel dans la base
mysql -uuser -pmotdepasse -h serveurmysql -D appels -e "INSERT INTO appels (date,numero) VALUE ('$NOW', '$NUMBER') ;"
 
# On recherche dans la base Annuaire une correspondance
prenom=`mysql -uannuaire -pannuaire -h serveur-mysql -D annuaire -e "select PRENOM from annuaire where numero=$NUMBER ;"`
nom=`mysql -uannuaire -pannuaire -h serveur-mysql -D annuaire -e "select NOM from annuaire where numero='$NUMBER' ;"`
 
# On s'envoit ca par mail
echo "APPEL DU $NUMBER le $NOW Identifiant : $prenom $nom" | mail -s "Appel du $NUMBER" guiguiabloc@monemail.fr
 
msgnotif="$NUMBER $prenom $nom"
 
# Affichage en local
su - user  -c "DISPLAY=:0.0 XAUTHORITY=~/.Xauthority notify-send -u critical APPEL "$msgnotif""
 
# Affichage sur les clients
ssh -i /home/guiguiabloc/.ssh/clepriveserveur_dsa user@client "Appel_du_"$NUMBER 2>&1
 
exit 1 # on sort en erreur pour que mgetty ne décroche pas

Sympa déjà 🙂

Pour l’annuaire, je vous laisse le travailler avec votre convenance, en le remplissant à la main ou plus fun, en faisant une requète sur http://www.pagesjaunes.fr/trouverunnom/rechercheInverse.do ou sur http://www.118000.fr/search?sb_Phone= .

Il existe des scripts sur le net en perl, bash, php etc.. pour cela.

Sinon vous pouvez aussi vous baser sur l’excellent travail de Clément pour la récupération des messages vocaux de la Freebox : http://clement.storck.me/?p=318

Pour afficher tout cela sur votre site web maison, une simple page php qui va interroger votre base mysql pour afficher la liste des numéros entrants avec la date et l’heure vous permettra d’avoir une vision succinte de votre historique d’appels entrants (ce n’est pas les exemples sur le nain Ternet qui manque pour ce genre de page).

Cadeau Bonus

Maintenant qu’on est capable de traiter les appels entrants, après avoir reçu quelques appels commerciaux non sollicités, je me suis demandé comment laisser l’ordinateur traité ses indésirables.

Tout simplement en faisant décrocher puis raccrocher le modem à la détection du numéro indésirable.

On rajoute au début de notre script appelentrant.sh :

...NUMBER="$2"...
 
if [ $NUMBER = "0177690400" ] ||  [ `echo $NUMBER | grep "01702382"` ] ||  [ `ec
ho $NUMBER | grep "01737790"` ] ||  [ `echo $NUMBER | grep "01788135"` ]
then
screen -d -L -m /home/guiguiabloc/scripts/kill_appel_entrant.sh
echo "APPEL DU $NUMBER le $NOW" >> /home/guiguiabloc/LISTE_APPELS_MALVEILLANTS
exit 0
else
echo
fi
... suite du script

Et le fameux script « kill_appel_entrant.sh » dont je me suis inspiré la lecture du billet de Queued sur http://www.goodjobsucking.com/?p=244

#/bin/bash
PID=$$
cd /tmp
echo send "ATZ" >> /tmp/minicom.$PID
echo expect { >> /tmp/minicom.$PID
echo \"OK\" >> /tmp/minicom.$PID
echo } >> /tmp/minicom.$PID
echo send "AT+FCLASS=1" >> /tmp/minicom.$PID
echo expect { >> /tmp/minicom.$PID
echo \"OK\" >> /tmp/minicom.$PID
echo } >> /tmp/minicom.$PID
echo send "ATH1" >> /tmp/minicom.$PID
echo expect { >> /tmp/minicom.$PID
echo \"OK\" >> /tmp/minicom.$PID
echo } >> /tmp/minicom.$PID
echo send "ATH0" >> /tmp/minicom.$PID
echo expect { >> /tmp/minicom.$PID
echo \"OK\" >> /tmp/minicom.$PID
echo } >> /tmp/minicom.$PID
echo send "ATZ" >> /tmp/minicom.$PID
echo expect { >> /tmp/minicom.$PID
echo \"OK\" >> /tmp/minicom.$PID
echo } >> /tmp/minicom.$PID
echo "sleep 1" >> /tmp/minicom.$PID
echo >> /tmp/minicom.$PID
echo sleep 2 >> /tmp/minicom.$PID
echo ! killall minicom >> /tmp/minicom.$PID
/usr/bin/minicom -S /tmp/minicom.$PID
cat /tmp/minicom.$PID
rm /tmp/minicom.$PID

Rhaaaa 😀

Alors je vous préviens, l’inconvénient en France sur le réseau RTC c’est que le numéro de l’appelant ne s’affiche qu’a partir de la deuxième sonnerie :/ donc votre téléphone sonnera au moins 2 fois avant que le script ne se déclenche mais bon, déjà certains téléphones fixes permettent de régler le fait de sonner uniquement à partir de X sonneries, et si votre tél ne propose pas cette option, il vous suffit d’attendre la troisième sonnerie pour décrocher 🙂

Et puis, avouons le, c’est extrémèment plaisant de suivre le déroulement de l’appel avec le modem qui décroche et le téléconseiller qui parle dans le vide avant de se faire raccrocher au nez.

Après plusieurs semaines d’utilisation, ce script s’est avéré terriblement efficace pour la simple raison que la plus grande partie des automates qui composent les numéros détectent ce qu’il y a au bout (et oui, faites le test, si vous avez un blanc au bout du fil quand vous décrochez, c’est au moment où vous dites « allo » que l’appel est basculé sur un téléconseiller) et que l’automate semble détecter la porteuse du modem et donc « grille » votre numéro dans sa base.

En tout cas, pour moi, j’ai remarqué une chute impressionnante des appels commerciaux non sollicités avec cette technique.

Amusez vous bien 😀

Ce billet a été posté dans domotique et taggé , . Bookmark ce permalink.

9 commentaires sur “Domotique : suivi des appels entrants téléphoniques

  1. Encore un magnifique article monsieur Guigui,
    Je vois que je ne suis pas le seul à qui GLMF (#136) donne des idées 😉

  2. HAN…oh putain, c’est machiavéliquement génial ce truc ; si j’étais proprio…je crois que je me ferais un joujou du même style !

    En tous cas, je suis content de voir que je ne suis pas le seul à garder la ligne FT (j’ai des potes qui me traitent de dingue)… :mrgreen:

  3. génial ce système

    à voir avec le temps si la baisse vient bien de ca !

    si quelqu’un qui fabrique ces robots ou a eu le meme comportement, merci pour les feed.

    Ca résoudrai bien des pb !

    merci

    sebastien

  4. Article vraiment bien expliqué, c’est fou ce qu’on peut (encore) faire avec quelques euros et beaucoup d’imagination. Le coup du script killer entrant devrait être installé sur les boxes directement, free si tu nous lis 🙂

  5. Le numéro de téléphone est *toujours* après la 2eme sonnerie, c’est standard.

  6. @ros D’où tiens-tu cette affirmation ? As-tu un lien technique la dessus ?
    Il me semblait que concernant le norme V.23 de FT, c’était entre la première et la deuxieme sonnerie pour de l’analogique.