[Tuto] Alternative à Controlicz : Gestion chaines SamsungTV F serie

Vous avez créé 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.
Jyver
Messages : 4
Inscription : 08 sept. 2018, 19:58

[Tuto] Alternative à Controlicz : Gestion chaines SamsungTV F serie

Message par Jyver »

Tout d'abord, merci à tous les contributeurs de ce forum pour l'aide fournie qui m'a permis de prgresser.
Je tiens à apporter ma pierre à l'édifice.
Comme beaucoup, depuis que Controlicz est devenu payant, je cherche des alternatives.

Demander à Google Home :

- Controle de la TV Samsung Série F (chaines + volume)
- Obtenir les infos (température) de la station météo Netatmo
- Controle du Heatzy Pilote (non controlé par controlicz)

Je vais passer par GH -> IFTTT -> Domoticz -> TTS sur GH

1) Controle de la TV :

Prérequis :
- Compte IFTTT reliée à votre compte Google
- Domoticz installé sur RPI3 avec port ouvert vers l'extérieur

Code : Tout sélectionner

sudo curl -L install.domoticz.com | bash
- Commande TV Samsung pour série F (2012)
Site : https://github.com/Tristan79/iSamsungTV

Code : Tout sélectionner

wget https://github.com/Tristan79/iSamsungTV/raw/master/pi/iSamsungTV

Code : Tout sélectionner

chmod +x iSamsungTV

Code : Tout sélectionner

sudo mv iSamsungTV /usr/local/bin/
Sous Domoticz :
Gestion des chaines par leur numéro :
Créer un matériel "Dumy" puis ajouter un capteur virtuel type "interrupteur sélecteur"
Ajouter la liste des chaines TV en respectant les numéros: TF1 = 10, France 2 = 20 ...
inter selecteur samsungtv.jpg
inter selecteur samsungtv.jpg (145.77 Kio) Consulté 3684 fois
Créer un script "LUA" de type "device"

Code : Tout sélectionner

function sleep (a) 
    local sec = tonumber(os.clock() + a); 
    while (os.clock() < sec) do 
    end 
end

commandArray = {}

if devicechanged['SamsungTV - Chaines'] == 'TF 1' then
	os.execute('/usr/local/bin/iSamsungTV F VOTRE_IP_LOCALE_delaTV -KEY KEY_1')
elseif devicechanged['SamsungTV - Chaines'] == 'FranceInfo' then
	os.execute('/usr/local/bin/iSamsungTV F VOTRE_IP_LOCALE_delaTV -KEY KEY_2')
sleep(2)	
	os.execute('/usr/local/bin/iSamsungTV F VOTRE_IP_LOCALE_delaTV -KEY KEY_7')
sleep(2)	
	os.execute('/usr/local/bin/iSamsungTV F VOTRE_IP_LOCALE_delaTV -KEY KEY_ENTER')
end
return commandArray

Rajouter les autres chaines suivant le même modèle.


Sous IFTTT :
Créer un Nouvel "Applet"
IF : "Google Assisant" "Say a phrase with a number ingedient"
"chaine numéro #"
THEN : "Webhooks"

Code : Tout sélectionner

https://ID:MDP@IP_FIXE:PORT_OUVERT/json.htm?type=command&param=switchlight&idx=VOTRE_IDX_DE_DOMOTICZ&switchcmd=Set%20Level&level= {{NumberField}}0
Bien mettre le "0" (zéro) à la fin.

Voilà pour cette partie
nono212
Messages : 24
Inscription : 03 sept. 2018, 14:15
Localisation : Bruxelles

Re: Alternative à Controlicz : Gestion chaines SamsungTV F serie

Message par nono212 »

Merci Jyver
Tu me donne des idées ...
Malheureusement je n' ai pas de google Home moi je suis plutot Alexa ...
Par contre ne serais ce pas mieux de mettre comme triger la chaine plus tot que le numero
met la chaine TF1 plutot que met la chaine 10 ?


Utiliser say a phrase to a text ?

J'essaye en attendant de faire qqch avec Alexa ... mais c 'est pas gagné
Jyver
Messages : 4
Inscription : 08 sept. 2018, 19:58

Re: Alternative à Controlicz : Gestion chaines SamsungTV F serie

Message par Jyver »

Je fais suite à ta demande, j'avais déjà fait quelque chose mais je n'ai pas trop eu le temps de me mettre au tuto.
Cela me motive alors pour le faire ;) :
Avant sous Controlicz, j'avais créé un interrupteur par chaine et je disais
"OK Goggle, allume TF1" et cela mettait en "On" l'interrupteur "TF1"
J'ai conservé tout ce travail et je l'ai adapté pour pouvoir l'utiliser sans Controlicz.
Je me suis moi même inspiré de tuto pour Jeedom et appliqué pour Domoticz. A voir pour une utilisation avec Alexa...

Demander à Google Home :

- Controle de la TV Samsung Série F (nom des chaines + volume)

Je vais passer par GH -> IFTTT (ingrédient "text" et envoi dans une variable)-> Domoticz (mise à jour de cette variable) -> Action sur TV (mise sur "On" de l'interrupteur correspondant) -> Action sur la TV

1) Sous IFTTT :

Nouvel Applet : "Say a phrase with a text ingredient"
Question : "Chaine télé $"
Webhooks :

Code : Tout sélectionner

https://USER:PSWRD@IP_FIXE:PORT_EXT/json.htm?type=command&param=updateuservariable&vname=chaine_TV&vtype=2&vvalue=<<<{{TextField}}>>>
2) Controle de la TV :

Voir ci-dessus pour l'installation

Sous Domoticz :
Gestion des chaines par leur nom de chaine :
Création d'une variable dans Reglages/Plus d'option/Variables utilisateur
Nom : chaine_TV
Type : Chaine
Valeur : Test

Pour vérifier comment google home "comprend" le nom des chaines, il faut essayer la phrase dans IFTTT pour copier la syntxe des chaines.Ex :
"Chaine télé TF1"
pour savoir si la variable donne "TF1", "T F 1", "té eff un"
Finalement, ca donne "TF 1".

Créer un matériel "Dumy" puis ajouter un capteur virtuel type "interrupteur" pour chaque chaine avec comme nom le nom de la chaine précédement trouvé


Créer un script "LUA" de type "device" que j'ai appelé "gestion_chaine"
Exemple avec une chaine à "une" touche et une autre à 2 touches :

Code : Tout sélectionner

function sleep (a)
 
    local sec = tonumber(os.clock() + a);
 
    while (os.clock() < sec) do
 
    end 

end
commandArray = {}
if devicechanged['TF 1'] == 'On' then

	os.execute('/usr/local/bin/iSamsungTV F IP_LOCALE_TV -KEY KEY_1')

end
if devicechanged['France 4'] == 'On' then

	os.execute('/usr/local/bin/iSamsungTV F IP_LOCALE_TV -KEY KEY_1')

sleep(2)

	os.execute('/usr/local/bin/iSamsungTV F IP_LOCALE_TV -KEY KEY_4')

sleep(2)

	os.execute('/usr/local/bin/iSamsungTV F IP_LOCALE_TV -KEY KEY_ENTER')

end
return commandArray
Rajouter les autres chaines suivant le même modèle.

J'avas déjà codé ce script pour Controlicz.
IL faut rajouter un autre script LUA de type "uservariable" nommé "ChaineTV_IFTTT" :

Code : Tout sélectionner

function sleep (a)
 
    local sec = tonumber(os.clock() + a);
 
    while (os.clock() < sec) do
 
    end 

end


commandArray = {}


-- loop through all the changed variables

for variableName,variableValue in pairs(uservariablechanged) do

    print ("Variable based event fired on '"..variableName.."', value '"..tostring(variableValue).."'");


if (variableName=='chaine_TV') then

    commandArray[uservariables['chaine_TV']] = "On"

end


if (variableName=='vol_up') then

    for j = 0, uservariables['vol_up']  do

	    os.execute('/usr/local/bin/iSamsungTV F IP_TV_LOCALE -KEY KEY_VOLUP')

	    sleep(1)

    end

end


if (variableName=='vol_down') then

    for j = 0, uservariables['vol_down']  do

	    os.execute('/usr/local/bin/iSamsungTV F IP_TV_LOCALE -KEY KEY_VOLDOWN')

	    sleep(1)

    end

end
return commandArray
Dans ce script je gère également le son de la TV avec 2 webhooks IFTTT, à l'aide d'une variable de type "chaine" dans domoticz :
"monte le volume de la télé de #"
Webhooks :

Code : Tout sélectionner

https://USER:PSWRD@IP_FIXE:PORT_EXT/json.htm?type=command&param=updateuservariable&vname=vol_up&vtype=2&vvalue= {{NumberField}}
avec une "uservariable" dans domoticz nommée "vol_up"

Pour le volume, j'avais créé un interrupteur volume pour monter le son de "1" quand on l'allumait et cela baissait le son de "1" quand on l'éteignait.
J'avais créé un autre interrupteur "supervolume" qui montait ou descendait le volume de "5".
Maintenant je monte ou diminue le volume de la "quantité que je veux ! :D

Voilà en espérant avoir répondu à ta question ...
Répondre