p78ch201 Posté(e) le 28 mars 2014 Signaler Posté(e) le 28 mars 2014 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 composé d'un label : et de 2 boutons : (remplacer 102 par l'id de votre module virtuel) 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 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 1
p78ch201 Posté(e) le 29 mars 2014 Auteur Signaler Posté(e) le 29 mars 2014 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 1
Tomzebest Posté(e) le 27 juin 2014 Signaler Posté(e) le 27 juin 2014 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!
Tomzebest Posté(e) le 27 juin 2014 Signaler Posté(e) le 27 juin 2014 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 ). 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 ^^
Shad Posté(e) le 27 juin 2014 Signaler Posté(e) le 27 juin 2014 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.
Tomzebest Posté(e) le 27 juin 2014 Signaler Posté(e) le 27 juin 2014 Ah ok tout simplement! Merci pour l'explication et l'exemple Shad!
micha Posté(e) le 19 décembre 2014 Signaler Posté(e) le 19 décembre 2014 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
Tomzebest Posté(e) le 8 janvier 2015 Signaler Posté(e) le 8 janvier 2015 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. 1
q.philippe Posté(e) le 11 juin 2015 Signaler Posté(e) le 11 juin 2015 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
mprinfo Posté(e) le 12 juin 2015 Signaler Posté(e) le 12 juin 2015 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
Messages recommandés