Aller au contenu

Lua Envoyer Une Commande Si Changement Status Device.


Messages recommandés

Posté(e)

Bonjour,

 

Je cherche à  envoyer une commande http ou tcp à  un système externe lorsque j'ai un changement d'état sur un Device. 

Par exemple si le Dimmer id 75 passe à  85% j'aimerais que script envois : "HC2#75:85" à  l'adresse 192.168.1.12:8020 et ce pour tout mes devices, ou du moins une liste de Devices préétablis dans un array en amont dans le script.

 

Quelqu'un a-t-il une idée de comment je peux me lancer ?

 

Merci @+

Posté(e)

Seul une scène peut être déclenchée automatiquement par un changement d'état de module

Seul un module virtuel peut envoyer des requettes HTTP

Seul un variable global permet de transmettre une information entre les deux.

 

Il te faut donc une scène dans laquelle tu indique tout les modules qui doivent etre prise en compte. Cette scène remplira une variable global avec HC2;<module>:<value> et cliquer sur le bouton X du module virtuel.

 

Le bouton X du module virtuel va lire la variable global et crée sa requète HTTP et l'envoyer.

 

Voici un point de départ. 

Posté(e)

Merci Steven,

Existe-t-il une commande lua se basant sur un état changeant 0 à  1 ou  65% a 40 % etc ... ou dois-je interroger 1 à  1 mes devices toutes les secondes ?

Posté(e)

Comme le dit Steven l'unique moyen àce jour pour être informé sur un état changeant est de mettre un trigger dans une scène

--[[
%% autostart
%% properties
DEVICE_ID value
%% globals
--]]

puis interroger en lua le device avec un

fibaro:getValue(DEVICE_ID, "value")

pour en connaitre la valeur... Ensuite le tout passé dans une variable globale puis un call sur un bouton d'un vd qui lui va lire la variable globale et envoyer la requête. Le getValue peut aussi être réalisé dans le vd etc.

Posté(e)

ok mais comment récupérer l'id du déclencheur ? je sèche ... :(

--[[
%% properties
79 value
77 value
78 value
%% globals
--]]


local startSource = fibaro:getSourceTrigger();

fibaro:debug("déclencheur".. ??? );
Posté(e)

ok c'est bon jai trouvé merci :

--[[
%% properties
77 value
78 value
79 value 
%% globals
–]]
 
local trigger = fibaro:getSourceTrigger()
 
if (trigger['type'] == 'property') then
  fibaro:debug('Source device = ' .. trigger['deviceID'])
end
Posté(e)
local startSource = fibaro:getSourceTrigger()

if (startSource["type"]~="autostart") then
  local id = startSource['deviceID']
  local name = fibaro:getName(id)
  local value = fibaro:getValue(id, "value")
  fibaro:debug(name..' id:'..id..' value: ' ..value)
end

je n' ai pas testé mais cela doit le faire ...

 

Edit: ok, dsl croisement de post, mais tu devrais ajouter la vérification autostart pour éviter des problèmes

Posté(e)

merci je vais le faire.

 

dans le module virtuel j'ai fais ceci mais ca ne marche pas

local value = fibaro:getValue(dimmerStatusId, "value");

HC2 = Net.FHttp("192.168.1.24",8090); 
response = HC2:GET("HC2#DIMMER#"..dimmerStatusId..":"..value)
fibaro:debug("test");

J'ai cette erreur

[ERROR] 15:54:58: line :getValue (arg 2), expected 'unsigned int' got 'nil'

Posté(e)

fibaro:getGlobalValue("dimmerStatusId") pour récupérer le contenu te ta variable.

Envoyé de mon portable grâce àmes petits doigts.

Posté(e)

Et voici le bout de code utilisé pour la scene :

--[[
%% properties
77 value
78 value
79 value 
%% globals
–]]
 
local trigger = fibaro:getSourceTrigger()
 
if (trigger['type']  == 'property') then
  fibaro:debug('Source device = ' .. trigger['deviceID'])
  fibaro:setGlobal("dimmerStatusId", trigger['deviceID'])
  fibaro:call(160, "pressButton", "1");
end

et le virtual device :

local id = fibaro:getGlobalValue("dimmerStatusId")
local value = fibaro:getValue(id, "value")

HC2 = Net.FHttp("192.168.1.24",8090); 
response = HC2:GET("HC2#DIMMER#"..id..":"..value)
fibaro:debug("HC2#DIMMER#"..id..":"..value)
×
×
  • Créer...