Re: Error: Harmony Hub: Error sending the switch command
Publié : 10 janv. 2018, 23:18
Tu parles de blocky mais je fais tout par script lua
je te mets mon script qui gère ma télé et canalsat.
Pour fonctionner il faut installer le fichier de vill1driver module.lua dans le dossier script lua de domoticz
Tu modifies les variables local.
Si tu veux uniquement la télé tu remplaces partout dans le script ..idcanal.. par ..idtele..
Tu modifies dans le tableau devices les commandes que tu veux et qui sont compatibles avec ta télé (elles sont données par harmonyhubcontrol).
Tu crées une uservariable de type chaine que tu nomme zappingtele.
Tu enregistres le script que tu as modifié en script_variable_xxx.lua
Pour tester les commandes tu mets à la main ce que tu veux comme commande dans la variable zappingtele. Le programme cherchera une correspondance dans le tableau device. ça te permettra de voir si tu as encore les mêmes erreurs qu'en blocky.
je te mets mon script qui gère ma télé et canalsat.
Pour fonctionner il faut installer le fichier de vill1driver module.lua dans le dossier script lua de domoticz
Tu modifies les variables local.
Si tu veux uniquement la télé tu remplaces partout dans le script ..idcanal.. par ..idtele..
Tu modifies dans le tableau devices les commandes que tu veux et qui sont compatibles avec ta télé (elles sont données par harmonyhubcontrol).
Tu crées une uservariable de type chaine que tu nomme zappingtele.
Tu enregistres le script que tu as modifié en script_variable_xxx.lua
Pour tester les commandes tu mets à la main ce que tu veux comme commande dans la variable zappingtele. Le programme cherchera une correspondance dans le tableau device. ça te permettra de voir si tu as encore les mêmes erreurs qu'en blocky.
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 = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local ipharmony = 'tu mets entre guillemet l'ip de ton hub'
local mailharmony = 'tu mets entre guillemet l'adresse mail pour te connecter à ton compte harmony'
local passwordharmony = 'tu mets entre guillemet ton password pour te connecter à ton compte harmony'
local idcanal = 'entre guillemet le numéro du décodeur canalsat' tu met -- en début de ligne si tu n'en veux pas
local idtele = 'entre guillemet le numéro de télé'
local devices = {}
-- tableau à renseigner {'ordre', 'commande harmony'}.
devices[#devices+1] = {'baisse', 'VolumeDown'}
devices[#devices+1] = {'monte', 'VolumeUp'}
devices[#devices+1] = {'plus', 'ChannelUp'}
devices[#devices+1] = {'suivante', 'ChannelUp'}
devices[#devices+1] = {'moins', 'Channeldown'}
devices[#devices+1] = {'moi', 'Channeldown'}
devices[#devices+1] = {'précédente', 'Channeldown'}
--devices[#devices+1] = {'précédente', 'ChannelPrev'}
devices[#devices+1] = {'avant', 'ChannelPrev'}
devices[#devices+1] = {'coupe', 'Mute'}
devices[#devices+1] = {'sortir', 'Exit'}
devices[#devices+1] = {'exit', 'Exit'}
devices[#devices+1] = {'bas', 'DirectionDown'}
devices[#devices+1] = {'basse', 'DirectionDown'}
devices[#devices+1] = {'droite', 'DirectionRight'}
devices[#devices+1] = {'gauche', 'DirectionLeft'}
devices[#devices+1] = {'haut', 'DirectionUp'}
devices[#devices+1] = {'haute', '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'}
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] = {'sans', '100'}
devices[#devices+1] = {'météo', '100'}
devices[#devices+1] = {'allume', 'PowerToggle'}
devices[#devices+1] = {'éteins', 'PowerToggle'}
--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 '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command '..idcanal..' "'..chaineunite..'"')
elseif (chainecentaine == 0 and chainedizaine > 0) then --chaines à 2 chiffre
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command 27244186 "'..chainedizaine..'"')
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command 27244186 "'..chaineunite..'"')
elseif (chainecentaine > 0) then --chaines à 3 chiffres
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command '..idcanal..' "'..chainecentaine..'"')
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command '..idcanal..' "'..chainedizaine..'"')
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command '..idcanal..' "'..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 '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command '..idcanal..' "VolumeUp"')
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command '..idcanal..' "VolumeUp"')
elseif (action == 'VolumeDown') then --commande spéciale pour le son où on veut doubler la commande
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command '..idcanal..' "VolumeDown"')
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command '..idcanal..' "VolumeDown"')
elseif (action == 'PowerToggle') then --commande spéciale pour éteindre la télé
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command '..idtele..' "PowerToggle"')
end
os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl '..mailharmony..' '..passwordharmony..' '..ipharmony..' issue_device_command '..idcanal..' "'..action..'"')
end
end
commandArray[#commandArray + 1]={['Variable:zappingtele']='0'} --variable pour éviter le zapping quand d'autres variables changent
return commandArray
