clarkkent609 Posté(e) le 30 décembre 2013 Signaler Posté(e) le 30 décembre 2013 Bonjour, Suite à mes précédentes expériences que j'ai déjà partagées sur le forum officiel Fibaro, j'ai revu mes modules virtuels pour la gestion du chauffage. Evidemment ce serait tellement mieux de pouvoir utiliser le panneau de chauffage du HC2 mais ce n'est pas possible avec la gestion de notre fil pilote, et je ne suis pas pour le ON/OFF pur et dur du radiateur qui risquerait d'endommager la partie électronique. La solution présentée ici est également possible sans avoir une sonde de température dans chaque pièce chauffée. Le premier module virtuel est un thermostat programmeur de zone. C'est à dire qu'il permet de piloter l'ensemble des radiateurs qui vont suivre ses consignes. Le programmateur de zone permet: - de définir les modes des radiateurs de la zone en: Confort, Eco, Hors-gel, Arrêt. - de définir 2 programmes différents suivants les horaires de la journée - de définir un mode automatique, qui définit les modes voulus suivant les jours de la semaine. Le second module virtuel permet de piloter les radiateurs grâce au FGBS-221 et sa gestion des 4 ordres du fil pilote (avec les bonnes diodes de redressement): Le module de pilotage de radiateur permet de: - piloter directement le radiateur avec les modes Confort, Eco, Hors-gel, Arrêt indépendamment des consignes données par le programmateur de zone - suivre les consignes données par le programmateur de zone - mettre le radiateur à l'arrêt dès qu'une fenêtre ou porte est ouverte. Une vérification est faite 5 min après l'ouverture, si la fenêtre est toujours ouverte on attend de nouveau 5min. Sinon, on remet le chauffage à son état initial. Voilà une synthèse du fonctionnement: Voici comment mettre tout cela en oeuvre: Module programmateur de zone: Tout d'abord, il faut créer les variables globales prédéfinie avec les valeurs suivantes: z1_heat_engine = Auto, Prog1, Prog2, Confort, Eco, Hors-gel, Arret --> ça, c'est ce que le programmateur demande z1_heat_mode = Confort, Eco, Hors-gel, Arret -->ça, c'est les valeurs que devront suivre chacun des radiateurs qui suivront le programmateur. Vous remarquerez dans les variables globales et dans l'ensemble des codes suivants le "z1". Cela correspond en fait à une zone N°1. Si vous souhaiter faire une deuxième zone, il vous faudra faire du remplacer "z1" par "z2" dans l'ensemble des parties des codes et recréer d'autres variables globales, ça devrait fonctionner. Ensuite, il faut créer un module virtuel avec les boutons suivants, attention à bien reporter votre N° de module virtuel dans les boutons et veiller à la cohérence des ID des boutons et le code lua de chaque bouton: Les labels: Bouton auto: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Auto"); fibaro:debug("Mode Auto"); fibaro:log("Mode Auto"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Auto"); Bouton Prog1: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Prog1"); fibaro:debug("Mode Prog1"); fibaro:log("Mode Prog1"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Prog1"); Bouton Prog2: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Prog2"); fibaro:debug("Mode Prog2"); fibaro:log("Mode Prog2"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Prog2"); Bouton Confort: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Confort"); fibaro:setGlobal("z1_heat_mode", "Confort"); fibaro:debug("Mode Confort"); fibaro:log("Mode Confort"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Confort"); Bouton Eco: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Eco"); fibaro:setGlobal("z1_heat_mode", "Eco"); fibaro:debug("Mode Eco"); fibaro:log("Mode Eco"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Eco"); Bouton Hors-gel: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Hors-gel"); fibaro:setGlobal("z1_heat_mode", "Hors-gel"); fibaro:debug("Mode Hors-gel"); fibaro:log("Mode Hors-gel"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Hors-gel"); Bouton Arret: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Arret"); fibaro:setGlobal("z1_heat_mode", "Arret"); fibaro:debug("Mode Arret"); fibaro:log("Mode Arret"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Arret"); Et enfin copier le main loop suivant, en y indiquant vos paramètres utilisateurs. Pour paramétrer les programmes, il faut choisir les modes que vous souhaitez entre 2 horaires de votre choix. --[[ %% properties %% globals --]] -- LUA - heat Engine V2.0.0 -- -- --variables globales à déclarer: z1_heat_engine = Auto, Prog1, Prog2, Confort, Eco, Hors-gel, Arret. --variables globales à déclarer: z1_heat_mode = Confort, Eco, Hors-gel, Arret. ------------------------------------------------------------------------------------------------------------- -- USER SETTINGS : -- ------------------------------------------------------------------------------------------------------------- --------------------- -- Paramètres généraux: --------------------- local debug = true; --activer le mode debug local ID_virtual_module = "31"; ----------------------------------- -- Definir les différents programmes: ----------------------------------- local z1_time_1 = "06:00"; local z1_heat_mode_1_2_prog1 = "Confort"; local z1_heat_mode_1_2_prog2 = "Eco"; local z1_time_2 = "08:00"; local z1_heat_mode_2_3_prog1 = "Eco"; local z1_heat_mode_2_3_prog2 = "Confort"; local z1_time_3 = "13:00"; local z1_heat_mode_3_4_prog1 = "Eco"; local z1_heat_mode_3_4_prog2 = "Confort"; local z1_time_4 = "18:00"; local z1_heat_mode_4_5_prog1 = "Confort"; local z1_heat_mode_4_5_prog2 = "Confort"; local z1_time_5 = "21:00"; local z1_heat_mode_5_6_prog1 = "Eco"; local z1_heat_mode_5_6_prog2 = "Eco"; local z1_time_6 = "23:59"; local z1_heat_mode_6_1_prog1 = "Eco"; local z1_heat_mode_6_1_prog2 = "Eco"; ----------------------------------------------------------------------------------------- --Définition du programme automatique de la semaine: un mode au choix pour chaque jour (Prog1, Prog2, Confort, Eco, Hors-gel, Arret): ----------------------------------------------------------------------------------------- local z1_Monday_auto = "Prog1"; local z1_Tuesday_auto = "Prog1"; local z1_Wednesday_auto = "Prog1"; local z1_Thursday_auto = "Prog1"; local z1_Friday_auto = "Prog1"; local z1_Saturday_auto = "Prog2"; local z1_Sunday_auto = "Prog2"; ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- -- -- DO NOT EDIT THE CODE BELOW (except to suit your needs) -- -- ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- heatEngine = { version = "1.0.0" }; local z1_heat_engine = fibaro:getGlobal("z1_heat_engine"); local minute = 60000 --in milliseconds local currentDate = os.date("*t"); local currentTime = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min); local z1_heat_mode = fibaro:getGlobal("z1_heat_mode"); --wday=1 is Sunday --wday=2 is Monday --wday=3 is Tuesday --wday=4 is Wednesday --wday=5 is Thursday --wday=6 is Friday --wday=7 is Saturday if (z1_heat_engine == "Confort") then z1_heat_mode= "Confort"; end if (z1_heat_engine == "Eco") then z1_heat_mode= "Eco"; end if (z1_heat_engine == "Hors-gel") then z1_heat_mode= "Hors-gel"; end if (z1_heat_engine == "Arret") then z1_heat_mode= "Arret"; end if (z1_heat_engine == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_heat_engine == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end if (z1_heat_engine == "Auto") then if (currentDate.wday == 1 ) then if z1_Sunday_auto == "Confort" or z1_Sunday_auto == "Eco" or z1_Sunday_auto == "Hors-gel" or z1_Sunday_auto == "Arret" then z1_heat_mode = z1_Sunday_auto; end if (z1_Sunday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Sunday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 2 ) then if z1_Monday_auto == "Confort" or z1_Monday_auto == "Eco" or z1_Monday_auto == "Hors-gel" or z1_Monday_auto == "Arret" then z1_heat_mode = z1_Monday_auto; end if (z1_Monday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Monday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 3 ) then if z1_Tuesday_auto == "Confort" or z1_Tuesday_auto == "Eco" or z1_Tuesday_auto == "Hors-gel" or z1_Tuesday_auto == "Arret" then z1_heat_mode = z1_Tuesday_auto; end if (z1_Tuesday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Tuesday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 4 ) then if z1_Wednesday_auto == "Confort" or z1_Wednesday_auto == "Eco" or z1_Wednesday_auto == "Hors-gel" or z1_Wednesday_auto == "Arret" then z1_heat_mode = z1_Wednesday_auto; end if (z1_Wednesday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Wednesday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 5 ) then if z1_Thursday_auto == "Confort" or z1_Thursday_auto == "Eco" or z1_Thursday_auto == "Hors-gel" or z1_Thursday_auto == "Arret" then z1_heat_mode = z1_Thursday_auto; end if (z1_Thursday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Thursday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 6 ) then if z1_Friday_auto == "Confort" or z1_Friday_auto == "Eco" or z1_Friday_auto == "Hors-gel" or z1_Friday_auto == "Arret" then z1_heat_mode = z1_Friday_auto; end if (z1_Friday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Friday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 7 ) then if z1_Saturday_auto == "Confort" or z1_Saturday_auto == "Eco" or z1_Saturday_auto == "Hors-gel" or z1_Saturday_auto == "Arret" then z1_heat_mode = z1_Saturday_auto; end if (z1_Saturday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Saturday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end end fibaro:sleep(1000); fibaro:setGlobal("z1_heat_mode", z1_heat_mode); if (debug) then local mode = "init"; if (currentDate.wday == 1 ) then mode = z1_Sunday_auto; end if (currentDate.wday == 2 ) then mode = z1_Monday_auto; end if (currentDate.wday == 3 ) then mode = z1_Tuesday_auto; end if (currentDate.wday == 4 ) then mode = z1_Wednesday_auto; end if (currentDate.wday == 5 ) then mode = z1_Thursday_auto; end if (currentDate.wday == 6 ) then mode = z1_Friday_auto; end if (currentDate.wday == 7 ) then mode = z1_Saturday_auto; end if (z1_heat_engine == "Auto") then fibaro:debug("Le mode du thermostat est réglé sur: " ..z1_heat_engine.." . Le mode auto est réglé sur "..mode); end if (z1_heat_engine ~= "Auto") then fibaro:debug("Le mode du thermostat est réglé sur:" ..z1_heat_engine); end fibaro:debug("Le mode de chauffage est: " ..z1_heat_mode); fibaro:call(ID_virtual_module, "setProperty", "ui.Label3.value", z1_heat_mode) fibaro:sleep(15000) end Mise en oeuvre du module virtuel pour le radiateur: Tout d'abord, il faut créer deux variables globales prédéfinies avec les valeurs suivantes: rad_ch_1_mode = Auto, Manuel rad_ch_1_status = Confort, Eco, Hors-gel, Arret Ensuite, il faut créer un module virtuel avec les boutons suivants, attention à bien reporter votre N° de module virtuel dans les boutons et veiller à la cohérence des ID des boutons et le code lua de chaque bouton: Le label: Bouton Auto: --[[ %% properties %% globals --]] --mise à jour des variables prédéfinies local status_auto = fibaro:getGlobal("z1_heat_mode"); fibaro:setGlobal("rad_ch_1_mode", "Auto"); fibaro:setGlobal("rad_ch_1_status", status_auto); --affichage des logs et debug fibaro:debug("Mode Auto"); fibaro:log("Mode Auto"); --mise à jour de l'affichage du module virtuel fibaro:call(40, "setProperty", "ui.label_0_0.value", "Auto -> " ..status_auto); Bouton Confort: --[[ %% properties %% globals --]] --mise à jour des variables prédéfinies fibaro:setGlobal("rad_ch_1_status", "Confort"); fibaro:setGlobal("rad_ch_1_mode", "Manuel"); --affichage des logs et debug fibaro:debug("Mode Confort"); fibaro:log("Mode Confort"); --mise à jour de l'affichage du module virtuel fibaro:call(40, "setProperty", "ui.label_0_0.value", "Manuel -> Confort"); Bouton Eco: --[[ %% properties %% globals --]] --mise à jour des variables prédéfinies fibaro:setGlobal("rad_ch_1_status", "Eco"); fibaro:setGlobal("rad_ch_1_mode", "Manuel"); --affichage des logs et debug fibaro:debug("Mode Eco"); fibaro:log("Mode Eco"); --mise à jour de l'affichage du module virtuel fibaro:call(40, "setProperty", "ui.label_0_0.value", "Manuel -> Eco"); Bouton Hors-gel: --[[ %% properties %% globals --]] --mise à jour des variables prédéfinies fibaro:setGlobal("rad_ch_1_status", "Hors-gel"); fibaro:setGlobal("rad_ch_1_mode", "Manuel"); --affichage des logs et debug fibaro:debug("Mode Hors-gel"); fibaro:log("Mode Hors-gel"); --mise à jour de l'affichage du module virtuel fibaro:call(40, "setProperty", "ui.label_0_0.value", "Manuel -> Hors-gel"); Bouton Arret: --[[ %% properties %% globals --]] --mise à jour des variables prédéfinies fibaro:setGlobal("rad_ch_1_status", "Arret"); fibaro:setGlobal("rad_ch_1_mode", "Manuel"); --affichage des logs et debug fibaro:debug("Mode Arret"); fibaro:log("Mode Arret"); --mise à jour de l'affichage du module virtuel fibaro:call(40, "setProperty", "ui.label_0_0.value", "Manuel -> Arret"); Et enfin copier le main loop suivant, en y indiquant vos paramètres utilisateurs. --[[ %% properties %% globals --]] -- LUA - heat Radiator V2.0.0 -- -- ------------------------------------------------------------------------------------------------------------- -- USER SETTINGS : -- ------------------------------------------------------------------------------------------------------------- --------------------- -- General settings: --------------------- local debug = true; --activater le debug mode local radiator_mode = "rad_ch_1_mode" -- variable globale à déclarer avec les valeurs Auto et Manuel local radiator_status = "rad_ch_1_status" -- variable globale à déclarer avec les valeurs Confort, Eco, Hors-gel et Arret local ID_virtual_module = "40" --------------------- -- Relay FGBS-221 settings: --------------------- local ID_relay_1 = 200; -- diode - connectée sur O1 local ID_relay_2 = 201; -- diode + connectée sur O2 ----------------------------------------------------------------------------------------- --Window sensor: Stopper le radiateur quand une fenêtre qui y est associée est ouverture ----------------------------------------------------------------------------------------- local active_mode_sensor = true; --ou false --activater ou désactiver le mode. True = stopper le chauffage quand la fenêtre est ouverte local ID_window_sensor = {10}; --ID device du capteur d'ouverture associé au radiateur (il peut y en avoir plusieurs) ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- -- -- DO NOT EDIT THE CODE BELOW (except to suit your needs) -- -- ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- local mode = fibaro:getGlobal(radiator_mode); local status = fibaro:getGlobal(radiator_status); local status_auto = fibaro:getGlobal("z1_heat_mode"); local id; local window_status = 0; local temp; if active_mode_sensor then for i=1, #ID_window_sensor do id = tonumber(ID_window_sensor[i]); temp = fibaro:getValue(id, "value"); fibaro:debug(id.. " et " ..temp); if temp == "1" then window_status = 1; end end end if debug then fibaro:debug(window_status.. "Etat actuel = "..mode.. " --> " ..status); if active_mode_sensor then if window_status == 1 then fibaro:debug("Une fenêtre est ouverte"); end if window_status == 0 then fibaro:debug("Les fenêtres associées au radiateur sont fermées"); end end end if window_status == 1 then if debug then fibaro:debug("Une des fenêtres associées au radiateur est ouverte, le radiateur est à l'arrêt"); end fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", "Fenêtre ouverte, Arrêt"); fibaro:call(ID_relay_1, 'turnOff'); fibaro:call(ID_relay_2, 'turnOn'); -- temporisation de 5 minutes, ensuite le script check de nouveau et remet l'état de chauffage précédent si la fenêtre est fermée fibaro:sleep(300000); if mode == "Auto" then status = status_auto; end if status == "Confort" then fibaro:call(ID_relay_1, 'turnOff'); fibaro:call(ID_relay_2, 'turnOff'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Confort" ); end if status == "Eco" then fibaro:call(ID_relay_1, 'turnOn'); fibaro:call(ID_relay_2, 'turnOn'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Eco" ); end if status == "Hors-gel" then fibaro:call(ID_relay_1, 'turnOn'); fibaro:call(ID_relay_2, 'turnOff'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Hors-gel" ); end if status == "Arret" then fibaro:call(ID_relay_1, 'turnOff'); fibaro:call(ID_relay_2, 'turnOn'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Arret" ); end end if mode == "Auto" then fibaro:setGlobal("rad_ch_1_status", status_auto); if status == "Confort" then fibaro:call(ID_relay_1, 'turnOff'); fibaro:call(ID_relay_2, 'turnOff'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Confort" ); end if status == "Eco" then fibaro:call(ID_relay_1, 'turnOn'); fibaro:call(ID_relay_2, 'turnOn'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Eco" ); end if status == "Hors-gel" then fibaro:call(ID_relay_1, 'turnOn'); fibaro:call(ID_relay_2, 'turnOff'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Hors-gel" ); end if status == "Arret" then fibaro:call(ID_relay_1, 'turnOff'); fibaro:call(ID_relay_2, 'turnOn'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Arret" ); end end --mise a jour de l'affichage du module virtuel fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> " ..status); --temporisation pour ne pas solliciter trop souvent le HC2 fibaro:sleep(3000) ATTENTION: il peut être observé un décalage de quelques secondes entre le mode demandé et le mode en cours, c'est normal cela est dà» aux temps d'attente dans les main loop. Idem, attention également à la tempo dans la partie ouverture de fenêtre qui peut dérouter... Vous pouvez trouver un exemple de câblage du fgs-221 ici: http://domotique-info.fr/...lote-et-fibaro/Une partie des icônes est disponible ici: http://www.touteladomotique.com/forum/viewtopic.php?f=89&t=11666 Merci à benjynet! J'espère ne pas avoir laissé traîner de bug je suis preneur de tout retour! 1 1
clarkkent609 Posté(e) le 30 décembre 2013 Auteur Signaler Posté(e) le 30 décembre 2013 Si ça peut profiter à tout le monde c'est l'essentiel ! et si quelqu'un se sent l'âme de réduire le code via des boucles je suis pas contre car j'avoue que pour le moment c'est un peu lourd... Pour l'instant c'est toujours en cours de test chez moi, mais l'ensemble des tests que j'ai réalisé étaient concluants!
BenjyNet Posté(e) le 31 décembre 2013 Signaler Posté(e) le 31 décembre 2013 Ouch, ça c'est du code. Perso, j'ai fait beaucoup plus simple, mes besoins étant très certainement différents. Je gère uniquement 3 possibilités, soit je travaille, soit je suis en repos à la maison, soit je suis parti en vacance. Les heures sont positionnées en fonction de mon rythme de vie. Je ne gère pour le moment que le sèche serviette de la salle de bain. Bien évidement il faut au préalable déclarer un virtual device pour les 4 ordres comme vu précédemment. Voilà ce que ça donne : --[[ %% autostart %% properties %% globals --]] local consigne = "non initialisée"; -- initialisation de la variable consigne à "vide" local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do local jour = os.date("%w"); -- récupération du jour actuel 0 est le dimanche, 6 le samedi local heure = os.date("%H:%M"); -- récupération de l'heure actuelle local mode = fibaro:getGlobalValue("mode_occupation"); local startSource = fibaro:getSourceTrigger(); if (mode == "travail") then -- on test si on est en période de travail -- chauffage matin tous les jours de la semaine sauf weekend if ((jour == "1" or jour == "2" or jour == "3" or jour == "4" or jour == "5") and (heure == "06:00")) then consigne = "reveil semaine"; fibaro:call(16, "pressButton", "1"); -- module virtuel CONF -- chauffage matin weekend elseif ((jour == "6" or jour == "0") and (heure == "07:30")) then consigne = "reveil weekend"; fibaro:call(16, "pressButton", "1"); -- module virtuel CONF -- arrêt chauffage départ travail elseif ((jour == "2" or jour == "4" or jour == "5") and (heure == "07:30")) then consigne = "départ travail"; fibaro:call(16, "pressButton", "2"); -- module virtuel ECO -- reprise chauffage retour travail elseif ((jour == "2" or jour == "4" or jour == "5") and (heure == "17:30")) then consigne = "retour travail"; fibaro:call(16, "pressButton", "1"); -- module virtuel CONF -- coupure pour la nuit tous les jours de la semaine y compris le week-end elseif (heure == "21:00") then consigne = "dodo"; fibaro:call(16, "pressButton", "2"); -- module virtuel ECO end elseif (mode == "repos") then -- si on n'est pas en période de travail on test si on est en repos if (heure == "07:30") then consigne = "réveil repos"; fibaro:call(16, "pressButton", "1"); -- module virtuel CONF elseif (heure == "21:00") then consigne = "dodo repos"; fibaro:call(16, "pressButton", "2"); -- module virtuel ECO end elseif (mode == "vacances") then -- si on n'est pas en période de travail ni en repos on test si on est en vacances consigne = "maison en veille"; fibaro:call(16, "pressButton", "3"); -- module virtuel HG else -- si mode différent de travail, repos ou vacances c'est qu'on n'est pas en période de chauffage consigne = "chauffage éteint"; fibaro:call(16, "pressButton", "4"); -- module virtuel OFF end fibaro:debug("on est le jour n°" .. jour .. " et il est " .. heure); fibaro:debug("consigne actuelle : " .. consigne .. " - mode sélectionné : " .. mode); -- affichage de la variable consigne fibaro:sleep(60*1000); end -- démarrage de la scène manuel et forçage du chauffage quelque soit la consigne else local jour = os.date("%w"); -- récupération du jour actuel 0 est le dimanche, 6 le samedi local heure = os.date("%H:%M"); -- récupération de l'heure actuelle local mode = fibaro:getGlobalValue("mode_occupation"); local startSource = fibaro:getSourceTrigger(); if (startSource["type"] == "other") then fibaro:call(16, "pressButton", "1"); -- module virtuel CONF fibaro:debug("forçage manuel en mode confort"); consigne = "marche forçée"; fibaro:debug("consigne actuelle : " .. consigne .. " - mode sélectionné : " .. mode); -- affichage de la variable consigne end end
clarkkent609 Posté(e) le 31 décembre 2013 Auteur Signaler Posté(e) le 31 décembre 2013 Effectivement une scène comme la tienne fonctionne tout aussi bien. En fait, je voulais pouvoir contrôler le passage dans n'importe quel mode n'importe quand sans devoir revenir dans le code. Du coup mon prog1 correspond àune journée travaillée, et prog2 àun repos. En auto, la semaine ça bascule en prog1 automatiquement et prog2 le WE. Si je pars en vacances, je peux forcer le mode Eco sur le thermostat virtuel et si tous les chauffages sont en Auto alors la maison passe en Eco. Une fois l'hivers passé, un clic sur arrêt et tous les chauffages en auto passent àl'arrêt.
i-magin Posté(e) le 31 décembre 2013 Signaler Posté(e) le 31 décembre 2013 L'intérêt de la box et du code LUA, c'est de pouvoir adapter selon ses besoins Ma solution se rapproche de celle de @benjynet : j'ai un script court et j'utilise des variables globales Je me sers de 2 périphériques virtuels pour gérer les variables globales Pour faire simple, en été le chauffage est arrêté Pour présent et absent, ma scène LUA gère selon les heures de la journée Week-end : (on est "à la campagne") passage en mode eco 24H/24H Vacances : passage en mode hors-gel 24H/24H Retour que j'ai ajouté récemment : activé à distance pour tout remettre en chauffe J'ai ajouté 2 modules virtuels.... çà commence à faire usine à gaz, mais c'est pratique L'heure du réveil est assez régulière, mais il y a des exceptions Avec ce module virtuel ma compagne peut programmer elle même l'heure du réveil (au 1/4 d'heure) "Chauffe à " correspond à l'heure du passage du mode éco au mode confort, calculée automatiquement en fonction d'un dernier module virtuel Et c'est cette troisième variable/valeur qui est prise en compte par mon script chauffage J'ai ajouté ce dernier module virtuel, car lorsqu'il fait très froid, la durée de montée en température du mode éco au mode confort augmente Il déclenche une scène qui recalcule l'heure de "préchauffe" du module précédent Il est rarement utilisé, mais c'est une possibilité
franckg16 Posté(e) le 3 janvier 2014 Signaler Posté(e) le 3 janvier 2014 Pour ma part, j'ai un fonctionnement très similaire à celui de benjynet, c'est à dire que j'ai trois programmations : - Normal : pour une semaine de travail classic. Pour résumer, la programmation est en confort un peu avant le lever, de 6h à 7h et le soir de 18 à 23h. Le reste du temps est en Eco. - Congés : Confort de 8h à 23h30. - Absent : Eco 24/24. Les températures de confort de chaque pièces peuvent être réglée indépendamment. La température Eco est unique pour la maison. Je n'ai pas de température Hors-Gel car mon chat reste systématiquement dans la maison et je n'ai pas envie qu'il gèle. Tout comme d'autres, je n'utilise pas le panneau de chauffage de la HC2 car j'ai des radiateur commandés en fil pilote (pour info, je ne leur donne que 2 ordres : Marche ou Arrêt, ce qui me permet de piloter 2 radiateurs avec un FGS-221). Tout ceci se programme depuis 1 seul module. J'ai voulu faire le plus simple possible de façon à ce que ma femme l'utilise lorsqu'elle est en RTT. Pour ça, ce n'est pas encore gagné . Voici à quoi cela ressemble : Pour chaque pièce, j'affiche la consigne de confort programmée, la température actuelle de la programmation actuelle (soit la température de confort, soit la température Eco) et le relevé de température actuel. J'ai mis des slidebar pour régler les température de 15 à 25° avec un pas de 0.1. Ce n'est pas super pratique mais plus fun (avant j'avais mis 2 boutons pour augmenter ou diminuer la consigne par pallier de 0.5°). Pour les trois boutons de programmation, j'utilise le code suivant qui est répéter pour chacun des boutons : fibaro:setGlobal('prog_house', 2); local text = "Congés"; fibaro:log(text); fibaro:call(67, "setProperty", "ui.lblProgMaison.value", text); --Notification mail fibaro:call(2, "sendDefinedEmailNotification", "3"); fibaro:call(68, "sendDefinedEmailNotification", "3"); -- Notification Push pushingbox = Net.FHttp("api.pushingbox.com"); pushingbox:GET("/pushingbox?devid=v5E160xxxxxxxxx"); --Notification Push Fibaro fibaro:call(27, "sendDefinedPushNotification", "3"); fibaro:call(69, "sendDefinedPushNotification", "3"); J'utilise la variable prog_house permet de définir la programmation Normal, congés ou Absent. J'envoie plusieurs notifications de façon à être certain de les recevoir (c'est plus des tests que de la parano). Voici le code d'un des slides : local slide = fibaro:get(67, "ui.slidSalon.value"); local consigne = slide + 150; local consigneA = fibaro:getGlobal('consigneA_salon'); local temp = tonumber(fibaro:getValue(14,"value")); local text = "Conf:"..(tonumber(consigne)/10).."° Cons:"..(tonumber(consigneA)/10).."° Temp:"..temp.."°"; fibaro:call(67, "setProperty", "ui.lblTempSalon.value", text); fibaro:setGlobal('consigne_salon', consigne); la variable consigneA correspond à la consigne actuelle, c'est à dire la température Eco ou la consigne de confort en fonction du jour, de l'heure et de la programmation de la maison. Et code du main loop: -- Mise à jour des slider s'ils ne sont pas à la même valeur que la consigne local temp; local slide; -- Salon consigne = fibaro:getGlobal('consigne_salon'); slide = fibaro:get(67, "ui.slidSalon.value"); if (tonumber(slide) + 150) ~= tonumber(consigne) then fibaro:call(67, "setProperty", "ui.slidSalon.value", tostring(consigne-150)); end -- Entrée consigne = fibaro:getGlobal('consigne_entree'); slide = fibaro:get(67, "ui.slidEntree.value"); if (tonumber(slide) + 150) ~= tonumber(consigne) then fibaro:call(67, "setProperty", "ui.slidEntree.value", tostring(consigne-150)); end -- Salle de bain consigne = fibaro:getGlobal('consigne_sdb'); slide = fibaro:get(67, "ui.slidSdb.value"); if (tonumber(slide) + 150) ~= tonumber(consigne) then fibaro:call(67, "setProperty", "ui.slidSdb.value", tostring(consigne-150)); end -- Chambre 1 Parents consigne = fibaro:getGlobal('consigne_chambre1'); slide = fibaro:get(67, "ui.slidChambre1.value"); if (tonumber(slide) + 150) ~= tonumber(consigne) then fibaro:call(67, "setProperty", "ui.slidChambre1.value", tostring(consigne-150)); end -- Chambre 2 Rachel consigne = fibaro:getGlobal('consigne_chambre2'); slide = fibaro:get(67, "ui.slidChambre2.value"); if (tonumber(slide) + 150) ~= tonumber(consigne) then fibaro:call(67, "setProperty", "ui.slidChambre2.value", tostring(consigne-150)); end -------------------------------------------------- -- Mise à jour du texte local consigne; local consigneA; local temp; local text; -- Salon consigne = fibaro:getGlobal('consigne_salon'); consigneA = fibaro:getGlobal('consigneA_salon'); temp = tonumber(fibaro:getValue(14,"value")); text = "Conf:"..(tonumber(consigne)/10).."° Cons:"..(tonumber(consigneA)/10).."° Temp:"..temp.."°"; fibaro:call(67, "setProperty", "ui.lblTempSalon.value", text); -- Entrée consigne = fibaro:getGlobal('consigne_entree'); consigneA = fibaro:getGlobal('consigneA_entree'); temp = tonumber(fibaro:getValue(41,"value")); text = "Conf:"..(tonumber(consigne)/10).."° Cons:"..(tonumber(consigneA)/10).."° Temp:"..temp.."°"; fibaro:call(67, "setProperty", "ui.lblTempEntree.value", text); -- Sdb consigne = fibaro:getGlobal('consigne_sdb'); consigneA = fibaro:getGlobal('consigneA_sdb'); temp = tonumber(fibaro:getValue(44,"value")); text = "Conf:"..(tonumber(consigne)/10).."° Cons:"..(tonumber(consigneA)/10).."° Temp:"..temp.."°"; fibaro:call(67, "setProperty", "ui.lblTempSdb.value", text); -- Chambre Parents consigne = fibaro:getGlobal('consigne_chambre1'); consigneA = fibaro:getGlobal('consigneA_chambre1'); temp = fibaro:getGlobal("TH_Parents")/10; -- Thermostat Zibase text = "Conf:"..(tonumber(consigne)/10).."° Cons:"..(tonumber(consigneA)/10).."° Temp:"..temp.."°"; fibaro:call(67, "setProperty", "ui.lblTempChambre1.value", text); -- Chambre 2 Rachel consigne = fibaro:getGlobal('consigne_chambre2'); consigneA = fibaro:getGlobal('consigneA_chambre2'); temp = tonumber(fibaro:getValue(60,"value")); text = "Conf:"..(tonumber(consigne)/10).."° Cons:"..(tonumber(consigneA)/10).."° Temp:"..temp.."°"; fibaro:call(67, "setProperty", "ui.lblTempChambre2.value", text); fibaro:sleep(5000); Certaines parties du code sont répétées entre le main loop et les sliders. le HC2 ne propose pas encore de faire des fonctions globales. Ce module virtuel ne permet que de choisir le programme de la maison et les consignes de confort de chaque pièce. J'ai donc une scène qui donne les ordres aux radiateurs : --[[ %% properties %% globals --]] -- Fonction Eco_Confort -- Retourne 0 si heure Eco ou 1 si Confort function Eco_Confort() local cDate = os.date("*t"); local blnConfort = 0; local prog_house = fibaro:getGlobal("prog_house"); local hhcc = cDate.hour + cDate.min / 60; --fibaro:debug("jour "..cDate.wday); if (tonumber(prog_house) == 0) then prog_house = 1; -- Valeur par défaut end -- Cas Normal (Travail la semaine, repos le week end) if (tonumber(prog_house) == 1) then -- 1ier jour = Dimanche (jour 1) -- Donc ci-dessous = du lundi au vendredi if (cDate.wday >= 2 and cDate.wday <= 6) then -- de 6h00 à 7h15 ou de 18h00 à 23h30 if ((hhcc>=5.75 and hhcc<=7) or (hhcc>=18 and hhcc<23)) then fibaro:debug("Normal : Semaine de 5h45 à 7h00 ou de 18h00 à 23h00"); blnConfort = 1; end else if (hhcc>8 and hhcc<23) then fibaro:debug("Normal : WE de 8h à 23h"); blnConfort = 1; end end -- Cas Repos (A la maison) elseif (tonumber(prog_house) == 2) then if (hhcc>8 and hhcc<=23.99) then fibaro:debug("Congés : de 8h à 23h59"); blnConfort = 1; end -- Cas Absent (de la maison) else fibaro:debug("Absent : de 0h à 23h59"); blnConfort = 0; end fibaro:setGlobal("eco_confort", blnConfort); return blnConfort; end -- Fonction Get_Consigne -- Retourne la consigne en °C en fonction de la pièce et de la consigne actuelle Eco ou Confort function Get_Consigne(piece) local consigne; if (Eco_Confort()==1) then if (piece=="Salon") then consigne = fibaro:getGlobal("consigne_salon"); elseif (piece=="Entrée") then consigne = fibaro:getGlobal("consigne_entree"); elseif (piece=="Chambre1") then consigne = fibaro:getGlobal("consigne_chambre1"); elseif (piece=="Chambre2") then consigne = fibaro:getGlobal("consigne_chambre2"); elseif (piece=="Chambre3") then consigne = fibaro:getGlobal("consigne_chambre3"); elseif (piece=="Sdb") then consigne = fibaro:getGlobal("consigne_sdb"); else consigne = fibaro:getGlobal("consigne_eco"); end else consigne = fibaro:getGlobal("consigne_eco"); end return consigne; end -- Fonction Gestion_Chauffages -- Ordonne ON/OFF aux chauffages function Gestion_Chauffages() local ctemp, cconsigne; -- salon local room = fibaro:getRoomID(1); ctemp = tonumber(fibaro:getValue(14,"value")); cconsigne = tonumber(Get_Consigne("Salon"))/10; fibaro:setGlobal('consigneA_salon', cconsigne*10); fibaro:debug("Salon - Température="..ctemp..", Consigne="..cconsigne); if (ctemp >= cconsigne) then if (fibaro:getValue(18, "value")=="1") or (fibaro:getValue(21, "value")=="1") then fibaro:debug("Chauffage salon OFF"); fibaro:call(18, 'turnOff'); -- Chaufface salon droit fibaro:sleep(100); fibaro:call(21, 'turnOff'); -- Chaufface salon gauche end else if (fibaro:getValue(18, "value")=="0") or (fibaro:getValue(21, "value")=="0") then fibaro:debug("Chauffage salon ON"); fibaro:call(18, 'turnOn'); -- Chaufface salon droit fibaro:sleep(100); fibaro:call(21, 'turnOn'); -- Chaufface salon gauche end end -- entrée ctemp = tonumber(fibaro:getValue(41,"value")); cconsigne = tonumber(Get_Consigne("Entrée"))/10; fibaro:setGlobal('consigneA_entree', cconsigne*10); fibaro:debug("Entrée - Température="..ctemp..", Consigne="..cconsigne); if (ctemp >= cconsigne) then if (fibaro:getValue(52, "value")=="1") then fibaro:debug("Chauffage Entrée OFF"); fibaro:call(52, 'turnOff'); -- Chaufface entrée fibaro:call(63, "pressButton", "1"); -- Chauffage Amis end else if (fibaro:getValue(52, "value")=="0") then fibaro:debug("Chauffage Entrée ON"); fibaro:call(52, 'turnOn'); -- Chaufface entrée fibaro:call(63, "pressButton", "2"); -- Chauffage Amis end end -- salle de bain ctemp = tonumber(fibaro:getValue(44,"value")); cconsigne = tonumber(Get_Consigne("Sdb"))/10; fibaro:setGlobal('consigneA_sdb', cconsigne*10); fibaro:debug("Sdb - Température="..ctemp..", Consigne="..cconsigne); if (ctemp >= cconsigne) then if (fibaro:getValue(49, "value")=="0") then fibaro:debug("Chauffage Sdb OFF"); fibaro:call(49, 'turnOn'); -- Chaufface Sdb - Inversé car gestion fil pilote end else if (fibaro:getValue(49, "value")=="1") then fibaro:debug("Chauffage Sdb ON"); fibaro:call(49, 'turnOff'); -- Chaufface Sdb - Inversé car gestion fil pilote end end -- Chambre Rachel ctemp = tonumber(fibaro:getValue(60,"value")); cconsigne = tonumber(Get_Consigne("Chambre2"))/10; fibaro:setGlobal('consigneA_chambre2', cconsigne*10); fibaro:debug("Rachel - Température="..ctemp..", Consigne="..cconsigne); if (ctemp >= cconsigne) then if (fibaro:getValue(55, "value")=="0") then fibaro:debug("Chauffage Rachel OFF"); fibaro:call(55, 'turnOn'); -- Chaufface Rachel - Inversé car gestion fil pilote end else if (fibaro:getValue(55, "value")=="1") then fibaro:debug("Chauffage Rachel ON"); fibaro:call(55, 'turnOff'); -- Chaufface Rachel - Inversé car gestion fil pilote end end -- Chambre Parents ctemp = fibaro:getGlobal("TH_Parents")/10; -- Thermostat Zibase cconsigne = tonumber(Get_Consigne("Chambre1"))/10; fibaro:setGlobal('consigneA_chambre1', cconsigne*10); fibaro:debug("Parents - Température="..ctemp..", Consigne="..cconsigne); if (ctemp >= cconsigne) then fibaro:debug("Chauffage Parents OFF"); fibaro:call(65, "pressButton", "1"); -- Chauffage Parents else fibaro:call(65, "pressButton", "2"); -- Chauffage Parents fibaro:debug("Chauffage Parents ON"); end end Gestion_Chauffages(); Le lancement en boucle toutes les minutes de cette scène est géré par une autre scène mais ça ne sert à rien, il faudrait que j'intègre cette boucle dans cette scène de façon à en avoir qu'une (scène). Autre axes d'amélioration : les heures de début et de fin des programmations "Normal" et "Congés" sont "en dur" dans le code; je devrais les mettre en variables globales. 1
aliasing Posté(e) le 3 janvier 2014 Signaler Posté(e) le 3 janvier 2014 (modifié) bonsoir, Je vois que vous etes des champion du monde de code LUA perso j'essaye déjà de faire fonctionner mon module virtuel avec un code tout simple ( à priori ). Quand j'allume et j'eteind mes module 21 et 22 séparément, j'ai bien l'allumage, l'extinction et le mode hors gel ( je n'arrive pas a avoir de mode eco, que j'ai pourtant sur le radiateur ( Sauter ) Bref...) j'ai donc créé un module virtuel 3 boutons ( confort hors gel et arrêt ) C'est a partir de la que tout fout l'camp admettons que je sois 21 et 22 sur off donc en mode confort. je clic sur hors gel, là tout va bien il change le 21 sur on et ne touche pas au 22 Maintenant, je clic sur Arrêt, j'entends "clic clac" dans le module fibaro je VOIS le 21 sur OFF et Le 22 sur OFF au lieu de ON, mais en fait le radiateur m'indique sur son écran qu'il est en HORS GEL c'est à dire 21 sur ON et 22 sur OFF, et si je veux changer l'état du 21 sur ON, le module Fibaro ne fait aucun bruit comme si il était resté sur ON et le 22 n'a pas changer d'état. Je ne sait pas si mes explications sont clair, - je ne sais pas si mes codes sont bon - si oui existe il une temporisation, j'ai l'impression qu'il n'arrive pas a changer ses deux relais en même temps. - et pourquoi je n'arrive pas a obtenir le mode confort via le fil pilote quand 21 et 22 sont sur ON mon radiateur est en mode hors gel. Merci par avance. PS j'ai vérifié le câblage du radiateur et des diodes tout a l'air nickel Modifié le 3 janvier 2014 par moicphil Thibault, merci d'utiliser la galerie pour les photos. http://www.domotique-fibaro.fr/index.php/topic/89-utilisation-de-la-galerie-photo/
BenjyNet Posté(e) le 3 janvier 2014 Signaler Posté(e) le 3 janvier 2014 Ton turnOff il te faut un O majuscule il me semble. Si t'as suivi ça http://www.planete-domotique.com/blog/2012/01/10/gestion-avancee-du-systeme-de-fil-pilote/ Tu dois avoir : Confort : 21-22 Off Eco : 21-22 On HG : 21 On - 22 Off Arret : 21 Off - 22 On
i-magin Posté(e) le 3 janvier 2014 Signaler Posté(e) le 3 janvier 2014 @franckg16, Ta solution est intéressante, mais j'avais pu lire que les ordres marche/arrêt n'étaient pas très bon pour les thermostats de radiateurs ? (je n'ai aucune idée de la fiabilité de cet avis)
aliasing Posté(e) le 3 janvier 2014 Signaler Posté(e) le 3 janvier 2014 Bon c'est à ce moment là ou je me fait tout petit.... en fait l'ID de mon deuxième module n'était pas 22 mais 23 par contre lorsque les deux sont sur ON je n'ai pas de mode eco le radiateur est éteint. Bon histoire que mon intervention sert à quelques chose, fibaro:call(16, "pressButton", "2") - dans ton code Benjynet, tu appel un Module "16", il s'agit de l'ID de ton module virtuel où tu a créé tes 4 modes ? - et le pressbutton 2, s'agit il de l'ID du mode eco dans ton module virtuel ? - je n'arrive pas à saisir à quoi sert le Main loop avec le bouton Label Merci
i-magin Posté(e) le 3 janvier 2014 Signaler Posté(e) le 3 janvier 2014 Pour ce qui concerne le principe du main loop : http://www.domotique-fibaro.fr/index.php/topic/81-cr%C3%A9ation-dun-p%C3%A9riph%C3%A9rique-virtuel-et-main-loop/
aliasing Posté(e) le 3 janvier 2014 Signaler Posté(e) le 3 janvier 2014 Merci Donc le Main loop permet de récupérer certaines informations sur le module Virtuel Par contre après avoir recopié textuellement ton tuto en changeant bien évidement les noms et ID, je n'arrive pas à récupérer le Label : eco confort ou arrêt. cette fois j'ai bien vérifié les ID, les minuscule et Majuscule, les espaces. J'ai vraiment l'impression de ne jamais y arriver du premier coup, c'est dingue Est il possible que les modules du FGS221 n'apparaissent pas dans l'appli mobile, pour ne garder que le module virtuel ?
i-magin Posté(e) le 4 janvier 2014 Signaler Posté(e) le 4 janvier 2014 Une réponse rapide (si besoin je compléterai plus tard dans la journée) Le script dans main loop est exécuté en permanence, au contraire des scripts qui sont actionnés par les boutons Dans mon exemple, le main loop permet de récupérer le contenu d'une variable globale qui est modifiée par les boutons, mais aussi par d'autres modules virtuels, par des scènes ou directement par le panneau de variables Cette variable globale doit être créée auparavant avec le panneau de variable Si tu ne modifies pas la valeur de cette variable globale en dehors de ton module virtuel, le main loop n'est pas nécessaire
BenjyNet Posté(e) le 4 janvier 2014 Signaler Posté(e) le 4 janvier 2014 fibaro:call(16, "pressButton", "2") - dans ton code Benjynet, tu appel un Module "16", il s'agit de l'ID de ton module virtuel où tu a créé tes 4 modes ? - et le pressbutton 2, s'agit il de l'ID du mode eco dans ton module virtuel ? Exactement ! Si t'as utilisé mon script attention je n'ai pas de label moi, je me fis uniquement à l'affichage des icônes qui indiquent pour chaque radiateur le mode dans lequel il est. Pour ce qui est du Label tu dois, comme le dis i-magin créer une variable globale dans ton panneau de variable qui sera mise à jour par le mainloop. Pour ce qui est de l'appli mobile tu te crées un nouvel utilisateur dans le panneau de contrôle d'accès qui ne sera pas admin forcément et tu lui donnes les droits que tu veux dans "editer les droits d'accès" pour les modules et les scènes. Personnellement je n'utilise l'admin que pour gérer la box, si je ne dois que l'utiliser je passe par mon accès et ma femme le sien. De cette façon l'affichage n'est pas encombré par tous ces modules qui "ne servent à rien". Pour la gestion du chauffage ma politique est que les radiateurs se gèrent eux-même au niveau régulation (je ne vois pas l'intérêt d'avoir la possibilité de changer la température avec le HC2, une fois qu'elle est réglée c'est fait une fois pour toute). Ensuite dans le script les heures sont "en dur" car notre edt ne change pas beaucoup et les conditions sont faite avec des = et non des > ou < comme ça si on veut forcer le chauffage, on peut le faire sans que le script ne vient reforcer un mode derrière et si on oublie de le remettre en "auto" disons, au prochain test de l'heure, le radiateur fonctionnera selon le script. Là bien évidement je ne parle que de ma salle de bain, les autres radiateurs ont une cassette de programmation pour le moment. Je pense m'orienter vers un script par radiateur ou zone. Donc en ce qui me concerne un pour la salle de bain, un pour la salle d'eau, un pour chaque chambre (soit 5) et un pour la zone jour (cuisine, salon, sam).
i-magin Posté(e) le 4 janvier 2014 Signaler Posté(e) le 4 janvier 2014 @aliasing Le "main loop" n'est pas indispensable dans la gestion de ton chauffage Je suppose que tu vas changer le mode de chauffage (selon les 4 ordres) en passant par ton module virtuel... et si tu utilises des scènes, elles s’appuieront sur ton module virtuel Tu peux donc mettre les lignes "fibaro:call(78,"setProperty","ui.Label1.value", "xxxx")" dans chaque bouton Un exemple pour le mode confort : fibaro:call(75, "turnOff"); fibaro:call(77, "turnOff"); fibaro:setGlobal("chauffagechb", "confort") fibaro:call(78,"setProperty","ui.Label1.value","confort") Pour la dernière ligne : - 78 est l'id du périphérique virtuel - "ui.Label1.value" : Label1 doit correspondre scrupuleusement à l'ID du label - "confort" : c'est le texte qui sera affiché dans le label Si tu choisis cette solution, tu peux supprimer toutes les lignes du main loop Le seul petit inconvénient, c'est lors d'un redémarrage de la box ou de modifications-sauvegardes du module virtuel : la ligne label sera remise à zéro (mais heureusement pas la variable globale) : il suffira de cliquer sur le bouton du mode chauffage voulu pour faire apparaître le mode de chauffage dans le label
franckg16 Posté(e) le 4 janvier 2014 Signaler Posté(e) le 4 janvier 2014 @i-magin, pour répondre àton intérogation sur les ordres ON/OFF (avec des modules type FGS-211) sur les radiaateurs : j'utilise cette solution sur les radiateurs non électronique (radiant ou grille-pain) depuis 5 ans et je n'ai jamais eu de problème. Ce sont de vieux radiateurs. A noter que je n'utilise leur thermostat que pour leur dire de chauffer au max ; le relevé de température est géré par des thermostat zwave dans chaque pièce. Par contre, j'ai utilisé les ordres ON/OFF sur un sèche serviette plus moderne avec gestion fil pilote et il n'a pas trop aimé ça : ça a marché quelques mois mais après le chauffe serviette restait dans l'état "je ne chauffe pas" bien que son thermostat était au max et qu'il était bien alimenté car le voyant était bien allumé. Depuis que je le gère avec son fil pilote, il fonctionne très bien. 1
i-magin Posté(e) le 4 janvier 2014 Signaler Posté(e) le 4 janvier 2014 Merci pour tes informations qui sont importantes @franckg16
aliasing Posté(e) le 4 janvier 2014 Signaler Posté(e) le 4 janvier 2014 merci messieurs, le brouillard commence àce dissiper, et puis àforce de pratique, je vais finir par apprendre la logique LUA
aliasing Posté(e) le 5 janvier 2014 Signaler Posté(e) le 5 janvier 2014 je reviens pour une petite question en fait mon radiateur, un Sauter Baladi, est un radiateur avec fil pilote 6 ordres ( adret, hors gel, eco, confort-1°, confort-2°) le seul problème, je n'arrive qu'àavoir : arrêt, hors gel et confort. Y a t il une solution pour au moins avoir le mode eco ?
i-magin Posté(e) le 5 janvier 2014 Signaler Posté(e) le 5 janvier 2014 Comme l'a écrit @benjynet, les ordres eco sont : Eco : 21-22 On Pourrais-tu mettre une nouvelle copie d'écran, avec le bouton eco (il manque dans ton message précédent) ... et si possible le bouton (le plus proche sur l'image) qui fonctionne ? 1
aliasing Posté(e) le 5 janvier 2014 Signaler Posté(e) le 5 janvier 2014 le probleme c'est que ce n'est même plus un probleme de programmation, si je mets les deux sur ON ( sans passer par le module virtuel, mais directement sur les" inters" du module, mon radiateur prends l'ordre de s'arreter. le cablage est bon je l'ai verifié plusieurs fois le sens des diodes aussi. serait il possible que mon radiateur n'accepte pas ce type de configuration ?
BenjyNet Posté(e) le 5 janvier 2014 Signaler Posté(e) le 5 janvier 2014 Non c'est pas possible, c'est une norme commune àtous les radiateurs. J'ai un sèche-serviette sauter ventilo et ça marche très bien avec le montage du lien que j'ai donné. Si ton montage est bon, On/On doit donner ECO et Off/Off confort, t'es sur de pas avoir un soucis électrique quelque part ?
aliasing Posté(e) le 5 janvier 2014 Signaler Posté(e) le 5 janvier 2014 je viens de relire la notice de mon radiateur, il me dit que lorsque je passe du mode confort au mode eco via le fil pilote il y a un delay de 12 secondes, une chose que je viens d'apprendre, par contre lorsque j'attends, au lieu de basculer en eco il bascule en confort, j'ai reseter le radiateur c'est pareil, le cablage est bien celui de planete domotique. je reverifierai demain.
clarkkent609 Posté(e) le 6 janvier 2014 Auteur Signaler Posté(e) le 6 janvier 2014 as tu corrigé le o minuscule de ton code en O majuscule pour le "turnOff"?
Messages recommandés