Aller au contenu

Jour Chômé


HANSOLO

Messages recommandés

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.

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

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é

Lien vers le commentaire
Partager sur d’autres sites

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

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

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

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

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 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

@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

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...