Aller au contenu

Variable Ou Astuce ?


Messages recommandés

Posté(e)

:P  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 :15:

()

Posté(e)

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  :D 

 

merci

Posté(e)

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.

Posté(e)

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  :huh:

--[[
%% 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 : 

  1. local nuit = {}

 

Merci :)

 

Posté(e)

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  :huh:

--[[
%% 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 :)

Posté(e)

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 :P  .... à  demain surement 

Posté(e)

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.

Posté(e)

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à   :huh:

 


-- 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
Posté(e)

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 ^^

Posté(e)

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.

Posté(e)

Oulala impossible pour moi à  trouver !   :60: , j'ai modifié :) du coup en test + vérification dans le pnx de l'historique

 

Bien vu la fonction pour la température  !

 

MErci

  • Upvote 1
Posté(e)

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 :P

 

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


----------------------------------------------------------------------------------

Posté(e)

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 :P

Posté(e)

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...

Posté(e)

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?

Posté(e)

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  :13:

 

 

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

Posté(e)

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 ? 

Posté(e)

à‡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

Posté(e)

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

Posté(e)

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 :P )

 

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 ?  :wub:   Merci :)

×
×
  • Créer...