Lionel57 Posté(e) le 4 mars 2015 Signaler Posté(e) le 4 mars 2015 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 ??? (ça, ça marche nickel)
Lionel57 Posté(e) le 4 mars 2015 Auteur Signaler Posté(e) le 4 mars 2015 J'ai trouvé, comment puis-je avoir oublier ça : manquait juste un string.char(13)
Lionel57 Posté(e) le 10 mars 2015 Auteur Signaler Posté(e) le 10 mars 2015 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
971jmd Posté(e) le 27 janvier 2017 Signaler Posté(e) le 27 janvier 2017 (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é le 27 janvier 2017 par 971jmd
TonyC Posté(e) le 29 janvier 2017 Signaler Posté(e) le 29 janvier 2017 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.
971jmd Posté(e) le 29 janvier 2017 Signaler Posté(e) le 29 janvier 2017 Salut@tonyJe 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
TonyC Posté(e) le 29 janvier 2017 Signaler Posté(e) le 29 janvier 2017 (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é le 29 janvier 2017 par Tony270570
971jmd Posté(e) le 29 janvier 2017 Signaler Posté(e) le 29 janvier 2017 Oui pour infra, c'est nickel pour moi mai effectivement rs232 galère Envoyé de mon iPhone en utilisant Tapatalk
971jmd Posté(e) le 29 janvier 2017 Signaler Posté(e) le 29 janvier 2017 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))));
971jmd Posté(e) le 29 janvier 2017 Signaler Posté(e) le 29 janvier 2017 À ok j'ai pas fait gaf, il faut rajoutée un X sur chaque code Envoyé de mon iPhone en utilisant Tapatalk
971jmd Posté(e) le 29 janvier 2017 Signaler Posté(e) le 29 janvier 2017 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 rienLe port, je laisse par défaut 80Envoyé de mon iPhone en utilisant Tapatalk
971jmd Posté(e) le 29 janvier 2017 Signaler Posté(e) le 29 janvier 2017 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)));
TonyC Posté(e) le 29 janvier 2017 Signaler Posté(e) le 29 janvier 2017 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.
971jmd Posté(e) le 29 janvier 2017 Signaler Posté(e) le 29 janvier 2017 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))));
TonyC Posté(e) le 29 janvier 2017 Signaler Posté(e) le 29 janvier 2017 (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é le 29 janvier 2017 par Tony270570
971jmd Posté(e) le 30 janvier 2017 Signaler Posté(e) le 30 janvier 2017 (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é le 30 janvier 2017 par 971jmd
971jmd Posté(e) le 1 février 2017 Signaler Posté(e) le 1 février 2017 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
TonyC Posté(e) le 1 février 2017 Signaler Posté(e) le 1 février 2017 Salut 971jmd, non je pense qu'il faut laisser cette séquence comme elle est à savoir 015d sinon tu vas changer sa valeur. 1
971jmd Posté(e) le 13 février 2017 Signaler Posté(e) le 13 février 2017 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
Messages recommandés