mprinfo Posté(e) le 2 mai 2015 Signaler Posté(e) le 2 mai 2015 Voici un Scène qui va vous permettre de savoir si on est le jour ou la nuit et d'avoir un décalage en minute par rapport ou jour ou a la nuit IL va nous falloir pour cette scène 2 variables globales et 1 variable globale prédéfinie Jour_Nuit (Variable prédéfinie avec comme valeur Jour ou Nuit. elle aura 2 déclenchements) SoleilLever (cette variable recevra les valeurs de la table TLever elle aura donc autant de déclenchement que de valeur dans la table TLever) SoleilCoucher (Cette variable recevra les valeurs de la table TCoucher, elle aura donc autant de déclenchement que de valeur dans la table TCoucher) Ces variables seront créées automatiquement si vous êtes en V4. Vous pouvez donnez un autre nom a chaque variable globales que les valeurs par défaut. -- 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 = {-60, -15, 30, 60, 50, 124} -- Minutes de décalages par rapport au Coucher du soleil local TCoucher = {-5, 30, 0, -30} -- Id du téléphone local IdTel = 181 Pour notre ami JoJo ainsi qu'a tout ceux qui sont en V3.60 il faudra crées les variables manuellement et désactivé ces trois lignes VerifVG(VGJourNuit, "Jour", {"Jour", "Nuit"}) VerifVG(VGLeverSoleil, 0) VerifVG(VGCoucherSoleil, 0) ----------------------------- Il faut renseigner IdTel avec l'id de votre téléphone cela va servir a vous envoyez une notification lorsque la box démarre ou lorsqu il y a modification de la scène. Une notification est aussi possible si il y a un probléme de variable globale. Le programme est optimisez pour que le sleep passe automatiquement de 1 mn à 30 mn en fonction des valeurs des tables coucher et lever Exemple d'utilisation : Scène bloc : Scène LUA je veux un déclenchement de scène (Il n'y a aucun ordre a respecter) 45 minutes avant le lever = -45 15 minutes avant le lever = -15 23 minutes apres le lever = 20 1h20 minutes apres le lever = 80 0 minutes = Jour dans la tables TLever il est donc inutile de mettre 0, il sera ajouter automatiquement a la table Je renseigne donc ma table TLever comme ceci local TLever = {-45, 20, 80, -15} Je fais de même avec la table TCoucher local TCoucher = {-5, 30, -30} Récupération des triggers dans une scène Utilisation de la variables globales Jour_Nuit comme trigger --[[ %% globals Jour_Nuit --]] local JourNuit = fibaro:getGlobalValue("Jour_Nuit") if JourNuit == "Jour" then fibaro:debug("Il fait "..JourNuit) end if JourNuit == "Nuit" then fibaro:debug("Il fait "..JourNuit) end Utilisation de ou des variables globales SoleilLever et SoleilCoucher comme trigger --[[ %% globals SoleilLever SoleilCoucher --]] local trigger = fibaro:getSourceTrigger() if (trigger['type'] == 'global') then LeverCoucher = trigger['name'] valeur = tonumber(fibaro:getGlobalValue(LeverCoucher)) print(nom, valeur) end -- le code dans ce test sera déclencher 15 mn aprés le coucher if LeverCoucher == "SoleilCoucher" and valeur == 15 then fibaro:call(7, "close") --Fermeture volet 15 mn après le coucher end -- le code dans ce test sera déclancher 30 mn avant le coucher if nom == "SoleilLever" and valeur == -30 then fibaro:call(7, "close") --Fermeture volet 30 mn avant le lever du soleil end Merci a STEVEN pour m'avoir aider a optimisez ce code Voici le code a copier dans une scène Version 3.00b --[[ %% 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 = {-60, -15, 30, 60, 50, 124} -- Minutes de décalages par rapport au Coucher du soleil local TCoucher = {-5, 30, 0, -30} -- Id du téléphone local IdTel = 181 --************ 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 A ceux qui vont utiliser cette scène, Merci de me faire un retour sur ce code... 9
cybersquat Posté(e) le 3 mai 2015 Signaler Posté(e) le 3 mai 2015 Hello, superbe taf ! Merci Merci Il y a vraiment du taf c'est vraiment impressionnant, je vais tester cela, cependant faut-il que l'on supprime l'ancienne version sur notre box avec les variables et tout refaire proprement ou pas ? Sinon GG les gars
mprinfo Posté(e) le 3 mai 2015 Auteur Signaler Posté(e) le 3 mai 2015 Oui ca serai mieux Les variables ce créée automatiquement donc aucun soucis Envoyé avec mon SmartPhone
q.philippe Posté(e) le 3 mai 2015 Signaler Posté(e) le 3 mai 2015 salut dis moi, je trouver le module avec Jour_Soir_Nuit plus adéquat,,, a savoir que je me sert de soir pour déclencher les lumières (baisse lux, 16h hiver et 22h été) et me sert du nuit (23h) pour couper la VMC ou tout autres ! En l'occurrence, le mode nuit serait Soir pour moi, et il faudrait que je rajoute un mode nuit,,,,? est ce possible avec ta scène? 1
mprinfo Posté(e) le 3 mai 2015 Auteur Signaler Posté(e) le 3 mai 2015 Oui tu peux le faire. Si tu t'y commais un peu en lua c'est assez simple. Je suis sur mon tel mais demain je peux te donner le code qu'il faut ajouter Envoyé avec mon SmartPhone
q.philippe Posté(e) le 3 mai 2015 Signaler Posté(e) le 3 mai 2015 Oui je veux bien ton code , a comparer avec celui que je viens de pondre,,,a savoir,,,,TOUTES tes nuit tranformer en Soir ! Et une heur fixe pour basculer en Nuit, j'ai une mise à jour toutes les 6mins (pour le mode nuit), le cas ou la VMC Vitesse 2 est allumer par exces C02 > 1200ppm --[[ %% 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 = {-60, -15, 30, 60, 50, 124} -- Minutes de décalages par rapport au Coucher du soleil local TCoucher = {-5, 30, 0, -30} -- Id du téléphone local IdTel = 24 local sourceTrigger = fibaro:getSourceTrigger(); function tempFunc() local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "21", "45")) or tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "07", "30"))) and (math.floor(os.time()/60)-math.floor(1430599500/60))%6 == 0 ) ) then fibaro:setGlobal("Jour_Nuit", "Nuit"); end setTimeout(tempFunc, 60*1000) end if (sourceTrigger["type"] == "autostart") then tempFunc() else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other" ) then fibaro:setGlobal("Jour_Nuit", "Nuit"); end end
cybersquat Posté(e) le 3 mai 2015 Signaler Posté(e) le 3 mai 2015 (modifié) Merci Pascal, J'adoreeeeeeuuuuuuuuuu ------------- Voici un test de scène que j'ai voulu faire en mode bloc transformer en LUA pour toi --[[ %% properties %% globals --]] local startSource = fibaro:getSourceTrigger(); if ( ( tonumber(fibaro:getGlobalValue("SoleilCoucher")) == tonumber("0") ) or startSource["type"] == "other" ) then fibaro:call(175, "pressButton", "1"); end L'idée est d’appeler le bouton virtuel avec le ON pour allumer les LED de la terasses ^^ Mais ca marche pas lol --------------------- Rectification ! ça marche, pour mon test j'ai demandé dans la scène d'éteindre les LED de la terrasses au bout de 30 secondes ! Par contre il considère comment le SoleilCoucher ? c'est a qu'elle heure?, et comment lui dire si il faut démarrer genre 15 ou 30 min après le couché du soleil ? --[[ %% properties %% globals --]] local startSource = fibaro:getSourceTrigger(); if ( ( tonumber(fibaro:getGlobalValue("SoleilCoucher")) == tonumber("0") ) or startSource["type"] == "other" ) then fibaro:call(175, "pressButton", "1"); setTimeout(function() fibaro:call(175, "pressButton", "2"); end, 30000) end Modifié le 3 mai 2015 par cybersquat
mprinfo Posté(e) le 4 mai 2015 Auteur Signaler Posté(e) le 4 mai 2015 voici comment on fait avec un scéne bloc il faut mettre la variable comme déclencheur
cybersquat Posté(e) le 4 mai 2015 Signaler Posté(e) le 4 mai 2015 @mprinfo, Exactement ça que j'ai effectué, bon ca me rassure lol, j'étais dans ma bonne logique, je pourrai ensuite la transformer en LUA et la laisser ainsi ! En plus sur le mien je vais lui coller un autre ( ET - re bouton pour éteindre les led de la terrasses tant de minutes plus loin ou heures) Merci de ton aide Pascal, c'est apprécié !
mprinfo Posté(e) le 4 mai 2015 Auteur Signaler Posté(e) le 4 mai 2015 Oui je veux bien ton code , a comparer avec celui que je viens de pondre,,,a savoir,,,,TOUTES tes nuit tranformer en Soir ! Et une heur fixe pour basculer en Nuit, j'ai une mise à jour toutes les 6mins (pour le mode nuit), le cas ou la VMC Vitesse 2 est allumer par exces C02 > 1200ppm --[[ %% 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 = {-60, -15, 30, 60, 50, 124} -- Minutes de décalages par rapport au Coucher du soleil local TCoucher = {-5, 30, 0, -30} -- Id du téléphone local IdTel = 24 local sourceTrigger = fibaro:getSourceTrigger(); function tempFunc() local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "21", "45")) or tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "07", "30"))) and (math.floor(os.time()/60)-math.floor(1430599500/60))%6 == 0 ) ) then fibaro:setGlobal("Jour_Nuit", "Nuit"); end setTimeout(tempFunc, 60*1000) end if (sourceTrigger["type"] == "autostart") then tempFunc() else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other" ) then fibaro:setGlobal("Jour_Nuit", "Nuit"); end end ce code ne fonctionnera pas car il ne sera exécuté qu'une seule fois au démarrage et après il ne sera plus lu
mprinfo Posté(e) le 4 mai 2015 Auteur Signaler Posté(e) le 4 mai 2015 je viens de regarder ce que tu veux la scéne jour_nuit n'est pas vraiment adapter pour ce que tu veux faire pour exécuter une scéne avec des triggers voici un tuto : http://www.domotique-fibaro.fr/index.php/topic/4153-tout-sur-le-d%C3%A9clenchement-dune-sc%C3%A9ne-en-lua-by-steven/ Il faudrait crée un scène qui démarre au démarrage de la box avec une boucle while true do qui s'exécute en permanence on n'y mets un sleep de 60s comme cela la boucle s'exécutera toutes le minutes exemple : while true do local osHeure = os.date("%H:%M", os.time()) fibaro:debug("il est : "..osHeure) fibaro:sleep(60*1000); -- Pause en fonction de 1mn end toutes les minutes tu auras dans le debug il est : ....... while true do if ( ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "21", "45")) or tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "07", "30"))) and (math.floor(os.time()/60)-math.floor(1430599500/60))%6 == 0 ) ) then fibaro:setGlobal("Jour_Nuit", "Nuit"); end fibaro:sleep(60*1000); -- Pause en fonction de 1mn end La tu as une scène qui prend en compte tes conditions et qui mets a jour la variable Jour_Nuit sur nuit dans ma scène si tu ajoutes VerifVG(VGJourNuit, "Jour", {"Jour", "Nuit"}) que tu remplaces par VerifVG(VGJourNuit, "Jour", {"Jour", "Nuit", "Soir"}) et que tu remplaces function UpdateJourNuit(NomVG, heure) local valeurs = "Nuit" par function UpdateJourNuit(NomVG, heure) local valeurs = "Soir" tu auras soir au lieu de nuit au coucher du soleil.
mprinfo Posté(e) le 4 mai 2015 Auteur Signaler Posté(e) le 4 mai 2015 Merci Pascal, J'adoreeeeeeuuuuuuuuuu ------------- Voici un test de scène que j'ai voulu faire en mode bloc transformer en LUA pour toi --[[ %% properties %% globals --]] local startSource = fibaro:getSourceTrigger(); if ( ( tonumber(fibaro:getGlobalValue("SoleilCoucher")) == tonumber("0") ) or startSource["type"] == "other" ) then fibaro:call(175, "pressButton", "1"); end L'idée est d’appeler le bouton virtuel avec le ON pour allumer les LED de la terasses ^^ Mais ca marche pas lol --------------------- Rectification ! ça marche, pour mon test j'ai demandé dans la scène d'éteindre les LED de la terrasses au bout de 30 secondes ! Par contre il considère comment le SoleilCoucher ? c'est a qu'elle heure?, et comment lui dire si il faut démarrer genre 15 ou 30 min après le couché du soleil ? --[[ %% properties %% globals --]] local startSource = fibaro:getSourceTrigger(); if ( ( tonumber(fibaro:getGlobalValue("SoleilCoucher")) == tonumber("0") ) or startSource["type"] == "other" ) then fibaro:call(175, "pressButton", "1"); setTimeout(function() fibaro:call(175, "pressButton", "2"); end, 30000) end salut le mode nuit est jour sont l'heure de coucher ou du lever du soleil ces information sont mise a jour tout les jours si tu veux un décalage de 30 mm tu mets dans la table 30 mn et dans ta scéne bloc tu mets 30 mn c'est tout simple j'ai mis un exemple sur le post 1
cybersquat Posté(e) le 4 mai 2015 Signaler Posté(e) le 4 mai 2015 Yop, Oui c'est ceux que j'ai fait et ca marche nickel ce soir ca a marché nickel ^^ Merci
q.philippe Posté(e) le 4 mai 2015 Signaler Posté(e) le 4 mai 2015 Merci mprinfo,,, je test cela --[[ %% 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 = {-60, -15, 30, 60, 50, 124} -- Minutes de décalages par rapport au Coucher du soleil local TCoucher = {-5, 30, 0, -30} -- Id du téléphone local IdTel = 24 --************ 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 = "Soir" -- 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", "Soir"}) 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 if ( ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "21", "45")) or tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "07", "30"))) and (math.floor(os.time()/60)-math.floor(1430599500/60))%6 == 0 ) ) then fibaro:setGlobal("Jour_Nuit", "Nuit"); end fibaro:sleep(60*1000); -- Pause en fonction de 1mn end
q.philippe Posté(e) le 4 mai 2015 Signaler Posté(e) le 4 mai 2015 et d'ailleurs, pense a le signer ton code tout en haut,,,,, IMPECC,,,, premier test OK
mprinfo Posté(e) le 6 mai 2015 Auteur Signaler Posté(e) le 6 mai 2015 @q.philippe je préfère resté discret Voici un exemple de script qui utilise lever et coucher du soleil c'est une version teste qui fonctionne Je donne ce script a titre d'exemple il n'y aura aucun support --[[ %% globals SoleilLever SoleilCoucher --]] local mesvolets ={ ["Bureau"] = 5, ["Ch_Enfants1"] = 7, ["Chaufferie"] = 9, ["Ch_Enfants2"] = 17, ["Ch_Parents"] = 19, ["Cuisine"] = 23, ["SAM"] = 25, ["SdB"] = 27, ["Salon"] = 29, } -- Table Zone (Groupes de modules) local RDC = {"Bureau", "Ch_Enfants2", "Chaufferie"} local Nord = {"Bureau", "Ch_Parents", "Cuisine", "SAM"} local Jardin = {"Chaufferie", "Ch_Amis", "SdB"} local chambre = {"Ch_Parents", "Ch_Enfants1"} -------------------------------------------------------------------------- local nomLever = "SoleilLever" --> Nom de la Variable Globale lever soleil local nomCoucher = "SoleilCoucher" --> Nom de la Variable Globale coucher soleil local JourChome = fibaro:getGlobalValue("JourChome") --> Nom de la variable Module Virtuel Hansloo local Conges = fibaro:getGlobalValue("Conges") local IdTel = fibaro:getGlobalValue("IdI9305") -- Recuperation de id du tel pour le push local Pause = 0 -- Temp de pause entre chaque commande de modules en seconde ----------------------------------------------------------------------- -- 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) end end ---------------------------------------------------------------------------- -- Recupération de l'id par rapport au nom de la tables mesvolets ---------------------------------------------------------------------------- function volets(zone, valeurs) if zone == nil then fibaro:debug("Erreur dans la table ou table inéxitante") fibaro:abort() end if (type(zone) == "table") then for i,v in ipairs(zone) do local id = mesvolets[v] if id == nil then fibaro:debug("ERREUR NOM DU VOLET - "..v.." - dans une table") else testvaleur(id, valeurs) end end elseif (type(zone) == "string") then local id = mesvolets[zone] if id == nil then fibaro:debug("ERREUR DANS LE NOM DU VOLET : "..zone) else testvaleur(id, valeurs) end else fibaro:debug("Erreur......") end end -------------------------------------------------------------------- -- test si le déclencheur est lever du soleil -------------------------------------------------------------------- function lever(zone, valeurs, minutes) if nomTrigger == nomLever and valeurTrigger == minutes then if minutes == nil then; minutes = 0 end volets(zone, valeurs, minutes) end end -------------------------------------------------------------------- -- test si le déclencheur est coucher du soleil -------------------------------------------------------------------- function coucher(zone, valeurs, minutes) if nomTrigger == nomCoucher and valeurTrigger == minutes then if minutes == nil then; minutes = 0 end volets(zone, valeurs, minutes) 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(); 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) ------------------------------------------------------------------------ lever(Nord, 99, 10) lever(Chambre, 99, 0) lever(Jardin, 99, -15) lever("Salon", 99, 0) coucher(Nord, 0, -15) coucher(Chambre, 0, 10) coucher(Jardin, 0, 30) coucher("Salon", 85, 30)
q.philippe Posté(e) le 8 mai 2015 Signaler Posté(e) le 8 mai 2015 dis moi, depuis les modifs Nuit, je n'ai plus de mise a jour ,, ?
mprinfo Posté(e) le 10 mai 2015 Auteur Signaler Posté(e) le 10 mai 2015 tu ne mets pas a jour sunrise et sunset 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")
Sp0oNy Posté(e) le 21 juin 2015 Signaler Posté(e) le 21 juin 2015 Super, script mis en place àla place de ma scène bloc qui cesse de fonctionner au bout de quelques jours. Merci ! 1
Steph11 Posté(e) le 9 décembre 2015 Signaler Posté(e) le 9 décembre 2015 Après 1 mois A me casser la tête pour installer ce programme j'ai 2 soucis, mais quî vient sà»rement de moi.(comme d'habitude) une fois le programme installer dans la parti Débug j'ai l'heure lever soleil ex: 06h00-08h30 en fonction de mes décalage mis dans ma variable TLever, jusque là ok mais dans l'heure coucher soleil j'ai 10h00-16h41en fonction de mes décalage mis dans ma variable TCoucher, - probleme il fait nuit A 16h42 alors que le coucher du soleil est A 17h01 et la fin du crépuscule est A 17h30 donc nuit après. - et pour finir pas de déclenchement au lever du soleil en créant une scene bloc. une idée peut être ???
mprinfo Posté(e) le 9 décembre 2015 Auteur Signaler Posté(e) le 9 décembre 2015 pour le mode bloc c'est normal regarde bien ton déclencheur je crois que tu as un soucis peux tu mettre ton code de la scène STP voici ce que j'ai chez moi local VGJourNuit = "Jour_Nuit" local VGLeverSoleil = "SoleilLever" local VGCoucherSoleil = "SoleilCoucher" -- Minutes de décalages par rapport au lever du soleil local TLever = {-30, -20, -10, 10, 20, 30} -- Minutes de décalages par rapport au Coucher du soleil local TCoucher = {-30, -20, -10, 10, 20, 30}
Steph11 Posté(e) le 9 décembre 2015 Signaler Posté(e) le 9 décembre 2015 Avec un peu de retard le voici
mprinfo Posté(e) le 9 décembre 2015 Auteur Signaler Posté(e) le 9 décembre 2015 je vois un -300 cela fais 5 h avant c'est normal ton soucis pour le mode bloc tu t'ai trompé entre couché et levé
Steph11 Posté(e) le 9 décembre 2015 Signaler Posté(e) le 9 décembre 2015 En faite j'avais mis -300 pour tester le coucher du soleil dans une scene avant la nuit. Je vais l'enlever pour voir si cela vient de ca et je te fait un retour. Si je lit le mode bloc; 300 minutes avant le coucher du soleil, j'allume le wall plug puis je l'éteint 15 heures plus tard.
Steph11 Posté(e) le 10 décembre 2015 Signaler Posté(e) le 10 décembre 2015 Après recherche, je résume: J'ai enlevé les 300 minutes de décalages avant le coucher du soleil dans le TCoucher. résultat, je suis passé de 10h11-16h42 à 14h11-16h42 dans l'heure coucher mini mais cela n'a pas changé, il fait toujours nuit A 16h42. apres j'ai vu que c'était sur internet que notre box trouvais l'heure du coucher, lever du soleil donc c'était forcément juste sauf si ma situation géographique n'était pas bonne. et bien oui!!! la longitude et latitude n'était plus bonne??
Messages recommandés