Aller au contenu

Ouverture, Fermeture, Allumer, Eteindre (Volets, Lumiére En Une Scéme)


mprinfo

Messages recommandés

Boujour a tous

 

Voici une scéme qui va permettre d'envoyer a un ID une Valeur

 

les valeurs autorisé sont : open, close, turnOn, turnOff, 0, 1, 2, 3 etc... jusqu'à  100

 

je vais utilisé pour cela un tableau

 

exemple :

    Id = {13, 5, 7, 9, 23} -- Id des volets roulants
    IdValue = {"turnOff", "open", 99, 0, "close"} -- Valeur : 0=Fermer, 99=Ouvert - open - close - turnOn - turnOff
    

dans un premier temp l' ID 13 recevra la "value" turnOff puis l'id 5 la "value" open etc....

 

On pourra donc allumer puis eteindre une lampe ou fermer des volets avec des valeurs différentes.

 

J'ai choisi de déclencher la scéne avec une variable globale Jour_Nuit

--[[
%% properties
%% globals
Jour_Nuit
--]]

il faudra donc crée cette variable

 

post-374-0-12933400-1425317259_thumb.jpg

 

Avec les valeurs suivantes :

Jour

Nuit

 

Puis 2 scénes en mode bloc une pour changer la variable a JOUR et l'autre pour changer la variable a NUIT

 

Jour :

post-374-0-33171800-1425319007_thumb.jpg

 

Nuit :

 

post-374-0-52998100-1425319044_thumb.jpg

 

Ou une Scénes en LUA

--[[
%% autostart
%% properties
%% globals
--]]
 
while true do
  local Var_Jour = os.date("%H:%M", os.time()-15*60) 
  local Var_Nuit = os.date("%H:%M", os.time()+15*60)   
  local currentDate = os.date("*t");
  local Jour = fibaro:getValue(1, "sunriseHour")
  local Nuit = fibaro:getValue(1, "sunsetHour")  
  
  fibaro:debug("Jour : " ..Jour)
  fibaro:debug("Nuit : " ..Nuit)
  
  if ( Var_Jour == Jour ) then
     fibaro:setGlobal("Jour_Nuit", "Jour");
  elseif ( Var_Nuit == Nuit ) then
     fibaro:setGlobal("Jour_Nuit", "Nuit");
  end
  
  fibaro:sleep(59*1000); -- s'execute toutes les minutes
end

On peut bien entendu modifier ces paramètres ou en ajouter

 if J_N == "Nuit" then
    Id = {5, 7, 9, 23, 27, 25, 29, 17, 19} -- Id des volets roulants
    IdValue = {0, 0, 0, 0, 0, 0, 85, 0, 0} -- Valeur 0=Fermer - 99 = Ouvert
   fibaro:debug("Nuit")
  end

  if J_N == "Jour" then
    Id = {13, 5, 7, 9, 23, 27, 25, 29} -- Id des volets roulants
    IdValue = {"turnOff","open", 99, 99, 99, 99, 99, 99, 99, 99} -- Valeur : 0=Fermer, 99=Ouvert - open - close - turnOn - turnOff
    fibaro:debug("Jour")
  end

Ensuite il y a un autre bloc de programme qui ajoute des ID et des "Value" a la table en fonction du jour de la semaine

-- Debut Volets Chambres ouverture du lundi au vendredi
local jour = os.date("%w"); --0=Dimanche, 1=Lundi, 2=Mardi,3=Mercredi etc...
fibaro:debug("Jours de la Semaine = " ..jour)
if ((jour == "1" or jour == "2" or jour == "3" or jour == "4" or jour == "5") and (J_N == "Jour")) then 
    local Id1 = {19, 17} -- 19 ch amis 17 ch enfants
    local IdValue1 = {99, 99}
    local t_id = #Id
    local t_id1 = #Id1 
    for i = 1,#Id1 do
       t_id = t_id + 1
       table.insert(Id, t_id, Id1[i])
       table.insert(IdValue, t_id, IdValue1[i])
    end
end   

-- Fin Volets chambres

Puis un test pour savoir si il y a bien le même autant d' ID que de "Value"

  -- Test si le nombres d' Id et Egale au nombre de IdValue
  if #Id == #IdValue then
     fibaro:debug("total des id = " ..#Id)
  else
    fibaro:debug("Total des id = " ..#Id .." - Total des Values = " ..#IdValue)
    fibaro:debug("fin de la Scéme...")
    fibaro:abort();
  end

pour le push je conseil de créer une variable global avec l'ID du téléphone (vu les soucis avec le push cela évite de modifier toutes ces scénes a chaque fois que l'ID du tél change)

 

Pour récupérer l'id du tel

local IdTel = fibaro:getGlobalValue("IdI9305") -- Recuperation de id du tel pour le push

Dans cette exemple on récupére l'id du tel qui ce trouve dans la variable globale IdI9305 (je sais c'est un samsung s3 LTE ;) )

 

j'ai mis une pause de 30s entre chaque commande

  local VTimer = 30*1000 -- Temp de pause entre chaque commande de modules

A la fin de l’exécution de la scéne on envoi un PUSH avec le nombres de modules actionnés

-- Envoi du Push

  fibaro:call(IdTel, "sendPush", "Les " ..#Id .." ont été actionnés")

Voici la scéne :

--[[
%% properties
%% globals
Jour_Nuit
--]]

-- Recupération de la valeur de la variable global Jour_Nuit
local num = fibaro:countScenes () -- nombres d'instance en cours d'excution de la sceme
fibaro:debug("Nombres de Scéme en cours = " ..num)

if (num == 1) then
  local J_N = fibaro:getGlobalValue( "Jour_Nuit" );
  fibaro:debug("Jour_Nuit = " ..J_N)
  
  local Id = {}
  local IdValue = {}
  
  if J_N == "Nuit" then
    Id = {5, 7, 9, 23, 27, 25, 29, 17, 19} -- Id des volets roulants
    IdValue = {0, 0, 0, 0, 0, 0, 85, 0, 0} -- Valeur 0=Fermer - 99 = Ouvert
   fibaro:debug("Nuit")
  end

  if J_N == "Jour" then
    Id = {13, 5, 7, 9, 23, 27, 25, 29} -- Id des volets roulants
    IdValue = {"turnOff","open", 99, "turnOn", 99, 75, 99, 45, 99, 99} -- Valeur : 0=Fermer, 99=Ouvert - open - close - turnOn - turnOff
    fibaro:debug("Jour")
  end
-- Debut Volets Chambres ouverture du lundi au vendredi
local jour = os.date("%w");
fibaro:debug("Jours de la Semaine = " ..jour)
if ((jour == "1" or jour == "2" or jour == "3" or jour == "4" or jour == "5") and (J_N == "Jour")) then 
    local Id1 = {19, 17} -- 19 ch amis 17 ch enfants
    local IdValue1 = {99, 99}
    local t_id = #Id
    local t_id1 = #Id1 
    for i = 1,#Id1 do
       t_id = t_id + 1
       table.insert(Id, t_id, Id1[i])
       table.insert(IdValue, t_id, IdValue1[i])
    end
end   

-- Fin Volets chambres  
  
  -- Test si le nombres d' Id et Egale au nombre de IdValue
  if #Id == #IdValue then
     fibaro:debug("total des id = " ..#Id)
  else
    fibaro:debug("Total des id = " ..#Id .." - Total des Values = " ..#IdValue)
    fibaro:debug("fin de la Scéme...")
    fibaro:abort();
  end
  -- Fin du test
    
  
  local IdTel = fibaro:getGlobalValue("IdI9305") -- Recuperation de id du tel pour le push dans la variable globale IdI9305

  local VTimer = 30*1000 -- Temp de pause entre chaque commande de modules

  fibaro:debug("Nombres Modules = " ..#Id)

  for i = 1,#Id do
     local TestName = fibaro:getName(Id[i])
     local TestValue = fibaro:getValue(Id[i], "value")
     if IdValue[i] == "open" or IdValue[i] == "close" or IdValue[i] == "turnOn" or IdValue[i] == "turnOff" then
 	    fibaro:call(Id[i], IdValue[i]);
     else
        fibaro:call(Id[i], "setValue", IdValue[i]); -- Commande Module
     end
     fibaro:debug("---------------------")
     fibaro:debug("Nom = " ..TestName)
     fibaro:debug("Valeur = " ..TestValue .." - Valeur demander = " ..IdValue[i])

     fibaro:sleep(VTimer)
  end
  
  fibaro:sleep(2*1000)

  -- Envoi du Push
  fibaro:call(IdTel, "sendPush", "Les " ..#Id .." ont été actionnés")
else
	fibaro:debug("Nombre de Scénes en cours " ..num)
end


J'utilise cette scéne pour fermer et ouvrir mes volets et j'allume en même temps des lumières que j'éteins ensuite.

 

on peut bien entendu utilisé plusieurs fois le même ID

 

exemple :

 

J'allume ma lampe, je ferme mon volets j' éteins ma lampe.

Pour les modules dinnable il faut comme pour les volets mettre une valeur entre 0 et 99

Id = {13, 5, 13} -- Id des volets roulants
IdValue = {"turnOn", "close", "turnOff"} -- Valeur : 0=Fermer, 99=Ouvert - open - close - turnOn - turnOff


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

×
×
  • Créer...