Aller au contenu

temporisation dimmer


maverick2a

Messages recommandés

--[[
%% properties
19 value
%% globals
--]]

if (tonumber(fibaro:getGlobalValue('temoin'))==0) then
  fibaro:setGlobal('temoin',1)
  local tem = tonumber(fibaro:getGlobalValue('value19'))
  fibaro:call(19, "setValue", tem)
  fibaro:sleep(5000)
  local valuend=fibaro:getValue(19, "value")
  fibaro:setGlobal('value19',valuend)
  fibaro:call(19, "setValue", 20)
  fibaro:sleep(2000)
  fibaro:call(19, "turnOff")
  fibaro:sleep(1000)
  fibaro:debug('niveau dimmer = '..fibaro:getValue(19, "value"))
  fibaro:setGlobal('temoin',0)
end


Bonsoir,

Je débute en lua sur la box HC2. J'essaye d'apprendre les bases du langage à  partir d'un montage avec module dimmer FGD211 (ID19) que je veux allumer pendant 5s avant qu'il ne passe à  une valeur de 20% pendant 2s puis s'éteigne, suite à  un appui sur un bouton poussoir.

J'ai créé 2 variables globales :

* temoin qui sera à  0 en début de scène mais passera à  1 lorsque les modifications de valeur du module ne doivent pas relancer le programme

* value19 qui mémorise la valeur du module qui à  pu être réglée durant les 5 secondes.

 

Je ne sais pas si c'est la bonne façon de faire. Notamment, je ne sais pas comment récupérer l'information de l'appui sur le bouton poussoir...

N'ayant pour formation en lua que le tutoriel de domotique store, j'ai pensé déclencher la scène par le changement de valeur du module.

 

Mais ça ne fait pas ce que je veux :

Je souhaite que la scène se déclenche lorsqu'on appuie sur le bouton poussoir, à  l'arrêt ou pendant l'allumage. Chaque pression sur le poussoir relance le cycle depuis le début si le cycle est en cours.

Pourriez vous m'aider, notament en m'indiquant s'il y a une façon de récupérer directement les informations des poussoirs et non la valeur du dimmer ?

post-122-0-11096100-1391499412_thumb.jpg

Lien vers le commentaire
Partager sur d’autres sites

Non il faut récupérer la valeur du dimmer. avec tout simplement

if (tonumber(fibaro:getValue(tem, "value")) > 1 ) then

Donc si t'a valeur est supérieur à  1 %.

 

Donc je te dirais de faire

if ( (tonumber(fibaro:getGlobalValue('temoin')== 0)) and (tonumber(fibaro:getValue(tem, "value")) > 1 ) ) then
Lien vers le commentaire
Partager sur d’autres sites

Ok, bon là  j'ai pas le temps de regarder.

Pour te mettre sur la voie

 

local startSource = fibaro:getSourceTrigger();
if (startSource['deviceID']==tostring(tem)) then

 

Avec ce code, ta scène ce lancera après un appuie sur le bouton si je dis pas de bêtises.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Si tu connectes ton bouton poussoir sur le S2 du Dimmer tu peux utiliser le mode scène, le connecteur S1 servant a gérer la charge.

1 clik, double click, triple click… renvoient un Scène ID différent en fonction de ton action.

 

Ci-desous le code pour la gestion des scènes. (pour ton Dimmer ID 19)

à‡a devrait faire ce que tu veux, avec un simple click dans ce cas, mais tu peux changer pour un double ou autre click si tu préfères.

--[[
%% properties
19 sceneActivation
%% globals
--]]

local ScnEtat;

ScnEtat = fibaro:getValue(19, "sceneActivation")

fibaro:debug('Etat scene: ' ..ScnEtat);

-- Simple click
if (ScnEtat == '26') then
    fibaro:call(19, "setValue", 100);
    fibaro:sleep(5000)
    fibaro:call(19, "setValue", 20)
    fibaro:sleep(2000)
    fibaro:call(19, "turnOff");
    fibaro:debug('simple click');
end;


-- Simple Click
if (ScnEtat == '24') then
    fibaro:debug('double click');
end;

-- Double click
if (ScnEtat == '25') then
    fibaro:debug('triple click');
end;

-- Relachement
if (ScnEtat == '23') then
    fibaro:debug('relachement');
end;

-- Maintenu
if (ScnEtat == '22') then
    fibaro:debug('maintenu');
end;
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Merci encore pour cette nouvelle version. A vrai dire, j'utilise le S2 pour commander un autre module (association).

Mais pour apprendre, je vais essayer ta version. Je n'ai pas beaucoup de temps en ce moment. J'essayerai ton programme dans la semaine, j'espère. a vrai dire, le fonctionnement que je désire n'est pas très clair, même pour moi.

En fait, je voudrais :

au clic du poussoir : allumage de l'ampoule à  sa valeur précédente (ex : 80%) pendant 5s, puis 2s à  20% pour avertir de la fin de la minuterie. Extinction de la charge.

Si on clique sur le poussoir pendant que l'ampoule est allumée, on relance le cycle depuis le début.

Si on maintient le poussoir pendant la première phase, on modifie la valeur du dimmer (ex 60%), puis on relance le cycle. Le cycle suivant démarrera à  60%.

Le problème pour moi est que la scène redémarre indifféremment au clic du poussoir ou à  la variation de la valeur du dimmer dans le programme. Et il semble que le programme continue à  évoluer alors qu'il recommence. Il semble évoluer à  plusieurs endroits en même temps...

En plus de mon faible niveau en programmation, j'ai aussi le problème de trouver les bonnes informations sur le langage. Par exemple, que fait le 19 sceneActivation ? Et d'où sortent les valeurs 22 à  26 ? Pourrais tu me donner un lien pour comprendre ça ?

Merci encore. Et bravo pour l'initiative de ce forum !

Lien vers le commentaire
Partager sur d’autres sites

--[[
%% properties
19 sceneActivation
%% globals
--]]

local ScnEtat;
ScnEtat = fibaro:getValue(19, "sceneActivation")
--fibaro:debug('Etat scene: ' ..ScnEtat);

-- Simple click
if (ScnEtat == '16') then  
  fibaro:debug('simple click');
  local tem = tonumber(fibaro:getGlobalValue('value19'))
  fibaro:call(19, "setValue", tem)
  fibaro:debug("niveau dimmer: "..tem)
  fibaro:sleep(10000)
  local valuend=fibaro:getValue(19, "value")
  fibaro:setGlobal('value19',valuend)
  fibaro:call(19, "setValue", 20)
  fibaro:sleep(4000)
  fibaro:call(19, "turnOff")
end;

 -- Double Click
if (ScnEtat == '14') then
  fibaro:debug('double click');
end;

-- Triple click
if (ScnEtat == '15') then
    fibaro:debug('triple click');
end;

-- Relachement
if (ScnEtat == '13') then
  fibaro:debug('relachement');
end;

-- Maintenu
if (ScnEtat == '12') then
  fibaro:debug('maintenu');
end;

Après une légère modification du programme d'Oxolis, j'ai presque le fonctionnement que je désire. Disons pour résumer que cela fonctionne comme la minuterie de couloir, escalier ou WC que j'envisageais àcondition de ne pas réappuyer sur le simple click lorsque la lampe est allumée. C'est ce que j'aimerais améliorer. J'aimerais qu'un nouvel appui simple ou double click relance la minuterie depuis le début. Bref, comment stopper l'évolution du programme par un nouveau click ?

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...