Page 1 sur 3

annonce vocale....

Publié : 14 oct. 2017, 11:16
par le belge
Salut ,

est-ce que quelqu'un à un stock , un script qui permet de faire des annonces vocales sur raspberry ?
j'ai vu que ça existait pour windows ...

j'ai un pi3 et je voudrais que le son passe par une enceinte bluetooth , j'ai vu des tutos concernant gladys faut que je test !

cahier des charges :
-le matin
météo du jour
saint et anniversaire du jour
risque de pluie
température ext
température de la piscine

-le soir
sortir les poubelles ou pas
risque de givre le lendemain

actuellement en script qui tourne sur domoticz :
gestion de la piscine
poubelle
saint du jour

à faire :
météo du jour
anniversaire
risque de pluie

malheureusement , je ne sais pas par ou commencer pour le bluetooth !
j'ai toujours la trouille de faire un truc qui bloque domoticz vu qu'il fonctionne bien pour l'instant !!!

Mike

Re: annonce vocale....

Publié : 14 oct. 2017, 23:35
par Jeff
Prend une carte sd de test ou un 2ème pi de test + rflink diy (60€) et tu joues... en sauvegardant la base db de domoticz vierge histoire de pas tout réinstallé au cas où :o

Re: annonce vocale....

Publié : 17 oct. 2017, 17:49
par Sopalin
Salut le Belge,

J'ai réalisé un projet simlilaire à la maison. Une enceinte bluetooth est dans ma salle de bain et à la fermeture de la porte le matin j'ai une annonce vocale + music deezer.

Je vais te mentir, j'y est passé facile 2 semaines pour faire fonctionner le bluetooth, une vrai galère. Faut éviter d'utiliser bluez. Met à jour ton RPI et install pulseaudio.

Essaye de configuré le bluetooth via l'interface graphique dans un premier temps, puis si ça marche, tu regardes du coté des lignes de commandes.

Voici un lien qui explique très bien le début de l'install. http://youness.net/raspberry-pi/bluetoo ... spberry-pi
Le step 1 est très bien.

Je te souhaite bon courage pour la config. Hésite pas à nous dire ou tu en es et j'essayerais de fouiller dans mes fichiers pour t'aider, mais j'ai fait tellement de modif que dure de savoir laquelle est la bonne lol

Autre point important, le chipset intégré du bluetooth du RPI n'est pas assez stable. Impossible de maintenir une connexion plus de 24h. J'ai investi dans un dongle et plus de soucis.

Re: annonce vocale....

Publié : 17 oct. 2017, 18:28
par le belge
Bonjour ,

pour l'instant , je vais laisser le projet en standby (je pense acheter une box android tv du coup je vais récuperer un pi3, plus facile pour faire les tests)

en attendant ,merci pour les infos , j'ai déjà en ma possession un dongle bluetooth et une enceinte bluetooth ....

si je fais des sauvegardes ; je pense que je ne crains rien de faire des tests d'appairage .... sur le pi qui héberge domoticz ....???

je pensais que le plus difficile allait être le script pour l'annonce vocale , mais j'ai bien l'impression que rien que le bluetooth va être coton ....

Mike

Re: annonce vocale....

Publié : 18 oct. 2017, 10:09
par Sopalin
Aucun risque entre le bluetooth et domoticz.

Je te confirme avoir passé bien plus de temps pour la config bluetooth permanente ainsi qu'une reconnexion au démarrage que pour le script vocale.
Voici le bout de code pour une connection auto du bluetooth :

Code : Tout sélectionner

echo "connect 78:44:05:5F:8A:AF" | bluetoothctl
sleep 5
pacmd set-default-sink bluez_sink.78_44_05_5F_8A_AF
Le mieux est de faire un appareillage manuel puis une fois fait, tu peux te reconnecter facilement. Remplace la MAC adresse par celle de ton enceinte.
la dernière ligne permet de définir la sortie bluetooth par défaut dans pulseaudio.

Pour la partie vocale, je génère un fichier texte avec les infos dont j'ai besoin que je synthétise avec google, puis je lis le fichier wav dans ma sortie bluetooth.

Il y a surement des améliorations à effectuer mais j'ai pas trouver mieux. J'ai donc 3 scripts :
- Génération du texte de l'annonce
- Envoi à google du texte pour récupérer un wave
- Lecture du wav

Voici le bloc de génération de mon annonce :

Code : Tout sélectionner

#!/bin/bash
##Script de génération de texte lisible par TTS

#Fichier de sortie texte
data='/home/pi/domoticz/scripts/bash/data.txt'
#Suppression du fichier existant
su - pi -c 'rm "'${data}'"'
su - pi -c 'touch "'${data}'"'

#Intro, Date, Heure, Saint du jour
echo 'Bonjour Monsieur, nous somme le ' $(date | cut -d"," -f1) ' et il est '$(date +%H)' heure '$(date +%M)'.' >> $data
echo "Nous fétons aujourd'hui les " $(curl -s  "http://domogeek.entropialux.com/feastedsaint/now" | sed  's/,/, /g')'.' >> $data

#Météo du jour
#meteo=$(curl -s "http://api.openweathermap.org/data/2.5/weather?q=cagnes-sur-mer,france&lang=fr&units=metric&appid=CLE_API" | jq -r '.weather[0].description')
#temp_max=$(curl -s "http://api.openweathermap.org/data/2.5/weather?q=cagnes-sur-mer,france&lang=fr&units=metric&appid=CLE_API" | jq -r '.main.temp_max')
echo "Au niveau de la météo voici les infos :" >> $data
#echo "Aujourd hui le temps est" $meteo", avec une température maximum de" $temp_max>> $data
echo $(curl -s "http://api.wunderground.com/api/CLE_API/forecast/lang:FR/q/France/Cagnes-sur-mer.json" | jq -r '.forecast.txt_forecast.forecastday[0].fcttext_metric' | cut -d'.' -f1,2,4) ".">> $data

#Test si vacance scolaire
if (curl -s http://domogeek.entropialux.com/schoolholiday/B/now | grep True) then
 echo "C'est les vacances, la route sera tranquille." >> $data
fi

#Test si c'est Mercredi
if [ $(date +%A) = "mercredi" ]; then
 echo "C'est mercredi la route devrait être plus tranquille." >> $data
fi

#Test si c'est le weekend ce soir
if [ $(date +%A) = "vendredi" ]; then
 echo "Courage ce soir c'est le weekend." >> $data
fi

#Test si c'est férié le lendemain
if (curl -s http://domogeek.entropialux.com/holiday/tomorrow | grep True) then
 echo "Relax, demain c'est férié." >> $data
fi
#cat $data
su - pi -c '/home/pi/domoticz/scripts/bash/speech.sh "$(cat '${data}')"'
A modifier avec ton adresse pour la météo.

Puis le script qui permet de récupérer le wave auprès de google car google limire le nombre de caractère :

Code : Tout sélectionner

#!/bin/bash
#################################
# Speech Script by Dan Fountain #
# TalkToDanF@gmail.com #
#################################
INPUT=$*
STRINGNUM=0
ary=($INPUT)
echo "---------------------------"
echo "Speech Script by Dan Fountain"
echo "TalkToDanF@gmail.com"
echo "---------------------------"
for key in "${!ary[@]}"
do
SHORTTMP[$STRINGNUM]="${SHORTTMP[$STRINGNUM]} ${ary[$key]}"
LENGTH=$(echo ${#SHORTTMP[$STRINGNUM]})
#echo "word:$key, ${ary[$key]}"
#echo "adding to: $STRINGNUM"
if [[ "$LENGTH" -lt "100" ]]; then
#echo starting new line
SHORT[$STRINGNUM]=${SHORTTMP[$STRINGNUM]}
else
STRINGNUM=$(($STRINGNUM+1))
SHORTTMP[$STRINGNUM]="${ary[$key]}"
SHORT[$STRINGNUM]="${ary[$key]}"
fi
done
for key in "${!SHORT[@]}"
do
#echo "line: $key is: ${SHORT[$key]}"
echo "Playing line: $(($key+1)) of $(($STRINGNUM+1))"
mpg123 -q "http://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&tl=Fr-fr&q=${SHORT[$key]}"
done
Comme tu peux le voir le script de génération d'annonce crée un fichier texte puis ce fichier est envoyé à google qui retourne un fichier wave lu directement avec mpg123 dans la sortie audio par défaut.

Vas y étapes par étape :
- Connexion bluetooth
- Test de la synthétisation de texte
- Script de génération de texte
- Puis automatisation dans domoticz.

Bon courage et have fun :)

Re: annonce vocale....

Publié : 18 oct. 2017, 14:04
par totof60
Merci Sopalin pour les scrips

Mais attention tu as mis tes clés pour la météo ; tu risque de dépasser ton cota !

Re: annonce vocale....

Publié : 18 oct. 2017, 18:02
par victor81
bonjour, tes scripts m'interresse :D
donc si je comprend bien:
je vais creer un compte openweather pour avoir une clef
ensuite, je copie les scripts (apres modif des données personnelle) dans 3 fichier avec une extension en .sh ( si j'ai bien compris car c'est un fichier shell) puis je copie les 3 fichier dans "/home/pi/domoticz/scripts". c'est cela?
doije les rendre executable ( et si oui comment :p )

merci :)

Re: annonce vocale....

Publié : 18 oct. 2017, 20:35
par le belge
Salut Sopalin (et les autres lol)

excellent , merci pour ton partage !
ça fait une bonne base pour mon apprentissage ... dès que j'ai un peu de temps , je me lance !!!!

encore merci à toi

Mike

Re: annonce vocale....

Publié : 19 oct. 2017, 09:24
par totof60
victor81 a écrit :bonjour, tes scripts m'interresse :D
donc si je comprend bien:
je vais creer un compte openweather pour avoir une clef
ensuite, je copie les scripts (apres modif des données personnelle) dans 3 fichier avec une extension en .sh ( si j'ai bien compris car c'est un fichier shell) puis je copie les 3 fichier dans "/home/pi/domoticz/scripts". c'est cela?
doije les rendre executable ( et si oui comment :p )

merci :)
Pour la partie audio j'utilise un émetteur Bluetooth sur la sortie audio du pi.
Donc pas de configuration Bluetooth pour moi.

Pour le lecteur audio j'utilise mplayer car je n'ai pas trouvé les options de volume avec mpg123 ( si quelqu'un sait faire , merci !)
J'ai donc remplacer la ligne

Code : Tout sélectionner

mpg123 -q
par

Code : Tout sélectionner

mplayer -noconsolecontrols  -af volume=10

Pour les 2 autres scripts je les copie dans "/home/pi/domoticz/scripts/bash" ( c'est là que sera créé le fichier " data.txt")
Le premier qui génère l'annonce je l'appelle : annonce.sh
Le deuxième qui s'occupe du boulot de Google et contourne la limitation à 100 caractères : Speech.sh ( avec S majuscule)

Pour les rendre exécutables tu vas dans le repertoire où tu as mis tes scripts:

Code : Tout sélectionner

cd /home/pi/domoticz/scripts/bash

tu rends tes script exécutables avec tous les droits

Code : Tout sélectionner

sudo chmod 777 annonce.sh

Code : Tout sélectionner

sudo chmod 777 Speech.sh
Pour lancer le script

Code : Tout sélectionner

./annonce.sh
Dans un device de domoticz Action on :

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/bash/annonce.sh
Image

Voilà , si j'ai commis des erreurs ; désolé ! merci à ceux qui corrigerons mon manque d'experience ;)

Re: annonce vocale....

Publié : 19 oct. 2017, 09:44
par victor81
genial, tu m'a carrement fait un tuto! mille merci.
je l'essai des que possible :)