Afficher le temps restant sur un scenario

Bonjour,
J’ai un scenario qui me sert de temporisation.
Sur fullykiosk ont choisi une valeur via mode :
15 - 30 - 45 - 60 puis on appuie sur un bouton virtuel pour lancer le scenario, ce scénario s’exécute ensuite pendant 15 min - 30 min … 60 min …

Tout simplement :
ON
Sleep 30 min
OFF

J’aimerai afficher sur fullykiosk (donc dans design) le temps restant dans le scenario …

Merci

Bonjour,
Jeedom ne vous donnera pas cette information donc vous devez la calculer vous même. Par exemple vous calculez l’heure de fin prevue que vous stockez et ensuite vous saurez calculer la différence de temps entre l’heure actuelle et l’heure de fin.

D’autres part c’est une mauvaise idée de faire des sleep pendant si longtemps. Le sleep est à réserver pour quelques secondes, moins d’une minute.
Le sleep bloque les ressources machine pour rien, vous augmentez la charge inutilement.
Vous devriez mettre un bloc DANS x min.

1 « J'aime »

@Mips un sleep de 30min dans un scénario va bloquer l’exécution de tous les autres scénarios pendant 30min ?

Non ce n’est pas ca.
Pour simplifier: ça prend une « place ». Le nombre de places totales dépend de beaucoup de chose, cpu, ram…
Quand il n’y en a plus, soit certains processus plantent ou sont plus lent et cela arrive plus vite que ce qu’on ne pense. Ce ne sont pas juste nos 3 scénarios qu’il faut prendre en compte mais tout ce qui tourne sur la machine.

Le sleep est toujours un problème, dans tous les languages de programmations et cela depuis que l’informatique existe probablement.

Ici on a une solution simple, le bloc DANS qui lui n’utilise aucune ressource (jusqu’à ce que son exécution démarre bien sûr).

1 « J'aime »

Merci pour tes précisions. J’avais vu souvent sur le forum en bonne pratique d’éviter les sleep, mais je t’avoue que les raisons étaient un peu obscures… j’y vois plus clair maintenant ! :wink:

Bonjour à tous !

Pour le « Sleep » (@Mips / @alexcrp): Je vous invite à vérifier, mais âpres avoir tester, je peux dire
« l’histoire des sleep qui prennent des ressources est une FABLE » !!!
Ou plus précisément, des ressources, oui, mais il faut préciser « ressources insignifiantes ». Pour moi, c’est un truc qui nous viens « d’avant ». D’avant quand la puissance de calcul d’une simple box Atlas aurait pris l’espace de ma chambre, quand en l’an 1998 (c’est pas si loin) j’avais une énorme tour pour un Pentium II 233 MHz, 64 Mo de mémoire vive qui comparé au processeur de l’Atlas aurait un facteur de puissance de calcul exprimé en milliers / millions ? (j’ai voulu les comparer, mais trop vieux, pas trouvé…).
Si vous voulez essayer, vous pouvez reproduire ce scénario (qui fait des sleeps toute une journée), le copier / collé 10 fois, les lancer. Le lendemain, comparer avec les ressources CPU / mémoire / etc. de la veille, et vous ne verrez… AUCUNE différence !


Bref: lachez vous sur les sleeps, en 2021, on peux y aller à fond ! :slight_smile:

Pour répondre à la question de base (@micka260)

Voici le principe de base d’un programme qui est appelé avec un temps de pose (sous forme de tag) et qui incrémente 2 variables qui renvoient le temps restant en minutes ou secondes.
Tu peux bien sur le perfectionner en faisant par exemple une boucle toute les 10 secondes et en renvoyant le temps restant au format Minutes : Secondes ou… l’infini de Jeedom avec un peu de temps / test devant toi. (notamment avec l’opérateur time_op() et formatTime() )
Au moins avec ça t’as une bonne base pour comprendre la logique puis la perfectionner.

Scénario :

Log :

Si tu crées un virtuel de type information (ici = variable(Temps d’attente restant en minutes)), on obtient ce graphique / historique:

1 « J'aime »

Comme tu penses…

  1. ta méthode de test est complétement amateur… cela n’a aucun sens de prendre une mesure isolée
  2. qu’importe la puissance que tu as, cela monopolise toujours la même ressource hein… mais parce que les gens on 64Go de ram sur leur machine on n’est plus obligé d’optimiser un code? n’importe quoi
    donc ce qui est vrai quand tu dois gérer des milliers de transactions par secondes est vrai pour un scénario sur jeedom, l’échelle est différente c’est tout; et tout le monde ici ne fait pas tourner jeedom sur une machine puissante (et qui fait p-e d’autres choses)
  3. last but not least, il existe une alternative simple et qui permet le même objectif mais plus optimisé, donc pourquoi encourager un mauvais comportement?
2 « J'aime »
  1. Car je n’ai pas de preuve que ça en soit un !
    J’ai fais des tests (pour info 10 scénarios lancés 10 fois chacun en multi-lancement. Donc 100 sleep qui tournent toute une journée !!) et je n’ai rien vu ! Mon test est Amateur ? Montre moi un test, reproductible qui prouve tes dires, et je prends. C’est mon coté cartésien, Sorry !

Je ne suis pas assez callé pour savoir se qui se passe en bas niveau / utilisation physique des composants. Un « A » est-il géré de manière tres différente d’un « Sleep » dans le procésseur / la mémoire ? Un « A » est en fait équivalent un « sleep » au niveau pros / mémoire, dont simplement on change la forme de demande A: 1 minutes = Sleep 60 ? Ou le traitement des 2 est tres différents ?
Par exemple si le « A » demande une mise en memoire de quand on re-lance et pas le « sleep » alors le A consomme plus de mémoire vive que le Sleep ?
Dans un sleep, le processeur coupe sa tache et libère l’espas de calcul occupé ? Ou non, l’espace n’est pas libéré ?
Qui à le niveau pour savoir répondre à ce qui se passe vraiment entre Jeedom / Linux / gestion bas niveau / jusqu’a la gestion des ressources processeur et autre traitement des taches en temps réel / mémoire vive / cache processeur de niveau L0, L1,L2, pour répondre à la question
"Qu’elle la différence de puissance / énergie, et allocation des différent niveau de mémoire, utilisée entre un « A » et un « SLEEP » ???
Pas moi, et je soupçonne que la réponse soit « peu de gens sur la planète » !

  1. dans le scénario proposé je n’ai pas d’alternative (si tu en à une je suis preneur !) dans le sens où j’utilise ce type de boucles avec des sleeps pour mes lumières auto, qui peuvent être coupées par d’autre chose.
    Si j’utilisais des « A » je ne pourrais pas simplement faire un STOP sur le scénario (quand je lance la lumière ne manuel par exemple). Je devrais faire un STOP, Puis le relancer en arrêtant le prochain « A » (remove_inat) puis lancer un STOP. C’est également gourmand. Plus moins ?? Ne n’ai pas la réponse / preuve. Par contre il est absolument certain que je me compliquerais la vie.

Bref, je fais pas ça comme une « mauvaise pratique » mais comme ce qui me parait le plus optimisé dans mon cas (ou mon Jeedom n’ai pas responsable de mes échanges de trading haute fréquence) !
PS: les ressources Jeedom sont précieuse mais mon TEMPS LIBRE aussi !
Dans la balance « choisir entre un A et un SLEEP » j’intègre aussi cette variable !!

1 « J'aime »

Merci pour cette précision, je vais donc faire les modifications avec le bloc DANS
j’avoue que j’ai beaucoup de sleep … je n’ai jamais été bloqué car derrière mon NAS et un NAS maison avec un i3 8800 et 8Go de RAM DDR4 mais c’est pas une raison pour codé avec les pieds …

MERCI ENCORE