Aller au contenu

Envoyé Une Commande Tcp Avec Socket Lua


Maxdunhill

Messages recommandés

Bonjour,


Voici mon cas d'école,
je souhaite envoyer des commande tcp sur une interface eNet Gira ou Jung pour ne pas les citer ;)
donc après un gros travail de reverse ing, je connais les commandes et le port utilisé, soit 9050
j'ai déjà  envoyé les commande par putty en raw, elles sont accepter et exécuter par le controleur, par contre dans un module virtuel avec le script ci-dessous pas de réponse et pas d’interprétation du contrôleur eNet...

code lua dans le bouton On du périphérique virtuel:
 

tcpSocket = Net.FTcpSocket("192.168.1.30", 9050)
tcpSocket:setReadTimeout(2000)

local commande ='{\"PROTOCOL\":\"1.8\",\"TIMESTAMP\":\"1448636693\",\"CMD\":\"VERSION_REQ\"}\r\n\r\n'
fibaro:debug(commande)
tcpSocket:write(commande)

state = tcpSocket:read()
fibaro:debug("len: " .. string.len(tostring(state)))
fibaro:debug(state)

Dans le debug la commande est exactement la même que celle utiliser dans putty en raw...

Merci pour vos réponses et votre aide.
Philippe

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

 

Peut-être essayer de créer une table

local commande = { PROTOCOLE = '1.8', TIMESTAMP = 1448636693, CMD= 'VERSION_REQ'}

puis de faire un

local payload = json.encode(commande)
tcpSocket:write(payload);

mais sans grande conviction....

Lien vers le commentaire
Partager sur d’autres sites

Bjr, tu peux également essayer de réaliser une capture wireshark pour t'assurer que la box émet bien la trame et voir la réponse du device. il te faudra intercaler un bon vieux hub ou un switch avec un port en mirroir.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à  tous,

 

je sais pas si c'est le fait d'être passé en version beta 4.059 mais ce code fonctionne finalement très bien... (pour la blague c'est le presque le même que celui qui ne fonctionnait pas :60:  )

if (tcpSocket == nil) then
	tcpSocket = Net.FTcpSocket("192.168.1.30", 9050);
	tcpSocket:setReadTimeout(500);
end

local commande ='{\"PROTOCOL\":\"1.8\",\"TIMESTAMP\":\"1447344184\",\"CMD\":\"ITEM_VALUE_SET\",\"VALUES\":[{\"STATE\":\"ON\",\"NUMBER\":18}]}\r\n\r\n';
fibaro:debug(commande);
tcpSocket:write(commande);

state = tcpSocket:read();
fibaro:debug("len: " .. string.len(tostring(state)));
fibaro:debug(state);

Maintenant j'ai de nouvelles questions, je vais récupérer l'état du contacteur via une autre commande, comment la faire apparaître sur l'état du bouton du VD?

et comment utiliser mes VD avec le scipt ci-dessus dans une scène?

 

Je sais cela fait beaucoup de questions mais promis je contribuerai aussi un jour ;) 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...