Tomzebest Posté(e) le 29 novembre 2014 Signaler Posté(e) le 29 novembre 2014 Super si tout fonctionne bien! Je vais pouvoir l'installer chez moi ce script ^^ Pour les nuits consécutives tu n'es pas obligé de refaire un mode spécial. On peut très légèrement changé le mode "travail de nuit" (bon j'avoue on ne gagne que 2 lignes mais c'est plus propre de n'avoir qu'un mode pour la nuit et dans ce mode on vérifie si hier elle bossait de nuit ou pas) -- TRAVAIL DE NUIT Verif_Travail_Veille() -- Démarre la fonction écrite plus haut qui vérifie si ta femme bossait de nuit la veille for i = 1, #nuit do -- script des actions à faire quand ta femme bosse de nuit et que la veille elle ne bossait pas de nuit if nuit[i] == tonumber(AujourdHui) then if Travail_Hier ~= "Travail De Nuit Hier" then if ... -- ton code actuel end else -- donc si Travail_Hier == "Travail De Nuit Hier" if ... -- ton nouveau code dans le cas de nuits consécutives end end end end Mais dans la logique ton script est très bien! De la même façon tu peux garder ton code "travail de jour" et vérifier dans ce code si c'est le we ou pas. Par contre je crois que ta fonction de vérification si elle bossait de nuit la veille est inutile pq elle ne peut pas bosser de nuit puis reprendre de journée j'imagine... Autre point à corriger: effectivement le mode bloc te donne "(currentDate.wday == 1 or currentDate.wday == 7)" wday est dans LUA le numéro du jour de la semaine donc pas de problème, mais currentDate est une variable locale que le système crée tout en haut avec le mode bloc comme ca : local currentDate = os.date("*t") Cette variable est aussi dans notre code mais sous le nom Date_Actuelle ^^ donc -- TRAVAIL DE JOUR for i = 1, #jour do -- Pour chaque valeur dans le croisillon "jour" à partir de la 1ere valeur, on fait if jour[i] == tonumber(AujourdHui) then -- si la valeur du croisillon "jour" en cours de vérif est égale au jour numérique d'aujourd'hui alors if (Date_Actuelle.wday == 1 or Date_Actuelle.wday == 7) then -- ton code si elle bosse de jour et que c'est le we else -- ton code que tu as déjà si elle bosse de jour en semaine end end end :60: 1
Bloug Posté(e) le 30 novembre 2014 Auteur Signaler Posté(e) le 30 novembre 2014 IM-PEC-CABLE ! J'ai utilisé ton premier exemple Travail de Nuit au dessus pour positionner les END après test aujourd'hui du mode Travail de jour _ Weekend cela fonctionne : j'ai grossièrement séparer toutes les étapes pour les débutant comme moi et laissé juste deux événements pour faciliter les adaptations en copiant/ajoutant les lignes sous les elseif . Voici le script complet & fonctionnel avec la modification de la fonction chauffage : --[[ %% autostart %% properties %% globals --]] ------------------------------- --- Auteur : Tomzebest --- --- Date : 30-11-2014 --- ------------------------------- while true do -- démarrage de la lecture en boucle du script ----------------------------------------------------------- ------------------ VARIABLES LOCALES ------------------ ----------------------------------------------------------- local jour = {1, 2, 10, 11, 19, 20, 21, 24, 25, 29, 30} local nuit = {5, 6} local repos = {3, 4, 7, 8, 9, 12, 13, 14, 15, 16, 17, 18, 22, 23, 26, 27, 28} local AujourdHui = os.date("%d") --os.date ouvre la table qui gère les dates et %d permet de vérifier uniquement la valeur de la ligne "jour numérique" (de 1 à 31) local Hier = os.date("%d")-1 local Date_Actuelle = os.date("*t") -- (*t) récupère toutes les infos d'aujourd'hui (jour, heures, minutes...) local ID_Volets = {7, 35, 36, 41, 42, 43} local ID_Lumieres = {22, 23, 28, 29, 30, 45, 50, 72} -- Voir ici http://www.lua.org/pil/22.1.html pour la table des dates ----------------------------------------------------------- ------------ ENSEMBLE DES FONCTIONS DU SCRIPT ------------ ----------------------------------------------------------- --------------------------------- -- Fonction Ouverture des volets --------------------------------- function Ouverture_100_Volets() -- fonction qui ouvre les volets à 100%, on executera cette fonction plusieurs fois dans le script mais on ne l'écrit qu'une seule fois -- vérification de l'état de chaque volet avant ouverture for i = 1, #ID_Volets do -- Pour chaque valeur dans le croisillon "ID_Volets" (voir la variable locale), à partir de la 1ere valeur inscrite jusqu'à la dernière, le script suivant s'execute: local Niveau_Volets = tonumber(fibaro:getValue(ID_Volets[i], "value")) -- On récupère la valeur d'ouverture du volet dont l'ID est en cours de verif, on la met en format numérique avec tonumber pour la comparer après avec d'autres valeurs, et on enregistre le résultat dans la variable local "Niveau_Volets" if (Niveau_Volets) < 100 then -- Si la valeur récupérée indique que le volet n'est pas ouvert entièrement alors fibaro:call(ID_Volets[i], "open") -- Ouverture du volet, puis le script recommence pour le volet suivant end end end ------------------------------------ -- Fonction Volets 50% ------------------------------------ function Ouverture_50_Volets() -- La on laisse comme tu as mis car tu veux une valeur différente pour presque chaque volet (les fameux vrais 50% des volets) donc c'est le plus simple fibaro:call(35, "setValue", "68") fibaro:call(36, "setValue", "65") fibaro:call(41, "setValue", "65") fibaro:call(42, "setValue", "60") fibaro:call(7, "setValue", "65") fibaro:call(43, "setValue", "60") end ------------------------------------ -- Fonction Aspirateur ------------------------------------ function Aspirateur() -- Vroum vroumm fibaro:call(74, "pressButton", "2") end ------------------------------------ -- Fonction Chauffage ------------------------------------ function Chauffage(temperature) fibaro:call(52, "setTargetLevel", temperature) end ------------------------------------ -- Fonction Extinction des Lumières ------------------------------------ function Extinction_Lumiere() -- vérification de l'état de chaque lumières avant exctinction for i = 1, #ID_Lumieres do local Niveau_Lumieres = tonumber(fibaro:getValue(ID_Lumieres[i], "value")) if (Niveau_Lumieres) > 0 then fibaro:call(ID_Lumieres[i], "turnOff") end end end ----------------------------------------------- -- Fonction Verification si travail la veille ----------------------------------------------- function Verif_Travail_Veille() for i = 1, #nuit do if nuit[i] == tonumber(Hier) then -- On vérifie si dans le croisillon "nuit" on a le jour numérique d'hier Travail_Hier = "Travail De Nuit Hier" -- Si c'est le cas on crée une variable qui prend la valeur "Travail De Nuit Hier" si la veille ta femme bossait de nuit. Ce n'est pas une variable locale car comme ça on peut l'utiliser ailleurs dans le script sinon elle n'existerai que entre "function" et "end" end end end ----------------------------------------------- ------->>> MODE TRAVAIL DE JOUR ----------------------------------------------- for i = 1, #jour do -- Pour chaque valeur dans le croisillon "jour" à partir de la 1ere valeur, on fait if jour[i] == tonumber(AujourdHui) then -- si la valeur du croisillon "jour" en cours de vérif est égale au jour numérique d'aujourd'hui alors if (Date_Actuelle.wday == 1 or Date_Actuelle.wday == 7) then --------------------------------------- -- SOUS-MODE Travail de JOUR le Weekend --------------------------------------- if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "04:00" then -- Si il est 4h00 Chauffage ("24") elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "06:00" then -- Si il est 07h00 Chauffage ("21") end else ---------------------------------------- -- SOUS-MODE Travail de JOUR en Semaine ---------------------------------------- if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "04:00" then -- Si il est 4h00 Chauffage ("24") elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:00" then -- Si il est 07h00 Ouverture_100_Volets() Extinction_Lumiere() Chauffage ("24") end end end end ------------------------------------ ------->>> MODE TRAVAIL DE NUIT ---- ------------------------------------ Verif_Travail_Veille() -- Démarre la fonction écrite plus haut qui vérifie si ta femme bossait de nuit la veille for i = 1, #nuit do --------------------------------------------------- -- SOUS-MODE Travail de NUIT pour la première nuit --------------------------------------------------- if nuit[i] == tonumber(AujourdHui) then if Travail_Hier ~= "Travail De Nuit Hier" then if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "05:30" then -- Si il est 05h30 Chauffage ("24") elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "06:30" then -- Si il est 06h30 Chauffage ("22") end else --------------------------------------------------------- -- SOUS-MODE Travail de NUIT pour les nuits consecutives --------------------------------------------------------- if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "05:30" then -- Condition à changer Chauffage ("24") elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "06:30" then -- Condition à changer Chauffage ("22") end end end end -------------------------- ------->>> MODE REPOS ---- -------------------------- Verif_Travail_Veille() for i = 1, #repos do -- script des actions à faire quand ta femme est en repos et que la veille elle ne bossait pas de nuit if repos[i] == tonumber(AujourdHui) and Travail_Hier ~= "Travail De Nuit Hier" then if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "05:30" then -- Si il est 05h30 Chauffage ("24") elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "06:30" then -- Si il est 06h30 Chauffage ("22") end end end fibaro:sleep(60*1000) end
Tomzebest Posté(e) le 30 novembre 2014 Signaler Posté(e) le 30 novembre 2014 Ahahah super les miniatures j'adore! Merci pour la dédicace dans le script aussi! Le code àl'air impecc! Juste une petite erreur ligne 66 sur la description de ta fonction aspirateur ^^
Messages recommandés