Abavala !!!

PAW : reconnaissance vocale sous Android et intégration domotique

Le dernier exercice de la semaine lié à PAW consiste a programmer la fonctionnalité de reconnaissance vocale et de l’intégrer à un système domotique.  Le principe est similaire aux autres scripts de la semaine.  Le serveur domotique déclenche la reconnaissance vocale sur le téléphone Android. Nous parlons, le résultat est analysé par PAW puis communiqué éventuellement au système domotique – la box eedomus dans notre exemple. Voyons comment procéder.

Le script du jour apporte les spécificités suivantes:

  • Pouvoir être appelé par une simple requête HTTP
  • Annoncer par synthèse vocale que le système est prêt à écouter
  • Écouter l’ordre
  • Décoder l’ordre puis le communiquer au système domotique

Pour obtenir le service attendu encore une fois il suffit de placer le script sur le serveur PAW sur votre téléphone Android.

Voici le script que je vous propose comme base de travail.  N’hésitez pas à le retravailler et à l’améliorer car il demande à être optimisé:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Reconnaissance vocale</title>

<bsh>

// pour la reconnaissance vocale
import android.speech.RecognizerIntent;

// pour l'appel d'url
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.*;
import org.apache.http.client.methods.*;
import org.apache.http.util.*;

//on annonce que l'on est prêt
speak ("Parlez. Je vous écoutes.", Locale.getDefault());

//on laisse le temps de parler
Thread.sleep(2000);

//lancement de la reconnaissance vocale
if(isIntentAvailable(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)) {
  resultat = speechToText("Que puis-je pour vous?");
}
else {
  resultat = "SpeechToText n'est pas possible sur cet appareil";
}

reponse="";
getURL="";

// déterminataion de l'action à lancer
if (resultat.equals("allume la lumière du salon")) {
//identifiants pour l'API eedomus ainsi que le periph_id à remplacer par les vôtres
	getURL="http://api.eedomus.com/set?action=periph.value&api_user=XXXXX&api_secret=YYYYYYYYYYYYY&periph_id=123456&value=100";
	retour = "la lumière du salon est allumée.";
}
if (resultat.equals("éteint la lumière du salon")) {
//identifiants pour l'API eedomus ainsi que le periph_id à remplacer par les vôtres
	getURL="http://api.eedomus.com/set?action=periph.value&api_user=XXXXX&api_secret=YYYYYYYYYYYYY&periph_id=17791&value=0";
	retour = "la lumière du salon est éteinte.";
}

//lancement de l'action
if (getURL.equals("")) {
	speak ("désolé mais je n'ai pas compris", Locale.getDefault());	
}
else {
	client = new DefaultHttpClient(); 

	get = new HttpGet(getURL);
	responseGet = client.execute(get); 
	resEntityGet = responseGet.getEntity();

	if (resEntityGet != null) {
		reponse = EntityUtils.toString(resEntityGet);
		speak (retour, Locale.getDefault());
	}
}

</bsh>
</head>
<body>
<h1>Reconnaissance vocale</h1>

<h3>Paramètres :</h3>
<p>
Aucun!<br>
</p>

<h3>Fonctionnement :</h3>
<p>
Reprenant le principe du répondeur téléphonique qui vous incite à "parler après le bip sonore", vous allez être invités à parler afin de commander votre système domotique.<br>
Enoncez alors votre ordre de manière claire et distincte.<br>
</p>

<h3>Paramètres :</h3>
<p>
Ce que j'ai compris : <bsh>$$.print(resultat); </bsh><br>
Réponse de la eedomus: <bsh>$$.print(reponse); </bsh><br>
url: <bsh>$$.print(getURL); </bsh><br>
</p>
</body>
</hmtl>

L’installation se fait de la même manière que pour le script concernant la reconnaissance vocale.  Le prérequis est bien entendu d’avoir installé au préalable le serveur PAW sur votre téléphone Android comme présenté dans le précédent article:

  • Télécharger le code précédent et le sauvegarder le sur votre disque dur dans un fichier appelé : “speech_to_text.xhtml”
  • Se connecter au serveur PAW.
  • Accéder au gestionnaire de fichiers : Menu Media->File manager
  • Dans le répertoire /sdcard/paw/html de votre téléphone créer le répertoire “actions” s’il n’existe pas encore

  • Indiquer l’endroit de votre disque dur où se trouve le script à uploader sur le serveur PAW en cliquant sur “Parcourir”.
  • Sélectionner le fichier “speech_to_text.xhtml” et cliquer sur “Open”.
  • Effectuer l’upload en cliquant sur “Upload”.
  • Le message suivant vous confirme le chargement du script sur le serveur.

Il ne vous reste plus qu’à renseigner l’URL adéquate dans un scénario pour une Zibase ou bien dans un périphérique HTTP sur un serveur eedomus.

L’URL à renseigner sera de la forme:

http://192.168.0.10:8080/actions/speech_to_text.xhtml

Pensez à modifier “192.168.0.10” par l’adresse IP de votre serveur PAW.  Il n’y a pas de paramètres!

Afin de pouvoir le lancer j’ai créé un périphérique actionneur HTTP sur la box eedomus.  N’ayant qu’une valeur il permet de lancer la reconnaissance vocale.

Comme le montre la vidéo ci dessous voici le résultat de l’association de PAW et d’une box domotique eedomus pour permettre l’utilisation de la synthèse vocale.  Le tout est piloté par l’application dédiée de l’eedomus.

Cet article termine la semaine de présentation de ce serveur HTTP sous Android.  N’hésiter pas à partager vos scripts ou idées de scripts dans les commentaires ou sur le forum.