Jeedom 4.4 Widget Line: afficher une durée en H/M/S

Bonjour,

Ca y est j’ai fait ma mise à jour 4.4. Après beaucoup de boulot il me reste encore quelques petits ajustements nécessaires.

Version : 4.4.2
Source : default
Branche : V4-stable
Système : Atlas

J’utilisais un widget codé pour afficher sous forme de ligne la durée en heure/minute/seconde à partir d’une valeur (seconde ou heure, ca dépend de ce que le plugin remonte).
Ca ne fonctionne plus du tout en 4.4, et plutot que de bricoler, je me demandais s’il existait une solution « officielle » ou du moins supportée.

Ici c’est pour l’affichage d’un widget issu du plugin NUT, mais ca peut etre l’uptime de livebox, peu importe en fait:

image

Si rien n’est possible ou n’existe, je vais essayer de comprendre ce qui a pu casser !

Merci !

Je mets le code, si jamais ca intéresse quelqu’un (en 4.3, du coup !). J’ai rien inventé, il était sur l’ancien forum, je l’avais juste retravaillé à l’époque.

cmd.info.numeric.cmd_numeric_lineJHMS.html

<div class="tooltips cmd cmd-widget #history#" data-type="info" data-subtype="numeric" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#" style="display: block;">
	<center><span style="font-size : 12px !important;#hideCmdName#" class="cmdName">#name_display#</span> <strong class="state" style="font-size: 12px;"></strong></center>
	<script>
		jeedom.cmd.update['#id#'] = function(_options){
        var duree = _options.display_value;

        var j = Math.floor(duree/86400); duree %= 86400;
        var h = Math.floor(duree/3600); duree %= 3600;
        var m = Math.floor(duree/60);
        var s = duree%60;
      
        var txt = '';
        if (j) txt += j + 'j ';
        if (h) txt += h + 'h ';
        if (m) txt += m + 'm ';
        if (s) txt += s + 's ';

			$('.cmd[data-cmd_id=#id#]').attr('title','Valeur du '+_options.valueDate+', collectée le '+_options.collectDate)
			$('.cmd[data-cmd_id=#id#] .state').empty().append(txt);
			if(_options.alertLevel){
			$('.cmd[data-cmd_id=#id#]').removeClass('label label-warning label-danger')
			if(_options.alertLevel == 'warning'){
				$('.cmd[data-cmd_id=#id#]').addClass('label label-warning');
			}else if(_options.alertLevel == 'danger'){
				$('.cmd[data-cmd_id=#id#]').addClass('label label-danger');
			}
			}
		}
		jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
	</script>
</div>

Salut,

Avec les widgets core, si l’unité de ta commande est s pour secondes, le core doit faire la conversion automatiquement :

Voici à quoi ressemble ma commande:


J’ai précisé l’unité, je ne sais plus si ca arrive préconfiguré.

Voilà la configuration de commande:

Mais le rendu n’est pas un format h/m/s
image

Ah oui, my bad j’ai pas percuté sur le coup désolé.


Dans le code de ton widget tu peux essayer de remplacer display_value par value (il y a 2 occurrences à modifier) ?

Non, c’est pas beaucoup mieux.

J’ai ajouté deux console.log:

widget JMHS value=1.525
widget JMHS display_value=undefined

Ca me rappelle quelque chose mais c’est super vieux, je me demande si je n’avais pas basculé justement sur display value parce que value était incorrect, et maintenant je n’ai visiblement plus de valeur pour display_value

        var duree = _options.value;
        console.log("widget JMHS value=" +  _options.value);
        console.log("widget JMHS display_value=" +  _options.display_value);

C’est normal que tu n’ai plus de valeur dans display_value car elle était définie ici :

		jeedom.cmd.update['#id#']({display_value:'#state#',

Encore un petit test, justement sur cette ligne il faut aussi modifier #state# par #value# je pense pour obtenir :

jeedom.cmd.update['#id#']({value:'#value#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});

Bravo !

image

et merci !

Je vais voir quand même pour modifier/ajouter un widget core qui ferait l’équivalent, c’est dommage que celui existant soit je pense trop limité, surtout pour afficher des uptimes, sur des durées comme ça, ça va encore !

Ah cool !

Je vais en discuter avec l’équipe, voir dans quelle mesure la fonction de conversion du core pourrait aller un peu plus loin sur la conversion des durées déjà ?!

2 « J'aime »

Merci @Salvialf.
En tant que dev du plugin Livebox je suis aussi intéressé pour que le core prenne en charge une conversion des info numeriques en jours heures minutes secondes soit par une fonction de conversion soit par un widget spécialisé. Pour le moment le plugin Livebox embarque un widget personnalisé « duree » que j’ai modifié pour la 4.4 (en fait je n’avais pas compris la différence entre #state# et #value# donc le problème avec la 4.4 était de ma faute)

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.