ebtjjn Posté(e) le 11 septembre 2016 Signaler Posté(e) le 11 septembre 2016 Salut tout le monde,Après avoir largement profité des conseils du site (et d'autres), voici venu le temps de faire un retour d'expérience et peut être aider quelques uns d'entre vous qui liront le sujet : voici donc où j'en suis ce jour : quand je parle de domotisation, il s'agit de régler le temps de filtration sur la température de l'eau.Dans l'idéal au niveau du "hardware" et de l'installation, j'aimerai mettre la sonde directement dans le circuit au niveau du local piscine; on voit rien niveau esthétique et ça fait "propre" : voir réponse de "pinou" dans le post : http://www.domotique-fibaro.fr/index.php/topic/4432-virtual-device-gestionnaire-filtration-piscine/page-2?hl=%20gestionnaire%20%20piscine Faute de temps et par le fait que je risque prochainement de changer le local piscine, j'ai choisi la solution "classique" : sonde de température dans le bassin avec le fil plus ou moins caché... Pour cela,j'ai acheté :- une sonde waterproof de 5m (j'en avias acheté de 1m mais pas assez longue pour arriver directement dans le local!!)http://www.planete-domotique.com/sonde-de-temperature-1-wire-etanche-5-metres-sans-connecteur.html- un sensor universel fibaro FGBS-001 http://www.domadoo.fr/fr/peripheriques/916-fibaro-detecteur-universel-z-wave-fgbs-001-5902020528074.html - un module double switch FGS-222 :(un pour la pompe, l'autre switch pour la lumière) http://www.domadoo.fr/fr/obsoletes/937-fibaro-micromodule-commutateur-double-z-wave-fgs-221-5902020528043.html- un transformateur pour l'alimenter le sensor universelhttps://www.amazon.fr/dp/B00H2D6X8G/ref=pe_386181_148007091_TE_dp_1 Pour les branchements, rien de compliqué au final, j'ai fait comme indiqué dans de nombreux forums et sur le site... Puis ensuite, côté HC2 et scénario/virtual device, le VD de chris6783 ne me convenait pas : je n'ai pas bien compris!!! et surtout le coup des cycles et de la filtration pas forcément continue ne me plaisait pas... http://www.domotique-fibaro.fr/index.php/topic/4432-virtual-device-gestionnaire-filtration-piscine/?hl=%2Bgestionnaire+%2BpiscineVoici mon code qui permet de gérer le mode hiver : en hiver (changement de la variable "saison" à hiver le jour où je passe la piscine en hivernage), si la température n'est pas inférieure à 2°C, je filtre de 4h à 6h du matin; si la température descend en dessous de 2°C, je filtre en continu.L'été (changement de la variable "saison" à été le jour où je "redémarre" la piscine) : à 10h30, démarrage de la filtration; à 11h30 prise de température (une fois que l'eau a été filtrée et qu'elle à tourné un peu) puis délai de filtration selon la température.J'ai des notifications à chaque démarrage ou fin de filtration. J'ai poussé un peu avec un VD qui me permet de stopper la filtration, d'activer un choc long de 11h, un choc court de 2h et d'allumer ou éteindre la lumière. Le VD m'indique aussi dans quel mode de filtration je suis (en lien avec la scène). Je n'ai pas réussi à faire remonter la temp instantanée sur le VD mais je vais encore chercher (et de tout façon je la vois sur le module correspondant sur l'appli). Voici donc mon code de la scène et en PJ, le VD.Je suis bien sà»r preneur de toutes les remarques concernant la correction ou amélioration du code car je n'y connais rien en programmation. ..!!! ebtjjn --[[ %% autostart %% properties %% events %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); function tempFunc() --fonction de filtration en ETE local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "10:30") ) ) then fibaro:debug("Je filtre"); fibaro:call(69, "turnOn"); fibaro:setGlobal("modefiltration", 1) fibaro:call(13, "sendDefinedPushNotification", "51"); fibaro:sleep(3600*1000) -- au bout d'une heure, prise de température pour gestion auto du nbe d'heures à filtrer selon temp de l'eau local temppiscine = fibaro:getValue(91, "value") -- test de la température : si > 27, filtration sur 22h30 de plus (=23h30 au total) sinon, règle BAROUDI if tonumber(temppiscine) > 27 then fibaro:debug("T° eau piscine > 27 ==> filtration continue") fibaro:call(13, "sendDefinedPushNotification", "80"); local nbheuresafiltrer = 22,5 * 3600 * 1000 else fibaro:debug("T° eau piscine = " ..temppiscine .. " °C") local temppiscinearrondi = math.floor(tonumber(temppiscine)+ .5) local nbheuresafiltrerenh = ((tonumber(temppiscinearrondi)/2)-2) fibaro:debug("nb heures a filtrer = " .. nbheuresafiltrerenh) local nbheuresafiltrer = nbheuresafiltrerenh *3600 * 1000 -- on définit la variable dureefiltration = nb d'heures à filtrer fibaro:setGlobal("dureefiltration", nbheuresafiltrer) end fibaro:debug("Valeur de la variable _dureefiltration_ : "..fibaro:getGlobalValue("dureefiltration")); fibaro:sleep(tonumber(fibaro:getGlobalValue("dureefiltration"))-(3600*1000)); if fibaro:getGlobalValue("modefiltration") == "12" then fibaro:debug("Fin du mode auto mais CHOC déjà en cours") else fibaro:debug("Fin du timer, j\'arrête de filtrer"); fibaro:call(69, "turnOff"); fibaro:setGlobal("modefiltration", 0) fibaro:call(13, "sendDefinedPushNotification", "52"); end end setTimeout(tempFunc, 60*1000) end if fibaro:getGlobalValue("Saison") == "Eté" then --je filtre en mode ETE fibaro:debug("c\'est l\'été, cool !! :-)") tempFunc() else local temppiscine = fibaro:getValue(91, "value") -- test de la température : si < 2, filtration sur 24h, sinon 2h de 4h à 6h du mat if tonumber(temppiscine) < 2 then fibaro:debug("T° eau piscine < 2 ==> filtration continue") fibaro:call(13, "sendDefinedPushNotification", "79"); local nbheuresafiltrer = 23,5 * 3600 * 1000 fibaro:call(71, "turnOn"); fibaro:debug("Je filtre en continu"); fibaro:setGlobal("modefiltration", 1) fibaro:sleep(5*1000) fibaro:call(71, "turnOff"); fibaro:debug("Fin du timer, j\'arrête de filtrer"); fibaro:call(13, "sendDefinedPushNotification", "52"); fibaro:setGlobal("modefiltration", 0) end if ( --à 4h du matin, j'active la filtration ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "04:00") ) ) then -- s'il y a un CHOC en cours --> priorité au CHOC : je ne fais rien. Sinon, je filtre 2h. fibaro:debug("je filtre en mode HIVER") if fibaro:getGlobalValue("modefiltration") == "12" then fibaro:debug("CHOC déjà en cours : la durée de filtration est celle définie par le CHOC") else fibaro:call(69, "turnOn"); fibaro:debug("Je filtre"); fibaro:setGlobal("modefiltration", 1) fibaro:call(13, "sendDefinedPushNotification", "51"); fibaro:sleep(2*3600*1000) fibaro:debug("Fin du timer, j\'arrête de filtrer"); fibaro:call(69, "turnOff"); fibaro:setGlobal("modefiltration", 1) --je ne teste pas s'il ya un CHOC en cours : il faudrait l'avoir déclenché entre 4h et 6H du matin... fibaro:call(13, "sendDefinedPushNotification", "52"); end end end Le VD ici : PISCINE.vfib 2
Nico Posté(e) le 11 septembre 2016 Signaler Posté(e) le 11 septembre 2016 Merci pour le partage. On peut avoir une photo du local technique ? (Moi je viens de signer la commande de ma piscine, cool !!! Bon, reste à bosser )...
ebtjjn Posté(e) le 11 septembre 2016 Auteur Signaler Posté(e) le 11 septembre 2016 Ouh la... le local technique... c'en n'est pas vraiment un en fait...!!! L'ancien proprio avait fait un "trou" adossé au mur du voisin, bati avec quelques briques et une planche dessus pour "fermer"... Ca n'a rien d'un vrai local technique du coup... Mais je peux la photo que j’intitulerai : "ceci n'est pas un local technique"!!
fredokl Posté(e) le 10 janvier 2017 Signaler Posté(e) le 10 janvier 2017 Salut. je souhaite domotiser la pompe de ma piscine cette hiver. C'est surtout pour éviter le gel. J'ai vu que tu utilises un FGS-222 + FGBS-001 + sonde Je part sur le même principe mais je souhaite acheter le FGS-223 qui est plus récent. Ma question est de savoir si je peux utiliser le FGS-223 en sachant qu'il n'y a pas de contact sec avec cette version? Merci de vos réponse.
fredokl Posté(e) le 15 janvier 2017 Signaler Posté(e) le 15 janvier 2017 Bon je me répond à moi même. Oui on peut utilisé le FGS-223 pour gérer la pompe de la piscine et la lampe. J'ai effectué l!installation du module cette après-midi et tout fonctionne parfaitement. Par contre je ne sais pas quel VD utiliser car il y en a quelques un sur le forum et ils sont un peu "difficile " à comprendre et paramètre pour un novice en LUA comme moi. C'est pourquoi, je commence avec une scène pour gérer la pompe. Mais, car il y a un mais.. La scène que j'ai mis en place ne ce lance pas! je vous ai mis deux captures d'écran (la scène et le message d'erreur), pouvez-vous me dire ce qui ne va pas. Merci de vos conseilles.
fredokl Posté(e) le 1 février 2017 Signaler Posté(e) le 1 février 2017 Bon. J'ai viré ma scène bloc et repris celle de @ebtjjn. Elle a l'air simple, c'est qu'il me faut. Par contre @ebtjjnas-tu apporté des modifications sur ton VD?
fredokl Posté(e) le 2 février 2017 Signaler Posté(e) le 2 février 2017 Salut. J'utilise depuis hier ce VD pour la gestion de ma piscine. J'ai créé le VD ensuite créé une scène avec les éléments fournis en prenant soin de porter tous les changements pour son fonctionnement (ID pompe, ID température, ID lumière). Et ben, je n'arrive pas à la faire fonctionner. La pompe ne démarre pas le matin comme prévu pendant 02h00 et je n'ai aucun retour d'info sur le VD. Il n'y a pas non plus le relevé de température à 11h30 pour ensuite adapter le temps de filtrage. Quelqu'un utilise ce VD? Sinon, qu'ai-je oublié pour le faire fonctionner? Merci de vos réponses.
ebtjjn Posté(e) le 3 février 2017 Auteur Signaler Posté(e) le 3 février 2017 Salut fredokl Le VD fonctionne mais je l'ai modifié depuis... Je te donne tout ça dès que j'ai un peu de temps. Ce WE possiblement.... A noter j'ai un abonnement tempo EDF. Ebtjjn
ebtjjn Posté(e) le 8 février 2017 Auteur Signaler Posté(e) le 8 février 2017 Salut fredokl, voici. Bon je dois dire qu'il n'est pas (encore) parfait. :-( Il faut créer une variable globale "modefiltration"; ça permet de faire le distingo et d'afficher l'info sur le VD. Mais l'essentiel fonctionne : la filtration, la temp de l'eau et la temp de référence. Après, les icones ne sont pas bons et la temp max de la veille ne fonctionnait plus mais j'ai retrouvé le code de Steven que je viens de rajouter en bas et qui avait marché nickel avant que je l'enlève pur une mauvaise raison... DIs moi tout... ebtjjn PISCINE.vfib
fredokl Posté(e) le 8 février 2017 Signaler Posté(e) le 8 février 2017 Salut ebtjjn, merci pour le VD. Je test et te tiens au courant.
fredokl Posté(e) le 8 février 2017 Signaler Posté(e) le 8 février 2017 (modifié) @ebtjjnJ'ai installé le VD. Tu confirmes qu'il faut toujours la scène en plus. Par contre j'ai une ou deux questions. désolé mais je débute en lua et je maîtrise pas vraiment. Par exemple sur le bouton Filtration+2, le code est le suivant: fibaro:setGlobal('modefiltration', 5); fibaro:call(69,'turnOn' ) ; --fibaro:call(fibaro:getSelfId(), "setProperty","ui.Running.value", CHOOOC); --fibaro:setGlobal('tempref', 999); fibaro:sleep(2 * 3600 * 1000); -- vérification que la filtration auto n'est pas en marche if (fibaro:countScenes(25) > 1) then fibaro:setGlobal('modefiltration', 1); fibaro:debug('Choc terminé mais filtration non arrêtée car la filtration automatique est déjà en marche'); else fibaro:setGlobal('modefiltration', 0); fibaro:call(71, 'turnOff' ) --fibaro:setGlobal('tempref', 99); fibaro:debug('Choc terminé et pas de filtration auto --> arrêt de la filtration'); end Le 69 correspond a ta pompe, le 25 correspond à la scène et 71 à ta lampe, alors ma question est pourquoi la lampe? Modifié le 8 février 2017 par fredokl
ebtjjn Posté(e) le 8 février 2017 Auteur Signaler Posté(e) le 8 février 2017 Pardon, coquille suite à des tests post-été... C'est bien 69 à la place de 71... Et oui pour le reste!! :-)
fredokl Posté(e) le 8 février 2017 Signaler Posté(e) le 8 février 2017 Cool. Merci de ta réponse. C'est bien ce que j'ai mis, cela me semblait plus logique. Merci pour la confirmation. Si tu penses le faire évoluer, je suis preneur car ton VD correspond bien à mon usage.
Nico Posté(e) le 9 février 2017 Signaler Posté(e) le 9 février 2017 Va falloir que je relise tous les tutos et topic piscine, je commence à creuser fin du mois moi
fredokl Posté(e) le 9 février 2017 Signaler Posté(e) le 9 février 2017 Il y a de quoi lire! Le choix pour le VD parfait est assez compliqué! Chacun a sa vision des choses et pour nous (en tout cas moi) profane du LUA, le choix est cornélien!
fredokl Posté(e) le 11 février 2017 Signaler Posté(e) le 11 février 2017 (modifié) Salut. Je me suis lancer dans une scène en lua pour m'entraîner. Je test sur ma pompe de piscine. Je veux en fonction de la température que la pompe démarre pendant 2 heures et ensuite s'arrête. Cela ne semble pas fonctionner. Voici le script: --[[ %% autostart %% properties 587 value %% events %% globals Saison --]] local tempext = fibaro:getValue(587, 'value') -- 'tempext' représente la fonction qui récupère (get) la valeur (Value) de l'intensité (value) du capteur de température 587 local timeloc = os.date("*t") --stocke la date et heure actuelle du système sous forme d'un tableau à l'intérieur de la variable "timeloc" if (fibaro:getGlobalValue(Saison) == "Hiver") then -- si récupère la valeur de la variable Saison if(timeloc['hour'] >= 14 and timeloc['hour'] < 18) then if tonumber(tempext) >= 8 then -- si la valeur récupérée (ramenée en valeur numérique grâce à tonumber) est supérieure ou égale à 8, alors if tonumber(tempext) <= 12 then -- si la valeur récupérée (ramenée en valeur numérique grâce à tonumber) est inférieur ou égale à 12, alors fibaro:call(570, 'turnOn') -- la pompe 570 s’allume. fibaro:call(590, "sendDefinedPushNotification", "566") -- Envoi Push "Démarrage Pompe" sur mon téléphone portable if fibaro:sleep(72000) then -- s'éteint au bout de 2 heures. else fibaro:call(570, 'turnOff') -- sinon la pompe 570 s’éteint. fibaro:call(590, "sendDefinedPushNotification", "567") -- Envoi Push "Arrêt Pompe" sur mon téléphone portable end -- fin de la condition end -- fin de la condition end -- fin de la condition end -- fin de la condition end -- fin de la condition Quand la scène ce lance, j'obtient cette erreur: [DEBUG] 00:41:49: line 154: Assertion failed: Expected string Le code s'arrête à la ligne 22 et je ne vois pas d'où viens cette ligne 154. Pouvez me dire ce qui ne va pas. Merci. Modifié le 11 février 2017 par fredokl
fredokl Posté(e) le 12 février 2017 Signaler Posté(e) le 12 février 2017 (modifié) J'ai trouvé mon erreur. C'est la variable global prédéfini qui posait problème. Remplacé: if (fibaro:getGlobalValue(Saison) == "Hiver") then -- si récupère la valeur de la variable Saison par: fibaro:setGlobal("Saison", "Hiver") -- si récupère la valeur de la variable Saison Modifié le 12 février 2017 par fredokl
fredokl Posté(e) le 13 février 2017 Signaler Posté(e) le 13 février 2017 @ebtjjnSalut. Ça fait une semaine que j'ai réinstallé la scène et le Vd. Rien ne fonctionne. J'ai tout paramètré correctement et rien ne se lance. Que ce soit à 04h00 du matin, la lecture de la température à 11h30 etc... Rien ne fonctionne. Au niveau de variables, combien y-en-a-t-il à créer?
ebtjjn Posté(e) le 13 février 2017 Auteur Signaler Posté(e) le 13 février 2017 (modifié) Salut variable prédéfinie : "Saison" --> "Hiver" & "Eté" variables globales : "modefiltration" + " "dureefiltration" + "tempref" Il y a des notifications push à créer ou à supprimer mais je pense que tu les verras... ;-) Voici la scène que j'utilise : --[[ %% autostart %% properties %% events %% globals --]] --**************************************** --*************PARAMETRAGE**************** local id_pompe = 69 local id_tel = 13 -- 13= tél JJ : téléphone sur lesquel envoyer une notif push (start et stop) local id_eau = 91 --**************************************** --**************************************** local sourceTrigger = fibaro:getSourceTrigger(); local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); function tempFunc() --fonction de filtration en ETE local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "10:30") ) ) then fibaro:debug("Je filtre"); fibaro:call(id_pompe, "turnOn"); fibaro:setGlobal("modefiltration", 1) fibaro:call(id_tel, "sendDefinedPushNotification", "51"); fibaro:sleep(3600*2*1000) -- au bout de 2 heures, prise de température pour gestion auto du nbe d'heures à filtrer selon temp de l'eau local temppiscine = fibaro:getValue(id_eau, "value") fibaro:setGlobal('tempref',temppiscine) -- test de la température : si > 27, filtration sur 21h30 de plus (=23h30 au total) sinon, règle BAROUDI if tonumber(temppiscine) > 27 then fibaro:debug("T° eau piscine > 27 ==> filtration continue") fibaro:setGlobal("modefiltration", 8) fibaro:call(id_tel, "sendDefinedPushNotification", "80"); local nbheuresafiltrer = 21,5 * 3600 * 1000 else fibaro:debug("T° eau piscine = " ..temppiscine .. " °C") local temppiscinearrondi = math.floor(tonumber(temppiscine)+ .5) local nbheuresafiltrerenh = ((tonumber(temppiscinearrondi)/2)-2) fibaro:debug("nb heures a filtrer = " .. nbheuresafiltrerenh) local nbheuresafiltrer = nbheuresafiltrerenh *3600 * 1000 -- on définit la variable dureefiltration = nb d'heures à filtrer fibaro:setGlobal("dureefiltration", nbheuresafiltrer) end fibaro:debug("Valeur de la variable _dureefiltration_ : "..fibaro:getGlobalValue("dureefiltration")); fibaro:sleep(tonumber(fibaro:getGlobalValue("dureefiltration"))-(3600*2*1000)); if fibaro:getGlobalValue("modefiltration") == "12" then fibaro:debug("Fin du mode auto mais CHOC déjà en cours") else fibaro:debug("Fin du timer, j\'arrête de filtrer"); fibaro:setGlobal("dureefiltration", 0) fibaro:call(id_pompe, "turnOff"); fibaro:setGlobal('tempref', 99) fibaro:setGlobal("modefiltration", 0) fibaro:call(id_tel, "sendDefinedPushNotification", "52"); end end setTimeout(tempFunc, 60*1000) end if fibaro:getGlobalValue("Saison") == "Eté" then --je filtre en mode ETE fibaro:debug("c\'est l\'été, cool !! :-)") tempFunc() else local temppiscine = fibaro:getValue(id_eau, "value") fibaro:debug("c\'est l\'hiver...!! :-(") -- test de la température : si < 2, filtration sur 24h, sinon 2h de 4h à 6h du mat if tonumber(temppiscine) < 2 then fibaro:debug("T° eau piscine < 2 ==> filtration continue") fibaro:call(id_tel, "sendDefinedPushNotification", "79"); --local nbheuresafiltrer = 23,5 * 3600 * 1000 fibaro:call(id_pompe, "turnOn"); fibaro:setGlobal('tempref', temppiscine) fibaro:debug("Je filtre en continu"); fibaro:setGlobal("modefiltration", 8) fibaro:sleep(23,5*3600*1000) fibaro:call(id_pompe, "turnOff"); fibaro:setGlobal("dureefiltration", 0) fibaro:setGlobal('tempref', 99) fibaro:debug("Fin du timer, j\'arrête de filtrer"); fibaro:call(id_tel, "sendDefinedPushNotification", "52"); fibaro:setGlobal("modefiltration", 0) --end elseif ( --à 4h du matin, j'active la filtration ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "03:45") ) ) then -- s'il y a un CHOC en cours --> priorité au CHOC : je ne fais rien. Sinon, je filtre 2h. fibaro:debug("je filtre en mode HIVER") if fibaro:getGlobalValue("modefiltration") == "12" then fibaro:debug("CHOC déjà en cours : la durée de filtration est celle définie par le CHOC") elseif fibaro:getGlobalValue("EdfTempoJour") == "1" then fibaro:call(id_pompe, "turnOn"); fibaro:debug("Je filtre"); fibaro:setGlobal("modefiltration", 1) fibaro:call(id_tel, "sendDefinedPushNotification", "51"); fibaro:sleep(1.9*3600*1000) fibaro:debug("Fin du timer, j\'arrête de filtrer"); fibaro:call(id_pompe, "turnOff"); fibaro:setGlobal("modefiltration", 0) --je ne teste pas s'il ya un CHOC en cours : il faudrait l'avoir déclenché entre 4h et 6H du matin... fibaro:call(id_tel, "sendDefinedPushNotification", "52"); end end end Teste et dis moi. Modifié le 13 février 2017 par ebtjjn
fredokl Posté(e) le 14 février 2017 Signaler Posté(e) le 14 février 2017 Merci. Je test et te tiens au courant.
fredokl Posté(e) le 15 février 2017 Signaler Posté(e) le 15 février 2017 @ebtjjnSalut. Bon ça ne veut pas fonctionner. J'ai copié le code plus haut, changé les paramètres et rien n'y fait. La scène se lance mais la pompe ne se déclenche pas. Les variables sont créés (1 x prédéfinie et 3 x globales) ainsi que les notifications. J'ai vérifié tous mes ID (pompe, thermomètre etc...). Je met le code pour vérification. --[[ %% autostart %% properties %% events %% globals --]] --**************************************** --*************PARAMETRAGE**************** local id_pompe = 570 local id_tel = 590 -- 13= tél JJ : téléphone sur lesquel envoyer une notif push (start et stop) local id_eau = 587 --**************************************** --**************************************** local sourceTrigger = fibaro:getSourceTrigger(); local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); function tempFunc() --fonction de filtration en ETE local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "10:30") ) ) then fibaro:debug("Je filtre"); fibaro:call(id_pompe, "turnOn"); fibaro:setGlobal("modefiltration", 1) fibaro:call(id_tel, "sendDefinedPushNotification", "566"); fibaro:sleep(3600*2*1000) -- au bout de 2 heures, prise de température pour gestion auto du nbe d'heures à filtrer selon temp de l'eau local temppiscine = fibaro:getValue(id_eau, "value") fibaro:setGlobal('tempref',temppiscine) -- test de la température : si > 27, filtration sur 22h30 de plus (=23h30 au total) sinon, règle BAROUDI if tonumber(temppiscine) > 27 then fibaro:debug("T° eau piscine > 27 ==> filtration continue") fibaro:setGlobal("modefiltration", 8) fibaro:call(id_tel, "sendDefinedPushNotification", "568"); local nbheuresafiltrer = 22,5 * 3600 * 1000 else fibaro:debug("T° eau piscine = " ..temppiscine .. " °C") local temppiscinearrondi = math.floor(tonumber(temppiscine)+ .5) local nbheuresafiltrerenh = ((tonumber(temppiscinearrondi)/2)-2) fibaro:debug("nb heures a filtrer = " .. nbheuresafiltrerenh) local nbheuresafiltrer = nbheuresafiltrerenh *3600 * 1000 -- on définit la variable dureefiltration = nb d'heures à filtrer fibaro:setGlobal("dureefiltration", nbheuresafiltrer) end fibaro:debug("Valeur de la variable _dureefiltration_ : "..fibaro:getGlobalValue("dureefiltration")); fibaro:sleep(tonumber(fibaro:getGlobalValue("dureefiltration"))-(3600*2*1000)); if fibaro:getGlobalValue("modefiltration") == "12" then fibaro:debug("Fin du mode auto mais CHOC déjà en cours") else fibaro:debug("Fin du timer, j\'arrête de filtrer"); fibaro:setGlobal("dureefiltration", 0) fibaro:call(id_pompe, "turnOff"); fibaro:setGlobal('tempref', 99) fibaro:setGlobal("modefiltration", 0) fibaro:call(id_tel, "sendDefinedPushNotification", "567"); end end setTimeout(tempFunc, 60*1000) end if fibaro:getGlobalValue("Saison") == "Eté" then --je filtre en mode ETE fibaro:debug("c\'est l\'été, cool !! :-)") tempFunc() else local temppiscine = fibaro:getValue(id_eau, "value") fibaro:debug("c\'est l\'hiver...!! :-(") -- test de la température : si < 2, filtration sur 24h, sinon 2h de 4h à 6h du mat if tonumber(temppiscine) < 2 then fibaro:debug("T° eau piscine < 2 ==> filtration continue") fibaro:call(id_tel, "sendDefinedPushNotification", "568"); --local nbheuresafiltrer = 23,5 * 3600 * 1000 fibaro:call(id_pompe, "turnOn"); fibaro:setGlobal('tempref', temppiscine) fibaro:debug("Je filtre en continu"); fibaro:setGlobal("modefiltration", 8) fibaro:sleep(23,5*3600*1000) fibaro:call(id_pompe, "turnOff"); fibaro:setGlobal("dureefiltration", 0) fibaro:setGlobal('tempref', 99) fibaro:debug("Fin du timer, j\'arrête de filtrer"); fibaro:call(id_tel, "sendDefinedPushNotification", "567"); fibaro:setGlobal("modefiltration", 0) --end elseif ( --à 4h du matin, j'active la filtration ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "04:00") ) ) then -- s'il y a un CHOC en cours --> priorité au CHOC : je ne fais rien. Sinon, je filtre 2h. fibaro:debug("je filtre en mode HIVER") if fibaro:getGlobalValue("modefiltration") == "12" then fibaro:debug("CHOC déjà en cours : la durée de filtration est celle définie par le CHOC") elseif fibaro:getGlobalValue("EdfTempoJour") == "1" then fibaro:call(id_pompe, "turnOn"); fibaro:debug("Je filtre"); fibaro:setGlobal("modefiltration", 1) fibaro:call(id_tel, "sendDefinedPushNotification", "566"); fibaro:sleep(1.9*3600*1000) fibaro:debug("Fin du timer, j\'arrête de filtrer"); fibaro:call(id_pompe, "turnOff"); fibaro:setGlobal("modefiltration", 0) --je ne teste pas s'il ya un CHOC en cours : il faudrait l'avoir déclenché entre 4h et 6H du matin... fibaro:call(id_tel, "sendDefinedPushNotification", "567"); end end end
ebtjjn Posté(e) le 15 février 2017 Auteur Signaler Posté(e) le 15 février 2017 Salut fredokl, je ne comprends pas : j'ai repris ton code et après changement du numéro des modules, ça marche chez moi... Qu'est ce que tu as en mode débug ? Julirn
fredokl Posté(e) le 15 février 2017 Signaler Posté(e) le 15 février 2017 (modifié) Salut, le debug me donnait ceci jusqu'à présent: [DEBUG] 23:10:39: c'est l'hiver...!! :-([DEBUG] 23:10:39: je filtre en mode HIVER et pas de démarrage de la pompe. Après pas mal de recherche j'ai vu qu'il y a aussi une variable prédéfinie "EdfTempoJour". Je pense que c'est une variable pour les heures creuses ou pleines alors j'en ai créé avec deux scènes, une pour le "1" et l'autre pour le "0". La variable est pris en compte par la scène. j'ai maintenant ceci dans le debug: [DEBUG] 23:10:39: c'est l'hiver...!! :-([DEBUG] 23:10:39: je filtre en mode HIVER[DEBUG] 23:10:39: Je filtre La pompe se déclenche, j'ai fait des essais en changeant l'heure et la valeur de la variable "EdfTempoJour". Mais, car il y a toujours un mais... La scène fonctionne uniquement quand j'appuis sur le bouton enregistré (la petite disquette), pourtant l'autostart est bien affiché dans l'entête. Je ne comprend pas. Modifié le 15 février 2017 par fredokl
ebtjjn Posté(e) le 15 février 2017 Auteur Signaler Posté(e) le 15 février 2017 (modifié) Attention, 2 autres choses : 1- il y a une ligne qui dépend du jour EDF tempo : supprime la : c'est la ligne 105 : fibaro:getGlobalValue("EdfTempoJour") == "1" then 2- tu as bien renseigné la variable prédéfinie avec lles accents et tout et tout... "Hiver" et "Eté" ? Dis moi. Edit : les messages se sont croisés!! lol les grands esprits!! Modifié le 15 février 2017 par ebtjjn
Messages recommandés