Décompte à la seconde / Widgets v4

Bonjour,

Je cherche à afficher le temps restant avant l’extinction de mes lumières temporisées par scénario. Les exemples que j’ai trouvé sur l’ancien Forum ou sur Community ne fonctionnent pas totalement car a chaque relance de la tempo, le widget superpose le nouveau décompte à l’ancien, ce qui devient très vite illisible.

Y-a-t-il un moyen avec les nouveaux Widgets V4 de créer ce type de décompte ? J’imagine ne pas être le seul à vouloir connaitre le temps avant de se retrouver dans le noir ? Comment avez vous fait ?

D’avance merci pour votre aide.

1 « J'aime »

Salut,

Tu as une base de code de widget que tu aurai récupéré à partager ?

À l’aveugle si le décompte se dédouble il suffit souvent d’ajouter .empty() juste avant les .append dans le code.

Oui, je viens de tester le code présent sur ce post : Plugin Compte à rebours - #4 par piaregistros

Je vais essayer d’ajouter le .empty() pour voir ce que cela donne.

Pas vu de .append dans le code de ce widget :face_with_monocle:

Y’a pas de .append dans ce code le souci est ailleurs… j’essaye d’y penser bientôt ça m’intéresse d’y jeter un coup d’oeil.

Merci pour ton aide !

Bonjour @Salviaf, as tu eu un moment pour regarder ? As tu une idée d’une autre façons d’obtenir un décompte à la seconde ?

Merci pour ton aide.

1 « J'aime »

Salut à tous

Vous savez si quelqu’un a réussi à trouver une solution pour la v4 ?

A+ :slight_smile:

Bonjour.
Ca m’interesse aussi d’avoir la mise à jour de ce widget
il ne fonctionne plus non plus en 3.3.39

bonjour, on va réfléchir ensemble
on donne la variable timestamp la valeur (format timestamp) « 1582235770 »

var timestamp = parseFloat(_options.display_value);
ensuite dans le code
if (timestamp > 0) {

elle le sera toujours
donc si au lieu de 0 on y met le timestamp actuel

if variable > temps format timestamp

ScrollPage

<!-- WIDGET SPECIFIQUE  widget "tps_restant"

Modifications : 
_options.display_value > javascript_timestamp (ligne 33
Mise à jour :
- Le 2020/2/20 : conforme jeedom v4.0.40

-->
<div class="cmd cmd-widget" style="min-width:90px;min-height:50px;margin-right: 5px;margin-left: 5px;padding:0px !important;" data-type="info" data-subtype="numeric" data-cmd_id="#id#" title="Valeur du #valueDate#, collectée le #collectDate#">
	<center> 
	<div class="title #hide_name#">
		<div class="cmdName">#name_display#</div>
	</div>

	<div>
	<span style="line-height: 32px;font-size: 2.5em;font-weight: bold;" id="countdown_#id#_decompte">--</span>
	</div>
    </center>
	<script>
//var now = null;
    //  	console.log($('#countdown_#id#_decompte').text); 

        jeedom.cmd.update['#id#'] = function(_options){

var thisdate = new Date();      
var actualdate = (thisdate.getTime());
var timestamps = actualdate / 1000;
var javascript_timestamp = Math.round(timestamps);

//	console.log("temp_reel "+javascript_timestamp); 
//	console.log("temp_valeur "+_options.display_value); 
          
var timestamp = parseFloat(_options.display_value);
		$(function (e) {
			if (timestamp > javascript_timestamp) {
      //       var tps_restant == null;

              interval#id# = setInterval(function () {
					var now = (new Date()).getTime(); // On déclare la date d'aujourd'hui.		
              var tps_restant =timestamp*1000 - now; // Temps restant en millisecondes

					// console.log("interval("+intervalId+")");

					if (!$('#countdown_#id#_decompte').length || timestamp < javascript_timestamp || tps_restant < 0) {
						// console.log("clearInterval("+intervalId+")");
						clearInterval(interval#id#);
						$('#countdown_#id#_decompte').text('--');
					} else {
                      
                      
                      
					  //============ CONVERSIONS
					  var s_restantes = tps_restant / 1000; // Secondes restantes
					  var i_restantes = s_restantes / 60; // Minutes restantes
					  var H_restantes = i_restantes / 60; // Heures restantes
					  
					  s_restantes = Math.floor(s_restantes % 60); // Secondes restantes
					  i_restantes = Math.floor(i_restantes % 60); // Minutes restantes
					  H_restantes = Math.floor(H_restantes); // Heures restantes
					  //==================

					  //============ FORMATTAGE
					  s_restantes = s_restantes < 10 ? "0"+ s_restantes : s_restantes;
					  i_restantes = i_restantes < 10 ? "0"+ i_restantes : i_restantes;
					  H_restantes = H_restantes < 10 ? "0"+ H_restantes : H_restantes;
					  //==================

					  if (H_restantes > 0) {
                        $('#countdown_#id#_decompte').text(H_restantes + ":" + i_restantes + ":" +s_restantes);
                      } else {
                        $('#countdown_#id#_decompte').text(i_restantes + ":" +s_restantes);
                      }  
					}
				}, 1000);
			}else {
			
						clearInterval(interval#id#);
                     
						$('#countdown_#id#_decompte').text('--');
;
              e.stopPropagation();
            }
		});
        }
  jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});

	</script>
</div>

reste à annuler la fonction ci celle ci est déjà activé

1 « J'aime »

Bonjour,

Tout d’abord, merci pour ton aide.

Je dois certainement mal m’y prendre mais j’ai toujours les compteurs qui se superposent à l’écran. Le décompte à la seconde fonctionne bien, mais à chaque relance l’ancien compteur continue à fonctionner en plus du nouveau.

Tu dis à la fin de ton message qu’il faut annuler la fonction si celle ci est déjà activée. Peux tu préciser comment faire STP ?

Sur ta capture (chouette d’ailleurs, quel outil utilises tu ?), que se passe-t-il si tu lances 2 fois la tempo dans faire de STOP ?

D’avance merci,

Je vais me répondre car j’ ai trouvé 1 solution pour arrêter le compteur en mettant la valeur à 0 avant de relancer un décompte.

N’y a-t-il pas moyen de le faire dans le code du Widget ?

Encore merci pour ton aide en tout cas, et sur ta dernière phrase qui a éclairé ma lanterne ! :bulb:

bonjour de rien

j’utilise les logiciels :
« active presenter » enregistre ton écran → tu as 2 options : full screen ou partie d’écran
je délimite la partie de l’écran
une fois la vidéo faite je converti en gif via « format factory »

là je n’ai que fait une bricole à l’arrache (redondamce de maintenant) pour valider le fonctionnement v4
en faite faut le revoir en entier (via fonction start,stop) et verif de fonctionnement en cours pour intégré la prolongation.

Salut à tous

Un grand merci @ajja17orange, ça fonctionne super :smiley:

A+ :slight_smile:

1 « J'aime »

Re salut à tous

Je ne sais pas si ça vous le fait également, mais en haut à droite dans mon navigateur, quand le widget se lance, j’ai un triangle avec un point d’exclamation indiquant une erreur java script :frowning:

A+

1 « J'aime »

Bonjour,

Oui idem pour moi j’ai une erreur java dans mon design :
« Uncaught ReferenceError: interval4414 is not defined »

Par contre en changeant « e.stopPropagation(); » par « return false; » je n’ai plus l’erreur « Uncaught TypeError: e.stopPropagation is not a function » quand je change d’un design à l’autre mais je ne suis pas assez doué pour savoir si j’ai bien fait de changer ce paramètre.

A+

Salut @Arno44

Perso, j’ai réalisé la modification que tu as évoquée.
Aucune amélioration de mon coté. Toujours le message d’erreur :frowning:
Dommage :disappointed_relieved:

A+ :wink:

Salut à tous

Pour avoir quelque chose de fonctionnel, j’ai bricolé vite fait un truc sur la base des possibilités que nous offre Jeedom. On peut surement mieux faire, mais pour l’instant ça fonctionne.

1- Afin de ne pas retoucher dans un 1er temps à mes scénarios, j’ai juste ajouté un calcul au niveau de la variable info du virtuel affichant la valeur de décompte

#value# - #timestamp#

Annotation 2020-04-05 120026

2- J’ai créé un widget numérique sur lequel j’ai activé l’option « time widget »

Si ça peut aider :wink:

A+ :slight_smile:

Merci @LACO pour ton aide.

Le pb, c’est qu’en activant le « time widget » on obtient un incrément toutes les 10 secondes qui représente la durée sans changement de valeur.

On cherche au contraire à avoir un décompte pour obtenir le temps qu’il reste avant extinction de la lumière (par exemple).

Après je n’ai peut être pas compris ta solution.

Bonjour @gaston78

Tout à fait. Cette solution est juste un « palliatif » avec les moyens du bord. :frowning: J’ai été trop rapide, j’aurais du expliciter un peu plus.

Si tu regardes bien mon exemple, j’affiche la valeur de la temporisation, et juste à côté le temps écoulé.
Donc ça permet juste de faciliter la situation dans le temps en mettant ces 2 valeurs en corrélation.

C’est pas top. Mais je n’ai pas trouvé mieux pour l’instant pour avoir quelques choses sans erreur :frowning:

A+