Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Calcul durée depuis dernier statut

Réservé à l'utilisation et la création des objets virtuels dans JEEDOM
Répondre
Titom59
Timide
Messages : 94
Inscription : 25 mars 2018, 15:09

Calcul durée depuis dernier statut

Message par Titom59 » 15 janv. 2019, 21:29

Salut à tous je souhaite faire un calcul qui je pense est basic pour beaucoup d'entre vous.
Je voudrez calculer le durée en heure et minute une valuedate d'une commande.
En gros c'est un virtuel de présence je souhaiterai ajouter l'info, absent depuis HH:MM grace au calcul.
Quelqu'un peu me guider svp

Envoyé de mon ONEPLUS A5010 en utilisant Tapatalk


winhex
Actif
Messages : 3799
Inscription : 23 janv. 2015, 01:41

Re: Calcul durée depuis dernier statut

Message par winhex » 16 janv. 2019, 00:10

bonjour
tu as plein de possibilités
1 jeedom le fait tous seul via ses widget "core" ex: timePresence si tu historises
2 regarde la doc scenario et si tu mets

Code : Tout sélectionner

#timestamp# - valueDate(#[Entrée][Lampes Entrée][Etat]#, U)
tu as le temps en secondes que tu peux convertir en hh:mm avec les fonctions php

Code : Tout sélectionner

gmdate("H:i",#timestamp#-valueDate(#[Entrée][Lampes Entrée][Etat]#,U)
http://www.timestamp.fr/?
ou
http://www.timestamp-tool.fr/

là tu as 99.9% des utilisations
pour 0.01%

3 enregistrements du timestamp à partir du départ
et ton widget calcul seul le temps (les secondes defilent)

pour ça utilisation d'un curseur info/action
quand tu part tu mets en valeur action #timestamp# via scenario ou parametre avancés
ou tu crées un bouton en valeur #timestamp#
et un autre en valeur 0 pour arrêt
pour exemple un autre 15/12/2018 en valeur timestamp
timestamp.png
timestamp.png (269.13 Kio) Consulté 5517 fois
et dans le widget info
tu mets une modif brut reprise de countdown (qui est un compte à rebours) et là evidement c'est le contraire

Code : Tout sélectionner

<!-- WIDGET SPECIFIQUE adapté du widget standard "countdown"
Modifications : 
- Remplacement de style="display: block;" par style="min-width:90px;min-height:62px;margin-right: 5px;margin-left: 5px;padding:0px !important;"
- Remplacement de title="#collectDate#" par title="Valeur du #valueDate#, collectée le #collectDate#"
- Mutualisation de #countdown_#id#_#state#_h, #countdown_#id#_#state#_m, et #countdown_#id#_#state#_s en #countdown_#id#_#state#_decompte
- Suppression de class='label label-default'
- Ajout calcul de #countdown_#id#_#state#_decompte affichant si nécessaire les heures
- Remplacement de la valeur par défaut par --
Mise à jour :
- Le 2016/11/19 : Correction d'une erreur d'écriture
- Le 2016/04/11 : Création
-->
<div style="min-width:90px;min-height:62px;margin-right: 5px;margin-left: 5px;padding:0px !important;" class="tooltips cmd cmd-widget" data-type="info" data-subtype="numeric" data-cmd_id="#id#" title="Valeur du #valueDate#, collectée le #collectDate#">
	<center> 
      <span style="font-weight: bold;font-size : 12px;" class="cmdName">#name_display#</span><br/>
      <span style="font-size: 1.5em;font-weight: bold;" id="countdown_#id#_#state#_decompte">--</span>
    </center>
	<script>
		if ('#background-color#' !== '#'+'background-color'+'#') {
			$('#cmd#id# .label').css({'background-color':'#background-color#'});
		}

		$(function () {
			if ('#state#' > 0) {
				var intervalId = setInterval(function () {
					var now = (new Date()).getTime(); // On déclare la date d'aujourd'hui.
					var tps_restant =  now - '#state#'*1000; // Temps restant en millisecondes '#state#'*1000 - now

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

					if (!$('#countdown_#id#_#state#_decompte').length || '#state#' < 0 || tps_restant < 0) {
			//					if (!$('#countdown_#id#_#state#_decompte').length || '#state#' <= 0 ) {

                  // console.log("clearInterval("+intervalId+")");
						clearInterval(intervalId);
						$('#countdown_#id#_#state#_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#_#state#_decompte').text(H_restantes + ":" + i_restantes + ":" +s_restantes);
                      } else {
                        $('#countdown_#id#_#state#_decompte').text(i_restantes + ":" +s_restantes);
                      }  
					}
				}, 1000);
			}
		});
	</script>
</div>

Titom59
Timide
Messages : 94
Inscription : 25 mars 2018, 15:09

Re: Calcul durée depuis dernier statut

Message par Titom59 » 16 janv. 2019, 19:16

Super merci beaucoup pour toutes ces explications j'ai finalement créer un scénario pour récupéré date heure et minute dans une variable.


Envoyé de mon ONEPLUS A5010 en utilisant Tapatalk


menacor2
Timide
Messages : 10
Inscription : 25 janv. 2019, 14:58

Re: Calcul durée depuis dernier statut

Message par menacor2 » 07 févr. 2019, 21:14

Bonjour,

Je me permet de reprendre ce sujet.
Je ne trouve pas de widget Countdown sur le market.
Exist il toujours?
Merci
Phil

winhex
Actif
Messages : 3799
Inscription : 23 janv. 2015, 01:41

Re: Calcul durée depuis dernier statut

Message par winhex » 07 févr. 2019, 22:41

l'orginal

Code : Tout sélectionner

<!-- WIDGET SPECIFIQUE adapté du widget standard "countdown"
Modifications : 
- Remplacement de style="display: block;" par style="min-width:90px;min-height:62px;margin-right: 5px;margin-left: 5px;padding:0px !important;"
- Remplacement de title="#collectDate#" par title="Valeur du #valueDate#, collectée le #collectDate#"
- Mutualisation de #countdown_#id#_#state#_h, #countdown_#id#_#state#_m, et #countdown_#id#_#state#_s en #countdown_#id#_#state#_decompte
- Suppression de class='label label-default'
- Ajout calcul de #countdown_#id#_#state#_decompte affichant si nécessaire les heures
- Remplacement de la valeur par défaut par --
Mise à jour :
- Le 2016/11/19 : Correction d'une erreur d'écriture
- Le 2016/04/11 : Création
-->
<div style="min-width:90px;min-height:62px;margin-right: 5px;margin-left: 5px;padding:0px !important;" class="tooltips cmd cmd-widget" data-type="info" data-subtype="numeric" data-cmd_id="#id#" title="Valeur du #valueDate#, collectée le #collectDate#">
	<center> 
      <span style="font-weight: bold;font-size : 12px;" class="cmdName">#name_display#</span><br/>
      <span style="font-size: 2em;font-weight: bold;" id="countdown_#id#_#state#_decompte">--</span>
    </center>
	<script>
		if ('#background-color#' !== '#'+'background-color'+'#') {
			$('#cmd#id# .label').css({'background-color':'#background-color#'});
		}

		$(function () {
			if ('#state#' > 0) {
				var intervalId = setInterval(function () {
					var now = (new Date()).getTime(); // On déclare la date d'aujourd'hui.
					var tps_restant = '#state#'*1000 - now; // Temps restant en millisecondes

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

					if (!$('#countdown_#id#_#state#_decompte').length || '#state#' < 0 || tps_restant < 0) {
						// console.log("clearInterval("+intervalId+")");
						clearInterval(intervalId);
						$('#countdown_#id#_#state#_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#_#state#_decompte').text(H_restantes + ":" + i_restantes + ":" +s_restantes);
                      } else {
                        $('#countdown_#id#_#state#_decompte').text(i_restantes + ":" +s_restantes);
                      }  
					}
				}, 1000);
			}
		});
	</script>
</div>
la modification que j'ai faite pour le contraire se joue ligne 27

menacor2
Timide
Messages : 10
Inscription : 25 janv. 2019, 14:58

Re: Calcul durée depuis dernier statut

Message par menacor2 » 08 févr. 2019, 15:52

Bonjour,

Merci
Phil

winhex
Actif
Messages : 3799
Inscription : 23 janv. 2015, 01:41

Re: Calcul durée depuis dernier statut

Message par winhex » 08 févr. 2019, 16:48

pour info
quand c'est désactivé (ou echu)
on a en valeur "- -"
sur le forum il y a un membre qui avait mis une modif pour avoir une autre info

Avatar de l’utilisateur
Lecl0ne
Timide
Messages : 199
Inscription : 11 août 2018, 16:57

Re: Calcul durée depuis dernier statut

Message par Lecl0ne » 11 févr. 2019, 09:18

Bonjour à tous :)

J'ai créé un virtuel info nommé "compteur" qui calcul la différence de temps entre la dernière ouverture de fenêtre et la date du jour:

(#timestamp# - collectdate(#[Chambre de Simon][Fenêtre  ][Etat]#,U))/3600

Et dans les déclencheurs d'un scénario, je demande de surveiller lorsque ce virtuel est supérieur à 72:

#[Chambre de Simon][Ventilation  ][Compteur ]# >= 72

Mais il semble que le virtuel ne se mette pas à jour en temps réel, uniquement quand je clique sur sauvegarder dans mon virtuel..

Du coup mon scénario n'est pas déclenché.. Je fais quelque chose de travers? Il me manque quelque chose ?

Merci de votre aide :)

winhex
Actif
Messages : 3799
Inscription : 23 janv. 2015, 01:41

Re: Calcul durée depuis dernier statut

Message par winhex » 11 févr. 2019, 15:57

remplacé collecdate
par valuedate pour commencer

mais ça ne sera pas optimum
timestamp est une date pour affichage
ou évaluation (Si)
non actualisé (c'est des secondes)
sauf si le code du widget l'intègre mais c'est pas le core jeedom qui taf à la seconde par optimisation

pour preuve un widget #timestamp#
en déclenchement d'un scénario se lancerai toutes les secondes

toi tu t'en sert pour déclenchement
un déclenchement c'est un équipement ou cron

pour ta question remplace ton declencheur par cron (toutes les minutes)
et SI
(#timestamp# - collectdate(#[Chambre de Simon][Fenêtre ][Etat]#,U))/3600 > 72
faire / sinon

ou dans ton virtuel y mettre un cron qui reviens au même "Auto-actualisation (cron)" en moin simple

Avatar de l’utilisateur
Lecl0ne
Timide
Messages : 199
Inscription : 11 août 2018, 16:57

Re: Calcul durée depuis dernier statut

Message par Lecl0ne » 12 févr. 2019, 13:27

Le coup du Cron dans le virtuel je n'y avais pas pensé !!! Merci !!!!!

pierrot87
Timide
Messages : 78
Inscription : 12 oct. 2018, 18:58

Re: Calcul durée depuis dernier statut

Message par pierrot87 » 25 juin 2019, 12:14

Bonjour
j'ai repris votre widget Countdown
que j'ai appliqué sur une info dans j'ai également défini le paramètre state
quand je clique sur run il m'affiche une valeur importante du genre 1561458158 et
rien ne bouge
je veux lancer un décompte de ex: 120s et afficher le temps restant
pouvez vous m'aider
cordialement
pierre

Répondre

Revenir vers « [Plugin officiel] Virtuels »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 15 invités