Calcul de dates sur dernier évènement

Bonsoir,
Je cherche à afficher sur un design la liste du dernier déclenchement de certains équipements.
Si j’ai bien compris, la fonction lastChangeStateDuration() permet de connaitre le temps écoulé entre maintenant et l’heure de l’évènement (1 ou 0).
J’ai fait ceci dans un bloc code d’un scenario de test :

$lastUpStamp = scenarioExpression::lastChangeStateDuration('#[Radiateurs][SdB Christian][Etat]#', 1);
$lastDownStamp = scenarioExpression::lastChangeStateDuration('#[Radiateurs][SdB Christian][Etat]#', 0);
$actualStamp = strtotime(date("H:i:s"));
$deltaUpStamp = $actualStamp - $lastUpStamp;
$deltaDownStamp = $actualStamp - $lastDownStamp;

$scenario->setLog('Heure dernier passage à 1 : ' . date('H:i:s', $deltaUpStamp)); 
$scenario->setLog('Heure dernier passage à 0 : ' . date('H:i:s', $deltaDownStamp)); 

$scenario->setLog('Heure dernière collecte : ' . date('H:i:s' ,scenarioExpression::collectDate('#[Sondes][Cuisine - Blea][Température]#', U)));

pour obtenir cela :
image
Question : Y a t’il une solution plus simple ?
Merci de votre retour.

Salut

On peut creer un virtuel avec une commande info par équipement à surveiller. Chaque commande aura pour valeur le lastchange stateduration() souhaité.

Bonjour,

Pas compris, cela me donne 0.
Sinon, j’ai essayé de créer une userFunction dans data/php/user.function.class.php

require_once __DIR__ . '/../../core/php/core.inc.php';

class userFunction {

	public static function plop($_arg1 = '') {
		return 'Argument 1 : ' . $_arg1;
	}
  
  	public function hourEvent($evenement, $sens)
    {
		$lastEvtStamp = scenarioExpression::lastChangeStateDuration($evenement, $sens);
		$actualStamp = strtotime(date("H:i:s"));   
		$deltaStamp = $actualStamp - $lastEvtStamp;
		return date('H:i:s', $deltaStamp);
    }
      
}

et j’ai fait ceci dans mon scenario de test :

$scenario->setLog('User function : ' . userFunction::hourEvent('#[Radiateurs][SdB Christian][Etat]#', 1));

Dans la log, j’obtiens ceci :

Class 'userFunction' not found.

Où est mon erreur.
Merci

Je me réponds à moi-même, il faut ajouter au début du boc code :

require_once dirname(_FILE_) . '/../../data/php/user.function.class.php';

Bon maintenant, ma fonction ne retourne pas la valeur attendue, j’investigue.

Salut.
Si ton bloc code donne les bonnes valeurs, plutôt que de mettre dans le log (qui n’etait que pour le test ici), tu peux mettre a jour une commande info d’un virtuel (je persisite😉) avec la commande php

cmd::byString('#[aucun][MonVirtuel][maCommandeInfo]#')->event('mon texte');

‹ mon texte › étant en remplacer par la variable resultat que tu as calculé dans ton bloc code

et lacommande par celle que tu auras créé

Un détail pour l’instant mais cela posera problème dans une prochaine version de php, déclarez votre fonction en static si vous l’utilisez en static

public function hourEvent($evenement, $sens)

=>

public static function hourEvent($evenement, $sens)

Car pour l’instant vous avez des warning dans le log http.error je pense :wink:

1 « J'aime »

Merci pour le tuyau

Merci,
J’ai bien rajouté static pour être « propre ».