Aller au contenu
flamalex

"on" Chaudiere Si Et Seulement Si

Recommended Posts

Bonjour à  Tous,

 

j'aurai besoin d'aide, concernant l’arrêt de la chaudière uniquement si les conditions précédentes ne sont pas respectées

 

j'ai donc créé une scène, ci dessous

 

l'objectif est le suivant

en Resumé:

si il y a une présence dans la maison (mouv, lumiere, alarme totale desactivée) et la Température est < à  20° alors on allume chaudière

à  l'inverse, si alarme totale activée OU pas de lumiere OU pas de mouvement pdt 1h OU température > à  21° (cela veut dire qu'il n'y a personne)

Alors on arrête Chaudière

je vous remercie par avance pour votre aide

--[[
%% autostart
%% properties
108 value
49 value
109 value
107 value
54 value
%% globals
--]]
local delayedCheck0 = false;
if ( tonumber(fibaro:getValue(54, "value")) == 0 ) then
               delayedCheck0 = true;
--- si alarme totale désactivée
end
setTimeout(function()
local delayedCheck1 = false;
local tempDeviceState1, deviceLastModification1 = fibaro:get(108, "value");
--- si la temperature de la sonde 1 est < à  20.6° pdt 20sec
if (( tonumber(fibaro:getValue(108, "value")) < 20.6 ) and (os.time() - deviceLastModification1) >= 20) then
               delayedCheck1 = true;
end
local delayedCheck2 = false;
local tempDeviceState2, deviceLastModification2 = fibaro:get(49, "value");
--- si la temperature de la sonde 2 est < à  21.5° pdt 20 sec
if (( tonumber(fibaro:getValue(49, "value")) < 21.5 ) and (os.time() - deviceLastModification2) >= 20) then
               delayedCheck2 = true;
end
local delayedCheck3 = false;
local tempDeviceState3, deviceLastModification3 = fibaro:get(109, "value");
---si la luminosité du salon est > à  3Lux pdt 20 sec
if (( tonumber(fibaro:getValue(109, "value")) > 3 ) and (os.time() - deviceLastModification3) >= 20) then
               delayedCheck3 = true;
end
setTimeout(function()
local delayedCheck4 = false;
local tempDeviceState4, deviceLastModification4 = fibaro:get(107, "value");
---si il y a mouvement salon pdt plus de 30sec
if (( tonumber(fibaro:getValue(107, "value")) > 0 ) and (os.time() - deviceLastModification4) >= 30) then
               delayedCheck4 = true;
end
local startSource = fibaro:getSourceTrigger();
if (
 ( delayedCheck0 == true  and  delayedCheck1 == true )
and
 ( delayedCheck2 == true )
and
 ( delayedCheck3 == true )
and
 ( delayedCheck4 == true )
or
startSource["type"] == "other"
)
Then --- Alors la chaudière se met en Marche
               fibaro:call(103, "turnOn");
--- ICI JE VOUDRAIS METTRE que SI aucun des conditions n’est réunie, ALORS la chaudière reste ETEINTE
end
end, 30000)
end, 20000)

Partager ce message


Lien à poster
Partager sur d’autres sites

SCENARIO pour ETEINDRE CHAUDIERE

 

--[[
%% properties
108 value
49 value
109 value
107 value
54 value
%% globals
--]]


local delayedCheck0 = false;
-- si alarme ACTIVEE
if ( tonumber(fibaro:getValue(54, "value")) > 0 ) then
delayedCheck0 = true;
end
setTimeout(function()
local delayedCheck1 = false;
local tempDeviceState1, deviceLastModification1 = fibaro:get(108, "value");
-- si T° sonde 1 > à  ...
if (( tonumber(fibaro:getValue(108, "value")) >= 20.8 ) and (os.time() - deviceLastModification1) >= 20) then
delayedCheck1 = true;
end
local delayedCheck2 = false;
local tempDeviceState2, deviceLastModification2 = fibaro:get(49, "value");
-- si T° sonde 2 > à ...
if (( tonumber(fibaro:getValue(49, "value")) >= 21.5 ) and (os.time() - deviceLastModification2) >= 20) then
delayedCheck2 = true;
end
setTimeout(function()
local delayedCheck3 = false;
local tempDeviceState3, deviceLastModification3 = fibaro:get(109, "value");
-- si Luminosité < à  ....
if (( tonumber(fibaro:getValue(109, "value")) <= 2 ) and (os.time() - deviceLastModification3) >= 60) then
delayedCheck3 = true;
end
setTimeout(function()
local delayedCheck4 = false;
local tempDeviceState4, deviceLastModification4 = fibaro:get(107, "value");
-- si pas de mouvement pdt 1h
if (( tonumber(fibaro:getValue(107, "value")) == 0 ) and (os.time() - deviceLastModification4) >= 3600) then
delayedCheck4 = true;
end


local startSource = fibaro:getSourceTrigger();
if (
 ( delayedCheck0 == true  and  delayedCheck1 == true )
or
 ( delayedCheck2 == true )
or
 ( delayedCheck3 == true )
or
 ( delayedCheck4 == true )
or
startSource["type"] == "other"
)
then
-- alors on eteint la chaudiere
fibaro:call(103, "turnOff");
end
end, 3600000)
end, 60000)
end, 20000)

Partager ce message


Lien à poster
Partager sur d’autres sites

utilises-tu GEA ? car en GEA c'est relativement simple. Je veux bien traduire ta demande en GEA si tu es preneur 

Partager ce message


Lien à poster
Partager sur d’autres sites

bonjour,

oui je suis preneur, GEA, j'ai déjàvu des postes en discuter, mais je ne sais absolument pas comment ca fonctionne, ni même comment y accéder.

si j'ai bien compris, il faut inserer le code GEA dans la scéne LUA?

en faite ce que j'essaie de faire, c'est de mettre en marche le chauffage si il y a présence et de le couper si absence

présence sous certaines conditions ( par exemple j'ai pas besoin qu'il fonctionne la nuit)

ce pourquoi je me sers du salon comme "pièce tampon" présence ou non

dans le salon, j'ai 2 sondes de T°, 1 capteur mouv, 1 capteur LUX, j'ai aussi la TV en module virtuel (si elle est allumée s'est qu'il y a qqun, je peux m'en servir aussi)

et pour la maison au global, il y a l'alarme, si elle est activée alors je Stope le chauffage, s'est qu'il n'y a plus personne, mais si a distance je veux activer le chauffage avant que je rentre, c'est foutu

bref, je ne sais pas trop comment faire

merci pour votre aide

Partager ce message


Lien à poster
Partager sur d’autres sites

regarde déjà  ici pour comment installer GEA (en effet c'est une scène développée par Steven).

et tu peux déjà  t'entrainer à  faire quelques trucs.

Pendant ce temps là , je termine ce que je fait, puis je m'attaque à  ta question.

Ceci est la bible GEA : https://gea.piccand.me/doku.php

Partager ce message


Lien à poster
Partager sur d’autres sites

ok, j'ai installé le script GEA dans une scéne LUA

"la première pierre est posée! :"

je suis entrain de voir comment ca fonctionne

j'attends ton retour

merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut,

 

t'inquiete pas, ca va venir ;-)

 

Amuse toi bien avec GEA, uenfois que tu as compris la syntaxe, c'est super mega TOP ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

voici ma scene " Mise en marche de la chaudiere si...."

 

--[[
%% autostart
%% properties
49 value
%% globals
--]]
local now = tonumber((os.date("%H")))
local heuredebut = 6
local heurefin = 22

fibaro:debug("Il est "..now)

if (now > heuredebut or now < heurefin
and 
  tonumber(fibaro:getValue(49, "value")) < 18.7 )
  and 
  ( tonumber(fibaro:getValue(54, "value")) == 1 )

then
fibaro:call(103, "turnOn");
end
la mise en marche de la chaudiere s'effectue entre 6 et 22h si la température est inférieure à  18,7° et si une lumière est allumée
seulement voila, le module "103" de la chaudiere va plusieurs fois "clicter" pdt cette tranche horaire tant que la température restera < à  18.7°
si je comprends bien, la scene se répete x fois
comment faire pour que la scene s’exécute une seule fois jusqu’à  la scene suivante qui est une scene d'extinction, en fait l'inverse de celle ci et qui idem va répéter la scène d'extinction de 22h à  6h, cette fois, et va éteindre la chaudière x fois alors que celle ci est déjà  éteinte puis en 2eme condition si on est en journée elle stope chaudiere si température superieure à   19,7°?
j'ai un autre souci, malgré les conditions réunies pour allumer chaudiere (ou eteindre), ça ne réagit pas de suite, faut il mettre un script de contrôle température toutes les x minutes?
 
et voici la scene "extinction chaudiere si...."
 
--[[
%% autostart
%% properties
49 value
109 value
54 value
%% globals
--]]
local now = tonumber((os.date("%H")))
local heuredebut = 23
local heurefin = 6

fibaro:debug("Il est "..now)

local startSource = fibaro:getSourceTrigger();
if ((now > heuredebut or now < heurefin)
or
 ( tonumber(fibaro:getValue(49, "value")) >= 19.5 )

or
 ( tonumber(fibaro:getValue(54, "value")) == 0 ))
then
fibaro:call(103, "turnOff");
end
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut

 

Je pense que ce n'est pas nécéssaire de mettre tes capteurs de température en tant que trigger ( properties ).

 

Essaye en enlevant tout tes id dans "properties"

 

Je pense que le fait de laisser que la condition de temps devrait suffire au fonctionnement.

 

As tu essayé avec quelque chose comme ça ?:

--[[
%% autostart
%% properties
%% globals
--]]

local now = tonumber((os.date("%H")))
local heuredebut = 6
local heurefin = 22

local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
 while true do

fibaro:debug("Il est "..now) 
if (now > heuredebut or now < heurefin)
 and (tonumber(fibaro:getValue(49, "value")) < 18.7) 
  and (tonumber(fibaro:getValue(54, "value")) == 1)
   then 
    fibaro:call(103, "turnOn")
     else
  fibaro:call(103, "turnOff") 
 end
end

 

 
 
 
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Tu n'as pas besoin de 2 scenes.

Essaie ce que te propose moicphil ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir, a vous

il me dit qu'il y a une erreur sur la derniere ligne en rapport avec la ligne 13

 

--[[
%% autostart
%% properties
%% globals
--]]

local now = tonumber((os.date("%H")))
local heuredebut = 6
local heurefin = 22

local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
 while true do

fibaro:debug("Il est "..now) 
if (now > heuredebut or now < heurefin) --si l'heure est en journée (entre 6 et 22h)
 and (tonumber(fibaro:getValue(49, "value")) < 18.7) -- T°<18.7°
  and (tonumber(fibaro:getValue(54, "value")) == 1)-- and contact ouvert
   then 
    fibaro:call(103, "turnOn") --alors on allume
     else
  fibaro:call(103, "turnOff") -- sinon on eteint
 end
end

 

erreur

[DEBUG] 20:06:30: [1;31m2015-10-26 20:06:30.172346 [ fatal] Runtime error: /opt/fibaro/scenes/110.lua:25: 'end' expected (to close 'if' at line 12) near [0m

 

j'aimerai comprendre le "sourceTrigger" et "while true do"

Partager ce message


Lien à poster
Partager sur d’autres sites

oups ! j'ai oublié un "end"

--[[
%% autostart
%% properties
%% globals
--]]
 
local now = tonumber((os.date("%H")))
local heuredebut = 6
local heurefin = 22
 
local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
 while true do
 
fibaro:debug("Il est "..now) 
if (now > heuredebut or now < heurefin)
 and (tonumber(fibaro:getValue(49, "value")) < 18.7) 
  and (tonumber(fibaro:getValue(54, "value")) == 1)
   then 
    fibaro:call(103, "turnOn")
     else
  fibaro:call(103, "turnOff") 
  end
 end
end

Le "source trigger" peut être de 3 types : déclenché par une variable ( global), un device (properties) ou un temps ou demarrage ( autostart )

 

Le " while true do " est un impératif pour déclencher la scène.

Partager ce message


Lien à poster
Partager sur d’autres sites

ok, merci, je suis entrain de lire un tuto de Berale24 sur les triggers

mais ici dans ma scène, le triggers devrait etre sur le tps Non?

pcq il serait intéressant qu'a chaque changement de températures (0.5°) en moyenne toutes les 20mins , il fasse une vérification ?

pcq sans cela la HC2 tourne à  l'infini Non? 

 

ici, si je comprends bien,

  1. if (sourceTrigger["type"] == "autostart") then
    while true do

 

si "démarrage" alors déclenchement

mais démarrage de "la scène" donc il faut que je la démarre et après elle tourne à  l'infini?

je suis désolé avec toutes mes questions :)

je cherche sur forum, mais vous etes tellement expérimenté que le B A BA n'est pas abordé

il faudrait un forum "pour les nuls" :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bah, j'ai peux être mal lu ce que tu souhaitais faire mais au dessus tu dis que tu veux que la scène ne s’exécute qu'une seule fois ...

 

Effectivement, si tu veux contrôler tous les x minutes l'état de tes sondes, il faudra modifier le script en ajoutant simplement un "sleep" en fin de code

Partager ce message


Lien à poster
Partager sur d’autres sites

non non, tu as bien lu, ta scene fonctionne a merveille

c'est super, c'est exactement ca.

 

je me demande juste, en voyant que le module est en "transfert permanent", est ce normal ou bon pour le matériel?

je pose la question, pcq je viens de lire des choses,

est ce que ma scène a une incidence sur une éventuelle surcharge de la hc2 (ici 20 à  30% de CPU toutes les sec), ou une incidence sur autre chose?

Partager ce message


Lien à poster
Partager sur d’autres sites

Bah, je ne dirais pas " surcharche" mais disons qu'en mettant tes capteurs en "trigger", à  chaque changement de température sur chacune des sondes, la scène va s’exécuter et vérifier les conditions.

Et tu double ca en faisant une scène d’extinction inutile car tu peux l'intégrer dans la 1ere.

 

J'ai une scène sensiblement identique à  ce que tu veux faire.

Sauf qu'au lieu de relever la valeur d'une sonde, je vérifie l'état d'une variable globale. Et au lieu d’être dans une plage horaire, j'ai mis des horaires fixes

 

Cette scène se lance toutes les 1 min. pour vérifier les conditions ( heure + variable )

 

je ne l'ai volontairement pas adapté à  ton besoin...il faut la modifier :

--[[
%% autostart
%% properties
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
while true do

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
local mode = fibaro:getGlobal("Sdbauto")
fibaro:debug("mode : "..mode)    
    
local matinOn = "04:45"
local matinOff = "06:00"  
local soirOn = "18:30"
local soirOff = "21:45"    
    
if  
((string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == matinOff)
or
(string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == soirOff)) 
and
mode == "1"
then
fibaro:debug("Consigne à  18");
fibaro:call(549, "pressButton", "7")--set to 18 
end
--------------
if  
((string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == matinOn)
or
(string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == soirOn) )
and
mode == "1"
then
fibaro:debug("Consigne à  25");
fibaro:call(549, "pressButton", "14")--set to 25
end
    
    
fibaro:sleep(60*1000);
end
else

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
startSource["type"] == "other"
)
then
	--
end

end

Partager ce message


Lien à poster
Partager sur d’autres sites

mais on pourrait travailler avec les trigger sur les sondes de température, si elles sont paramètrées correctement : envoie un rapport àla box si delta >0.5 ou 1 °C et toutes les 10 min autrement

Partager ce message


Lien à poster
Partager sur d’autres sites

ca dépend de ton besoin, je trouve la solution de Moicphil plus lisible avec la Variable et l'heure en condition.

 

super scene Moicphil ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

 

voici ma scene " Mise en marche de la chaudiere si...."

 

--[[
%% autostart
%% properties
49 value
%% globals
--]]
local now = tonumber((os.date("%H")))
local heuredebut = 6
local heurefin = 22

fibaro:debug("Il est "..now)

if (now > heuredebut or now < heurefin
and 
  tonumber(fibaro:getValue(49, "value")) < 18.7 )
  and 
  ( tonumber(fibaro:getValue(54, "value")) == 1 )

then
fibaro:call(103, "turnOn");
end

Si tu veux rester sur des Trigger rajoute simplement un test pour savoir si 103 est déjà  ON.

 

 

if (now > heuredebut or now < heurefin
and 
  tonumber(fibaro:getValue(49, "value")) < 18.7 )
  and 
  ( tonumber(fibaro:getValue(54, "value")) == 1 )
  and 
  ( tonumber(fibaro:getValue(103, "value")) == 0 )

Puis tu rajoute un "else" identique pour la température de coupe.

Partager ce message


Lien à poster
Partager sur d’autres sites

alors si je fais comme cela,

la chaudiere va s’arrêter si température de coupe = 19.7 entre l’intervalle de tps "jour" 6h 22h

mais alors qu'en va t il arrêter chaudière en dehors de cet intervalle?

puis comment ajouter un trigger uniquement sur le 103?

 

--[[
%% autostart
%% properties
49 value
%% globals
--]]
local now = tonumber((os.date("%H")))
local heuredebut = 6
local heurefin = 22

fibaro:debug("Il est "..now)

if (now > heuredebut and now < heurefin
and 
  tonumber(fibaro:getValue(49, "value")) < 18.7 )
  and 
  ( tonumber(fibaro:getValue(54, "value")) == 1 )
  and
  ( tonumber(fibaro:getValue(103, "value")) == 0 )

then
fibaro:call(103, "turnOn");
  else
  
  if (now > heuredebut and now < heurefin
and 
  tonumber(fibaro:getValue(49, "value")) > 19.5 )
  or
  ( tonumber(fibaro:getValue(54, "value")) == 1 )
  and 
  ( tonumber(fibaro:getValue(103, "value")) == 1 )
 then
fibaro:call(103, "turnOff")
 
end
end

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai enfin pris le temps d'essayer de m'attaquer au problème.

En lisant le 1° post, j'ai des questions quand aux conditions àvérifier pour la présence.

En SURVOLLANT les posts suivants, il me semble que le besoin aurait évolué ?

Demande de GEA toujours d'actualité, suivant quel scénario ?

Partager ce message


Lien à poster
Partager sur d’autres sites

scénario idéal:

j'ai un capteur de température dans la piece principale (id 49), un retour de statut alarme FGBS-001 (id 54) et un module chaudiere on/off  (id 103)

je souhaite que lorsque la T°< à  18° et qu'il y a présence humaine (donc sous entendue l'alarme est à  l’arrêt) alors allumage chaudiere sauf si c'est la nuit. (à  savoir également, même si ce n'est pas le sujet, que pour le retour statut alarme, je ne sais pas pourquoi mais le 0 et le 1 sont inversés, bef si alarme activée =0 si desactivée =1, c'est bête mais je ne trouve pas le paramètre dans le FGBS.)

le probleme qui se pose s'est que je cherche a ce que ce soit précis et pas attendre 1h ou 2h apres que je sois rentré, pour que ca démarre la scene, donc le trigger m'a l'air pas mal, sauf qu'il sollicite, soit tjr l’arrêt du module qui est donc tjr en "transfert OK" soit la mise en marche du module, idem "transfert OK", j'ai peur que le module n’apprécie pas et que la HC2 prenne 20 à  40% de ressource toutes les secondes pour pas grand chose

enfin, la chaudiere doit s’arrêter, en cas d'absence (statut alarme ON), ou en cas de présence la nuit et aussi le jour si la température est supérieur à  19,5° (19,5, c'est pour l'inertie thermique, entre 19,5 et 18 il y a un battement, et ca évite les démarrages de chaudière trop fréquents)

Partager ce message


Lien à poster
Partager sur d’autres sites

×