pepite Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 :60: :60: :60: :13: :13: :13:
BenjyNet Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 Steven, tu peux expliquer pourquoi tu fais des boucles while true do dans les main loop ?
Steven Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 Si tu ne fais pas de boucle, ton code va s’exécuter toutes les 3 secondes. Dans certain cas cela ne dérange pas du tout. Dans le cas ou tu fais des appels externe (http) cela devient désagréable (consommation de la bande passante) voir catastrophique si tu as un nombre d'appels journalier limités (par exemple les API Wundergroud ou Netatmo). Alors comment faire pour faire un appel toutes les 30 minutes par exemple ? A l'époque, de mémoire, chaque déclenchement du main loop était une nouvelle instance de ce dernier, il n'y avait donc aucun état mémorisable entre chaque exécution (hormis une variable globale). On utilisait donc une boucle pour ralentir l'exécution du main loop selon nos besoins. Aujourd'hui, c'est différent (ou ce l'était depuis le début mais j'avais pas fait attention) et on pourrait mettre un code du style : -- 1ère fois que le main loop s'exécute, on crée une variable nommée "instance" car elle n'existe pas. Elle existera au 2ème passage donc ne sera pas recrée. if (not instance) then -- on indique la fréquence d'execution souhaitée instance = { lastrun = 0, every = 30 } fibaro:debug("first run") end -- on vérifie la différence entre cette exéction et la dernière (stocké dans instance.lastrun) diff = os.date("*t", os.difftime(os.time(), instance.lastrun)) -- si la différence en minutes et supérieure ou égale à la fréquence souhaitée (instance.every) if (diff.min >= instance.every) then -- TON CODE --- fibaro:call(fibaro:getSelfId(), "pressButton", "26") -- FIN DE TON CODE --- -- on stock l'heure de la nouvelle exécution instance.lastrun = os.time() fibaro:debug("pressed") end NB : Ne pas oublier que le main loop est executé toutes les 3 secondes (aujourd'hui), donc avec ce genre de code, il est impossible de lui dire de s'exécuté après 5 secondes puisque la prochaine exécution du main loop aura lieu à la 6ème secondes. 1
pepite Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 j'aime bien ce code ;-) pour le mainloop si je comprends comment l'utiliser ;-) merciii
Steven Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 Il y a aussi la méthode barbare mais moins coà»teuse car on ne compare pas de date et on joue sur le fait que le main loop est lancé toutes les 3 secondes. Attention, Fibaro a déjà changer cette valeur une fois. On compte simplement chaque exécution du main loop if (not instance) then instance = { index = 0 } end instance.index = instance.index + 1 -- 600 = 30 minutes (soit 1800 secondes) / 3 car le main loop est exécuté toutes les 3 sec. if (instance.index >= 600) then fibaro:call(fibaro:getSelfId(), "pressButton", "26") instance.index = 0 end code non testé
Steven Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 @pepite J'ai ajouté des commentaires dans le post précédent pour une meilleure compréhension ... c'est vrai que j'avais un peu "jetter" le code, désolé. 1
mprinfo Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 Je préfère comparer l'heure c'est plus fiable sur du long terme mais c'est une solution Envoyé de mon SM-G900F en utilisant Tapatalk
pepite Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 YEs, avec les commentaires, je comprends plus vite ;-) Merci !! Je suis comme @mprinfo, je trouve que la comparaison avec l'heure est plus fiable et plus durable dans le temps, surtout si tu dis que Fibaro a deja changé la valeur de l'index ;-) j'essaie de mettre ce code dans un coin de ma petite tete ;-)..ce qui est loin d'etre gagne lol 1
Steven Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 Il existe sà»rement d'autre solution pour traiter ce genre de cas ... perso, j'ai encore quelques while loop qui traine sinon je n'utilise que GEA. Pour tout ce qui est de durée inférieur à 30 minutes, il suffit de terminer par un fibaro:sleep() et le tour est joué, le problème ne se pose qu'au delà des 40mn (de mémoire) ou le "main loop" se casse la figure et ne fonctionne plus.
BenjyNet Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 Ok merci des précisions, j'avais aussi repéré ce genre de code dans le main loop du VD meteo alerte !
flechg Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 Bonsoir a tous juste une petite question en passant ne serait t il pas possible de rajouter au module la lecture d un calendrier google par ex pour la gestion des congés en direct merci encore s
flechg Posté(e) le 29 septembre 2015 Signaler Posté(e) le 29 septembre 2015 Re bonsoir voila demain je suis en congé et j ai mis cela if ("2015-09-30"<=today and today<"2015-10-01") then vacances=true -- congé j ai essayé ca aussi if ("2015-09-30"<=today and today<"2015-09-30") then vacances=true -- congé et ca me met jour chômé oui mais même pour jeudi alors que jeudi je travail une idée merci encore
cybersquat Posté(e) le 11 novembre 2015 Signaler Posté(e) le 11 novembre 2015 Hello tout le monde Ca fait un bail, taf taf taf ! Depuis que j'ai mis à jour la home center avec le dernier firmware, il y a plein de chose qui ne fonctionne plus, dont celui-ci, y a t-il eu des modifs a faire sur le script ? A bientot ALAIN
flechg Posté(e) le 3 janvier 2016 Signaler Posté(e) le 3 janvier 2016 Bonsoir et bonne et heureuse année 2016 je voulais avoir une précision voila j ai le VD qui me marquait hier a midi dimanche jourchome oui et lundi jourchome oui et après minuit jourchome non est ce normal merci encore
HANSOLO Posté(e) le 4 janvier 2016 Auteur Signaler Posté(e) le 4 janvier 2016 A priori pas eu de problème de mon coté: Dimanche: Date du jour chomé = oui, date du jour+1 chomé = non Lundi : Date du jour chomé = non, date du jour+1 chomé = non
mprinfo Posté(e) le 4 janvier 2016 Signaler Posté(e) le 4 janvier 2016 Idem pour moi aucun soucis Envoyé de mon SM-G900F en utilisant Tapatalk
flechg Posté(e) le 4 janvier 2016 Signaler Posté(e) le 4 janvier 2016 Merci HANSOLO Hier moi j avais Dimanche: Date du jour chomé = oui, date du jour+1 chomé = oui Et aujourd'hui pas de pb Lundi : Date du jour chomé = non, date du jour+1 chomé = non Mais tout àfonctionné normalement il y a juste un pb d affichage Peut-etre il faut modifier quelque chose Dans le vd Merci encore
Sakkhho Posté(e) le 4 janvier 2016 Signaler Posté(e) le 4 janvier 2016 Merci HANSOLO Hier moi j avais Dimanche: Date du jour chomé = oui, date du jour+1 chomé = oui Et aujourd'hui pas de pb Lundi : Date du jour chomé = non, date du jour+1 chomé = non Mais tout à fonctionné normalement il y a juste un pb d affichage Peut-etre il faut modifier quelque chose Dans le vd Merci encore idem chez moi Hier c'etait pas bon. j'ai remarqué ce comportement à chaque fin de vacances. dans la formule des dates il y a < 04/01/2016 par exemple pour hier et le 03/01/2016, il ne l’interprète pas comme il faut.
BenjyNet Posté(e) le 4 janvier 2016 Signaler Posté(e) le 4 janvier 2016 C'est normal non ? Vous testez si Jourchomé ET VG Vacances" On" alors jour chomé "On" ? Donc àpartir du moment où la VG Vacances est On, le jour sera chômé ! Heuu je suis clair ?
Sakkhho Posté(e) le 4 janvier 2016 Signaler Posté(e) le 4 janvier 2016 hier Dimanche 03, le VD disait que Lundi 04 est chomé, c'est pas normal. 1
mprinfo Posté(e) le 4 janvier 2016 Signaler Posté(e) le 4 janvier 2016 Punaise je suis au travail Envoyé de mon SM-G900F en utilisant Tapatalk
BenjyNet Posté(e) le 4 janvier 2016 Signaler Posté(e) le 4 janvier 2016 @Sakkhho Bah si c'est normal, le test c'est si "jourchömé ET vacances" et "jourchome+1 ET vacances"
mprinfo Posté(e) le 4 janvier 2016 Signaler Posté(e) le 4 janvier 2016 Il faut que tu sois plus clair et expliquer vacances scolaires Envoyé de mon SM-G900F en utilisant Tapatalk
flechg Posté(e) le 4 janvier 2016 Signaler Posté(e) le 4 janvier 2016 Idem que Sakkhho normalement le dimanche 3 jourchome oui et le lundi soit jourchome j+1= non
Sakkhho Posté(e) le 4 janvier 2016 Signaler Posté(e) le 4 janvier 2016 @Sakkhho Bah si c'est normal, le test c'est si "jourchà¶mé ET vacances" et "jourchome+1 ET vacances" Benjy, j'ai pas de VG Vacances moi. Le VD Jour Chomé doit fonctionne tout seul normalement. Lundi 04 est (malheureusement) un jour non chomé pour quasiment tout le monde je suppose, donc le VD aurait du dire hier, Lundi 04 jour chomé non. Comme ca fonctionne tres bien pour les weekend classique, avec la reprise le lundi
Messages recommandés