Aller au contenu
mprinfo

Scene Lua - Ouverture Et Fermeture Des Volets

Recommended Posts

Présentation :

  • Cette Scène va permettre d'actionner vos volets :
    • au lever et coucher du soleil avec un décalage en minutes possible
    • Les jours fériés
    • A heure fixe

 

Prérequis :

  • Il va falloir installer les scènes et Virtual device suivant :
    • VD Jour Chômé ICI
    • Scene Lua - Jour / Nuit Avec Décalge Possible Et Optimisation Du Sleep ICI
    • Scene Lua - Trigger Horaire Sans Boucle While ... Do ICI

 

Configuration :

  • Saisir le nom de ces volets et leurs ID
    local mesvolets ={
        ["Bureau"] = 5,
        ["Ch_Amis"] = 7,
        ["Chaufferie"] = 9,
        ["Ch_Parents"] = 17,
        ["Ch_Enfants"] = 19,
        ["Cuisine"] = 23,
        ["SAM"] = 25,
        ["SdB"] = 27,
        ["Salon"] = 29,
      }
    
  • Créer des groupes de volets (Ce n'est pas obligatoire)
    local RDC = {"Bureau", "Ch_Amis", "Chaufferie"}
    local Rue = {"Bureau", "Cuisine", "SAM"}
    local Jardin = {"Chaufferie", "Ch_Amis", "SdB"}
    local Chambre = {"Ch_Parents", "Ch_Enfants"}
    
  • Saisir le Nom des différents Variables globales
    --[[
    %% globals
    SoleilLever
    SoleilCoucher
    Heure
    --]]
    
    local nomLever = "SoleilLever" --> Nom de la Variable Globale lever soleil
    local nomCoucher = "SoleilCoucher" --> Nom de la Variable Globale coucher soleil
    local Heure = "Heure" --> Nom de la variable globale Heure
    local JourChome = fibaro:getGlobalValue("JourChome") --> Nom de la variable Module Virtuel Hansloo
    local IdTel = fibaro:getGlobalValue("IdTel") -- Recuperation de id du tel pour le push
    
    
  • Saisir le temps de pause entre chaque volets (Seulement si on utilise des groupes de volets)
    --------------------------------------------------------------------------
    local Pause = 0 -- Temp de pause entre chaque commande de modules en seconde
    
  • Copier la scène suivante version 1.00b
    --[[
    %% globals
    SoleilLever
    SoleilCoucher
    Heure
    --]]
    local mesvolets ={
        ["Bureau"] = 5,
        ["Ch_Amis"] = 7,
        ["Chaufferie"] = 9,
        ["Ch_Enfants"] = 17,
        ["Ch_Parents"] = 19,
        ["Cuisine"] = 23,
        ["SAM"] = 25,
        ["SdB"] = 27,
        ["Salon"] = 29,
      }
    -- Table Zone (Groupes de modules)
    local RDC = {"Bureau", "Ch_Amis", "Chaufferie"}
    local Rue = {"Bureau", "Cuisine", "SAM"}
    local Jardin = {"Chaufferie", "Ch_Amis", "SdB"}
    local Chambre = {"Ch_Parents", "Ch_Enfants"}
    --------------------------------------------------------------------------
    local nomLever = "SoleilLever" --> Nom de la Variable Globale lever soleil
    local nomCoucher = "SoleilCoucher" --> Nom de la Variable Globale coucher soleil
    local Heure = "Heure" --> Nom de la variable globale Heure
    local JourChome = fibaro:getGlobalValue("JourChome") --> Nom de la variable Module Virtuel Hansloo
    local IdTel = fibaro:getGlobalValue("IdTel") -- Recuperation de id du tel pour le push
    
    --------------------------------------------------------------------------
    local Pause = 0 -- Temp de pause entre chaque commande de modules en seconde
    
    ----------------------------------------------------------------------
    -- Envoi d'un Push pour avertir que le box à  démarrer ou redémarrer --
    ----------------------------------------------------------------------
    function EnvoiPush(Message)
            fibaro:debug("Envoi Push : "..Message)
            fibaro:call(IdTel, "sendPush", Message)
    end
    
    -----------------------------------------------------------------------
    -- Test si la valeur a enoyer est différente de la valeur du module
    -----------------------------------------------------------------------
    function testvaleur(id, valeurs)
             local GetValeur = tonumber(fibaro:getValue(id, "value"))
             if valeurs ~= GetValeur then
                fibaro:call(id, "setValue", valeurs)
                --fibaro:debug(id.." - action en cours... - Valeur "..valeurs)
                fibaro:sleep(Pause*1000)
             end
    end
    ----------------------------------------------------------------------------
    -- Recupération de l'id par rapport au nom de la tables mesvolets
    ----------------------------------------------------------------------------
    function volets(zone, valeurs)
    
            if (type(zone) == "table") then 
               local messages = "Les "..#zone.." Volets : "
               for i,v in ipairs(zone) do
                  messages = (messages..v..", ")
                  local id = mesvolets[v]
                  if id == nil then
                     fibaro:debug("ERREUR NOM DU VOLET - "..v.." - dans une table")
                     EnvoiPush("ERREUR NOM DU VOLET - "..v.." - dans une table")
                  else
                     testvaleur(id, valeurs) 
                  end
               end
               messages = (messages.."ont été actionnés à  "..valeurs.."%")
               EnvoiPush(messages)
            elseif (type(zone) == "string") then
               local id = mesvolets[zone]
               if id == nil then
                  fibaro:debug("ERREUR DANS LE NOM DU VOLET : "..zone)
                  EnvoiPush("EERREUR DANS LE NOM DU VOLET : "..zone)
               else
                  testvaleur(id, valeurs)
                  EnvoiPush("Le volet : "..zone.." a été actionné à  "..valeurs.."%")
               end
            else
               fibaro:debug("Erreur......")
               EnvoiPush("Erreur......")
            end
            
    end
    
    --------------------------------------------------------------------
    -- test si le déclencheur est lever ou coucher du soleil
    --------------------------------------------------------------------
    function Test(zone, valeurs, minutes)
            if zone ~= nil then
               if minutes == nil then;
                  minutes = 0
               end
               volets(zone, valeurs)
            else
               fibaro:debug("Erreur dans la table ou table inéxitante")
               EnvoiPush("Erreur dans la table ou table inéxitante")
            end 
    end
    
    --------------------------------------------------------------------
    -- test Lever
    --------------------------------------------------------------------
    function lever(zone, valeurs, minutes, Jchome)
            if nomTrigger == nomLever and valeurTrigger == minutes then
               if Jchome == JourChome or Jchome == nil then
                  Test(zone, valeurs, minutes)
               end
            end
    end
    
    --------------------------------------------------------------------
    -- test Coucher
    --------------------------------------------------------------------
    function coucher(zone, valeurs, minutes, Jchome)
            if nomTrigger == nomCoucher and valeurTrigger == minutes then
               if Jchome == JourChome or Jchome == nil then
                  Test(zone, valeurs, minutes)
               end
            end
    end
    --------------------------------------------------------------------
    -- test Heure
    --------------------------------------------------------------------
    function heure(zone, valeurs, minutes, Jchome)
            if nomTrigger == Heure and valeurTrigger == minutes then
               if Jchome == JourChome or Jchome == nil then
                  Test(zone, valeurs, minutes)
               end
            end
    end
    
    --------------------------------------------------------------------------
    -- Demarrage du programme
    --------------------------------------------------------------------------
    local trigger = fibaro:getSourceTrigger()
    if (trigger['type'] == 'global') then
      nomTrigger = trigger['name']
      valeurTrigger = tonumber(fibaro:getGlobalValue(nomTrigger))
      print("Nom du déclencheur = ", nomTrigger, " - Minutes : ", valeurTrigger)
    else
      fibaro:debug("La scéne ne peut être lancer que par une Variable Globale")
      fibaro:abort();
      --nomTrigger = "Heure"
      --valeurTrigger = 6
    end
    -------------------------------------------------------------------------
    -- Ne rien modifier au dessus de cette ligne
    -------------------------------------------------------------------------
    -- Commandes a écrit pour lever du soleil
    -- lever (Funtion qui traite le lever du soleil
    -- coucher(zone, valeur, minutes)
    -- exemple pour actionné les volets de la table Rue a 80% 10 minutes avant le lever
    -- lever(Rue, 80, -10)
    -- exemple pour actionné le volet "Bureau" au lever du jour
    -- lever("Bureau", 99, 0)
    -- Pour actionner un volet au coucher du soleil
    -- Il faut remplacer lever par coucher
    -- ex : coucher(Rue, 0, 20)
    ------------------------------------------------------------------------
    -- Vous pouvez entrer vos commande en dessous de cette ligne
    

 

Utilisation :

  • lever ou coucher("Nom du volet" ou Nom du groupes de volets, valeur a envoyer, le décalage par rapport au lever ou coucher)
    • Exemples :
      • lever("Ch_Enfants", 99, -15) -- ouvre le volets 15 minutes avant le lever du soleil
      • lever("Salon", 99) ou lever("Salon", 99, 0) -- ouvre le volets au lever du soleil (le 0 n'est pas obligatoire)
      • coucher(Rue, 0, 0, "NON") -- Ferme les volets du groupe Rue au coucher du soleil si Jour Non férié
      • coucher(Jardin, 0, 30) -- Ferme les volets du groupe jardin 30 mn après le coucher du soleil
      • (Attention le 3° paramètre qui représente les minutes doit se trouver dans la table de la scène jour nuit, dans ces 2 tables vous pouvez mettre autant de valeurs que vous voulez chaque valeur représentera un déclencheur)
        -- Minutes de décalages par rapport au lever du soleil
        local TLever = {-30, -15, 10, 20, 30, 45, 60}
        -- Minutes de décalages par rapport au Coucher du soleil
        local TCoucher = {-30, -15, 10, 20, 30, 45}
        
  • Pour l'utilisation de l'heure je n'ai prévu qu'un déclenchement avec la variable globale heure, on ne pourra donc exécuter une commande qu'a heure fixe (1h, 2h, 3h, 4h, 5h etc....)
    • Exemples :
      • heure("Ch_Parents", 99, 6, "NON") -- Ouverture du volets Ch_Parents a 6h00 si jour non férié
      • heure(Nord, 0, 20) -- Fermeture du groupes de volets Nord à  20h00
  • Upvote 4

Partager ce message


Lien à poster
Partager sur d’autres sites

Cool cool mprinfo, mais bon, ne vaut il pas mieux faire une grosse partie dans GEA, car làcela multiplies les modules :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Je préfère plusieurs scripts qui tournent de temp en temp qu'un scripts énorme qui tourne en permanence de plus je n'utilise pas GEA lol

Partager ce message


Lien à poster
Partager sur d’autres sites

Huhu comme moi, j'utilise pas GEA :)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@mprinfo,

 

GG comme d'hab, superbe taf de pro !

 

J'ai pas de volets roulant, mais un travail énorme pour les autres ^^ Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour à  tous,

 

Les codes de mprinfo marchent.

Je me pose la question de la valeur 'orientation des lamelles' cf le post: http://www.domotique-fibaro.fr/index.php/topic/3398-ouvrir-seulement-les-lamelles-de-mes-volets-v%C3%A9nitiens/?hl=lamelles

 

Comment peut-on rajouter le paramètre "orientation des lamelles" à  la fonction Lever() et Coucher() ?

 

Comme dit razowski:

Pour garder le store en bas mais juste ouvrir les lamelles : (ouverture le matin)

fibaro:call(ID_de_ton_module, "setValue", "2"); ...2% d'ouverture du volet

fibaro:call(ID_de_ton_module, "setValue2", "99"); ...ouverture à  100% des lamelles (position horizontale...)
 
Pour garder le store en bas mais juste fermer les lamelles: (le soir
fibaro:call(ID_de_ton_module, "setValue", "99");
fibaro:call(ID_de_ton_module, "setValue2", "99");
 
 
Merci de vos pistes et aides...

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

je souhaiterais faire une télécommande virtuelle pour la gestion des volets roulants.

celle-ci serait composée en autre de deux boutons Auto  et Manu pour l'ouverture a automatique ou non des volets.

J'aimerais également intégrer une commande pour exclure des volets roulants de la gestion automatique. Dans le même principe du module virtuel de l'alarme avancée avec l'exclusion des ouvrants.

Le problème c'est que je n'arrive pas a faire les boutons auto et manu, alors ...

Merci de votre aide et bonnes fêtes de fin d'année a tous.

Partager ce message


Lien à poster
Partager sur d’autres sites

Petit up

Envoyé de mon BLA-L29 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

×