Generictype - declencheur sur etat 0 ne fonctionne pas

Attention, c’est pas la modale de choix qui pose pb, mais bien le déclencheur si la valeur est = 0 qui ne déclenche pas si et seulement si on n’a pas indiqué de test dans le déclencheur.

Norbert

@kiboost, je suis remonté jusqu’a ici :

il y a jeedom::evaluateExpression($trigger)

qui lui renvoie vers scenarioExpression::setTags($_input, $_scenario, true)

Le soucis c’est que dans la fonction setTags

$return = cmd::cmdToValue(str_replace(array_keys($replace1), array_values($replace1), str_replace(array_keys($replace2), array_values($replace2), $_expression)), $_quote);

$_expression vaut pour l’exemple genericType(MEDIA_STATE,#[object]#) si on a aucun équipement MEDIA_STATE a 1, le $return renvoie 0 ce qui équivaut pour la fonction evaluate() a un false.

Exemples :
trigger = genericType(MEDIA_STATE,#[object]#) → si tous les genType MEDIA_STATE a 0 → $return = 0 (false)

trigger = genericType(MEDIA_STATE,#[object]#) → si 1 genType MEDIA_STATE a 1 → $return = 1 (true)-> $scenario->launch

trigger = genericType(MEDIA_STATE,#[object]#)==0 → si tous les genType MEDIA_STATE a 0 → $return = 0==0 (true) → $scenario->launch

1 « J'aime »

Oui je me doutais un peu d’un truc comme çà, le 0 = false, mais je vois pas bien corriger çà sans casser tout le reste.

C’est exactement se que je me disais :rofl:, j’ai test quelque truc dans le setTag, mais a chaque fois sa casse autre chose.

Faut pas casser jeedom pour corriger ça quand même :joy:
On peut vivre avec, y a un contournement

Norbert

1 « J'aime »

J’ai pas du tout bien comprendre …

#genericType(LIGHT_STATE,#[Salon]#)# == 0 fonctionne bien, le scénario se lance quand j’éteins la dernière lumière du salon :yawning_face:

Ok je rattrape le train…

#genericType(LIGHT_STATE,#[Salon]#)# → KO Alors qu’effectivement il y a changement de valeur donc çà devrait triggerer :face_with_spiral_eyes:

1 « J'aime »

çà, çà fonctionne :

	public static function evaluateExpression($_input, $_scenario = null) {
		try {
			$eval = evaluate(scenarioExpression::setTags($_input, $_scenario, true));
			if (strpos($_input, 'genericType') !== false) {
			    $eval = $eval === false ? false : true;
			}
			return $eval;
		} catch (Exception $exc) {
			return $_input;
		}
	}

La question suivante étant, qu’est-ce que çà casse ?

Plus simple et plus propre,

la condition dans testTrigger :

} elseif (strpos($trigger, 'genericType') !== false && jeedom::evaluateExpression($trigger) !== false) {

@Phpvarious tu en pense quoi ?

Après quelque test… c’est concluant :+1:

1 « J'aime »

Cool !! Tu a testé d’autres triggers generictype ? genre un lightstate qui change ne declenche pas un trigger shutterstate ou autre ?

Non mais je pense pas que se soit possible étant donné que le testTrigger intervient après byGenericTrigger, donc les scénario concerné sont déja dans un array.
mais sa coute rien de tester :wink:

1 « J'aime »

J’aime pas faire des revert :grin:

Merci pour tes recherches en tout cas, c’est top :love_you_gesture:t3:

testé avec plusieurs genType et pas de soucis particulier

3 « J'aime »

Super, je pousse :pray:t3:

2 « J'aime »

Un grand merci ! :+1::confetti_ball::champagne:

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.