Aller au contenu
Domotique-Home

[Lua - Leçon 2] – Association De Modules

Recommended Posts

La scène précédente (Leçon 1) avait un inconvénient important – elle devait être déclenchée manuellement. Aujourd’hui je vais vous expliquer comment automatiser une scène en code LUA.
Nous allons allumer une lumière à  l’ouverture de la porte. Pour cela nous allons utiliser deux modules :

-          binary_light (vu dans la Leçon 1)

-          door_sensor (détecteur d’ouverture de porte/fenêtre)

Pour comprendre comment fonctionne door_sensor nous allons nous aider d’API fibaro:debug déjà  vu dans la Leçon 1.
(nous supposons que notre door_sensor porte le numéro ID = 22 et notre binary_light a toujours ID = 100)

–[[
%% properties
22 value
%% globals
--]]
local doorSensorValue = fibaro:getValue(22, ‘value’)
fibaro:debug(‘Mon etat = ‘ .. doorSensorValue)

Nous déclarons notre variable doorSensorValue  et grâce à  la commande fibaro:getValue (Leçon 1)  nous luis attribuons l’état actuel de notre door_sensor.

En exécutant la scène manuellement dans la console Debug on obtient
Mon etat = 0 ou Mon etat = 1 en fonction de l’état de notre module.
Une fois activée la scène nous donnera l’état du module à  chaque changement.

Utilisons cela pour activer notre deuxième module binary_light  ;)

–[[
%% properties
22 value
%% globals
--]]
– Lecture de l’état value du module 22 door_sensor
local value = fibaro:getValue(<doorSensor>, ‘value’)
— si l’état door_sensor = 1 alors on allume la lumière
if (value == ’1′) then
    fibaro:call(100, ‘turnOn’)
end

La scène fonctionne bien mais la lumière va s’allumer à  chaque ouverture de porte
donc pour que cela ne fonctionne plus il faut désactiver notre scène ou……
tous simplement allumer la lumière si notre door_sensor est activé. Il faut modifier notre script.

–[[
%% properties
22 value
%% globals
--]]
– Lecture de l’état value du module 22 door_sensor
local value = fibaro:getValue(22, ‘value’)
– Lecture de l’état d’activation du module 22 door_sensor
local armed = fibaro:getValue(22, ‘armed’)
– si l’état value  door_sensor = 1 et il est activé  alors on allume la lumière
if (armed == ’1′ and value == ’1′) then
    fibaro:call(100, ‘turnOn’)
end

Et voilà   ;)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bravo pour le tuto.

 

Par contre si je peux te donner mon avis. Si tu commences à  partir de cette façon tu vas avoir une énorme quantité de scène.

Perso je me suis créer une scène Association Maison, et dedans j'y met tout ce que je veux, voilà  comme je m'y prend:

- On commence par mettre les modules qui active la scène:

J'y ai mes baies vitré, et différent éclairage pour activé des led.

--[[ %% properties
30 value
31 value
9 value
8 value
12 value
%% globals --]]

Ensuite mes différentes variables + la condition qui démarre la scène:

local startSource = fibaro:getSourceTrigger();
baieleft = 30;
baieright = 31;
lightbathroom = 9;
lightbedroommaster = 8;
kitchen = 12;
 
 if (startSource['type']=='property') then

Et maintenant une partie de mon code qui allume différent équipement:

if (startSource['deviceID']==tostring(lightbedroommaster)) then
    if (tonumber(fibaro:getValue(lightbedroommaster, "value")) > 1 ) then
      fibaro:call(117, "setColor", "50", "0", "175", "0");
      fibaro:sleep(60*1000);
    else
      fibaro:call(117, "turnOff");
      fibaro:sleep(60*1000);
    end
  elseif (startSource['deviceID']==tostring(kitchen)) then
    if ( tonumber(fibaro:getValue(kitchen, "value")) == 99 ) then
      fibaro:call(16, "turnOn");
    else
      fibaro:call(16, "turnOff");
    end
  end
end

Ce qui me permet d'avoir une seule scène pour gérer tout la maison.

Bon j'avoue il y a encore 1 semaine je faisais pareil que toi :)

 

Après pou gérer l'éclairage par exemple des toilettes par rapports à  l'ouverture de la porte. Il y a un code sur le forum de fibaro qui est à  modifier un peu car sa dépend de la version de votre door sensor, mais en gros il regarde grâce à  la fonction trigger et au fait que l'état d'une variable si tu entre ou sort au toilette, et s'il doit allumer ou fermer la lumère.

 

En tout cas belle initiative et continue comme sa. Car sa m’intéresse de voir comment font les autres :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

Shad, dans les cours j'essaie d'expliquer les base de programmation LUA pour HC2 dans la vie je ne procède pas exactement comme ça.

J'ai l'habitude de demander aux clients leurs besoins puis je définie un cahier des charge et après je programme des scènes en fonction.

Ici je donne juste les exemples simples pour faire comprendre les fonctions ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

--[[ %% properties
30 value
31 value
9 value
8 value
12 value
%% globals --]]

Ensuite mes différentes variables + la condition qui démarre la scène:

local startSource = fibaro:getSourceTrigger();
baieleft = 30;
baieright = 31;
lightbathroom = 9;
lightbedroommaster = 8;
kitchen = 12;
 
 if (startSource['type']=='property') then

Et maintenant une partie de mon code qui allume différent équipement:

if (startSource['deviceID']==tostring(lightbedroommaster)) then
    if (tonumber(fibaro:getValue(lightbedroommaster, "value")) > 1 ) then
      fibaro:call(117, "setColor", "50", "0", "175", "0");
      fibaro:sleep(60*1000);
    else
      fibaro:call(117, "turnOff");
      fibaro:sleep(60*1000);
    end
  elseif (startSource['deviceID']==tostring(kitchen)) then
    if ( tonumber(fibaro:getValue(kitchen, "value")) == 99 ) then
      fibaro:call(16, "turnOn");
    else
      fibaro:call(16, "turnOff");
    end
  end
end

Shad, en regardons bien ton code je voudrais te demander si je peux le reprendre dans une Leçon 3 pour bien expliquer le fonctionnement. Je le trouve intéressant pour explique quelques fonction.

merci

Partager ce message


Lien à poster
Partager sur d’autres sites

J'en serais très heureux ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Et Encore le noob.
Question :
Dans le premier scénario de Rems , on ajoute un interupteur physique . Comment réagi le scénario ?

 

edit:

 

euh .... toujours dans la scène de Rems quelqu'un peut m'expliqué simplement la différence entre "get value" qui sera forcement 1 ou 0 ( ouvert ou fermé ) et "armed"  ??

Partager ce message


Lien à poster
Partager sur d’autres sites

Avec un inter physique en plus le comportement devrait être identique si l'inter commande en toute logique le binary_light ;) après tu peux aussi jouer sur l'origine du trigger pour désactiver temporairement la commande venant de l'inter etc.

Envoyé de mon iPhone àl'aide de Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

×