[LUA] Gestion télé Sony Bravia au cas où …
Publié : 14 sept. 2019, 02:17
Bonsoir,
Au cas où car les scripts pour les télés Samsung fleurissent mais pas grand-chose pour les télés Sony Bravia.
Comme j'en ai marre de cavaler à la recherche de la télécommande
J'ai décidé de me fendre d'un script pour, au mieux allumer/éteindre la télé et pourquoi pas mettre ma chaine préférée en fonction du jour et de l'heure.
Pour cela :
° J'ai créé deux "dummy" de type "switch" ° Pour le "dummy" délai dans l'onglet "Modifier" j'ai indiqué un délai d'extinction de 10 secondes : L'idée étant qu'un délai de 10 secondes soit respecté après l'allumage avant l'envoi d'une commande de changement de chaine.
° J'ai copié le script de type Device ci-dessous dans l'éditeur :
A ce stade il est possible d'allumer la télé via l'UI. La chaine par défaut sera allumée (Ligne : chaine_def)
L'idée a été ensuite de mettre une chaine en fonction d'un jour et d'une heure pour cela on peut renseigner de chaine1 à chaine5 par exemple chaine1 est renseignée :
On indique les jours suivi de l'horaire et de la chaine. Vous l'aurez compris dans l'exemple ma femme et moi aimons "Tout le monde veut prendre sa place" 
Pour cela il faut copier le script ci-dessous dans le répertoire : "/home/pi/domoticz/scripts" et choisir un nom "bravia_chanel.sh" dans l'exemple. Il faut penser à modifier l'adresse IP du télé.
Voilà, en espérant que ces scripts soient d'une aide quelconque. Merci d'avance pour vos retours et/ou propositions d'améliorations.
Au cas où car les scripts pour les télés Samsung fleurissent mais pas grand-chose pour les télés Sony Bravia.
Comme j'en ai marre de cavaler à la recherche de la télécommande
Pour cela :
° J'ai créé deux "dummy" de type "switch" ° Pour le "dummy" délai dans l'onglet "Modifier" j'ai indiqué un délai d'extinction de 10 secondes : L'idée étant qu'un délai de 10 secondes soit respecté après l'allumage avant l'envoi d'une commande de changement de chaine.
° J'ai copié le script de type Device ci-dessous dans l'éditeur :
Code : Tout sélectionner
--[[
Script de type "device" : Allumer ou éteindre un TV Sony Bravia.
Mettre la chaine préférée en fonction du jour et de l'heure.
Sources : https://www.domoticz.com/forum/viewtopic.php?t=8301
https://www.jeedom.com/forum/viewtopic.php?t=11054&start=40#p522022
Prérequis : Un télé Sony Bravia avec Androïd de préférence après 2015
Un "Dummy" avec le nom que vous souhaitez de type On/Off (Allumage Tv)
Un "Dummy" avec le nom que vous souhaitez de type On/Off (Delai)
web : En cours de rédaction ...
lmet [v: 0.1] : Version initiale.
]]--
---------------------------------------- VARIABLES: VALEURS A EDITER -----------------------------------------------
local intervirt = "TV_OnOff_Salon" -- Nom du dummy "TV_OnOff_Salon" par exemple.
local delaivirt = "Delai_TV_Salon" -- Nom du dummy de délai "Delai_TV_Salon" par exemple.
local ip_sony = "<IP_TV>" -- Adresse IP du télé Sony.
local rep_script = "/home/pi/domoticz/scripts/" -- Répertoire contenant le script à exécuter.
local nom_script = "bravia_chanel.sh" -- Nom du script à lancer.
local chaine_def = 5 -- Chaine à mettre par défaut.
local chaine1 = "Lu-Ma-Me-Je-Ve-Sa-Di,11-13,2" -- Chaine préférée en fonction de l'heure et du jour.
local chaine2 = "x" -- Chaine préférée en fonction de l'heure et du jour.
local chaine3 = "x" -- Chaine préférée en fonction de l'heure et du jour.
local chaine4 = "x" -- Chaine préférée en fonction de l'heure et du jour.
local chaine5 = "x" -- Chaine préférée en fonction de l'heure et du jour.
local log = false -- Si true --> Affiche quelques infos dans les log
-------------------------------------- FIN VARIABLES: VALEURS A EDITER ---------------------------------------------
local url = "http://" .. ip_sony .. "/sony/system"
local headername = "X-Auth-PSK"
local headervalue = "sony"
function joursem(jours)
local jour = false
local jsem = "Di-Lu-Ma-Me-Je-Ve-Sa"
local jours = string.sub(jours,1,string.find(jours,",")-1)
local jours = string.gsub(jours, "-", "")
local nbjours = tonumber(string.len(jours) /2)
for i = 0, nbjours - 1 do
rech = string.sub(jours,i*2+1,i*2+2)
rech = string.find (jsem,rech)
rech = (rech -1)/3
if tonumber(os.date("%w")) == tonumber(rech) then
jour = true
break
end
end
return jour
end
function horaire (jours)
local heure = false
local debut = string.find(jours,",")+1
local fin = string.find(jours,",",debut)-1
local heures = string.sub(jours,debut,fin)
h_debut = string.sub(heures,1,string.find(heures,"-")-1)
h_fin = string.sub(heures,string.find(heures,"-")+1)
local now = os.date("*t")
if now.hour >= tonumber(h_debut) and now.hour <= tonumber(h_fin)-1 then
heure = true
end
return heure
end
function chaine (jours)
local debut1 = string.find(jours,",")+1
local fin1 = string.find(jours,",",debut)-1
local debut2 = string.find(jours,",",debut1)+1
local fin2 = string.find(jours,",",fin1)-1
local v_chaine = string.sub(jours,debut2)
return v_chaine
end
function power (mode)
local cmd = 'curl -v -H \"Content-Type:application/json\" -H \"' .. headername .. ':' .. headervalue .. '\" -d \"'
cmd = cmd .. '{\\"id\\":2,\\"method\\":\\"setPowerStatus\\",\\"version\\":\\"1.0\\",\\"params\\":[{ \\"status\\" : '
if mode == "On" then
cmd = cmd .. 'true'
else
cmd = cmd .. 'false'
end
cmd = cmd .. '}]}'.. '\" ' .. url .. ''
return cmd
end
commandArray = {}
if (devicechanged[intervirt]== "On") then
local cmd = power ("On")
local ret = os.execute(cmd)
commandArray[#commandArray + 1] = {[delaivirt] = "On"}
end
if (devicechanged[delaivirt] == "Off") then
trouve = false
chaine_en_cours = {chaine1,chaine2,chaine3,chaine4,chaine5}
for i,v in ipairs(chaine_en_cours) do
if string.find(v,"x",1)== nil then
jour = joursem(v)
heure = horaire(v)
if jour and heure then
v_chaine = chaine(v)
trouve = true
break
end
else
break
end
end
if trouve == false then
v_chaine = tostring(chaine_def)
end
cmd = 'bash ' .. rep_script .. nom_script .. ' ' .. v_chaine
ret = os.execute(cmd)
end
if (devicechanged[intervirt]== "Off") then
local cmd = power ("Off")
local ret = os.execute(cmd)
end
return commandArrayL'idée a été ensuite de mettre une chaine en fonction d'un jour et d'une heure pour cela on peut renseigner de chaine1 à chaine5 par exemple chaine1 est renseignée :
Code : Tout sélectionner
local chaine1= "Sa-Di-Lu-Ma-Me-Je-Ve,11-13,2" -- Chaine préférée en fonction de l'heure et du jour.Pour cela il faut copier le script ci-dessous dans le répertoire : "/home/pi/domoticz/scripts" et choisir un nom "bravia_chanel.sh" dans l'exemple. Il faut penser à modifier l'adresse IP du télé.
Code : Tout sélectionner
#!/bin/bash
AuthHeader="X-Auth-PSK"
PreSharedKey="sony"
IPPATH="<IP_Sony>/sony/IRCC"
Str=$1
if [ $Str -lt 10 ]; then
Num1=${Str:0:1}
DeuxiemeDigit=""
else
Num1=${Str:0:1}
Num2=${Str:1:1}
DeuxiemeDigit="vrai"
fi
declare -A commandmap
commandmap[0]="AAAAAQAAAAEAAAAJAw=="
commandmap[1]="AAAAAQAAAAEAAAAAAw=="
commandmap[2]="AAAAAQAAAAEAAAABAw=="
commandmap[3]="AAAAAQAAAAEAAAACAw=="
commandmap[4]="AAAAAQAAAAEAAAADAw=="
commandmap[5]="AAAAAQAAAAEAAAAEAw=="
commandmap[6]="AAAAAQAAAAEAAAAFAw=="
commandmap[7]="AAAAAQAAAAEAAAAGAw=="
commandmap[8]="AAAAAQAAAAEAAAAHAw=="
commandmap[9]="AAAAAQAAAAEAAAAIAw=="
IRCC1=${commandmap[$Num1]}
ret=$(curl -sw "%{HTTP_CODE}" --silent -XPOST http://$IPPATH -H "$AuthHeader: $PreSharedKey" -d "<?xml version=\"1.0\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:X_SendIRCC xmlns:u=\"urn:schemas-sony-com:service:IRCC:1\"><IRCCCode>"$IRCC1"</IRCCCode></u:X_SendIRCC></s:Body></s:Envelope>" -H 'Content-Type: text/xml; charset=UTF-8' -H 'SOAPACTION: "urn:schemas-sony-com:service:IRCC:1#X_SendIRCC"' -o /dev/null)
if [ $DeuxiemeDigit == "vrai" ] ; then
IRCC2=${commandmap[$Num2]}
sleep .2
ret=$(curl -sw "%{HTTP_CODE}" --silent -XPOST http://$IPPATH -H "$AuthHeader: $PreSharedKey" -d "<?xml version=\"1.0\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:X_SendIRCC xmlns:u=\"urn:schemas-sony-com:service:IRCC:1\"><IRCCCode>"$IRCC2"</IRCCCode></u:X_SendIRCC></s:Body></s:Envelope>" -H 'Content-Type: text/xml; charset=UTF-8' -H 'SOAPACTION: "urn:schemas-sony-com:service:IRCC:1#X_SendIRCC"' -o /dev/null)
fi