Widget Décompte à la seconde (tps_restant)

Bonjour,

j’ai suivi les étape mais pour autant mon virtuel reste inerte … :open_mouth:

le code du widget :

<!--    CUSTOM WIDGET "tps_restant_v4.3"
Community link:     https://community.jeedom.com/t/widget-decompte-a-la-seconde-tps-restant/99012
Updated on:         2023-01-08
Versions supported: Jeedom v4.3
Last Modification:  use v4.3 js (jeeFrontEnd, jeedom.cmd.addUpdateFunction, jeedom.cmd.refreshValue)
-->
<div class="tooltips cmd cmd-widget" data-type="info" data-subtype="numeric" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
	<div class="title #hide_name#">
		<span class="cmdName">#name_display#</span>
	</div>
	<div class="content-sm">
		<div class="state"></div>
	</div>
	<script>
		jeedom.cmd.addUpdateFunction('#id#', function(_options) {
			$('.cmd[data-cmd_id=#id#]').attr('title', '{{Date de valeur :}} '+_options.valueDate+'<br/>{{Date de collecte :}} '+_options.collectDate);
			$('.cmd[data-cmd_id=#id#]').attr('interval', );
			if ($('.cmd[data-cmd_id=#id#]').attr('interval')) {
				clearInterval($('.cmd[data-cmd_id=#id#]').attr('interval'));
				$('.cmd[data-cmd_id=#id#]').removeAttr('interval');
			}
			var timestamp = parseFloat(_options.display_value);
			if (timestamp > 0) {
				$('.cmd[data-cmd_id=#id#]').attr('interval', setInterval(function () {
					var dateLoc = new Date;
					var time_left = timestamp * 1000 - (dateLoc.getTime() + (dateLoc.getTimezoneOffset() + jeeFrontEnd.serverTZoffsetMin) * 60000 + jeeFrontEnd.clientServerDiffDatetime);
					if (!$('.cmd[data-cmd_id=#id#] .state').length || timestamp < 0 || time_left < 0) {
						if ($('.cmd[data-cmd_id=#id#]').attr('interval')) {
							clearInterval($('.cmd[data-cmd_id=#id#]').attr('interval'));
							$('.cmd[data-cmd_id=#id#]').removeAttr('interval');
						}
						$('.cmd[data-cmd_id=#id#] .state').empty();
					} else {
						//============ CONVERSIONS
						var s_left = time_left / 1000;
						var i_left = s_left / 60;
						var H_left = i_left / 60;
						s_left = Math.floor(s_left % 60);
						i_left = Math.floor(i_left % 60);
						H_left = Math.floor(H_left);
						//============ FORMATTING
						s_left = s_left < 10 ? "0"+ s_left : s_left;
						i_left = i_left < 10 ? "0"+ i_left : i_left;
						H_left = H_left < 10 ? "0"+ H_left : H_left;
						//============ DISPLAY
						if (H_left > 0) {
							$('.cmd[data-cmd_id=#id#] .state').empty().append(H_left + ":" + i_left + ":" +s_left);
						} else {
							$('.cmd[data-cmd_id=#id#] .state').empty().append(i_left + ":" +s_left);
						}
					}
				}, 1000));
			} else {
				if ($('.cmd[data-cmd_id=#id#]').attr('interval')) {
					clearInterval($('.cmd[data-cmd_id=#id#]').attr('interval'));
					$('.cmd[data-cmd_id=#id#]').removeAttr('interval');
				}
				$('.cmd[data-cmd_id=#id#] .state').empty();
			}
		});
		jeedom.cmd.refreshValue([{cmd_id :'#id#',display_value: '#state#', valueDate: '#valueDate#', collectDate: '#collectDate#', alertLevel: '#alertLevel#', unit: '#unite#'}]);
	</script>
</div>

le resultat reste comme ca :
image

Peu importe le bouton sur lequel je clique :frowning:
Merci d’avance de ton aide :pray:

Hello,

Il ne faut pas utiliser #[Compteur]#, mais la commande complète, cf :

Bad

1 « J'aime »

Ah ok j’avais pas vu ca dans l’exemple c’est clair je vais tester merci

Merci tout fonctionne maintenant ::slight_smile:

1 « J'aime »

Bonsoir,

J’ai suivi toutes les etapes pour creer ce widget sur une V4.4. Le compte a rebours fonctionne bien. Par contre la valeur d’état du compteur affiche une valeur a 10 chiffres lorsque le compte a rebours est terminé.

Est-ce normal ?

MErci

Il suffit de ne pas afficher le timestamp Compteur

Bonjour Dan_73,

Merci pour ton aide. Pas sur de comprendre comment ca pourrait résoudre le problème. J’ai néanmoins essayé, ca ne marche pas. Arrivé à zero la valeur du compteur n’est pas de 0 mais encore une valeur à 10 chiffres. Peu etre que je ne comprends pas le principe d’utilisation ?

Mon but est de récupérer la valeur d’état du compteur pour l’utiliser dans un scénario. Quand le décompte arrive à zero alors je lance une action.

Il faudrait donner une copie d’écran entière, c’est à dire où on puisse aussi lire les formules.

Bonjour Tonio16 -

Les formules :

-5mn : (#timestamp# >= #[Maison][Compteur][Compteur]# - 300) ? 0 : (#[Maison][Compteur][Compteur]# - 300)

+5sec : (#timestamp# <= #[Maison][Compteur][Compteur]#) ? (#[Maison][Compteur][Compteur]# + 5) : (#timestamp# + 5)

+10mn : (#timestamp# <= #[Maison][Compteur][Compteur]#) ? (#[Maison][Compteur][Compteur]# + 600) : (#timestamp# + 600)

Au temps pour moi, l’info Compteur doit bien être affichée, j’ai vérifié chez moi.
Par contre as-tu bien appliqué le widget Customtemp/Décompte à ton info compteur ?

image

Re

Oui c’est bien appliqué. Le widget fonctionne. Mais la valeur d’état du compteur affiche une valeur à 10 chiffres.

Capture d’écran 2025-09-23 à 13.12.11

Je ne comprends pas ta commande des -5mn
J’ai testé de mon coté et je n’obtiens rien.
Tu obtiens un décompte avec -5mn ?

Mon but est de récupérer la valeur d’état du compteur pour l’utiliser dans un scénario. Quand le décompte arrive à zero alors je lance une action.

Sinon pour ce que tu veux faire, ne serait-il pas plus simple d’utiliser un "DANS" dans ton scénario pour déclencher tes actions après X mn ?
En tout cas je ne vois pas ce qui passe à 0 une fois le décompte fait.

Bonjour @Cyssou40,

Oui, c’est le WIDGET qui affiche le décompte, la valeur à 10 chiffres ne change pas pendant le décompte, c’est l’heure de fin du décompte.

Cf : Widget Décompte à la seconde (tps_restant) - #17 par Bad

Ce widget n’est pas fait pour piloter un scénario de cette façon, utilise un « DANS » ou un « A » à la place.

Bad

Merci à tous de m’aider‚

Ok je comprends mieux la valeur à 10 chiffres.

Le scénario que j’ai créé se déclenche par le compteur

J’utilise ensuite le compteur de cette façon dans un scenario « A ». Mais ca ne fonctionne pas.
A la fin du décompte rien ne se passe.

Peux tu fournir les logs du scénario stp

Bonsoir Bad‚

Voici le Log du scénario

Essaie en convertissant ton timestamp (ta valeur à 10 chiffres) en valeur demandée pour un A

date(Hi,#timestamp#)

date(Hi, 1758912899) → 2054

Hello @dan_73,

Si tu regardes la capture, 3 posts plus haut, c’est exactement ce que @Cyssou40 fait.

Mais il semblerait que la fonction date() de Jeedom décide de rajouter le timestamp après le format…

@Cyssou40, essaye avec date("Hi",#[Maison][Compteur][Compteur]#) au lieu de :
image

Et, pour éviter les problèmes de lancement hasardeux, ajoute une commande « remove_inat » avant le bloc A avec le « date() » :

Bad

1 « J'aime »

Bonjour

Effectivement je n’avais pas vu :wink:
Peut être qu’en passant par un tag, cela empêchera le changement de format.
A essayer…