flamalex Posté(e) le 17 octobre 2015 Signaler Posté(e) le 17 octobre 2015 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)
flamalex Posté(e) le 17 octobre 2015 Auteur Signaler Posté(e) le 17 octobre 2015 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)
jojo Posté(e) le 18 octobre 2015 Signaler Posté(e) le 18 octobre 2015 utilises-tu GEA ? car en GEA c'est relativement simple. Je veux bien traduire ta demande en GEA si tu es preneur
flamalex Posté(e) le 18 octobre 2015 Auteur Signaler Posté(e) le 18 octobre 2015 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
jojo Posté(e) le 18 octobre 2015 Signaler Posté(e) le 18 octobre 2015 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
flamalex Posté(e) le 20 octobre 2015 Auteur Signaler Posté(e) le 20 octobre 2015 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
pepite Posté(e) le 20 octobre 2015 Signaler Posté(e) le 20 octobre 2015 Salut, t'inquiete pas, ca va venir ;-) Amuse toi bien avec GEA, uenfois que tu as compris la syntaxe, c'est super mega TOP ;-)
flamalex Posté(e) le 26 octobre 2015 Auteur Signaler Posté(e) le 26 octobre 2015 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
Moicphil Posté(e) le 26 octobre 2015 Signaler Posté(e) le 26 octobre 2015 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
pepite Posté(e) le 26 octobre 2015 Signaler Posté(e) le 26 octobre 2015 Bonjour, Tu n'as pas besoin de 2 scenes. Essaie ce que te propose moicphil ;-)
flamalex Posté(e) le 26 octobre 2015 Auteur Signaler Posté(e) le 26 octobre 2015 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"
Moicphil Posté(e) le 26 octobre 2015 Signaler Posté(e) le 26 octobre 2015 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.
flamalex Posté(e) le 26 octobre 2015 Auteur Signaler Posté(e) le 26 octobre 2015 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, 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"
Moicphil Posté(e) le 26 octobre 2015 Signaler Posté(e) le 26 octobre 2015 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
flamalex Posté(e) le 26 octobre 2015 Auteur Signaler Posté(e) le 26 octobre 2015 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?
Moicphil Posté(e) le 26 octobre 2015 Signaler Posté(e) le 26 octobre 2015 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
flamalex Posté(e) le 26 octobre 2015 Auteur Signaler Posté(e) le 26 octobre 2015 ok, j’étudie ça bel exercice et je reviens vers toi merci
jojo Posté(e) le 26 octobre 2015 Signaler Posté(e) le 26 octobre 2015 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
flamalex Posté(e) le 26 octobre 2015 Auteur Signaler Posté(e) le 26 octobre 2015 quel serait le meilleur scénario àvotre avis?
pepite Posté(e) le 26 octobre 2015 Signaler Posté(e) le 26 octobre 2015 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 ;-)
Berale64 Posté(e) le 27 octobre 2015 Signaler Posté(e) le 27 octobre 2015 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.
flamalex Posté(e) le 27 octobre 2015 Auteur Signaler Posté(e) le 27 octobre 2015 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
jojo Posté(e) le 27 octobre 2015 Signaler Posté(e) le 27 octobre 2015 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 ?
flamalex Posté(e) le 27 octobre 2015 Auteur Signaler Posté(e) le 27 octobre 2015 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)
Messages recommandés