Aller au contenu

Messages recommandés

Posté(e)

Bonsoir, 

 

J'essaie désespérément de trouver le moyen d'envoyer un code télécommande à  mon globalcache à  travers un code lua dans un module virtuel.

 

En sélectionnant "chaine à  envoyer" tout en cochant la case "en attente de réponse du périphérique", ça fonctionne à  merveille, mais comment faire la même chose en LUA ?

 

(mon souhait, c'est derrière un seul bouton, activer mon wall plug, allumer ma freebox player, allumer l'écran, tester une variable globale, m'enfin bref, tout un tas de truc)

 

Forcément, il y a un moyen, mais comment ???

 

post-1437-0-21685400-1425499725_thumb.png (ça, ça marche nickel)

Posté(e)

Pour ceux que ça intéresse, ce code lua permet d'envoyer à  Global caché. Le code de la télécommande, on la récupère avec ILearn, on n'oublie surtout pas le string.char(13) à  la fin

tcpSocket = Net.FTcpSocket("192.168.1.70", 4998) 
Commande="sendir,1:2,2,40064,1,1,96,24,24,24,48,24,48,24,48,24,24,24,48,25,23,25,24,24,24,24,24,24,24,24,48,24,48,24,24,24,24,841,96,24,24,24,48,24,48,24,48,24,24,24,48,24,24,24,24,24,24,24,24,25,23,25,48,24,48,24,24,24,24,841,96,24,24,24,48,24,48,24,48,24,24,24,48,24,24,24,24,24,24,24,24,24,24,24,48,24,48,24,24,25,23,4000" .. string.char(13)
bytes, errorCode = tcpSocket:write(Commande)
fibaro:debug(bytes .. " <-> " .. errorCode)
fibaro:sleep(1000)
result, err = tcpSocket:read()
fibaro:debug(result .. " <->  " .. err)

J'avais cherché sur le forum sans trouver, après, possible que j'ai mal cherché. 

 

Ayant plusieurs dispositif infrarouge à  contrôler lors de l'allumage de la télé, passer par "chaîne à  envoyer" ne me convenait pas

 

Et pour ceux que ça intéresse, pour envoyer une commande à  une smart tv samsung, via tcp :

tvIpAddress = "192.168.1.50" 
tvPort = 55000 
keycodestring = fibaro:getGlobalValue("Commande_Samsung") 

tvAuthString = string.char(0x00,0x14,0x00,0x69,0x70,0x68,0x6f,0x6e,0x65,0x2e,0x2e,0x69,0x61,0x70,0x70,0x2e,0x73,0x61,0x6d,0x73,0x75,0x6e,0x67,0x38,0x00,0x64,0x00,0x14,0x00,0x4d,0x54,0x6b,0x79,0x4c,0x6a,0x45,0x32,0x4f,0x43,0x34,0x77,0x4c,0x6a,0x45,0x78,0x4d,0x41,0x3d,0x3d,0x18,0x00,0x4e,0x45,0x4d,0x74,0x4e,0x7a,0x49,0x74,0x51,0x6a,0x6b,0x74,0x4e,0x44,0x4d,0x74,0x4d,0x6a,0x51,0x74,0x4f,0x45,0x49,0x3d,0x04,0x00,0x54,0x51,0x3d,0x3d)
-- </configuration> -- 

-- character table string 
local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' 

-- encoding to base64 
function enc(data) 
    return ((data:gsub('.', function(x) 
        local r,b='',x:byte() 
        for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end 
        return r; 
    end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) 
        if (#x < 6) then return '' end 
        local c=0 
        for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end 
        return b:sub(c+1,c+1) 
    end)..({ '', '==', '=' })[#data%3+1]) 
end 

-- helper function 
function num2bytes(num)    
    local retStr="" 
    for i=1,2 do 
        retStr = retStr .. string.char(num%256) 
        num = math.floor(num/256) 
    end 
      return retStr 
end 

tcpSocket = Net.FTcpSocket(tvIpAddress, tvPort) 

-- say hello to the TV  
bytes, errorCode = tcpSocket:write(tvAuthString) 

keycodebase = string.char(0x00,0x13,0x00,0x69,0x70,0x68,0x6f,0x6e,0x65,0x2e,0x69,0x61,0x70,0x70,0x2e,0x73,0x61,0x6d,0x73,0x75,0x6e,0x67) 

-- payload 
payloadinit = string.char(0x00,0x00,0x00) 
keycode = enc(keycodestring) 

keycodesize = num2bytes(string.len(keycode)) 

payloadsize = num2bytes(string.len(payloadinit .. keycode ..keycodesize)) 

-- combining the message 
message = keycodebase .. payloadsize .. payloadinit .. keycodesize .. keycode 

-- sending keycode 
bytes, errorCode2 = tcpSocket:write(message) 

if errorCode == 0 and errorCode2 == 0 
then 
  -- printing log under virtual device 
  fibaro:log("transfer OK: " .. keycodestring) 
else 
  fibaro:log("transfer failed") 
end

Mon objectif n'étant pas de faire une télécommande, mais de programmer des actions, selon certains scènarii, afin d'éviter de réécrire ce code derrière chaque bouton, j'ai mis ce code dans un module virtuel, derrière un bouton. je récupère la commande à  envoyer dans une variable globale [ keycodestring = fibaro:getGlobalValue("Commande_Samsung") ]

 

(précision, ce code n'est pas de moi, juste très légèrement adapté, désolé pour l'auteur, ayant parcouru de nombreux forum, je ne saurais dire)

 

Pour la liste des commandes : http://openremote.org/display/docs/OpenRemote+2.0+How+To+-+Samsung+TV+Remote

 

 

 

 

 

  • 1 an après...
Posté(e) (modifié)

salut a tous

 

y'a t'il une solution avec ce type de code dans un bouton virtuel ou autre :

 

 0000 006b 0022 0000 015d 00ac 0015 0015 0015 0041 0015 0015 0015 0041 0015 0041 0015 0041 0015 0015 0015 0041 0015 0041 0015 0041 0015 0015 0015 0041 0015 0015 0015 0015 0015 0041 0015 0015 0015 0015 0015 0015 0015 0041 0015 0041 0015 0015 0015 0015 0015 0015 0015 0041 0015 0041 0015 0041 0015 0015 0015 0015 0015 0041 0015 0041 0015 0041 0015 0015 0015 00ac

 

 

pour info j'utilise un  iTach WiFi to Serial (RS232) et le itache doit commander un Bose LIFESTYLE V35

 

adresse ip    192.168.0.28

port              4999

 

 

merci d'avance pour votre aide 

 

 

 

Modifié par 971jmd
Posté(e)

salut, j'utiles ça avec le même itach pour mon projo, j'ai créé un bouton pour chaque commande (uniquement pour on/off dans mon cas) :

tcpSocket = Net.FTcpSocket("192.168.1.203",4999);
tcpSocket:setReadTimeout(2000);
tcpSocket:write(string.char(tcpSocket:write(string.char(0xA9, 0x17, 0x2F, 0x00, 0x00, 0x00, 0x3F, 0x9A))));

pense à changer : 0000 en 0x00 , 0006 en 0x06 ... pour toute la séquence.

 

 

Posté(e)

Salut@tony
Je suis en déplacement pour le moment, je regarder tout à mon retour.
Si je comprend bien, si dans mon code j'ai des 0006 je remplace par 0x06 et 0000......

Merci pour ton aide, j'ai vu le moment où j'allais jeter mon iTache



Envoyé de mon iPhone en utilisant Tapatalk

Posté(e) (modifié)

keep cool :) j'ai pas mal galèré avec le itach rs232 alors qu'avec le itach infra tout à marché du premier coup. Oui c'est ça tu remplaces le 2ème zéro de chaque groupe de valeur par un"x" minuscule (ex : 0001 deviendra donc 0x001).

Tiens moi au jus et courage !

Modifié par Tony270570
Posté(e)

je peut pas tester pour le moment, mai voici mon code qui fonctionne avec itest

 

0000 006b 0022 0000 015d 00ac 0015 0015 0015 0041 0015 0015 0015 0041 0015 0041 0015 0041 0015 0015 0015 0041 0015 0041 0015 0041 0015 0015 0015 0041 0015 0015 0015 0015 0015 0041 0015 0015 0015 0015 0015 0015 0015 0015 0015 0041 0015 0041 0015 0015 0015 0015 0015 0015 0015 0041 0015 0041 0015 0041 0015 0015 0015 0015 0015 0041 0015 0041 0015 0041 0015 00ac
 

avec ton code sa donne ça:

 

tcpSocket = Net.FTcpSocket("192.168.0.28",4999);
tcpSocket:setReadTimeout(2000);
tcpSocket:write(string.char(tcpSocket:write(string.char(0x00, 006b, 0022, 0x00, 015d, 00ac, 0015, 0015, 0015, 0041, 0015, 0015, 0015, 0041, 0015, 0041, 0015, 0041, 0015, 0015, 0015, 0041, 0015, 0041, 0015, 0041, 0015, 0015, 0015, 0041, 0015, 0015, 0015, 0015, 0015, 0041, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0041, 0015, 0041, 0015, 0015, 0015, 0015, 0015, 0015, 0015, 0041, 0015, 0041, 0015, 0041, 0015, 0015, 0015, 0015, 0015, 0041, 0015, 0041, 0015, 0041, 0015, 00ac))));

Posté(e)

Donc 0x00, 0x6b, 0x22....

Dans le bouton virtuel ins active :
chaîne
En attente de la réponse du périphérique

Dans l'adresse IP je n'ai rien

Le port, je laisse par défaut 80


Envoyé de mon iPhone en utilisant Tapatalk

Posté(e)

bon ça fonctionne pas,

j'ai demander a ma femme à distance de verifier quand je clic sur le bouton que la LED data du itache rs232 s'allume, non rien pas de réaction 

pour tant avec iTest nikel 

 

tcpSocket = Net.FTcpSocket("192.168.0.28",4999);
tcpSocket:setReadTimeout(2000);
tcpSocket:write(string.char(tcpSocket:write(string.char(0x00, 0x6b, 0x22, 0x00, 015d, 0xac, 0x15, 0x15, 0x15, 0x41, 0x15, 0x15, 0x15, 0x41, 0x15, 0x41, 0x15, 0x41, 0x15, 0x15, 0x15, 0x41, 0x15, 0x41, 0x15, 0x41, 0x15, 0x15, 0x15, 0x41, 0x15, 0x15, 0x15, 0x15, 0x15, 0x41, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x41, 0x15, 0x41, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x41, 0x15, 0x41, 0x15, 0x41, 0x15, 0x15, 0x15, 0x15, 0x15, 0x41, 0x15, 0x41, 0x15, 0x41, 0x15, 0xac)));

 

Posté(e)

Il faut laisser le port 4999, et l'ip de ta box sur la 1ère page de ton vd, j'ai les 3/4 de mon système déconnecté je suis en travaux, mais il faudrait également voir les params de ton itach, il n'est pas  à porté de main, j'essayerai de mettre lamait dessus demain pour qu'on les compare, regarde déjà de ton coté. Autre chose c'est surement pas ça mais ça ne manche pas de paint, jette un oeil pour voir si tu n'as pas fait d'erreur en modifiant la sequence avec les "x". J'ai vraiment eu beaucoup de mal à faire fonctionner le bousin, même quand ça marchait dans itest... faut pas baisser les bras.

Posté(e)

 

ok  merci, je serai chez moi pour demain 

 

mai juste un dernière chose si je teste ton code, normalement le itache doit fonctionner, la LED DATA doit clignoté. 

 

tcpSocket = Net.FTcpSocket("192.168.0.28",4999);
tcpSocket:setReadTimeout(2000);
tcpSocket:write(string.char(tcpSocket:write(string.char(0xA9, 0x17, 0x2F, 0x00, 0x00, 0x00, 0x3F, 0x9A))));

 

Posté(e) (modifié)

je ne sais pas 971jmd, je n'ai jamais fait gaffe et là impossible de te répondre sans le matos connecté. Tu peux faire le test de ton coté, balance une sequence via itest, avec l'appareil (le bose) connecté puis  déconnecté de l'itach et regarde le comportement de la led, si elle s'allume dans les 2 cas c'est que seul l'itach réagit à la commande, essaye également de balancer une commande bidon en modifiant la sequence et observe si ça s'allume ou pas. Désolé de ne pas pouvoir t'aider d'avantage ce soir mais mon matos est disséminer dans les pièces du haut tout est en vrac chez moi, se sont de gros travaux et je ne sais pas ou se trouve le biniou faut que je le retrouve dans un carton. je regarde ça sans faute demain!

Modifié par Tony270570
Posté(e) (modifié)

 

Salut, je suis rentré 

 

j'ai tester ton code : 0xA9, 0x17, 0x2F, 0x00, 0x00, 0x00, 0x3F, 0x9A

 

Le voyant data clignote bien quand j’appuie tu le bouton LITERAL de iTest 

 

Donc normalement j'aurai du avoir le meme résulta avec la HC2, mai rien ne bouge

 

pour info, dans l bouton virtuel j'ai rien mis comme adresse IP et j'ai laissée port à 80

tcpSocket = Net.FTcpSocket("192.168.0.28",4999);
tcpSocket:setReadTimeout(2000);
tcpSocket:write(string.char(tcpSocket:write(string.char(0xA9, 0x17, 0x2F, 0x00, 0x00, 0x00, 0x3F, 0x9A))));
Modifié par 971jmd
Posté(e)

salut @Tony270570

 

je commence a voir le bout du tunnel

 

voici mon code, tu ma dit de rajouter un  x  juste après le zero

 

0000 006b 0022 0000 015d 00ac 0015 0015 0015 0041 0015 0015 0015 0041 0015 0041 0015 0041 0015 0015 0015 0041 0015 0041 0015 0041 0015 0015 0015 0041 0015 0015 0015 0015 0015 0041 0015 0015 0015 0015 0015 0015 0015 0041 0015 0041 0015 0015 0015 0015 0015 0015 0015 0041 0015 0041 0015 0041 0015 0015 0015 0015 0015 0041 0015 0041 0015 0041 0015 0015 0015 00ac

 

soit

 

0x00 0x6b 0x22 0x00 015d ....

 

ma question est le 015d faut il remplacer le 1 par x 0x5d

 

Posté(e)

Salut 971jmd, non je pense qu'il faut laisser cette séquence comme elle est à savoir 015d sinon tu vas changer sa valeur.

  • Upvote 1
  • 2 semaines après...
Posté(e)

salut a tous 

 

j'ai trouver la solution pour prendre le pouvoir sur mon bose v35, tout simplement par IR

 

bon, j'ai un autre sousi j'ai remplacée mon appel TV par le 4eme génération 

 

mai voila, le IR ne fonctionne pas comme l'ancien 

 

avez vous une idée de comment prendre le pouvoir sur l'appel TV4 

 

 

 

 

 

 

 

×
×
  • Créer...