Page 2 sur 2

Re: Error: Harmony Hub: Error sending the switch command

Publié : 10 janv. 2018, 23:18
par thier
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.

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&param=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 

Error: Harmony Hub: Error sending the switch command

Publié : 11 janv. 2018, 06:54
par Seidel
thier a écrit :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.

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&param=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 mail@mail password 192.168.0.24 issue_device_command 27244186 "'..chainedizaine..'"')
	    os.execute('/home/pi/HarmonyHubControl/HarmonyHubControl mail@mail password 192.168.0.24 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 
Ah ouais je vois le principe, mais je n'utilise que les activités, et à vrai dire, j'en ai beaucoup !
Une pour allumer ma télé, barre de son et mettre en source pour la freebox
Une pour allumer ma télé barre de son et mettre en source pour l'Apple TV
Une pour allumer ma barre de son seulement et la passer en auxiliaire lorsque je fais du multiroom via mes chromecast
Etc...

Dans le principe ton script est pratique pour changer de chaine, et j'avoue que ce n'est pas bête du tout, mais pour le reste je risque de galérer un chouilla, d'où pourquoi j'utilise les activités liés dans domoticz...

PS: je te conseille juste de virer ton mail et pass dans le script que tu fournis Image

En tout cas je te remercie pour l'aide que tu m'accordes !

Re: Error: Harmony Hub: Error sending the switch command

Publié : 11 janv. 2018, 07:28
par thier
J'avais pas vu qu'il restait ancore mon mail + password.
Merci d'éditer ton message et de l'enlever de ton message. Je l'ai fais dans le mien.

Re: Error: Harmony Hub: Error sending the switch command

Publié : 11 janv. 2018, 13:46
par Seidel
thier a écrit :J'avais pas vu qu'il restait ancore mon mail + password.
Merci d'éditer ton message et de l'enlever de ton message. Je l'ai fais dans le mien.
C'est fait Image

Re: Error: Harmony Hub: Error sending the switch command

Publié : 11 janv. 2018, 20:52
par thier
L'idée du script c'était de tester une autre programmation que blocky pour voir si tu as toujours tes erreurs.
Tu peux enlever toutes les commandes qui ne t’intéresse pas et tu mets les commandes On et Off qui correspondent à une de tes activités ou tu as les erreurs.
Tu peux aussi le faire en bash

Code : Tout sélectionner

#!/bin/bash
/home/pi/HarmonyHubControl/HarmonyHubControl email password ipHarmony start_activity 15403852

Re: Error: Harmony Hub: Error sending the switch command

Publié : 11 janv. 2018, 22:15
par Seidel
thier a écrit :L'idée du script c'était de tester une autre programmation que blocky pour voir si tu as toujours tes erreurs.
Tu peux enlever toutes les commandes qui ne t’intéresse pas et tu mets les commandes On et Off qui correspondent à une de tes activités ou tu as les erreurs.
Tu peux aussi le faire en bash

Code : Tout sélectionner

#!/bin/bash
/home/pi/HarmonyHubControl/HarmonyHubControl email password ipHarmony start_activity 15403852
En effet j'ai bien pensé à intégrer HarmonyHubControl en utilisant des interrupteurs virtuels mais le soucis c'est qu'ils ne seront pas synchronisés si j'utilise ma telecommande harmony ou si je change l'activité via l'application...