Pour ceux qui ne parvienne pas à controler leur freebox avec google home et domoticz.
Voici un petit tuto pour changer de chaines, je rajouterais les autres fonctions ensuite.
J'utilise IFTTT pour envoyer les commandes vocale en Json.
Donc inscrivez vous sur le site avec votre compte google.
Ensuite il faut créer une "applets", sorte d'appli pour vos commandes vocales (et autres), donc on clique sur MyApplets et sur la droite on clique sur New applet (à droite), on arrive alors sur une page ressemblant à celle-ci
Cliquez sur "+ this" (en bleu)
une barre de recherche apparait, vous tapez "google assistant", une fois l'icone de google assistant apparue, cliquez dessus
Sur cet écran on vous demande de choisir un "trigger" (ce qui va déclancher google home), pour mon tuto il en faudra 2,
- "say a phrase with a number"
- "say a phrase with a text ingredient"
Pourquoi 2 ? simplement pour pouvoir demander de zapper sur la 24 ou zapper sur RMC, l'un est considéré comme un chiffre (booléen) et le second comme une phrase (string)
Commencons par celui avec le chiffre, on clique sur "say a phrase with a number"
un formulaire apparait :
case : What do you want to say
Dans cette case on indique ce que l'on dira à google home pour déclancher l'action, on peut mettre pratiquement ce que l'on veut mais certains mots sont réservé comme "chaine" donc attention, moi j'utilise (sans les guillemets : "mets la #" (le # est très important car il remplace le chiffre que vous allez dire (on va pas faire un applet par chaine
Les deux cases suivantes permettent de mettre d'autre variantes de votre phrase, exemple zappe sur la # (on oubli pas le #)
Case what do you want the assistant to say in response
on indique ce que dira google lorsqu'il entendra la commande, j'ai mis : ok, je zappe sur la # (google va repeter le chiffre de votre chaine grace au #)
language, choisir french et cliquer sur create trigger.
La page de tout à l'heure, reviens, enfin c'est pas tout à fait la même, car le +this de tout à l'heure c'est transformé en icone google assistant.
Cliquez sur +That, action que doit faire google quand il entend mets la #
nouvelle page, choose action service.
Dans la barre de recherche, rechercher webhooks et cliquer dessus, une case bleue apparait "make a web request", cliquer dessus.
Première case URL :
c'est ici que l'on va mettre la commande json, ne pas utiliser l'adresse ip local, cela ne fonctionne pas, si vous n'avez pas d'ip statique, il faut créer une adresse sur un DNS, je vous laisse regarder sur le net.
Notre commande va permettre de renseigner une variable sur domoticz (afin de récupérer le numéro de la chaine)
Code : Tout sélectionner
http://IP:PORT/json.htm?type=command¶m=updateuservariable&id=1&vname=freebox&vtype=2&vvalue=<<<{{NumberField}}>>>vname=freebox --> le nom de la variable (ne pas le modifier si vous ne savez pas ce que vous faites)
Type=2 pour indiquer le type de variable 1 pour les chiffres et 2 pour les phrases (oui j'utilise 2, ca me facilite mes scripts)
value={{NumberField}} la valeur que l'on va donner à la variable (le chiffre de la chaine que l'on viens de demander à google)
Case Method : GET
les autres cases, on s'en fiche.
cliquez sur Save et voilà.
On passe au second, c'est la même chose mais on va choisir l'applet say a phrase with a text ingredient.
on clique sur +this et on recherche google assistant.
premier écran, on remet la même chose que tout à l'heure mais on remplace le # par un $ (# pour les chiffres, $ pour les mots)
on clique sur create a trigger.
on clique sur +That, on recherche webhooks, on clique sur la case bleue.
Dans URL on remet la même chose, mais on remplace {{NumberField}} par {{TextField}} :
Code : Tout sélectionner
http://IP:PORT/json.htm?type=command¶m=updateuservariable&id=1&vname=freebox&vtype=2&vvalue=<<<{{TextField}}>>>On sauvegarde.
Voilà terminé pour IFTTT.
Du côté de domoticz maintenant :
on va créer la variable qui permet de recevoir le chiffre ou la phrase que vous avez demandez à google pour changer de chaine
Cliquez sur Réglages | plus d'options | variables utilisateur
Dans le champ Nom de la variable, mettre : freebox
Type de variable : Chaîne
cliquer sur Ajouter, votre variable apparait dans le tableau du dessus. (on y est presque)
Voilà tout est prêt, ne reste plus qu'à ajouter le script.
J'ai fait un script lua (optimisable surement, je ne suis pas dev
sur votre RPI ou pc où se trouve votre serveur domoticz, allez dans le répertoire /domoticz/scripts/lua
Code : Tout sélectionner
cd ~/domoticz/scripts/lua
Code : Tout sélectionner
Sudo nano script_variable_freebox.luaEt à l'intérieur de celui-ci, coller le code ci-dessous :
Edit : Script du 09/11
Modifier en fonction de votre systeme la variable "user" en remplaçant "pi" par autre chose, qui correspond au répertoire après /home/
ON NE TOUCHE PAS AUX AUTRES ! (sauf si vous savez ce que vous faites;))
Code : Tout sélectionner
commandArray = {}
user="pi"
ifttt=uservariables["freebox"]
ifttt=string.lower(ifttt)
print("valeur d'ifttt au début du script : "..ifttt)
if ifttt=="vide" or ifttt== nil then
print("sortie du script")
return commandArray
else
print("lancement du script freebox.sh avec ifttt = "..ifttt)
os.execute('/home/'..user..'/domoticz/scripts/freebox_4k.sh '..ifttt)
end
raz="vide"
commandArray['Variable:freebox']=''..raz
return commandArray
Maintenant il faut installer le script pour la mini 4k.
Tout d'abord il faut installer les outils nécessaires au bon fonctionnement :
Code : Tout sélectionner
sudo apt install android-tools-adb# Sur votre mini4k
# - paramètres
# - À propos
# - Appuyer sur OK 8 fois sur la ligne Build (passage en mode développeur)
# - paramètres
# - Options pour les développeurs (Dernière options de la 2ème ligne)
# - Débogage
# - Débogage USB
# - Activé
# UTILISATION
# À la première utilisation, une demande d'authorisation va s'afficher sur votre télé. Cocher toujours accepter
Ensuite :
Vous allez créer des répertoires afin d'avoir ce chemin /var/www/html/plugins/Freebox_OS/ressources
Puis vous créez un fichier que vous appelez mini4k_cmd.sh (source)
et vous y mettez ce code :
Code : Tout sélectionner
# - Message
# -- "Requête" : /var/www/html/plugins/script/core/ressources/mini4k_cmd IP_DE_VOTRE_MINI4K" #message#
# Commandes acceptées :
# - ON
# - OFF
# - XX (où XX est le n° de chaîne)
# - MUTE
# - VOL+ [X] (X est une valeur facultative comprise entre 1 et 4)
# - VOL- [X] (X est une valeur facultative comprise entre 1 et 4)
# - VOL XX (XX est le niveau sonore entre 0 et 100 (?))
# - PAUSE
# - PRG+
# - PRG-
# - Logical ID
mini4k_ip=$1
param=$2
is_valid_cmd=0
if [[ $param =~ ^[0-9]+$ ]]
then
chaine=($(echo $param |sed 's/\(.\)/\1 /g'))
cmd="input "
for element in "${chaine[@]}"
do
cmd="$cmd keyevent $(($element + 7)) "
done
is_valid_cmd=1
fi
if [[ $param == "power" || $param == "OFF" ]]
then
sudo /usr/bin/adb connect $mini4k_ip
statut=$(sudo /usr/bin/adb shell dumpsys power -h | grep "Display Power" | sed 's/\.*Display Power: state=\(\w\)/\1/' | tr -d '\r\n')
sudo /usr/bin/adb disconnect
if [[ $param != $statut || $param == "power" ]]
then
cmd="input keyevent 26"
is_valid_cmd=1
fi
fi
if [[ $param == "mute" ]]
then
cmd="input keyevent 164"
is_valid_cmd=1
fi
if [[ $param == "down" ]]
then
cmd="input keyevent 20"
is_valid_cmd=1
fi
if [[ $param == "up" ]]
then
cmd="input keyevent 19"
is_valid_cmd=1
fi
if [[ $param == "left" ]]
then
cmd="input keyevent 21"
is_valid_cmd=1
fi
if [[ $param == "right" ]]
then
cmd="input keyevent 22"
is_valid_cmd=1
fi
if [[ $param == "red" ]]
then
cmd="input keyevent 183"
is_valid_cmd=1
fi
if [[ $param == "green" ]]
then
cmd="input keyevent 184"
is_valid_cmd=1
fi
if [[ $param == "yellow" ]]
then
cmd="input keyevent 185"
is_valid_cmd=1
fi
if [[ $param == "blue" ]]
then
cmd="input keyevent 186"
is_valid_cmd=1
fi
if [[ $param == "home" ]]
then
cmd="input keyevent 3"
# cmd="input keyevent 170"
is_valid_cmd=1
fi
if [[ $param == "rec" ]]
then
cmd="input keyevent 130"
is_valid_cmd=1
fi
if [[ $param == "bwd" ]]
then
cmd="input keyevent 275"
is_valid_cmd=1
fi
if [[ $param == "prev" ]]
then
cmd="input keyevent 88"
cmd="input keyevent 89"
is_valid_cmd=1
fi
if [[ $param == "play" ]]
then
cmd="input keyevent 126"
cmd="input keyevent 85"
is_valid_cmd=1
fi
if [[ $param == "fwd" ]]
then
cmd="input keyevent 90"
is_valid_cmd=1
fi
if [[ $param == "next" ]]
then
cmd="input keyevent 87"
cmd="input keyevent 90"
is_valid_cmd=1
fi
if [[ $param == "ok" ]]
then
cmd="input keyevent 66"
cmd="input keyevent 23"
is_valid_cmd=1
fi
#if [[ $param =~ vol_* ]]
#then
# if [[ ${param:3:1} == "inc" || ${param:3:1} == "dec" ]]
# then
# step=1
# if [[ -n $3 && $3 =~ ^[0-9]+$ && $3 -ge 1 && $3 -le 4 ]]
# then
# step=$3
# fi
# step="${param:3:1}$step"
# cmd="service call audio 3 i32 $step i32 1"
# is_valid_cmd=1
# else
# vol=10
# if [[ -n $3 && $3 =~ ^[0-9]+$ ]]
# then
# vol=$3
# fi
# cmd="service call audio 6 i32 $vol i32 1"
# is_valid_cmd=1
# fi
#fi
if [[ $param == "vol_inc" ]]
then
cmd="input keyevent 24"
is_valid_cmd=1
fi
if [[ $param == "vol_dec" ]]
then
cmd="input keyevent 25"
is_valid_cmd=1
fi
if [[ $param == "PAUSE" ]]
then
cmd="input keyevent 127"
is_valid_cmd=1
fi
if [[ $param == "prgm_inc" ]]
then
cmd="input keyevent 166"
is_valid_cmd=1
fi
if [[ $param == "prgm_dec" ]]
then
cmd="input keyevent 167"
is_valid_cmd=1
fi
if [[ $is_valid_cmd -eq 1 ]]
then
ok=1
retry=0
while [[ $ok -gt 0 && $retry -lt 2 ]]
do
sudo /usr/bin/adb connect $mini4k_ip
sudo /usr/bin/adb shell $cmd
ok=$?
sudo /usr/bin/adb disconnect
retry=$(( $retry + 1))
done
fi
Ajouter une fonction ou le chiffre keyevent correspond à une touche de la télécommande. (fouillez le fichier pour avoir les correspondances.
Code : Tout sélectionner
if [[ $param == "test" ]]
then
sudo /usr/bin/adb connect $mini4k_ip
sudo /usr/bin/adb shell "input keyevent 3"
sleep 2
sudo /usr/bin/adb shell "input keyevent 20"
sudo /usr/bin/adb shell "input keyevent 20"
sudo /usr/bin/adb shell "input keyevent 22"
sudo /usr/bin/adb shell "input keyevent 22"
sudo /usr/bin/adb shell "input keyevent 66"
sleep 1.5
sudo /usr/bin/adb shell "input keyevent 20"
sudo /usr/bin/adb shell "input keyevent 20"
sudo /usr/bin/adb shell "input keyevent 66"
sudo /usr/bin/adb shell "input keyevent 66"
sudo /usr/bin/adb disconnect
exit 0
fiCode : Tout sélectionner
sudo chmod +x mini4k_cmd.shJe n'ai pas encore mis toute les commandes, vous pouvez les ajouter et les partager afin que je les ajoute à ce tuto, sinon je le ferai plus tard, vous pouvez les retrouver dans le fichier mini4k_cmd.
Code : Tout sélectionner
#!/bin/bash
user="pi"
ip_free="192.168.1.21" #ip de la freebox
commande="bash /var/www/html/plugins/Freebox_OS/ressources/mini4k_cmd.sh $ip_free"
ifttt="" # permet de vider la variable ifttt
########################Recuperation de la valeur d'ifttt######################
case $# in
1) ifttt="$1";;
2) ifttt="$1 $2";;
3) ifttt="$1 $2 $3";;
4) ifttt="$1 $2 $3 $4";;
5) ifttt="$1 $2 $3 $4 $5";;
6) ifttt="$1 $2 $3 $4 $5 $6";;
7) ifttt="$1 $2 $3 $4 $5 $6 $7";;
8) ifttt="$1 $2 $3 $4 $5 $6 $7 $8";;
9) ifttt="$1 $2 $3 $4 $5 $6 $7 $8 $9";;
esac
case "$ifttt" in
# Par numéro de chaine
"la 1") $commande 1;;
"la 2") $commande 2;;
"la 3") $commande 3;;
"la 4") $commande 4;;
"la 5") $commande 5;;
"la 6") $commande 6;;
"la 7") $commande 7;;
"la 8") $commande 8;;
"la 9") $commande 9;;
"la 10") $commande 10;;
"la 11") $commande 11;;
"la 12") $commande 12;;
"la 13") $commande 13;;
"la 14") $commande 14;;
"la 15") $commande 15;;
"la 16") $commande 16;;
"la 17") $commande 17;;
"la 18") $commande 18;;
"la 19") $commande 19;;
"la 20") $commande 20;;
"la 21") $commande 21;;
"la 22") $commande 22;;
"la 23") $commande 23;;
"la 24") $commande 24;;
"la 25") $commande 25;;
"la 26") $commande 26;;
# Par nom de chaine
"tf 1") $commande 1;;
"france 2") $commande 2;;
"france 3") $commande 3;;
"canal plus") $commande 4;;
"france 5") $commande 5;;
"m 6") $commande 6;;
"arte") $commande 7;;
"c 8") $commande 8;;
"w 9") $commande 9;;
"tmc") $commande 10;;
"nt1") $commande 11;;
"nrj 12") $commande 12;;
"lcp") $commande 13;;
"france 4") $commande 14;;
"bfm") $commande 15;;
"cnews") $commande 16;;
"cstar") $commande 17;;
"gulli") $commande 18;;
"france haut") $commande 19;;
"tf 1 série") $commande 20;;
"l ' équipe") $commande 21;;
"6 ter") $commande 22;;
"rmc story") $commande 23;;
"rmc") $commande 24;;
# les commandes
"suivante") $commande prgm_inc;;
"précédente") $commande prgm_dec;;
"la télé") $commande home;;
"monte le son de la") $commande vol_inc;;
"baisse le son de la") $commande vol_dec;;
esac
exit 0
Ensuite ne pas oublier de rendre le fichier exécutable
Code : Tout sélectionner
sudo chmod +x ~/domoticz/scripts/freebox_4k.shPour vérifier le contenu de la variable "freebox", on met en commentaire dans le fichier script_variable_freebox.lua la ligne commandArray['Variable:freebox']=''..raz en mettant -- devant la ligne, sinon la variable se remet à "vide" automatiquement et on fait un petit :
Code : Tout sélectionner
http://ip:port/json.htm?type=command¶m=getuservariablesCode : Tout sélectionner
{
"result" : [
{
"LastUpdate" : "2017-11-09 23:00:31",
"Name" : "freebox",
"Type" : "2",
"Value" : "TF 1",
"idx" : "1"
}
],
"status" : "OK",
"title" : "GetUserVariables"
}Voilà vous pouvez dire à google :
Ok google monte le son de la freebox
Ok google mets la 1, ou TF1
Ok google mets la chaine suivante...
Les commentaires sont les bien venus, espérant ne rien avoir oublié, merci de me dire s'il y a un problème, car cela fonctionne très bien chez moi, mais ayant repris un ancien tuto et donc idem sur mon installation, j'ai peut être oublié une étape.
PS quand vous voulez ajouter une commande, vérifié la variable freebox dans domoticz ou dans les log (ce que je fais) afin de vérifier comment celle-ci est écrite, sachant que normalement les accents passent et tout est en minuscule.