Actualités | Audio/Vidéo | Evènements | DIY | Domotique | Informatique | Maison | Mobile | Sécurité

Pilotez son portail via un réseau IP

Envoyer Imprimer PDF
Note des utilisateurs: / 13
MauvaisTrès bien 

Pour la seconde fois, je vais illustrer comment utiliser la carte Teracom TCW120. Lors de mon dernier article, je vous avais montré comment monitorer un onduleur en utilisant l'entrée analogique de cette carte. Aujourd'hui, je continue en montrant comment utiliser les relais qui permettent d'ouvrir ou fermer un contact sec.

La plupart des portails automatiques proposent des contacts secs pour pouvoir les piloter via une seconde commande. Dans mon cas, j'ai un portail de marque Nice qui possède un contact pour ouvrir et un contact pour fermer:

On peut donc directement piloter ces deux contacts à partir de module X10, Zwave, ... Dans mon cas, j'ai choisi de les controler à partir de ma dernière carte IP, la Teracom TCW120. Cette carte possède deux relais pilotables via les protocoles http ou snmp.

J'utilise les bornes 1 et 2 pour ouvrir le portail. Et les bornes 4 et 5 pour fermer le portail. J'ai cablé ces commandes avec un cable multi-brins (type cable d'alarme). La distance entre le portail et la carte IP est de 45 mètres. J'ai mis ce cable à coté du cable d'alimentation du moteur. Normalement, ce n'est pas recommandé à cause des parasites. Dans mon cas, ça fonctionne bien sans parasite.

Mon système de commande est toujours sous Linux. J'ai choisi d'ouvrir le portail via un commande SNMP. Cette commande sera aussi déclenchable depuis un téléphone IP.

La commande d'ouverture peut se faire par impulsions furtives (on/off rapide). Voici les commandes SNMP sous Linux:

  • J’ai déclaré SNMP dans mon DNS pour éviter d'utiliser l'IP de la carte dans mes programmes:
  • Pour ouvrir :
/usr/bin/snmpset -v1 -c private snmp iso.3.6.1.4.1.17095.3.1.3.0 i 1
  • Pour fermer :
/usr/bin/snmpset -v1 -c private snmp iso.3.6.1.4.1.17095.3.1.4.0 i 1

On peut imaginer tout type de scénarios pour piloter le portail. Les interfaces de commandes sont maintenant infinies car on peut lancer les actions:

  • via des ordonnanceurs,
  • via une interface web.
  • via un serveur téléphonique Vocal.
  • ...

Pour continuer mon test, je vous montre comment piloter le portail à partir d'un appel vocal. J'utilise l'application Asterisk sous Linux. Il s'agit d'un PAB logiciel qui permet de mettre en oeuvre un serveur vocal.

Quand on met un serveur vocal en place, le plus dur n'est pas la logique des actions que l'on programme, mais l'enregistrement des voix que l'on va utiliser. Asterisk fournit une liste de mots ou de phrases prédéfinis mais la bibliothèque est insuffisante.

Pour ma part, j'utilise Google Translate pour encoder rapidement mes phrases en message mp3. Le rendu est de très bonne qualité.

L'API de Google translate est accessible ici. C'est facile à intégrer à nos scripts de domotique, il suffit d'appeler l'url "http://translate.google.com/translate_tts?q=Votre message vocal&tl=en%3E" en changeant "votre message vocal" par la phrase que vous souhaitez prononcer.

Mon serveur vocal suit une logique en 4 étapes :
1 - On se présente
2 - On demande si on veut ouvrir ou fermer
3 - On demande une validation.
4 - On fait l’action demandée si on a validé la commande.

Pour suivre cette logique, j'ai préparé les phrases suivantes:

  • Interface de gestion du portail roulant.
  • Taper 1 pour ouvrir, 0 pour fermer.
  • Vous avez tapé 1 pour ouvrir.
  • Vous avez tapé 0 pour fermer.
  • Taper 1 pour valider, 0 pour annuler.
  • Fermeture en cours, au revoir.
  • Ouverture en cours, au revoir.

J'ai créé ce petit script PHP pour générer les fichiers mp3:

<?php
$str = "Interface de gestion du portail roulant."; // ISO-8859-1 string to be encoded in UTF-8 i
$base_url = 'http://translate.google.com/translate_tts?';
$qs = http_build_query(array(     'tl' => 'fr',     'ie' => 'UTF-8',     'q' => utf8_encode($str) ));
file_put_contents("gestion.mp3", file_get_contents($base_url . $qs));

$str="Taper 1 pour ouvrir, 0 pour fermer.";
$base_url = 'http://translate.google.com/translate_tts?';
$qs = http_build_query(array(     'tl' => 'fr',     'ie' => 'UTF-8',     'q' => utf8_encode($str) ));
file_put_contents("ouvrir_fermer.mp3", file_get_contents($base_url . $qs));

$str="Vous avez tapé 1 pour ouvrir.";
$base_url = 'http://translate.google.com/translate_tts?';
$qs = http_build_query(array(     'tl' => 'fr',     'ie' => 'UTF-8',     'q' => utf8_encode($str) ));
file_put_contents("ouvrir.mp3", file_get_contents($base_url . $qs));

$str="Vous avez tapé 0 pour fermer.";
$base_url = 'http://translate.google.com/translate_tts?';
$qs = http_build_query(array(     'tl' => 'fr',     'ie' => 'UTF-8',     'q' => utf8_encode($str) ));
file_put_contents("fermer.mp3", file_get_contents($base_url . $qs));

$str="Taper 1 pour valider, 0 pour annuler.";
$base_url = 'http://translate.google.com/translate_tts?';
$qs = http_build_query(array(     'tl' => 'fr',     'ie' => 'UTF-8',     'q' => utf8_encode($str) ));
file_put_contents("validation.mp3", file_get_contents($base_url . $qs));

$str="Fermeture en cours, au revoir.";
$base_url = 'http://translate.google.com/translate_tts?';
$qs = http_build_query(array(     'tl' => 'fr',     'ie' => 'UTF-8',     'q' => utf8_encode($str) ));
file_put_contents("fermeture.mp3", file_get_contents($base_url . $qs));

$str="Ouverture en cours, au revoir.";
$base_url = 'http://translate.google.com/translate_tts?';
$qs = http_build_query(array(     'tl' => 'fr',     'ie' => 'UTF-8',     'q' => utf8_encode($str) ));
file_put_contents("ouverture.mp3", file_get_contents($base_url . $qs));
?>

Asterisk préfère des fichiers wave 8 bits. J'utilise les logiciels lame et sox pour transcoder tout ça dans le format attendu par Asterisk:

rm -rf *.wav
for i in *.mp3; do
val=${i%.mp3}
echo "** Converting mp3 to wav files if they exist"
lame --decode "$i" "$val.converted.wav"
#rm -f "$i"
echo "** $i MP3 to WAV is complete"
done

for i in *.wav; do val=${i%.converted.wav} echo "** Checking volume levels for $i" echo "** Amplifying volume by $ampl to fake a normalize and converting $val.wav to 16 bit 8000" sox "$val.converted.wav" -r 8000 "$val.aux.wav" remix -ql sox -v .25 "$val.aux.wav" "$val.wav" echo "** $i is complete" rm -rf "$val.converted.wav" rm -rf "$val.aux.wav" done

Maintenant que nous avons nos fichiers Waves, on peut s'attaquer au serveur vocal. Pour celà, il faut utiliser un script Perl (fichier portail.pl qu'il faudra rendre executable):

#!/usr/bin/perl
#
use Asterisk::AGI;
$AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
my $target = 0;
my $try = 0;
my $try2 = 0;

$AGI->exec('Wait','1'); $AGI->stream_file('[chemin des fichier wav]/gestion'); $AGI->exec('Wait','1'); $try = $AGI->get_data('[chemin des fichiers wav]/ouvrir_fermer', "1000", "1"); $AGI->exec('Wait','3');
if($try == 1) { $AGI->stream_file('[chemin des fichiers wav]/ouvrir'); } else { $AGI->stream_file('[chemin des fichiers wav]/fermer'); } $try2 = $AGI->get_data('[chemin des fichiers wav]/validation', "1000", "1"); $AGI->exec('Wait','3');
if($try2 == 1) { if($try == 1) { my $execf="/usr/bin/snmpset -v1 -c private snmp iso.3.6.1.4.1.17095.3.1.3.0 i 1 > /dev/null &"; system($execf); $AGI->stream_file('[chemin des fichierwav]/ouverture'); } else { my $execf="/usr/bin/snmpset -v1 -c private snmp iso.3.6.1.4.1.17095.3.1.4.0 i 1 > /dev/null &"; system($execf); $AGI->stream_file('[chemin des fichiers wav]/fermeture'); } } $AGI->hangup(); exit(0); #


On place ce script perl dans le répertoire /var/lib/asterisk/cgi-bin/. On rajoute une extension à asterisk via le fichier /etc/asterisk/extensions.conf

; portail
exten => 1111,1,Answer
exten => 1111,2,AGI(portail.pl, test)
exten => 1111,3,Hangup

 

En conclusion

Et voilà, la nouvelle interface vocale est maintenant en place. Le portail est accessible via le numéro de téléphone 1111. La carte TCW120 permet d'ouvrir et fermer le portail via les commandes SNMP.

La synthèse vocale de Google translate est limitée sur les longues phrases. Si vous avez de trop longues phrases, vous devrez les découper et rassembler les mp3. Ce n'est pas très génant pour faire un serveur vocal ou des messages d'annonces.

 

Cet article vous est proposé par Arno : Linuxiens de naissance, Arno travaille dans le domaine de l'informatique. Il s'intéresse à tous les domaines : informatique, électronique, mécanique et bricolage en tout genre. Arno est un source d'inspiration constante.

 

Ou acheter ?

En France, les cartes Teracom sont vendues dans les deux boutiques suivantes:

 

Ils en parlent aussi

Mise à jour le Dimanche, 12 Août 2012 23:37  

Ajouter un Commentaire


Code de sécurité
Rafraîchir

Recherche

Les Flux RSS de TLD
Instagram

Produits Partenaires

GCE Electronics est partenaire de Touteladomotique.com RFXCOM.com est partenaire de Touteladomotique.com



Liens Utiles

Boutiques Partenaires

Liens Utiles

Un don pour TLD ?

Pourquoi faire un don ?

Publicité

Espaces publicitaires à louer
Contactez-nous

Connexion