Aller au contenu
Rem's

Stocker Un État ... ?

Recommended Posts

Re-Bonjour,  

--[[
%% properties
157 value
%% globals
--]]

-- Ce scénario sera executé uniquement à  l'ouverture / fermeture
-- du décteur de porte ID 157
local door = 157
local light = 26
local startSource = fibaro:getSourceTrigger();
local heure = string.format(os.date("%H"), "%2d")..string.format(os.date("%M"), "%2d")
local heureValable = heure >= "2000" or heure < "0530"
local enAlerte = (tonumber(fibaro:getValue(door, "value")) > 0)
if enAlerte and heureValable then

-- porte en alerte soit ouverte
fibaro:call(light, "startProgram", "2");
fibaro:sleep(3*1000)
fibaro:call(26, "turnOff")
fibaro:debug("Porte ouverte")
else
-- porte fermée
fibaro:call(light, "turnOff");
fibaro:debug("Porte fermée")

end

Je me sers de ce bout de code à  la détection de l'ouverture de la porte de la chambre de ma fille.
La guirlande Led (ID 26 est dans le salon.

Je voudrai que cette scène tienne compte de l'état, avant son déclenchement, de la huirlande led :

Je suppose que c'est grace à  la fonction "tonumber", mais je ne vois pas comment l'écrire.


Merci d'avance du coup de main.

Partager ce message


Lien à poster
Partager sur d’autres sites

pourquoi n'essayes-tu pas GEA.

Tu ferais ce que tu veux en 2 coup de cuillère àpeau

Partager ce message


Lien à poster
Partager sur d’autres sites

Je suis newbie ... je tente de me familiariser avec Lua , dans un premier temps !!

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, en fait tu ne veux pas que la scene ne se declenche si la guirlande led est deja allumee c'est ca ?

if enAlerte and heureValable and GuirlandeEteinte then

Je n'ai pas de guirlande LED mais regarde dans le json quelle est le value lorsqu'elle est allumée et j'essaierais quelque chose comme ca

local GuirlandeEteinte = (tonumber(fibaro:getValue(light, "value")) = "0")

Partager ce message


Lien à poster
Partager sur d’autres sites

@rem's je suis entièrement d'accord avec toi GEA c'est la solution simple pour ceux qui ne veulent pas apprendre le lua qui est un langage super intéressant j'ai commencé fin janvier et je m'amuse comme un fou avec ce langage.

 

il faut que tu fasses un get pour récuperer la valeur de ta lampe

Partager ce message


Lien à poster
Partager sur d’autres sites

Pepite, en fait je stocker l'état de la guirlande led avant déclenchement de l'ouverture de porte (qui aura pour conséquence de s'allumer on rose clignotant 3 sec). après que la guirlande se remette soit allumé comme elle était (ou pas) avant cette gâchette.

 

Mpinfo, je trouve aussi lua super puissant, de quelques lignes bien monté, en découle une logique qui pourrait presque faire croire que le système est intelligent, intuitif ... !!

 

Tiens d'ailleurs, comment peut faire la différence d'utilisation entre elself, else, et l'usage du if que l'on peut répéter dans les scènes ?

Il y a t-il un tutos ou un lien la dessus.

 

Merci de votre aide  :)

Partager ce message


Lien à poster
Partager sur d’autres sites
if a == 1 then
  fibaro:debug("a est égale a 1")
elseif a == 2 then
  fibaro:debug("a est égale a 2")
elseif a == 3 then
  fibaro:debug("a est égale a 3")
else
  fibaro:debug("a n'est pas égale à1, 2, 3)
end

http://lua.gts-stolberg.de/fr/Variablen.php

http://www.luteus.biz/Download/LoriotPro_Doc/LUA/LUA_Training_FR/Introduction_Programmation.html

http://wxlua.free.fr/

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Mpinfo, j'y vois plus clair !!

 

Une autre question, je n'arrive pas à  faire une scène en lua avec comme déclenchement jour et heure, sans les doublons (venant du mode block), et avec le débug fonctionnel.

 

Tu pourrais m'aider ...?

--[[
%% autostart
%% properties
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
while true do

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
 ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "19:45") )
)
then
    fibaro:debug("Début de script")
    fibaro:call(101, "pressButton", "26") -- Annonce Petula
    fibaro:call(71, "turnOn")
    fibaro:call(309, "turnOn")
      fibaro:sleep(15*60*1000); -- 20h00
      
    fibaro:call(318, "pressButton", "5") -- Volet chambre descente
    fibaro:call(26, "startProgram", "2");
    fibaro:call(315, "turnOn")
    fibaro:call(316, "turnOn")      
    fibaro:call(70, "turnOn")
      fibaro:sleep(30*60*1000); -- 20h30

    fibaro:call(13, "turnOn")
    fibaro:call(90, "turnOn")
      fibaro:sleep(50*60*1000); -- 21h20
    fibaro:call(319, "pressButton", "9") -- Volet salon descente
    fibaro:call(13, "turnOff")
      fibaro:debug("Test scène semaine")
    end
      end
  end

Par exemple, cette scène fonctionne, mais je n'ai pas de débug. (t'as capté mon dilemme) ... ;)

Partager ce message


Lien à poster
Partager sur d’autres sites


--[[

%% autostart

--]]

----------------------------------------------------------------------

-- Contrôle si 1 Scène et déjàen cours --

----------------------------------------------------------------------

local NbreScene = fibaro:countScenes()

if NbreScene ~= 1 then;

fibaro:debug("Il y a déjàune instance en cours... ")

fibaro:abort();

end

while true do

if (os.date("%H:%M", os.time())) == "19:45" then

fibaro:debug("Début de script")

fibaro:call(101, "pressButton", "26") -- Annonce Petula

fibaro:call(71, "turnOn")

fibaro:call(309, "turnOn")

elseif (os.date("%H:%M", os.time())) == "20:00" then

--exemple en utilisant une table avec les id

local id = {315, 316, 70} -- création de la table id

for i=1,#id do -- #id = nombres d'id dans la table

fibaro:call(id, "turnOn")

end

fibaro:call(318, "pressButton", "5") -- Volet chambre descente

fibaro:call(26, "startProgram", "2");

elseif (os.date("%H:%M", os.time())) == "20:30" then

fibaro:call(13, "turnOn")

fibaro:call(90, "turnOn")

fibaro:sleep(50*60*1000); -- 21h20

fibaro:call(319, "pressButton", "9") -- Volet salon descente

fibaro:call(13, "turnOff")

fibaro:debug("Test scène semaine")

end

fibaro:sleep(60*1000)

end

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Rem's,

Pour rendre ton code plus lisible / compréhensible pour toi et les autres, je te propose d'aligner :

--[[
%% autostart
%% properties
%% globals
--]]
 
local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
  while true do
 
    local currentDate = os.date("*t");
    local startSource = fibaro:getSourceTrigger();
    if ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 
         or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 
         or currentDate.wday == 7) 
        and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "19:45") then

      fibaro:debug("Début de script")
      fibaro:call(101, "pressButton", "26") -- Annonce Petula
      fibaro:call(71, "turnOn")
      fibaro:call(309, "turnOn")

      fibaro:sleep(15*60*1000) -- 20h00 
      fibaro:call(318, "pressButton", "5") -- Volet chambre descente
      fibaro:call(26, "startProgram", "2")
      fibaro:call(315, "turnOn")
      fibaro:call(316, "turnOn")      
      fibaro:call(70, "turnOn")

      fibaro:sleep(30*60*1000) -- 20h30 
      fibaro:call(13, "turnOn")
      fibaro:call(90, "turnOn")

      fibaro:sleep(50*60*1000) -- 21h20
      fibaro:call(319, "pressButton", "9") -- Volet salon descente
      fibaro:call(13, "turnOff")
      fibaro:debug("Test scène semaine")
    end
  end
end
 

les ; ne sont à  mon avis pas obligatoires (héritage du Pascal ?)

il y avait également 2 ( et 2 ) inutiles sur la condition sur les jours.

 

des petits "conseils" en passant ... 

Partager ce message


Lien à poster
Partager sur d’autres sites

@jojo très bonne remarque moi j'utilise notepad++ pour écrire mes scripts avec le plugin lua fibaro mais lorsque je fais un copier coller sur le forum j'ai souvant des decalage

Partager ce message


Lien à poster
Partager sur d’autres sites

Exact, les ";" ne sont pas obligatoire.

 

Mais j'ai tj rien en Débug ....   :(

Partager ce message


Lien à poster
Partager sur d’autres sites

Les ; ne sont obligatoires que si on mets plusieurs blocs sur la même ligne

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Mpinfo, Merci Jojo,

 

Je suis entrain de mettre en application vos conseils .... ca va, je m'en sors.

Je bien compris le coup des "elseif"

 

J'ai un p'tit soucis : La led est bleu. la porte s'ouvre, elle devient rose (3 sec), et je voudrai qu'elle reprenne l'état avant (bleu, ou autre).

Comment ca s'écrit (j'ai l'impression de parler à  une copine, hi hi hi).

 

Merci pour votre aide.

Partager ce message


Lien à poster
Partager sur d’autres sites

×