Voici le script qui tourne depuis ce soir. Encore merci à papoo et chrominator pour m'avoir aiguillé sur la manière de filtrer le contenu d'une variable de type chaîne.
Code : Tout sélectionner
--[[
- script qui gére le décodeur canalsat
- nécessite une variable de type chaîne nommée zappingtele. les requêtes http mettent à jours cette variable qui déclenche ce script à chaque mise à jours.
pour les requêtes get http le type de uservariable est donné en dessous
uservariabletype = le type de valeur à stocker, entre 0 et 4 :
0 = Entier, e.g. -1, 1, 0, 2, 10
1 = Float, e.g. -1.1, 1.2, 3.1
2 = chaine, ex coucou
3 = Date au format DD/MM/YYYY
4 = Heure au format 24hr HH:MM
la forme de la requête est domoticzIp/json.htm?type=command¶m=updateuservariable&idx=idx&vname=uservariablename&vtype=uservariabletype&vvalue=uservariablevalue
]]--
dofile('/home/pi/domoticz/scripts/lua/modules.lua')
local debug = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local devices = {}
-- tableau à renseigner {'ordre', 'commande harmony'}. Ceux sont des requetes qui ne sont numériques dans la variable zappingtele
devices[#devices+1] = {'baisse', 'VolumeDown'}
devices[#devices+1] = {'monte', 'VolumeUp'}
devices[#devices+1] = {'plus', 'ChannelUp'}
devices[#devices+1] = {'moins', 'Channeldown'}
devices[#devices+1] = {'précédente', 'ChannelPrev'}
devices[#devices+1] = {'coupe le son', 'Mute'}
devices[#devices+1] = {'sortir', 'Exit'}
devices[#devices+1] = {'bas', 'DirectionDown'}
devices[#devices+1] = {'droite', 'DirectionRight'}
devices[#devices+1] = {'gauche', 'DirectionLeft'}
devices[#devices+1] = {'haut', 'DirectionUp'}
devices[#devices+1] = {'guide', 'Guide'}
devices[#devices+1] = {'info', 'Info'}
devices[#devices+1] = {'ok', 'Ok'}
devices[#devices+1] = {'tf1', '1'}
devices[#devices+1] = {'une', '1'}
devices[#devices+1] = {'france2', '2'}
devices[#devices+1] = {'france3', '3'}
devices[#devices+1] = {'france4', '63'}
devices[#devices+1] = {'france5', '5'}
devices[#devices+1] = {'arte', '5'}
devices[#devices+1] = {'canal', '4'}
devices[#devices+1] = {'canal+', '4'}
devices[#devices+1] = {'m6','6'}
devices[#devices+1] = {'breizh', '53'}
devices[#devices+1] = {'sister', '67'} --chaine 6ter
devices[#devices+1] = {'6ter', '67'} --chaine 6ter
devices[#devices+1] = {'hd1', '66'}
devices[#devices+1] = {'infosport', '120'}
devices[#devices+1] = {'eurosport1', '121'}
devices[#devices+1] = {'eurosport2', '122'}
devices[#devices+1] = {'équipe', '137'} --chaine l'équipe 21
devices[#devices+1] = {'infosport', '120'}
devices[#devices+1] = {'suivante', '120'}
devices[#devices+1] = {'sans', '100'}
devices[#devices+1] = {'météo', '100'}
--fin du tableau
commandArray = {}
if (uservariables["zappingtele"] ~='0') then
function split(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result;
end
s = split(uservariables["zappingtele"], " ") --découpe la variable à chaque espace pour ensuite trier par rapport aux ordres
for key, value in pairs(s) do
log(key..'='..value,debug)
if(string.find(uservariables["zappingtele"],"eurosport") ~= nil or string.find(uservariables["zappingtele"],"france") ~= nil) then --on commence par le traitement des chaines eurosports et france tv ( à cause de france 4)
if(tonumber(value)~=nill) then
numero = tonumber(value)
if(string.find(uservariables["zappingtele"],"eurosport") ~= nil) then
chaine = ('eurosport'..numero)
log('chaine demandée1 '..chaine,debug)
elseif (string.find(uservariables["zappingtele"],"france") ~= nil) then
chaine = ('france'..numero)
log('chaine demandée2 '..chaine,debug)
end
for n,device in pairs(devices) do
if string.find(chaine, devices[n][1]) then
action = device[2]
end
end
end
elseif (tonumber(value)~=nil and string.find(uservariables["zappingtele"],"eurosport") == nil and string.find(uservariables["zappingtele"],"france") == nil ) then --on continu avec les chaînes demandées par leurs numéros
action = tonumber(value)
log('chaine demandée3 '..action,debug)
elseif (tonumber(value)==nil) then --on termine par les demandes des chaines par le nom (sauf eurosport et france tv) et toutes les autres demande qui ne sont pas des chaînes.
for n,device in pairs(devices) do
if string.find(value, devices[n][1]) then
action = device[2]
log('chaine ou action demandée'..action,debug)
end
end
end
end
if(action == nil)then --on traite toutes les commandes qui ne sont par reconnues dans le tableau
log('Action zapping non reconnue',debug)
commandArray[#commandArray + 1]={['Variable:zappingtele']='0'} --efface la commande non reconnue
return commandArray
end
log('Action à faire '..action,debug)
if (tonumber (action) ~= nil) then --on commence par s'occuper des demandes de chaînes
local chainecentaine = math.floor(tonumber(action)/100,0.9)
local chainedizaine = math.floor((tonumber(action) - (math.floor(tonumber(action)/100,0.9)*100 ))/10,0.9)
local chaineunite = tonumber(action) - math.floor(tonumber(action)/100,0.9)*100 - math.floor((tonumber(action) - (math.floor(tonumber(action)/100,0.9)*100 ))/10,0.9)*10
if (chainecentaine == 0 and chainedizaine == 0) then --chaines à 1 chiffre
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl 'adresse mail' 'password' 'IpHamonyHub' issue_device_command 27244186 "'..chaineunite..'"')
elseif (chainecentaine == 0 and chainedizaine > 0) then --chaines à 2 chiffre
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl 'adresse mail' 'password' 'IpHamonyHub' issue_device_command 27244186 "'..chainedizaine..'"')
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl 'adresse mail' 'password' 'IpHamonyHub' issue_device_command 27244186 "'..chaineunite..'"')
elseif (chainecentaine > 0) then --chaines à 3 chiffres
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl 'adresse mail' 'password' 'IpHamonyHub' issue_device_command 27244186 "'..chainecentaine..'"')
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl 'adresse mail' 'password' 'IpHamonyHub' issue_device_command 27244186 "'..chainedizaine..'"')
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl 'adresse mail' 'password' 'IpHamonyHub' issue_device_command 27244186 "'..chaineunite..'"')
end
elseif (tonumber (action) == nil) then --on continu avec toutes les demandes qui ne sont pas une chaine
if (action == 'VolumeUp') then --commande spéciale pour le son où on veut doubler la commande
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl 'adresse mail' 'password' 'IpHamonyHub' issue_device_command 27244186 "VolumeUp"')
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl 'adresse mail' 'password' 'IpHamonyHub' issue_device_command 27244186 "VolumeUp"')
elseif (action == 'VolumeDown') then --commande spéciale pour le son où on veut doubler la commande
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl 'adresse mail' 'password' 'IpHamonyHub' issue_device_command 27244186 "VolumeDown"')
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl 'adresse mail' 'password' 'IpHamonyHub' issue_device_command 27244186 "VolumeDown"')
end
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl 'adresse mail' 'password' 'IpHamonyHub' issue_device_command 27244186 "'..action..'"')
end
end
commandArray[#commandArray + 1]={['Variable:zappingtele']='0'} --variable pour éviter le zapping quand d'autres variables changent
return commandArray