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