Aller au contenu

Intégration Bticino Myhome


PatrickVH

Messages recommandés

Bonjour,
 
d'abord mes excuses pour la mauvaise language, ma language maternelle est le néerlandais :-)
 
J'ai réussi à  commander (ON/OFF/STOP) mon système BTicino MyHome avec des VD's --> commandes HTTP POST

F452 = Net.FHttp("192.168.1.35",80)
jsonString = {Light="On"}
jsonTable = json.encode(jsonString)
fibaro:log(jsonTable)
response, status, errorCode = F452:POST("/illumina.php?pag=5&tasto=1&azione=1", jsonTable )
fibaro:log(response)
if errorCode == 0
then
fibaro:log(status)
else
fibaro:log("error")
end

Afin d'améliorer l'usage je veux interrogé le status de la module BTicino avec le fonctionnement MAIN LOOP

Je sais acquérir le status des modules avec une session telnet sur port 20000 du serveur BTicino.

 

La session:

1. open session:

- client -> server: telnet <IP du serveur BTicino, PORT 20000>

- server -> client: commande de confirmation de la session par le serveur: *#*1##

 

Screenshot-2015-07-17-23.37.59.png

 

2. status request d'une module BTicino:

- client -> server: envoyé le commande "*1*33##"

- server -> client: réponse "*1*1*33##"

- server -> client: confirmation de la session "*#*1##"

 

Screenshot-2015-07-17-23.45.41.png

Note: la confirmation (le ack) de la session est toujours le même "*#1##"

 

 

Comme je ne suis que débutant en LUA, est-ce qu'il y qqn qui puisse m'aider à  écrire le script pour le MAIN LOOP?

But du script main loop:

1. acquérir le status de la module BTicino au moment de l'activation du VD

2. changer l'icône du VD

Optionel: 3. changer le status d'une GLOBAL VARABLE.

 

Comme c'est un projet qui peut mise à  niveau le système de beaucoup d'utilisateurs BTicino MyHome je vais partager le VD, y inclus tuto et les noms des gens qui ont aidé.

 

Espérant d'avoir un peu d'aide des gens de la communauté Fibaro FR...

 

Bav,

Patrick

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne comprends pas bien ce qu'est BTcino, mais si avec un VD tu fais ON/OFF/STOP, pourquoi pas ne pas passer par une VARIABLE GLOBALE pour connaitre le STATUT ON/OFF/STOP ?

Créé une VARIABLE GLOBALE "STATUT" par exemple dans le panneau variable

 

Dans ton VD lorsque tu mets à  ON ton BTcinio, tu mets à  ON ta VARIABLE GLOBALE "STATUT" comme cela :

-- STATUT à  ON
fibaro:setGlobal("STATUT", "ON") 

--Connaitre la valeur de la variable globale : 
local statut = fibaro:getGlobalValue("STATUT")

--debug
fibaro:debug("STATUT est:" ..statut)

--Affichage dans un label
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", statut)

--Changement icone selon valeur du STATUT, methode simple pour comprendre
-- Affichage icone
local numiconeon = xxx
local numiconeoff = xxx
local numiconestop = xxx
local id = fibaro:getSelfId()

if
( fibaro:getGlobalValue("STATUT") == ("ON") )
then
fibaro:call(id ,"setProperty","currentIcon", numiconeon)
elseif
(fibaro:getGlobalValue("STATUT") == ("OFF") )
fibaro:call(id ,"setProperty","currentIcon",numiconeoff)
else
fibaro:call(id ,"setProperty","currentIcon",numiconestop)
end
Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Essaies de passer "Net.FTcpSocket" comme cela:

local ip = "192.168.1.40"
local port = 20000

function GetTcp(cmd)  -- construct the sting to send
  local stringtosend = cmd .. string.char(10)
  --open the socket
  local tcpSocket = Net.FTcpSocket(ip, port)
  --set the read timeout
  tcpSocket:setReadTimeout(2*1000)
  --send the command
  local bytes, errorCode = tcpSocket:write(stringtosend)
  -- Transforme "result" en chaine de caractere

  return tcpSocket:read() or string.char()
end

local res = GetTcp("*1*33##")
if res == "*1*1*33#" then
  fibaro:debug("Ok")
else
  fibaro:debug("Error: " .. res)
end



 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Un très grand merci pour votre aide @pepite et @shyrka973, vraiment apprécié!

 

concernant le code de shyrka973, je suis arrivé sur un nouveau problème. Avec ce code il y a une connection avec le serveur de BTicino, par contre le message retourné est "*1*1*33##*#*1##" au lieu de "*1*1*33##"

J'ai remplacé la ligne 19 du script comme: "if res == "*1*1*33##*#*1##" then"

Le résultat du debug est toujours "*#*1##".

Donc, avec la code de @shyrka973, le Home Center reprend uniquement le ACK (*#*1##) du serveur et pas la première partie "*1*1*33##" qui est le status.

 

Dans la documentation du serveur je retrouve que la chaine de commande a trois étappes:

1. client  -> server: request status (ici *1*33##)

2. server -> client: status report (ici *1*1*33#)

3. server -> client: acknowledgement (ici *#*1##)

 

Est-ce qu'il existe une methode pour programmé cette chaine de commande en LUA?

 

Bav,

Patrick

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...
  • 2 semaines après...
×
×
  • Créer...