jjacques68 Posté(e) le 16 mars 2020 Signaler Posté(e) le 16 mars 2020 Bon voilà, j’avance avec cette box... petit à petit... Il y aurait des chose à redire... mais on va être patient et faire avec... la j’ai eu un cas étrange : J’ai une scène qui tourne (devrai tourner) H24 7/7 grâce à une boucle d’un setTimeout. Et visiblement elle s’est arrêtée pour une raison inconnue et rien dans le debug. Il ‘n’y avait aucune raison (par code) que celle-ci s’arrête ! ! ! ! d’où ma question : est - il possible qu’ils aient limité, dans le temps, le fonctionnement des scènes ?
Krikroff Posté(e) le 16 mars 2020 Signaler Posté(e) le 16 mars 2020 Tu peux poster ta scène ? Pourquoi un setTimeout ?
jjacques68 Posté(e) le 16 mars 2020 Auteur Signaler Posté(e) le 16 mars 2020 (modifié) désolé ne pas avoir répondu plus tôt... on est en mode guerre au boulo... alors il s’agit d’une scène pour le réveil : elle allume une des lampes de chevet progressivement à une heure spécifique (15 minute avant l’heure réglée par QA) il y a 3 boucles : la principale, avec le setTimeout qui boucle toutes les minutes afin de savoir quand déclencher (classique quoi) une petite première qui va allumer progressivement la lampe. une seconde qui va tourner pendant une heure avec la lampe allumée, puis l’éteindre (pour éviter que ça reste allumé si je plane) pour les 2 dernières, il est possible d’en sortir en allumant la lumière au max (99 %). Cela peut se faire avec un double clique sur l’interrupteur. ----------------------------------------------------------------------------------------- -- 15/03/2020 - V1 : Réveil Droite (Rt) ----------------------------------------------------------------------------------------- local i,j local LumiereG = 118 local LumiereD = 121 print("Réveil Rt - start") ------------------------------------------------------------------------------------- function Reveil() local HeureReveilG = fibaro.getGlobalVariable("WakeUpLt") --type string local HeureReveilD = fibaro.getGlobalVariable("WakeUpRt") --type string print("Reveil Rt - réveil à "..HeureReveilD) --si l'heure correspond avec 15 minutes d'avance if os.date("%H:%M", os.time()+15*60) == HeureReveilD then print(os.date("%d/%m/%Y - %H:%M").." - début du réveil") --boucle de 1 à 98 = setValue du module, sort si ampoule au max (99) i=1 while tonumber(fibaro.getValue(LumiereD, "value")) < 98 do --envoie la valeur au module fibaro.call(LumiereD, "setValue", i) --incrémente la valeur i=i+1 --attend 9 seconde (qui me fera au total 9*98 soit environ 15 min) fibaro.sleep(9*1000) end --au cas où je suis sorti de la boucle avant la fin, fixe à 98 % print(os.date("%d/%m/%Y - %H:%M").." - Allumé au max") fibaro.call(LumiereD, "setValue", 98) -- allume à fond -- allume l'autre si même heure if HeureReveilG == HeureReveilD then fibaro.call(LumiereG, "setValue", 98) end --boucle d'attente tant qu'on a pas attendu 1 heure après le reveil, ou que la lumière n'a pas été allumé au max while os.date("%H:%M", os.time()-(60*60)) < HeureReveilD and tonumber(fibaro.getValue(LumiereD, "value")) <= 98 do fibaro.sleep(5000) end --eteint si 1 heure après Réveil ou arrêt manuel print(os.date("%d/%m/%Y - %H:%M").." - Interruption car lumière éteinte ou > 1 heure après réveil") fibaro.call({LumiereD,LumiereG}, "turnOff") end fibaro.setTimeout(60*1000, Reveil) end -------------------------------------------------------------------------------------------------------------------- Reveil() et franchement, je vois pas ce que j’ai merdé dedant. en temps normal, toutes les minutes, j’ai une trace dans le debug. Ce matin, y avait rien. Modifié le 16 mars 2020 par jjacques68
Krikroff Posté(e) le 16 mars 2020 Signaler Posté(e) le 16 mars 2020 il y a 29 minutes, jjacques68 a dit : désolé ne pas avoir répondu plus tôt... on est en mode guerre au boulo... Je vois bien ce que tu veux dire pfffff il y a 29 minutes, jjacques68 a dit : la principale, avec le setTimeout qui boucle toutes les minutes afin de savoir quand déclencher (classique quoi) Ok cette fameuse histoire de réveil ou il faudrait pouvoir utiliser une variable global dans les conditions c'st bien cela ? Alors, ce que je pense: - Il me semble très plausible (voir j'en suis convaincu) que le garbagecollector recycle le pool dans lequel est ta scène et donc le timer est tué. C'est même une pas trop mauvaise pratique évitant ainsi à Fibaro de faire trop de support .... - La solution: remplace ton setTimeout qui boucle toutes les minutes par un cron et conserves le reste
jjacques68 Posté(e) le 16 mars 2020 Auteur Signaler Posté(e) le 16 mars 2020 ok mais si je veux changer l’heure ?
Krikroff Posté(e) le 16 mars 2020 Signaler Posté(e) le 16 mars 2020 L’idée, tu fais une scène avec un interval d’une minute tout le reste est fait dans ta scène
jjacques68 Posté(e) le 16 mars 2020 Auteur Signaler Posté(e) le 16 mars 2020 ah oui il me semble qu’on peut boucler avec CRON, c’est ça dont tu parles ?
Krikroff Posté(e) le 16 mars 2020 Signaler Posté(e) le 16 mars 2020 L’avantage c’est qu’il tournera toujours
jjacques68 Posté(e) le 16 mars 2020 Auteur Signaler Posté(e) le 16 mars 2020 oui j’essayerai ça... je pense que l’on va avoir beaucoup de temps ces prochains jours...
Messages recommandés