Scénario sur front montant

S’il n’y a pas de répétition de valeurs il n’y a aucune raison pour que ton scénario s’exécute quand tu t’en vas. J’utilise tous les jours des scénarios basés sur des fronts montant uniquement (typiquement pour détecter une arrivée) et il n’y a aucun soucis.

@artpol

Dans scénario il y a une partie « Variables »
image

Je proposais de définir une variable servant à mémoriser le dernier état de ta géolocalisation (LastGeocState)

Donc de rajouter au niveau de la flêche bleue un contrôle sur ce LastGeocState pour savoir s’il était à 0 ou 1 afin de vérifier si tu as un passage de 0 à 1 ou de 1 à 0.

Dans le bloc « Si » il faudrait donc ajouter la condition : variable(LastGeocState) == 0

En dehors du bloc « Si » pour que l’action s’exécute toujours, pousser la valeur de [géolocalisation][Eta] dans cette variable LastGeocState :
Action : variable
Nom : LastGeocState
Valeur : [géolocalisation][Eta]

Tu vois l’idée ?

Voici une manière plus générale pour déterminer un front.

Merci pour ta réponse, je m’intéresser à l’intégration de la variable

Dans le fond ça me parait bien mais c’est la mise en forme dans mon scénario que je ne saurai pas faire…
Merci encore !

Tu peux mettre ça en scène de cette manière :

/*
Détermine pour une commande info historisée si elle est en front montant ou en front descendant
Le tag #FRONT# retourné prend les valeurs suivantes
	0 : Front Descendant
	1 : Front Montant
	2 : Pas de Front
	3 : Commande info non historisée
	4 : Commande inexistante
*/

$cmdName = '#[Ma][Commande Info][Historisée]#';
$front = 4;
try {  
  $cmd = cmd::byString($cmdName);
  $front = 3;
  $scenario->setLog('bdd ' . $cmd->getId() . ' : ' . $cmd->getHumanName());
  $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($cmd->getId(), $debut, $fin);
  $valCmdAct = count($all) ? $all[count($all) - 1]->getValue() : null;
  $valCmdPre = count($all) >=2 ? $all[count($all) - 2]->getValue() : null;
  if (($valCmdAct <> null) and ($valCmdPre <> null)) {
    $front = 2;
    $scenario->setLog('Valeur Précédente : ' . $valCmdPre);
    $scenario->setLog('Valeur Actuelle : ' . $valCmdAct);
    if ($valCmdAct > $valCmdPre) {
      $front = 1;
    }
    if ($valCmdAct < $valCmdPre) {
      $front = 0;
    }
  }
} catch(Exception $e) {
  message::add('Scénario ' . $scenario->getHumanName(),$e->getMessage(),'Détermination d\'un Front');
}
    
$scenario->setLog('Front : ' . $front);  

$tags['#FRONT#'] = $front;
$scenario->setTags($tags);

Salut
Peux-tu expliquer comment tu arrives avec : #[Ma][Commande Info][Historisée]#
Si je prends un capteur de porte xiaomi (#[Laborat][OpenClose 2][Ouverture]#) par exemple dans mon cas je mets quoi ?
Le declencheur du scenario c’est bien ta commande ?

D’avance merci

Je ne connais pas ce type d’équipement, mais si c’est une commande info et qu’elle est historisée ben tu mets ça.

Le déclencheur, c’est ce que tu veux quand tu veux savoir si tu es en front montant ou en front descendant.

1 « J'aime »