Suite à l'invasion de mon domicile par ces petites boîtes rondes, je me suis demandé comment contrôler le freebox player. Il doit bien y avoir un skill, mais je suis pas assez avancé avec alexa pour le mettre en place.
Par contre, comme alhau super facile pour interfacer domoticz je me suis crée un petit script lua "quick'n dirty" qui remplace la télécommande et permet ensuite des trucs comme : "Alexa, met M6", "Alexa, met le PIP" ou "Alexa, règle le son de la télé sur 50%"
Le script utilise l'API freebox hd1.freebox.fr et à ce titre est plus fiable que bien des appli android de télécommande freebox. L'API est très bien décrite sur ce site et il vous explique aussi comment récupérer le code de télécommande à renseigner dans la fonction fbx_remote.
Il faut ensuite définir un certain nombre de "dummy" selon la capture d'écran ci-dessous :

"Prise TV" est une prise connectée qui permet de mettre sous tension tout le tintouin TV+Freebox+ampli+..., il n'est pas directement lié à ce script. Les autres oui.
Ensuite, si on veut qu'alexa connaisse le bouton par un autre de ses nom, on peut rajouter la ligne suivante en description :
Alexa_Name: alias en respectant scrupuleusement les majuscules et espaces dans le "Alexa_Name: "
Par exemple un indispensable est de définir un alias "son de la télé" sur le dimmer "Volume" sinon alexa croit qu'on lui demande de modifier son volume à elle et pas celui de la télé...
Ensuite, il faut crée une variable "old volume" et utiliser le script ci-dessous en type "Device"
Code : Tout sélectionner
-- Script pour émuler une télécommande Freebox
-- pour interfaçage avec Alexa
function UpdateVar(variable,valeur)
--Update une variable Domoticz
commandArray[#commandArray+1] = {['Variable:'..variable] = tostring(valeur)}
end
function fbx_remote(delai,touche1,...)
-- Envoi des touches de télécommande à la Freebox
-- touche1 : première touche à envoyer (obligatoire)
-- ... : autres touches à envoyer (facultatif)
-- delai : delai entre 2 touches au cas où il y en a plusieurs (ms)
local cst_code=1234567890 -- Votre code de télécommande
local cst_host="hd1.freebox.fr" -- hd1 pour le 1er player, hd2 pour le second
local args = {...}
os.execute('curl "http://'..cst_host..'/pub/remote_control?code='..cst_code..'&key='..touche1..'"')
if #args>0 then -- Plusieurs touche
for i,touche in ipairs(args) do
if delai>0 then os.execute('sleep '..tonumber(delai)/1000) end
os.execute('curl "http://'..cst_host..'/pub/remote_control?code='..cst_code..'&key='..touche..'"')
end
end
end
commandArray = {}
if devicechanged["Mute"] then fbx_remote(0,"Mute")
elseif devicechanged["Ok"] =="On" then fbx_remote(0,"Ok")
elseif devicechanged["Retour"] =="On" then fbx_remote(0,"Red")
elseif devicechanged["Pause"] then fbx_remote(0,"Play")
elseif devicechanged["TF1"] =="On" then fbx_remote(0,"1")
elseif devicechanged["France2"]=="On" then fbx_remote(0,"2")
elseif devicechanged["France3"]=="On" then fbx_remote(0,"3")
elseif devicechanged["Canal+"] =="On" then fbx_remote(0,"4")
elseif devicechanged["France5"]=="On" then fbx_remote(0,"5")
elseif devicechanged["M6"] =="On" then fbx_remote(0,"6")
elseif devicechanged["Arte"] =="On" then fbx_remote(0,"7")
elseif devicechanged["Disney"] =="On" then fbx_remote(0,"4","8")
elseif devicechanged["Gulli"] =="On" then fbx_remote(0,"1","8")
elseif devicechanged["Piwi"] =="On" then fbx_remote(0,"1","4","3")
elseif devicechanged["RMC"] =="On" then fbx_remote(0,"2","4")
elseif devicechanged["Avance"] =="On" then fbx_remote(0,"fwd")
elseif devicechanged["Recule"] =="On" then fbx_remote(0,"bwd")
elseif devicechanged["PIP"] =="On" then fbx_remote(500,"ok","ok","right","ok","red")
elseif devicechanged["PIP"] =="Off" or devicechanged["Revenir au direct"]=="On" then fbx_remote(100,"green","ok")
elseif devicechanged["Volume"] then
val_oldvol=uservariables["old volume"]
val_vol=tonumber(otherdevices_svalues["Volume"])
--print(val_oldvol,val_vol)
if val_vol>=val_oldvol then
for i=val_oldvol,val_vol-1 do fbx_remote(0,"vol_inc") end
else
for i=val_oldvol,val_vol+1,-1 do fbx_remote(0,"vol_dec") end
end
UpdateVar("old volume",val_vol)
elseif devicechanged["Chaine Freebox"] then
val_chaine=otherdevices_svalues["Chaine Freebox"]
if string.len(val_chaine)==1 then
fbx_remote(0,val_chaine)
else
fbx_remote(0,string.sub(val_chaine,1,1),string.sub(val_chaine,2,2))
end
end
return commandArray
Ensuite, se connecter à l'appli alexa et lancer une recherche de nouveaux dispositifs dans "maison connectée" et voilà
Les limitations actuelles :
- le son : on ne peux pas lire le volume actuel du freebox player avec l'API, on est donc un peu aveugle et à cause de ça le script ne cohabitera pas bien avec des changement de son à la télécommande... Je cherche toujours un workaround à ça
- J'ai crée des dummies direct pour les chaines courantes. Pour les autres, j'utilise le dimmer "Chaine freebox" avec l'alias "canal" pour pouvoir dire "Alexa, règle le canal sur 37" ou "Alexa, règle la chaine freebox sur 28". Comme le dimmer n'accepte des nombre qu'entre 0 et 100, cette astuce ne permet de choisir que les chaines inférieures à 100
- A la base, alhau est une skill de type "maison connectée", et alexa ne reconnait qu'un petit nombre d'équipements. Pour elle, avec ce script, la freebox se pilote avec des interrupteurs et des dimmers... parfois, on est donc amené à dire "allume TF1" ou "éteint le PIP" pour qu'elle comprenne. Pas très naturel mais ça marche...
Si, comme moi, vous avez des enfants qui détruisent les télécommandes freebox plus vite que ce que le compte en banque de papa ne remonte, ce script a bien l'air d'être la solution !!