Aller au contenu
p78ch201

Module Pour Gestion Des Volets Automatique

Recommended Posts

Bonjour,

 

ci-joint ma première contribution.

Il s'agit de mon humble module virtuel pour la gestion automatique des volets roulants.

 

Etape 1 - Créer une variable Globale "SysVolet"

nom de la variable : "SysVolet"

valeur1 : "ON"

valeur2 : "OFF"

 

Etape 2 (facultatif) - Créer un variable "weekend"

Cette variable est définie dans un autre module dont voici le code :

(la variable "Jour_semaine" est une variable globale ayant 7 valeurs possibles : Lundi à  Dimanche dont on n'a pas besoin ici)

--[[
%% properties

%% globals
--]]

local minute = 60000 --in milliseconds
local currentDate = os.date("*t");
local currentTime = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min);

--wday=1 is Sunday
--wday=2 is Monday
--wday=3 is Tuesday
--wday=4 is Wednesday
--wday=5 is Thursday
--wday=6 is Friday
--wday=7 is Saturday

local weekend = fibaro:getGlobal("weekend");
local jour = fibaro:getGlobal("Jour_semaine");

if (currentDate.wday == 1 ) then
  fibaro:setGlobal("weekend", 1);
  fibaro:setGlobal("Jour_semaine", "Dimanche")
end
if (currentDate.wday == 2 ) then
  fibaro:setGlobal("weekend", 0);
  fibaro:setGlobal("Jour_semaine", "Lundi")
end
if (currentDate.wday == 3 ) then
  fibaro:setGlobal("weekend", 0);
  fibaro:setGlobal("Jour_semaine", "Mardi")
end
if (currentDate.wday == 4 ) then
  fibaro:setGlobal("weekend", 0);
  fibaro:setGlobal("Jour_semaine", "Mercredi")
end
if (currentDate.wday == 5 ) then
  fibaro:setGlobal("weekend", 0);
  fibaro:setGlobal("Jour_semaine", "Jeudi")
end
if (currentDate.wday == 6 ) then
  fibaro:setGlobal("weekend", 0);
  fibaro:setGlobal("Jour_semaine", "Vendredi")
end
if (currentDate.wday == 7 ) then
  fibaro:setGlobal("weekend", 1);
  fibaro:setGlobal("Jour_semaine", "Samedi")
end

Etape 3 - Créer un module Virtuel

 

Module

 
composé d'un label :
 

Module label

 
et de 2 boutons :
(remplacer 102 par l'id de votre module virtuel)
 

Module bouton

 
copier ce code dans le main loop
 

--[[
%% properties

%% globals
--]]
local smartphoneID = 12;

local ID_volet_salon = {6,7,8,14}; --ID volets salon + cuisine
local ID_volet_etage = {30,31,32}; --ID volets étage
local ID_volet_chambre_E = {27}; --ID volet Chambre Enfant
local ID_volet = {6,7,8,14,30,31,32}; --ID tous les volets sauf enfant

local ID_fenetre_salon = {9,15,16,16}; --ID fenetres salon + cuisine
--(deuxieme 16 à  remplacer par ID fenetre cuisine, le mien est mort)
local ID_fenetre_etage = {34,34,33}; --ID fenetres étage
local ID_fenetre_chambre_E = {28}; --ID fenetre Chambre Enfant
local ID_fenetre = {9,15,16,16,34,34,33}; --ID toutes les fenetres sauf enfant
--(deuxieme 16 à  remplacer par ID fenetre cuisine, le mien est mort)
--(deuxième 34 correspond à  une fenetre qui ne s'ouvre pas)

-------------------------------------------------------------------------------------------------------------
-- Définition des horaires Auto des volets
-------------------------------------------------------------------------------------------------------------
local time_ouv_auto_1 = "06:30"; --debut plage horaire douche
local time_ouv_auto_2 = "10:30"; --fin plage horaire douche

local time_ouv_1 = "07:30"; --ouverture volets
local time_ferm_E = "19:00"; -- fermeture volet chambre enfant
local time_ferm_Et
local time_ferm_S = "23:30"; -- fermeture volets Salon

local weekend = fibaro:getGlobal("weekend");

if (weekend == 1) then -- weekend
  time_ferm_Et = "23:30"; -- fermeture volets Etage
  --fibaro:debug("weekend fermeture etage "..time_ferm_Et);
else -- semaine
  time_ferm_Et = "22:00"; -- fermeture volets Etage
  --fibaro:debug("semaine fermeture etage "..time_ferm_Et);
end
  --fibaro:debug("fermeture etage "..time_ferm_Et);
-------------------------------------------------------------------------------------------------------------
-- CODE
-------------------------------------------------------------------------------------------------------------
local minute = 60000 --in milliseconds
local currentDate = os.date("*t");
local currentTime = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min);
-------------------------------------------------------------------------------------------------------------
-- Ouvrir Auto Groupe Salon si Douche
-------------------------------------------------------------------------------------------------------------
local id_v = 0;

if time_ouv_auto_1 <= currentTime and currentTime <= time_ouv_auto_2 then
  if tonumber(fibaro:getValue(46, "value")) > 70 then
    for i=1, #ID_volet_salon do
      id_v = tonumber(ID_volet_salon[i]);
      fibaro:call(id_v, "open");
      --fibaro:debug(id)
    end
    fibaro:log("Ouverture Auto Volets Salon");
  end
end
-------------------------------------------------------------------------------------------------------------
local sysvolet_auto = "SysVolet_auto" -- variable globale à  déclarer
local sysvolet_a = fibaro:getGlobal(sysvolet_auto);
--fibaro:debug(sysvolet_a)
if sysvolet_a == "ON" then
-------------------------------------------------------------------------------------------------------------
-- Ouvrir Auto Volets Etage + Salon
-------------------------------------------------------------------------------------------------------------
local id_v = 0;
  
if time_ouv_1 == currentTime then
  for i=1, #ID_volet_salon do
    id_v = tonumber(ID_volet_salon[i]);
    fibaro:call(id_v, "open");
    --fibaro:debug(id)
  end
  for i=1, #ID_volet_etage do
    id_v = tonumber(ID_volet_etage[i]);
    fibaro:call(id_v, "open");
    --fibaro:debug(id)
  end
  fibaro:log("Ouverture Auto Volets Salon et Etage");
end
-------------------------------------------------------------------------------------------------------------
-- Fermeture Auto Fenetre Enfant
-------------------------------------------------------------------------------------------------------------
local id_v = 0;
local id_f = 0;

if time_ferm_E == currentTime then
  for i=1, #ID_volets_chambre_E do
    id_v = tonumber(ID_volet_chambre_E[i]);
    id_f = tonumber(ID_fenetre_chambre_E[i]);
    if tonumber(fibaro:getValue(id_f, "value")) == 0 then -- vérifie si fenetre fermée
    fibaro:call(id_v, "close");
    --fibaro:debug(id_v)
    end
  end
  fibaro:log("Fermeture Auto Volet Enfant");
end
-------------------------------------------------------------------------------------------------------------
-- Fermeture Auto Volets Etage
-------------------------------------------------------------------------------------------------------------
local id_v = 0;
local id_f = 0;

if time_ferm_Et == currentTime then
  fibaro:call(smartphoneID, "sendPush", "Fermeture Automatique Etage");
  for i=1, #ID_volet_etage do
    id_v = tonumber(ID_volet_etage[i]);
    id_f = tonumber(ID_fenetre_etage[i]);
    if tonumber(fibaro:getValue(id_f, "value")) == 0 then -- vérifie si fenetre fermée
    fibaro:call(id_v, "close");
    --fibaro:debug("id_v "..id_v);
    --fibaro:debug("id_f "..id_f);
    end
  end
  fibaro:log("Fermeture Auto Volet Etage");
end
-------------------------------------------------------------------------------------------------------------
-- Fermeture Auto Volets Salon
-------------------------------------------------------------------------------------------------------------
local id_v = 0;
local id_f = 0;
--fibaro:debug(time_ferm_S);

  
if time_ferm_S == currentTime then
  fibaro:call(smartphoneID, "sendPush", "Fermeture Automatique Salon");
  for i=1, #ID_volet_salon do
    id_v = tonumber(ID_volet_salon[i]);
    id_f = tonumber(ID_fenetre_salon[i]);
    if tonumber(fibaro:getValue(id_f, "value")) == 0 then -- vérifie si fenetre fermée
    fibaro:call(id_v, "close");
    --fibaro:debug(id)
    end
  end
  fibaro:log("Fermeture Auto Volet Salon");
end
-------------------------------------------------------------------------------------------------------------
end

Faites bien attention à  bien associer le module du volet et le capteur d'ouverture de fenêtre associé.

exemple chez moi :

volet 6 va avec fenetre 9, etc...

 

et voici les deux icones

Volet Play

 

Volet Stop

 

amélioration en cours de réflexion :

faire un sleep de 2 minutes après le push, histoire d'arreter le process si je suis dehors, voir si c'est utile

 

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai changé un peu mon code pour vérifier que si un volet est deja ouvert, ne pas essayer de l'ouvrir :

--[[
%% properties

%% globals
--]]
local smartphoneID = 12;

local ID_volet_salon = {6,7,8,14}; --ID volets salon + cuisine
local ID_volet_etage = {30,31,32}; --ID volets étage
local ID_volet_chambre_E = {27}; --ID volet Chambre Enfant
local ID_volet = {6,7,8,14,30,31,32}; --ID tous les volets sauf enfant

local ID_fenetre_salon = {9,15,16,16}; --ID fenetres salon + cuisine
--(deuxieme 16 àremplacer par ID fenetre cuisine, le mien est mort)
local ID_fenetre_etage = {34,34,33}; --ID fenetres étage
local ID_fenetre_chambre_E = {28}; --ID fenetre Chambre Enfant
local ID_fenetre = {9,15,16,16,34,34,33}; --ID toutes les fenetres sauf enfant
--(deuxieme 16 àremplacer par ID fenetre cuisine, le mien est mort)
--(deuxième 34 correspond àune fenetre qui ne s'ouvre pas)

-------------------------------------------------------------------------------------------------------------
-- Définition des horaires Auto des volets
-------------------------------------------------------------------------------------------------------------
local time_ouv_auto_1 = "06:30"; --debut plage horaire douche
local time_ouv_auto_2 = "10:30"; --fin plage horaire douche

local time_ouv_Et; --ouverture volets etage
local time_ouv_S; --ouverture volets salon
local time_ferm_E = "19:00"; -- fermeture volet chambre enfant
local time_ferm_Et
local time_ferm_S = "23:30"; -- fermeture volets Salon

local weekend = fibaro:getGlobal("weekend");
--fibaro:debug("weekend"..weekend);

if weekend == 1 then -- weekend
  time_ouv_Et = "10:30"; -- ouverture volets Etage
  time_ferm_Et = "23:30"; -- fermeture volets Etage
  time_ouv_S = "07:30"; -- ouverture volets Salon
  fibaro:debug("c'est le weekend");
else -- semaine
  time_ferm_Et = "22:00"; -- fermeture volets Etage
  time_ouv_Et = "07:30"; -- ouverture volets Etage
  time_ouv_S = "07:30"; -- ouverture volets Salon
  fibaro:debug("c'est la semaine");
end
fibaro:debug("ouverture etage :"..time_ouv_Et);
fibaro:debug("ouverture salon :"..time_ouv_S);
fibaro:debug("fermeture etage :"..time_ferm_Et);
-------------------------------------------------------------------------------------------------------------
local minute = 60000 --in milliseconds
local currentDate = os.date("*t");
local currentTime = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min);
-------------------------------------------------------------------------------------------------------------
-- Ouvrir Auto Groupe Salon si Douche
-------------------------------------------------------------------------------------------------------------
local id_v = 0;

if time_ouv_auto_1 <= currentTime and currentTime <= time_ouv_auto_2 then
  if tonumber(fibaro:getValue(46, "value")) > 70 then
    fibaro:debug("humidité "..tonumber(fibaro:getValue(46, "value")));
    for i=1, #ID_volet_salon do
      id_v = tonumber(ID_volet_salon[i]);
      if ( tonumber(fibaro:getValue(id_v, "value")) == 0 ) then
        fibaro:call(id_v, "open");
        fibaro:debug("ouverture volet "..id_v);
      else
        fibaro:debug("volet "..id_v.." deja ouvert");
      end
    end
    fibaro:log("Ouverture Auto Volets Salon");
  end
end
-------------------------------------------------------------------------------------------------------------
local sysvolet_auto = "SysVolet_auto" -- variable globale àdéclarer
local sysvolet_a = fibaro:getGlobal(sysvolet_auto);
if sysvolet_a == "ON" then
-------------------------------------------------------------------------------------------------------------
-- Ouvrir Auto Volets Etage
-------------------------------------------------------------------------------------------------------------
local id_v = 0;
  
if time_ouv_Et == currentTime then
  for i=1, #ID_volet_etage do
    id_v = tonumber(ID_volet_etage[i]);
    if ( tonumber(fibaro:getValue(id_v, "value")) == 0 ) then
      fibaro:call(id_v, "open");
      fibaro:debug("ouverture volet "..id_v);
    else
      fibaro:debug("volet "..id_v.." deja ouvert");
    end
    fibaro:call(id_v, "open");
  end
  fibaro:log("Ouverture Auto Volets Etage");
end
-------------------------------------------------------------------------------------------------------------
-- Ouvrir Auto Volets Salon
-------------------------------------------------------------------------------------------------------------
local id_v = 0;
  
if time_ouv_S == currentTime then
  for i=1, #ID_volet_salon do
    id_v = tonumber(ID_volet_salon[i]);
    if ( tonumber(fibaro:getValue(id_v, "value")) == 0 ) then
      fibaro:call(id_v, "open");
      fibaro:debug("ouverture volet "..id_v);
    else
      fibaro:debug("volet "..id_v.." deja ouvert");
    end
  end
  fibaro:log("Ouverture Auto Volets Etage");
end
-------------------------------------------------------------------------------------------------------------
-- Fermeture Auto Fenetre Enfant
-------------------------------------------------------------------------------------------------------------
local id_v = 0;
local id_f = 0;

if time_ferm_E == currentTime then
  for i=1, #ID_volets_chambre_E do
    id_v = tonumber(ID_volet_chambre_E[i]);
    id_f = tonumber(ID_fenetre_chambre_E[i]);
    if ( tonumber(fibaro:getValue(id_v, "value")) == 0 ) then
      fibaro:debug("volet "..id_v.." deja fermé");
    else
      if tonumber(fibaro:getValue(id_f, "value")) == 0 then -- vérifie si fenetre fermée
        fibaro:call(id_v, "close");
        fibaro:debug("fermeture volet "..id_v);
      end
    end
  end
  fibaro:log("Fermeture Auto Volet Enfant");
end
-------------------------------------------------------------------------------------------------------------
-- Fermeture Auto Volets Etage
-------------------------------------------------------------------------------------------------------------
local id_v = 0;
local id_f = 0;

if time_ferm_Et == currentTime then
  fibaro:call(smartphoneID, "sendPush", "Fermeture Automatique Etage");
  for i=1, #ID_volet_etage do
    id_v = tonumber(ID_volet_etage[i]);
    id_f = tonumber(ID_fenetre_etage[i]);
    if ( tonumber(fibaro:getValue(id_v, "value")) == 0 ) then
      fibaro:debug("volet "..id_v.." deja fermé");
    else
      if tonumber(fibaro:getValue(id_f, "value")) == 0 then -- vérifie si fenetre fermée
        fibaro:call(id_v, "close");
        fibaro:debug("fermeture volet "..id_v);
      end
    end
  end
  fibaro:log("Fermeture Auto Volet Etage");
end
-------------------------------------------------------------------------------------------------------------
-- Fermeture Auto Volets Salon
-------------------------------------------------------------------------------------------------------------
local id_v = 0;
local id_f = 0;
  
if time_ferm_S == currentTime then
  fibaro:call(smartphoneID, "sendPush", "Fermeture Automatique Salon");
  for i=1, #ID_volet_salon do
    id_v = tonumber(ID_volet_salon[i]);
    id_f = tonumber(ID_fenetre_salon[i]);
    if ( tonumber(fibaro:getValue(id_v, "value")) == 0 ) then
      fibaro:debug("volet "..id_v.." deja fermé");
    else
      if tonumber(fibaro:getValue(id_f, "value")) == 0 then -- vérifie si fenetre fermée
        fibaro:call(id_v, "close");
        fibaro:debug("fermeture volet "..id_v);
      end
    end
  end
  fibaro:log("Fermeture Auto Volet Salon");
end
-------------------------------------------------------------------------------------------------------------

-- temporisation de 5 minutes,
-- fibaro:sleep(300000);
end
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Une sacrée usine àgaz que voila ^^

Ca ne serait pas plus simple avec le scheduler de Shad pour la gestion des horaires? Je vais m'y intéresser bientôt maintenant que j'ai les volets de l'appart motorisés :)

Merci pour les idées!

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah le fameux GEA, toujours pas eu le temps d'aller me taper la lecture de toutes ces pages (j'en ai marre des travaux :13: ). Par contre une chose qui m'interessait de trouver parce que ca fait 1h que je suis sur le site a chercher, c'est comment faire un groupe de modules proprement. Genre appeler mes modules de volets TousLesVolets et de faire un device virtuel avec bouton Ouvert et Fermé (sans avoir àles appeler 1 par 1, comme ca si je rajoute un volet plus tard je n'ai qu'àajouter le numéro du device)

J'ai finalement trouver car p78ch201 l'utilise dans son script mais je ne comprends pas trop comment ca marche...

local device = {161, 168, 172}

for i = 1, #device do
fibaro:call(device[i], "close");
end

Je ne comprends pas cette histoire de i = 0 ou i = 1... Si jamais qqn a du temps a perdre pour expliquer ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

Très simple,

i=1, tu commences àcompter àpartir de 1.

#device, récupère le nombre d'item dans ton array

device, si i=[1] alors device[1] = 161.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour, je suis un nouveau membre et débutant en domotique.

Comme j'ai cherché desespèrement une solution pour grouper tous mes volets, et les commander par un bouton virtuel sur l'appli android de mon portable, je voudrais vous montrer ma solution trouvée par hazard (la documentation de la HC2 reste à  ameliorer)

 

D'abord il faut integrer les modules et les calibrer.

 

Vous créez un module virtuel,

puis dans le menu général du module virtuel vous donnez un nom à  la bete et vous choissisez un emplacement.

Ensuite vous cliquez sur "Avancé".

La vous trouvez les boutons à  choisir, j'ai choisi deux fois un bouton par ligne. Une fois enregistré vous pouvez maintenant nommer les boutons, et ensuite les remplir avec un contenu: vous cochez "Code Lua", puis cliquez droit dans le grand espace vide sous "ID". Dans la liste vous choissisez votre peripherique, puis l'action. Cela vous repetez pour chaque peripherique que vous voulez integrer. Et chaque fois une ligne de  code Lua est produit par le logiciel.

Vous repetez tout pour le deuxième bouton, cette fois avec l'autre paramètre, p.ex.close.

Vous n'oubliez pas d'enregister.

C'est tout

Partager ce message


Lien à poster
Partager sur d’autres sites

Sinon dans les paramètres tu peux faire des groupes (jusque 3 ou 4 volets je crois) comme ca en en ouvrant un, les autres s'ouvrent également.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

coucou, dis moi as tu une alarme, parce que, j'utilise une scene bloc,,,, si alarme=ON Variable = soir et Lux=<120 et Volet= Ouvert  alors alarme=OFF et Volet=10% et alarme=ON 

                                                                                                                 et une autre à  22h30 fermeture totale

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai fais une télécommande pour les volets et une scène un mini gea en quelques sort qui prends en compte le VD de HANSOLO jours fériés regarde ça te donnera peut être des idées

Envoyé de mon SM-G900F

Partager ce message


Lien à poster
Partager sur d’autres sites

×