Page 1 sur 1

Alexa, Domoticz et Freebox sont dans un bateau...

Publié : 04 août 2019, 14:19
par aleph0
... alexa tombe alhau...

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%" 8-) Dans la suite de l'explication, je suppose que vous avez déjà la skill alhau fonctionnelle avec votre domoticz et me concentre sur la partie "commande du player avec domoticz". Voir le site officiel et son forum si ce n'est pas le cas.

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

"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
A ce stade, on peut déjà utiliser les dummies domoticz comme une télécommande freebox sur le smartphone.

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 :-( Pour aller au delà, il faudrait utiliser un dummy "thermostat" au lieu du dimmer
- 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 !! :D

Re: Alexa, Domoticz et Freebox sont dans un bateau...

Publié : 04 août 2019, 23:32
par Jeff
Merci pour le partage et moi aussi la télécommande commence à etre fatiguer ;)