Contrôler sa freebox mini4k avec google Home

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
Répondre
loteran
Messages : 58
Enregistré le : 29 oct. 2017, 18:59

Contrôler sa freebox mini4k avec google Home

Message par loteran » 13 janv. 2019, 14:14

J'ai repris mon ancien tuto servant à contrôler la freebox révolution et y ai apporté des modifications pour la mini4k.

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

Image

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)
Image

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&param=updateuservariable&id=1&vname=freebox&vtype=2&vvalue=<<<{{NumberField}}>>>
updateuservariable&id=1 --> correspond à l'idx de votre variable, ici 1, je n'en ai pas d'autres
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&param=updateuservariable&id=1&vname=freebox&vtype=2&vvalue=<<<{{TextField}}>>>
Method GET
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
Créer un script lua dans lequel vous allez mettre le code plus bas.

Code : Tout sélectionner

Sudo nano script_variable_freebox.lua
(le nom doit absolument commencer par script_variable et finir en .lua, cela permet à domoticz de lancer le script quand la variable freebox change, en gros quand on demande à google de zapper)

Et à 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
Nous sommes bon du côté de domoticz.


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
Puis sur votre freebox, permettre le déboguage USB pour en prendre le contrôle :

# 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
Si vous souhaitez créer des combinaison de touches afin de sélectionner une appli comme youtube ou autre, exemple : Menu, bas, bas, droite, ok
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
fi
Rendre le fichier exécutable

Code : Tout sélectionner

sudo chmod +x mini4k_cmd.sh
Ensuite on créé un fichier de transition entre domoticz et le script (mini4k_cmd.sh) permettant d'envoyer les commandes à la freebox.
Je 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.sh
J'ai ajouté un commentaire dans les logs de domoticz lorsque qu'une commande n'est pas reconnue, pour plus de clarté.

Pour 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&param=getuservariables
on obtiens un résultat du type :

Code : Tout sélectionner

{
   "result" : [
      {
         "LastUpdate" : "2017-11-09 23:00:31",
         "Name" : "freebox",
         "Type" : "2",
         "Value" : "TF 1",
         "idx" : "1"
      }
   ],
   "status" : "OK",
   "title" : "GetUserVariables"
}
Donc dans mon exemple, la variable freebox prend la valeur "TF 1"[/i]

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.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Johann
Messages : 8
Enregistré le : 28 janv. 2019, 16:45

Re: Contrôler sa freebox mini4k avec google Home

Message par Johann » 21 févr. 2019, 19:17

Merci ça marche nickel, j'ai pas encore essayé toute les commandes mais le changement de chaines c'est top :)

loteran
Messages : 58
Enregistré le : 29 oct. 2017, 18:59

Re: Contrôler sa freebox mini4k avec google Home

Message par loteran » 13 oct. 2019, 16:03

N'oubliez pas de faire des combinaisons, cela permet par exemple de changer de HDMI automatiquement (passer du HDMI du PC à la TV par exemple) il suffit de demander à lancer la touche Home puis la touche retour et la TV change d'HDMI en affichant votre chaine.

N'hésitez pas à proposer des choses. :)

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre