Tomzebest Posté(e) le 10 novembre 2014 Signaler Posté(e) le 10 novembre 2014 Regarde bien comment je lance les fonctions! Pour définir ta fonction en haut avec function Chauffage_24() ...... Tu as raison de mettre end à la fin (on met end après "while true do" "function" "if" "for....do" en gros, d'où l'importance d'avoir un code structuré visuellement pour ne pas faire de boulette, ou alors indiquer après chaque "end" ce que tu refermes) Par contre quand tu veux appeler ta fonction dans le script tu marques juste Chauffage_24() (pas de function pas de end) et tout marchera impecc PS: n'oublie pas d'éteindre le chauffage ()
Bloug Posté(e) le 10 novembre 2014 Auteur Signaler Posté(e) le 10 novembre 2014 Arff j'avais vu l'erreur de la fonction mais j'avais toujours un probleme avec le "end" Donc les trois "end "de la fin c'est pour : for i = 1, #jour do if jour[i] == tonumber(AujourdHui) then if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "04:00" then pas de end pour les elseif ..... hummmmm .... faut l'savoir merci
Tomzebest Posté(e) le 10 novembre 2014 Signaler Posté(e) le 10 novembre 2014 Voila elseif fait parti du groupement qui démarre avec if, tout comme else (ils ne sont d'ailleurs pas obligatoirement mis à chaque fois) if...then ... elseif....then if...then ... end elseif...then ... else ... end Si les bases du LUA pour tes scripts t’intéressent va voir ici. Je n'y connaissais absolument rien en programmation il y a encore un an. Prends ton temps et essaye de décrypter quelques scripts simples de temps en temps.
Bloug Posté(e) le 11 novembre 2014 Auteur Signaler Posté(e) le 11 novembre 2014 Encore Moi ! Pemier test avec mes modifs, les volets ne se sont pas ouvert pour 7h00 , g modifié pour 9h48 histoire de faire un nouveau test, mais rien. Je colle le code en entier car j'ai surement fait une boulette --[[ %% autostart %% properties %% globals --]] ---------------------------------------------------------------------------------- -- 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,27,28,29,30,45,50} -- Voir ici http://www.lua.org/pil/22.1.html pour la table des dates ---------------------------------------------------------------------------------- -- FONCTIONS 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 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 function Chauffage_24() -- Fonction Chauffage à 24° fibaro:call(52, "setTargetLevel", "24") end function Chauffage_21() -- Fonction Chauffage à 22° fibaro:call(52, "setTargetLevel", "22") end function Chauffage_21() -- Fonction Chauffage à 21° fibaro:call(52, "setTargetLevel", "21") end function Chauffage_18() -- Fonction Chauffage à 18° fibaro:call(52, "setTargetLevel", "18") end 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 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 while true do -- démarrage de la lecture en boucle du script (la lecture entière du script ne prend que qqs millisecondes) -- à la fin on fait une pause d'une minute donc la lecture du script se fera toutes les minutes -- 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 -- départ chauffage if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "04:00" then -- Si il est 4h00 Chauffage_24() -- Ouverture des volets à 07h00 et extinction des lumières elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "09:48" then -- Si il est 07h00 --- 9h48 pour testé là Ouverture_100_Volets() -- Démarre la fonction correspondante écrite plus haut Extinction_Lumiere() Chauffage_21() -- A 7h30 je décolle au Taff donc chaffage coupé a 18° elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:20" then -- Si il est 07h20 Extinction_Lumiere() Chauffage_18() -- Fermeture à 50% des volets à 10h00 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "10:00" then -- Si il est 10h00 Ouverture_50_Volets() -- Ouverture des volets pour 12h00 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "12:00" then --Si il est 12h00 Ouverture_100_Volets() end end end -- 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) and Travail_Hier ~= "Travail De Nuit Hier" then -- Ouverture des volets à 09h00 et extinction des lumières if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:30" then -- Si il est 07h30 Chauffage_22() -- Ouverture des volets à 09h00 et extinction des lumières elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "08:00" then -- Si il est 08h00 Ouverture_100_Volets() Extinction_Lumiere() -- Fermeture à 50% des volets à 10h30 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "10:30" then -- Si il est 10h30 Ouverture_50_Volets() -- Ouverture des volets pour 11h30 : A la popotte femme! elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "11:30" then --Si il est 11h30 Ouverture_100_Volets() end end end -- 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 -- Ouverture des volets à 09h00 et extinction des lumières if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:22" then -- Si il est 08h00 Chauffage_23() elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "08:00" then -- Si il est 08h00 Ouverture_100_Volets() Extinction_Lumiere() -- Fermeture à 50% des volets à 10h30 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "10:30" then -- Si il est 10h30 Ouverture_50_Volets() -- Ouverture des volets pour 11h30 : A la popotte femme! elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "11:30" then --Si il est 11h30 Ouverture_100_Volets() end end end fibaro:sleep(60*1000) end Autre question au passage, si dans le mois suivant elle ne bosse pas de nuit , je laisse vide : local nuit = {} Merci
Bloug Posté(e) le 11 novembre 2014 Auteur Signaler Posté(e) le 11 novembre 2014 Encore Moi ! Pemier test avec mes modifs, les volets ne se sont pas ouvert pour 7h00 , g modifié pour 9h48 histoire de faire un nouveau test, mais rien. Je colle le code en entier car j'ai surement fait une boulette --[[ %% autostart %% properties %% globals --]] ---------------------------------------------------------------------------------- -- 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,27,28,29,30,45,50} -- Voir ici http://www.lua.org/pil/22.1.html pour la table des dates ---------------------------------------------------------------------------------- -- FONCTIONS 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 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 function Chauffage_24() -- Fonction Chauffage à 24° fibaro:call(52, "setTargetLevel", "24") end function Chauffage_21() -- Fonction Chauffage à 22° fibaro:call(52, "setTargetLevel", "22") end function Chauffage_21() -- Fonction Chauffage à 21° fibaro:call(52, "setTargetLevel", "21") end function Chauffage_18() -- Fonction Chauffage à 18° fibaro:call(52, "setTargetLevel", "18") end 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 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 while true do -- démarrage de la lecture en boucle du script (la lecture entière du script ne prend que qqs millisecondes) -- à la fin on fait une pause d'une minute donc la lecture du script se fera toutes les minutes -- 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 -- départ chauffage if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "04:00" then -- Si il est 4h00 Chauffage_24() -- Ouverture des volets à 07h00 et extinction des lumières elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "09:48" then -- Si il est 07h00 --- 9h48 pour testé là Ouverture_100_Volets() -- Démarre la fonction correspondante écrite plus haut Extinction_Lumiere() Chauffage_21() -- A 7h30 je décolle au Taff donc chaffage coupé a 18° elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:20" then -- Si il est 07h20 Extinction_Lumiere() Chauffage_18() -- Fermeture à 50% des volets à 10h00 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "10:00" then -- Si il est 10h00 Ouverture_50_Volets() -- Ouverture des volets pour 12h00 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "12:00" then --Si il est 12h00 Ouverture_100_Volets() end end end -- 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) and Travail_Hier ~= "Travail De Nuit Hier" then -- Ouverture des volets à 09h00 et extinction des lumières if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:30" then -- Si il est 07h30 Chauffage_22() -- Ouverture des volets à 09h00 et extinction des lumières elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "08:00" then -- Si il est 08h00 Ouverture_100_Volets() Extinction_Lumiere() -- Fermeture à 50% des volets à 10h30 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "10:30" then -- Si il est 10h30 Ouverture_50_Volets() -- Ouverture des volets pour 11h30 : A la popotte femme! elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "11:30" then --Si il est 11h30 Ouverture_100_Volets() end end end -- 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 -- Ouverture des volets à 09h00 et extinction des lumières if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:22" then -- Si il est 08h00 Chauffage_23() elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "08:00" then -- Si il est 08h00 Ouverture_100_Volets() Extinction_Lumiere() -- Fermeture à 50% des volets à 10h30 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "10:30" then -- Si il est 10h30 Ouverture_50_Volets() -- Ouverture des volets pour 11h30 : A la popotte femme! elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "11:30" then --Si il est 11h30 Ouverture_100_Volets() end end end fibaro:sleep(60*1000) end Autre question au passage, si dans le mois suivant elle ne bosse pas de nuit , je laisse vide ?: local nuit = {} Merci
Bloug Posté(e) le 11 novembre 2014 Auteur Signaler Posté(e) le 11 novembre 2014 Bon j'me réponds à moi même ( très bon exercice au passage ;p ) -- 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, 27, 28, 29, 30, 45, 50} Les espaces entre les dates . . . truc con mais qui empêche de démarrer .... à demain surement
Tomzebest Posté(e) le 11 novembre 2014 Signaler Posté(e) le 11 novembre 2014 Sérieux? Lol j'ai passé plusieurs heures àchercher sans comprendre ! Et bah c'est bon àsavoir que c'est important. Chose importante aussi a savoir. A cause du while true do, si apres modif tu cliques sur la disquette et que la page charge mais ne revient pas sur l'onglet général, la modification n'est pas prise en compte. Il faut dans les cas la aller en bas du script il y a un bouton pour arrêter la lecture du script et ensuite tu peux enregistrer.
Tomzebest Posté(e) le 11 novembre 2014 Signaler Posté(e) le 11 novembre 2014 Attention aussi tu as 2 fonctions chauffage_21 (une pour 22° et l'autre bien pour 21°)
Bloug Posté(e) le 11 novembre 2014 Auteur Signaler Posté(e) le 11 novembre 2014 Bien vue pour le Chauffage Mci
Bloug Posté(e) le 14 novembre 2014 Auteur Signaler Posté(e) le 14 novembre 2014 Bonjour, Suite du test, aujourd’hui c'est un jour de repos pas d'ouverture de volets ni de chauffage, là en changeant les heures, je comprends pas trop, des fois sa marche des fois sa marche pas ..... j'ai du mal là -- 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) == "13:20" then -- Si il est 08h00 Chauffage_22() elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "13:21" then -- Si il est 08h00 Ouverture_50_Volets() Extinction_Lumiere() -- Fermeture à 50% des volets à 10h30 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "10:30" then -- Si il est 10h30 Ouverture_50_Volets() -- Ouverture des volets pour 11h30 : A la popotte femme! elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "11:30" then --Si il est 11h30 Ouverture_100_Volets() end end end
Tomzebest Posté(e) le 14 novembre 2014 Signaler Posté(e) le 14 novembre 2014 Salut! J'étais dessus ce matin aussi justement. Il y a qqch que je ne comprends pas. Le script est lu jusque if repos[i] == tonumber(AujourdHui) and Travail_Hier ~= "Travail De Nuit Hier" then J'ai une un debug juste après avec une phrase et je la retrouve bien dans l'encadré de debugage mais dès qu'il arrive à la verif de l'heure il ne fait pas l'action demandée, SAUF si je mets par exemple 14:00 et que j'enregistre le script à 14h pile et donc qu'il se lance à cette heure ci. Il me fait l'action qui suit donc cette heure mais il me répète également l'action toutes les minutes. Le code a fonctionné quand ta femme travaillait comment? Je vais regardé par rapport au script d'un autre horaire... En fait je voulais juste amélioré légèrement ta fonction de chauffage pour que tu n'en ais qu'une et que tu choisisse ensuite la température mais je te dirai ça quand on aura résolu le pb ^^
Bloug Posté(e) le 14 novembre 2014 Auteur Signaler Posté(e) le 14 novembre 2014 A RE-verifier, mais il me semble que : -- TRAVAIL DE JOUR fonctionne bien !
Tomzebest Posté(e) le 14 novembre 2014 Signaler Posté(e) le 14 novembre 2014 J'ai trouvé l'erreur après moultes recherches ^^ Essaye à nouveau sur qqs jours et redis moi. Ca m'étonne quand même que ça a fonctionné avant du coup... "while true do" doit être au dessus des déclarations de variables locales. Et c'est tout ^^ Pour améliorer ta fonction chauffage, déclare la juste une fois dans tes déclarations de fonctions comme ça function Chauffage (temperature) fibaro:call(52, "setTargetLevel", temperature) Puis dans le script tu indiques juste Chauffage ("24") quand tu veux 24°, ou une autre température peu importe.
Bloug Posté(e) le 17 novembre 2014 Auteur Signaler Posté(e) le 17 novembre 2014 Oulala impossible pour moi à trouver ! , j'ai modifié du coup en test + vérification dans le pnx de l'historique Bien vu la fonction pour la température ! MErci 1
Bloug Posté(e) le 19 novembre 2014 Auteur Signaler Posté(e) le 19 novembre 2014 Salut, Pour donner suite à la modification du " while true do " placé avant les variables locales, j'ai toujours un fonctionnement aléatoire pas de volets levés à 8h00 hier ( jour de Repos ) mais des volets qui bougent à 50% à 10h30 et à 100% à 11h30 . . . Et là jour de Travail Jour, pas de chauffage à 4h00 ... Sa caille Edit de 7h00 : pas d'ouverture de volets pour 7h00 également :'( Edit de 7h20 : extinction des lumières et consigne de chauffage à 18° ..... à ne plus rien comprendre ..... --[[ %% autostart %% properties %% globals --]] while true do -- démarrage de la lecture en boucle du script (la lecture entière du script ne prend que qqs millisecondes) ---------------------------------------------------------------------------------- -- 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 ----------------------------------------------------------------------------------
Bloug Posté(e) le 20 novembre 2014 Auteur Signaler Posté(e) le 20 novembre 2014 Bon je tâtonne pour trouver l'erreur .... voici la partie qui marche qu'a 7h20 et pas avant ... -- 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 -- départ chauffage if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "04:00" then -- Si il est 4h00 Chauffage_24() -- Ouverture des volets à 07h00 et extinction des lumières elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "7:00" then -- Si il est 07h00 Ouverture_100_Volets() -- Démarre la fonction correspondante écrite plus haut Extinction_Lumiere() Chauffage_21() -- A 7h20 je décolle bientot au Taff donc chaffage coupé a 18° elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:20" then -- Si il est 07h20 Extinction_Lumiere() Chauffage_18() -- A 7h30 je décolle au Taff donc Aspiro elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:30" then -- Si il est 07h30 Aspirateur() -- Fermeture à 50% des volets à 10h00 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "10:00" then -- Si il est 10h00 Ouverture_50_Volets() -- Ouverture des volets pour 12h00 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "12:00" then --Si il est 12h00 Ouverture_100_Volets() -- A 13h30 je Re-décolle au Taff donc Aspiro elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "13:30" then -- Si il est 13h30 Aspirateur() end end end en ligne 4, je démarre avec un IF -- THEN puis aucune action pour repartir sur un autre IF -- THEN : pas besoin d'un END en ligne 9 entre deux IF THEN ?? genre : faire une fonction jour_de_repos() avec mes actions de la journée et dans le script : IF aujourd’hui = Jrs de repos THEN jour_de_repos() END Dsl j'débute
Tomzebest Posté(e) le 20 novembre 2014 Signaler Posté(e) le 20 novembre 2014 Pas de problème Bloug - Alors ligne 9 on ne mettra pas de END car le END termine complètement une condition. Si on veut en mettre (ce qui est possible quand même), il faudrait a la place de chaque ELSEIF, mettre juste IF et un ENDà la fin de chaque condition. C'est pour éviter d'avoir à faire ça que le ELSEIF existe. J'ai lu qqpart que ca surchargeait moins le script aussi pour la lecture par le système. Et effectivement on démarre bien par un IF... THEN puis à nouveau un IF mais ça ne pose normalement pas de problème puisqu'on imbrique une condition dans une première condition. Si la première condition n'est pas respectée, le script qui suit n'est pas lu par le système. Mais si elle est respectée, alors la lecture du script continue et commence par une condition (vérification de l'heure). - L'idée de faire une fonction pour un jour-de-repos() est surement possible mais je pense pas que ca reglera le problème. Faire une fonction est pratique dans le cas où tu dois répéter plusieurs fois la même opération dans le script. Donc faire une fonction pour une situation particulière revient au même que de laisser le script d'actions à faire la où il est...
Tomzebest Posté(e) le 20 novembre 2014 Signaler Posté(e) le 20 novembre 2014 Balance moi voir ton script entier stp. Il semble déja que l'heure que tu a mise ligne 11 ne soit pas bien écrite. Il faut 2 chiffres pour les heures et le minutes. 07 : 00 et pas 7:00 Et ton chauffage, est ce que tu as déja fait la modif avec la fonction que je t'ai donnée?
Bloug Posté(e) le 21 novembre 2014 Auteur Signaler Posté(e) le 21 novembre 2014 Salut, bon j'ai corrigé mes erreurs d'heures, du coup résultat positif pour les volets mais c'est peut etre d'avoir relancer le script donc .... wait & see Pour la fonction du chauffage, je ne l'ai pas ajouter pour l'instant, afin ne pas rajouter d'autre erreurs par dessus voici le code complet : --[[ %% autostart %% properties %% globals --]] while true do -- démarrage de la lecture en boucle du script (la lecture entière du script ne prend que qqs millisecondes) ---------------------------------------------------------------------------------- -- 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 ---------------------------------------------------------------------------------- -- FONCTIONS 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 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 function Aspirateur() -- Fonction Chauffage à 24° fibaro:call(74, "pressButton", "2") end function Chauffage_24() -- Fonction Chauffage à 24° fibaro:call(52, "setTargetLevel", "24") end function Chauffage_23() -- Fonction Chauffage à 22° fibaro:call(52, "setTargetLevel", "23") end function Chauffage_22() -- Fonction Chauffage à 22° fibaro:call(52, "setTargetLevel", "22") end function Chauffage_21() -- Fonction Chauffage à 21° fibaro:call(52, "setTargetLevel", "21") end function Chauffage_18() -- Fonction Chauffage à 18° fibaro:call(52, "setTargetLevel", "18") end 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 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 -- à la fin on fait une pause d'une minute donc la lecture du script se fera toutes les minutes -- 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 -- départ chauffage if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "04:00" then -- Si il est 4h00 Chauffage_24() -- Ouverture des volets à 07h00 et extinction des lumières elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:00" then -- Si il est 07h00 Ouverture_100_Volets() -- Démarre la fonction correspondante écrite plus haut Extinction_Lumiere() Chauffage_21() -- A 7h20 je décolle bientot au Taff donc chaffage coupé a 18° elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:020" then -- Si il est 07h20 Extinction_Lumiere() Chauffage_18() -- A 7h30 je décolle au Taff donc Aspiro elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:30" then -- Si il est 07h30 Aspirateur() -- Fermeture à 50% des volets à 10h00 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "10:00" then -- Si il est 10h00 Ouverture_50_Volets() -- Ouverture des volets pour 12h00 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "12:00" then --Si il est 12h00 Ouverture_100_Volets() -- A 13h30 je Re-décolle au Taff donc Aspiro elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "13:30" then -- Si il est 13h30 Aspirateur() end end end -- 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) and Travail_Hier ~= "Travail De Nuit Hier" then -- Ouverture des volets à 09h00 et extinction des lumières if string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:30" then -- Si il est 07h30 Chauffage_22() -- Ouverture des volets à 09h00 et extinction des lumières elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "08:00" then -- Si il est 08h00 Ouverture_100_Volets() Extinction_Lumiere() -- Fermeture à 50% des volets à 10h30 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "10:30" then -- Si il est 10h30 Ouverture_50_Volets() -- Ouverture des volets pour 11h30 : A la popotte femme! elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "11:30" then --Si il est 11h30 Ouverture_100_Volets() end end end -- 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 08h00 Chauffage_24() elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "06:30" then -- Si il est 08h00 Chauffage_23() elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "07:05" then -- Si il est 07h20 fibaro:call(22, "turnOff") elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "08:00" then -- Si il est 08h00 Ouverture_100_Volets() Extinction_Lumiere() -- Fermeture à 50% des volets à 10h30 elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "10:30" then -- Si il est 10h30 Ouverture_50_Volets() -- Ouverture des volets pour 11h30 : A la popotte femme! elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "11:30" then --Si il est 11h30 Ouverture_100_Volets() end end end fibaro:sleep(60*1000) end
Tomzebest Posté(e) le 21 novembre 2014 Signaler Posté(e) le 21 novembre 2014 Ok j'attends ton retour! On croise les doigts. Ca aura été un sacré exercice en tout cas ^^
Bloug Posté(e) le 24 novembre 2014 Auteur Signaler Posté(e) le 24 novembre 2014 Reprise des test avec un Jour de travil : Tout a fonctionné à l’exception du chauffage à 24 ( ligne 95 ci dessus ) j'ai supprimé le pnx de chauffage en cas de conflits mais aucun signe dans l'historique.... Edit : c'est pas le IF qui me*de ?
Bloug Posté(e) le 25 novembre 2014 Auteur Signaler Posté(e) le 25 novembre 2014 à‡a fonctionne !! , il semble que le pnx de chauffage soit la raison du problème ?!? ( ordre contre ordre ? ) Suite des tests à venir , mais déjà .....c'est très bien engagé ! merci
Tomzebest Posté(e) le 25 novembre 2014 Signaler Posté(e) le 25 novembre 2014 Salut bloug! Oui j'ai bien testé hier le code et je n'ai eu aucun soucis sur aucune ligne de jour. Pour le panneau de chauffage je ne sais pas du tout comment il fonctionne pq j'ai mon propre thermostat virtuel. Je pensais insérer qqs fonctions de debug pour suivre le script si ca n'avait pas fonctionné aujourd'hui. Mais c'est bien si ça fonctionne. Tu me fais transpirer toi =p
Bloug Posté(e) le 29 novembre 2014 Auteur Signaler Posté(e) le 29 novembre 2014 Me RE-voila Avec de bonnes nouvelle Après test Tout marche parfaitement ... MERCI Du coup la maison se gère très bien seule en fonction du planning de ma femme avec les modes : Travail de Jour Travail de nuit Repos Sauf erreur de ma part, le script à une fonction qui détecte le Travail de nuit consécutif sur les modes : Travail de nuit et Repos ou chacun des ses modes utilisent la condition : If [...] and Travail_Hier ~= "Travail De Nuit Hier" Du coup pour si il y a un jour elle travaille de nuit de manière consécutive, le script n'ayant pas toutes les condition réunies, n’exécute rien ( c'est à la base ma demande ) ( si j'ai bien compris ) je souhaite alors pour compliquer le script ajouter deux autre mode : Travail de Jour le weekend : Si elle bosse le weekend, alors que moi non, organisation différente des volets , chauffage , aspirateur etc... Travail de nuit consécutif : Si elle bosse deux nuits à la suite , les volet ne bougent pas mais le chauffage lui si Donc voici mon bidouillage sur les lignes n°7 avec la modification des ~= en == pour le travail de nuit consécutif ; et en ligne n°7 également l'ajout de la condition : (currentDate.wday == 1 or currentDate.wday == 7) pour le mode Weekend ( traduction du mode bloc ) Travail de nuit consécutif -- Travail de nuit consécutif 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 Si jour de travail de nuit consecutif if nuit[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 -- Condition à changer Chauffage_24() elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "06:30" then -- Condition à changer Chauffage_22() elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "22:00" then -- Condition à changer Chauffage_18() end end end Travail de Jour le weekend -- MODE Travail de Jour le weekend 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 ET que c'est le WEEKEND if repos[i] == tonumber(AujourdHui) and Travail_Hier ~= "Travail De Nuit Hier" and (currentDate.wday == 1 or currentDate.wday == 7) then 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() elseif string.format("%02d", Date_Actuelle.hour) .. ":" .. string.format("%02d", Date_Actuelle.min) == "22:00" then -- Condition à changer Chauffage_18() end end end Du coup obliger de modifier la condition dans le mode Travail de jour pour ne pas réagir si c'est le WEEKEND : -- 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) and (currentDate.wday ~= 1 or currentDate.wday ~= 7) then -- si la valeur du croisillon "jour" en cours de vérif est égale au jour numérique d'aujourd'hui alors Une à‚me charitable, pour me corriger ? Merci
Messages recommandés