Obtenir l'avant dernière valeur ? lastState()?

Bonjour à tous,

Dans un scénario simpliste, je cherche à afficher la valeur actuelle ( qui provoque le scénario ) et celle précédente, afin de faire une comparaison entre les valeurs. Ainsi je peux en déduire l’évolution : augmentation ou réduction.

Comment faire ? :innocent:
Je ne trouve pas dans la doc. un lastState(#commande#) ?
https://doc.jeedom.com/fr_FR/core/3.3/scenario

La valeur n’est pas mise à jour à fréquence régulière, la notion de comparaison avec le temps ne semble pas correspondre.

Avec un bloc code.

$cmdId = cmd::byString("#[ma][commande][info]#")->getId();
$debut = date("Y-m-d H:i:s", strtotime("2 months ago"));
$fin = date("Y-m-d H:i:s", strtotime("now"));  
$all = history::all($cmdId, $debut, $fin);
$derniereValeur = count($all) ? $all[count($all) - 1]->getValue() : null;
$avantDerniereValeur = count($all) >=2 ? $all[count($all) - 2]->getValue() : null;
1 J'aime

Salut,

Il existe la fonction tendance pour connaître l’évolution :

tendance(commande,période,seuil) : Donne la tendance de la commande sur la période (period=[month,day,hour,min] ou expression PHP)

bonjour, avant que la cmd existe
via variable
tu compares la variable a la valeur de la cmd ou
une action de calcul de différence
variable(variable)-[cmd]

et ensuite je mets à jour la variable
variable / nom:variable / valeur:[cmd]

là c’est pour l’enregistrement afin d’avoir la valeur de mise en marche
mais si je veux comparé pour mise en marche de ma vmc

(#[Salle de bains][Sondes Salle de bains][Humidité]# - lastBetween(#[Salle de bains][Sondes Salle de bains][Humidité]#, yesterday, -5 min) > 3) 

soit détaillé mode auto/manu et fonctionne t’elle déjà

(#[Salle de bains][Sondes Salle de bains][Humidité]# - lastBetween(#[Salle de bains][Sondes Salle de bains][Humidité]#, yesterday, -5 min) > 3) ET (#[Salle de bains][Sondes Salle de bains][Humidité]# > 61) ET (#[Salle de bains][VMC Salle de Bains][Mode]# == 1) ET (#[Salle de bains][VMC Salle de Bains][Etat]# == 0)
1 J'aime

Merci à tous vos solutions approches pertinentes. Avec l’option de faire un Bloc Code dans un Scénario pour obtenir une valeur (ici $derniereValeur ) , comment puis l’obtenir dans le bloc Action suivant ?

je l’enregistre en variable depuis le Bloc Code ? autres solutions ?

Si c’est juste pour l’utiliser dans le même scénario, le tag est plus judicieux.

$tags['#DERVALEUR#'] = $derniereValeur;
$scenario->setTags($tags); //désolé un oubli...

Il ne te reste plus qu’à utiliser #DERVALEUR# dans ton bloc action.

Tu as le tag Développeurs, tu devrais connaître tout ça.

1 J'aime

Super merci de l’astuce, je ne l’a connaissais pas… mais oui je développe le module Netatmo OpenData :wink:

1 J'aime

Si cela te convient il faut fermer le sujet en cochant la case solution du post qui t’as permis de solutionner ton problème.

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