Aller au contenu

Fermeture Volet Au Coucher Du Soleil


Peter

Messages recommandés

Je sais

Mais la nostalgie quand elle te tient

de tout façon le mois prochain je passe sur Mac comme ça normalement plus de pb et le portable sera pour ma fille et ma femme

Je te donne le code demain

Encore une fois merci pour ton code et tu vois ce soir ca a fonctionner du premier coup

Lien vers le commentaire
Partager sur d’autres sites

Je sais ,je n'en voulait pas non plus il y a quelque années mais pour faire ce que j'ai a faire ce sera suffisant

Allez je retourne a ma bible du moment apprendre le lua

Bonne soirée a toi et au tient et merci pour ton aide et ton code

Lien vers le commentaire
Partager sur d’autres sites

bonjour comme tu me la demander hier je te met le code de la scene fermeture volet

--[[
%% globals
SoleilLever
SoleilCoucher
--]]
local mesvolets ={
["Volet Ch Parents"] = 117,
["Volet CH Lily"] = 108,
["Baie 1"] = 73,
["Baie 2"] = 75,
["Volet 3"] = 77,
["Volet Bureau"] = 28,
}
-- Table Zone (Groupes de modules)
local RDC = {"Volet Bureau", "Baie 1", "Volet 3"}
local Etage = {"Volet CH Lily", "Volet Ch Parents"}

--------------------------------------------------------------------------
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
coucher(RDC, 0, 10)
coucher(Etage, 0, 10)

et la scene jour_nuit ci tu as besoin (j'ai mi le bon id pour le phus)

--[[
%% autostart
--]]

-- Nom des Variables Globales
local VGJourNuit = "Jour_Nuit"
local VGLeverSoleil = "SoleilLever"
local VGCoucherSoleil = "SoleilCoucher"
-- Minutes de décalages par rapport au lever du soleil
local TLever = {-5, -10}
-- Minutes de décalages par rapport au Coucher du soleil
local TCoucher = {-5, 10}
-- Id du téléphone
local IdTel = 185
 
--************ Ne rien modifier en dessous de cette ligne ************
 
----------------------------------------------------------------------
-- Envoi d'un Push pour avertir que le box àdémarrer ou redémarrer --
----------------------------------------------------------------------
function EnvoiPush(Message)
fibaro:debug(Message)
fibaro:call(IdTel, "sendPush", Message)
end
 
-- -----------------------------------------------------------------
-- Vérification Variable Globale et création si besoin --
-- -----------------------------------------------------------------
function VerifVG(nom, valeur, choix)
if (fibaro:getGlobalValue(nom) == nil) then
local enum = 0
if (type(choix) ~= "nil") then
enum = 1
end
api.post("/globalVariables", {name=nom, isEnum=enum})
if enum == 1 then
local variable = {}
variable.value = tostring(valeur)
variable.isEnum = false
if (type(choix) ~= "nil") then
variable.isEnum = true
variable.enumValues = choix
end
api.put("/globalVariables/" .. nom, variable)
end
end
end
 
----------------------------------------------------------------------
-- Mise a jour d'une variable global --
----------------------------------------------------------------------
function UpdateVG(NomVG, Valeurs)
if (fibaro:getGlobalValue(NomVG) == nil) then
fibaro:debug("il faut cree la variable "..NomVG)
EnvoiPush(string.format("La variable Globale %s n'existe pas ou a ete supprimer", NomVG))
fibaro:abort() -- fin du programme
end
fibaro:debug("Mise a jour de la Variable Globale : "..NomVG.." = "..Valeurs)
fibaro:setGlobal(NomVG, Valeurs);
end
 
----------------------------------------------------------------------
-- Vérification de l'heure et mise àjour --
-- de la variable si nécessaire --
----------------------------------------------------------------------
function UpdateJourNuit(NomVG, heure)
local valeurs = "Nuit"
-- test si on est le jour ou la nuit
if (heure >= leverSoleil) and (heure < coucherSoleil) then
valeurs = "Jour"
end
fibaro:debug(string.format("Lever Soleil : %s - Coucher Soleil : %s", leverSoleil, coucherSoleil))
UpdateVG(NomVG, valeurs) -- mise a jour de la VG Jour_Nuit
end
 
----------------------------------------------------------------------
-- Compare les tables Lever et coucher du soleil --
-- avec sunrisehour et sunsethour --
----------------------------------------------------------------------
function LeverCoucher(NomVG, TableNom, SunRiseSet, JourNuit)
for index, v in ipairs(TableNom) do
if (os.date("%H:%M", os.time()+v*-60)) == SunRiseSet then
UpdateVG(NomVG, v)
if v == 0 then
fibaro:debug("il fait : "..JourNuit)
UpdateVG(VGJourNuit, JourNuit)
end
end
end
end
 
----------------------------------------------------------------------
-- Conversion Date format texte en format Date --
----------------------------------------------------------------------
function ConvertionDate(NomDate)
 
-- on extrait l'heure et minute (%d+) est un digit
local heure, minute = string.match(NomDate, "(%d+)%d+)")
-- On récupère l'heure et date actuelle sous forme de tableau
local TableDate = os.date("*t")
-- On modifie l'heure et les minutes
TableDate.hour = heure
TableDate.min = minute
-- Nous pouvons maintenant exploiter "MonHeure" comme une vrai date
local MonHeure = os.time(TableDate)
return (MonHeure)
end
 
----------------------------------------------------------------------------
-- Calcul la valeur du Sleep en fonction des Max et Mini --
-- des Tables Lever et Coucher --
----------------------------------------------------------------------------
function calculPause(j, heure, minilever, maxilever, minicoucher, maxicoucher)
fibaro:debug("Heure Actuelle : "..heure)
-- mini et max lever
local heurelever = ConvertionDate(leverSoleil)
local heureleverMini = (os.date("%X", heurelever+(minilever*60)))
local heureleverMaxi = (os.date("%X", heurelever+(maxilever*60)))
fibaro:debug("heure Lever Soleil Mini : "..heureleverMini.." - Maxi : "..heureleverMaxi)
-- mini et max coucher
local heurecoucher = ConvertionDate(coucherSoleil)
local heurecoucherMini = (os.date("%X", heurecoucher+(minicoucher*60)))
local heurecoucherMaxi = (os.date("%X", heurecoucher+(maxicoucher*60)))
fibaro:debug("heure Coucher Soleil Mini : "..heurecoucherMini.." - Maxi : "..heurecoucherMaxi)
if heure >= heureleverMini and heure < heureleverMaxi
or heure >= heurecoucherMini and heure < heurecoucherMaxi then
j=1
end
return (j)
end
 
-- ===================================================================
-- == Nous avons fini la préparation de notre code ==
-- == Nous pouvons Exécuter le programme ==
-- == Script réaliser par MPRINFO Version 3.00B ==
-- == Grand Merci àSTEVEN pour son aide ==
-- ===================================================================
 
----------------------------------------------------------------------
-- Envoi d'un Push pour donner la date et l'heure de démarrage --
----------------------------------------------------------------------
EnvoiPush(string.format("La box a démarré le %s a %s", os.date("%d/%m/%Y"), os.date("%R")))
 
----------------------------------------------------------------------
-- 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
 
----------------------------------------------------------------------
-- Vérification si les variables globales existe --
-- et Création ou Modification si Besoin --
----------------------------------------------------------------------
VerifVG(VGJourNuit, "Jour", {"Jour", "Nuit"})
VerifVG(VGLeverSoleil, 0)
VerifVG(VGCoucherSoleil, 0)
----------------------------------------------------------------------
-- Mise a jour de la variable VG Jour_Nuit au Démarrage de la Box --
-- Ou lors de la sauvegarde de la scène --
----------------------------------------------------------------------
leverSoleil = fibaro:getValue(1, "sunriseHour")
coucherSoleil = fibaro:getValue(1, "sunsetHour")
UpdateJourNuit(VGJourNuit, os.date("%H:%M", os.time()))
 
---------------------------------------------------------------------
-- Trie des Tables et récupération des valeurs min et maximum --
---------------------------------------------------------------------
-- Traitement de la Table TLever
table.insert(TLever, 1, 0) -- ajout de 0 mn dans la table
table.sort(TLever)
local MiniLever = ((TLever[1]-30))
local MaxiLever = ((TLever[#TLever]+1))
-- Traitement de la Table TChoucher
table.insert(TCoucher, 1, 0) -- ajout de 0 mn dans la table
table.sort(TCoucher)
local MiniCoucher = ((TCoucher[1]-30))
local MaxiCoucher = ((TCoucher[#TCoucher]+1))
 
---------------------------------------------------------------------
-- Test toute les minutes pour savoir si c'est jour ou nuit --
---------------------------------------------------------------------
while true do
 
local j = 30
local osHeure = os.date("%H:%M", os.time())
leverSoleil = fibaro:getValue(1, "sunriseHour")
coucherSoleil = fibaro:getValue(1, "sunsetHour")
 
LeverCoucher(VGLeverSoleil, TLever, leverSoleil, "Jour")
LeverCoucher(VGCoucherSoleil, TCoucher, coucherSoleil, "Nuit")
 
 
j = calculPause(j, osHeure, MiniLever, MaxiLever, MiniCoucher, MaxiCoucher)
fibaro:debug(string.format("Valeur du Sleep %s mn",j))
 
fibaro:sleep(j*60*1000); -- Pause en fonction de la valeur de J
end

merci

Lien vers le commentaire
Partager sur d’autres sites

ok pas de souci de tout façon je suis au taff et je débauche après 20h30 et ce n'ai pas presser

et tu a tout ton temps car tu ma déjà  super bien aider depuis 2 ou 3 jours et cela ma permis d'en apprendre un peu plus sur la façon de faire et sur le fonctionnement

 

en tout cas merci beaucoup A++

Lien vers le commentaire
Partager sur d’autres sites

Bon j'ai trouvé pourquoi tu avais un message d'erreur c'est ce que je pensé tu as pas mis l'id du tel ou la VG ou tu stocks sont id

j'ai ajouter une morceau de codes pour éviter qu'il y ai une erreur

 

pour le tel si tu veux un push pour te dire ci le volet a été actionné

-- récupération de l'id du tel qui est dans une VG
local IdTel = fibaro:getGlobalValue("IdTel")

ou

-- on indique l'id du tel
-- ex :
local IdTel = 250

Voila ta scène :

--[[
%% globals
SoleilLever
SoleilCoucher
--]]
local mesvolets ={
      ["Volet Ch Parents"] = 117,
      ["Volet CH Lily"] = 108,
      ["Baie 1"] = 73,
      ["Baie 2"] = 75,
      ["Volet 3"] = 77,
      ["Volet Bureau"] = 28,
}
-- Table Zone (Groupes de modules)
local RDC = {"Volet Bureau", "Baie 1", "Volet 3"}
local Etage = {"Volet CH Lily", "Volet Ch Parents"}
 
--------------------------------------------------------------------------
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 = 30 -- 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)
        if Idtel ~= nil then
           fibaro:call(IdTel, "sendPush", Message)
        else
           fibaro:debug("Il n'y a aucun tel enregistré")
        end
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 = "SoleilCoucher"
-- valeurTrigger = -5
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
coucher(Etage, 0, 10)
if tonumber(fibaro:getValue(179, "value")) == 0 then
  coucher("Baie 2", 0, -5)
end

Lien vers le commentaire
Partager sur d’autres sites

Tu ajoute autant de commande que tu veux tu peux mettre une valeur entre 0 et 99 por la position du volet

Tu nes pas obligé de créé une table si il n'y qu'un volet tu mets juste ke nom du volet il faut juste que la valeur temps ex 5mn 23mn soit dans jours nuit tu peux aussi ne pas ouvrir un volet si on est le we ou un jour férié

Envoyé de mon SM-G900F

Lien vers le commentaire
Partager sur d’autres sites

pourquoi maintenant tu met la baie 2 dans

local mesvolets ={
      ["Volet Ch Parents"] = 117,
      ["Volet CH Lily"] = 108,
      ["Baie 1"] = 73,
      ["Baie 2"] = 75,
      ["Volet 3"] = 77,
      ["Volet Bureau"] = 28,
}
-- Table Zone (Groupes de modules)
local text = {"bb"}
local RDC = {"Volet Bureau", "Baie 1", "Volet 3"}
local Etage = {"Volet CH Lily", "Volet Ch Parents"}
 

et pas dans la premiere ligne locale etage

Lien vers le commentaire
Partager sur d’autres sites

comme cela

coucher(Etage, 0, 10)
if tonumber(fibaro:getValue(179, "value")) == 0 then
  coucher("Baie 2", 0, -5)
end
coucher(RDC, 0, -8)

il ne devrait pas tarder a ce fermer (les volet)

Lien vers le commentaire
Partager sur d’autres sites

elle n'a pas fonctionner je vient de modifier 10 -5 -8 dans jour_nuit

pour id tel je recoit bien les phus




[DEBUG] 22:14:42: La box a démarré le 05/06/2015 a 22:14
[DEBUG] 22:14:42: Lever Soleil : 06:13 - Coucher Soleil : 21:51
[DEBUG] 22:14:42: Mise a jour de la Variable Globale : Jour_Nuit = Nuit
[DEBUG] 22:14:42: Heure Actuelle : 22:14
[DEBUG] 22:14:42: heure Lever Soleil Mini : 05:35:42 - Maxi : 06:24:42
[DEBUG] 22:14:42: heure Coucher Soleil Mini : 21:13:42 - Maxi : 22:02:42
[DEBUG] 22:14:42: Valeur du Sleep 30 mn

la scene jour nuit a bien fait passer la variable a nuit mais la scene volet ne fonctionne pas je regarde le debug

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...