Comment déclencher un scénario en surveillant toutes les commandes d'un équipement

Bonjour à tous,

J’ai un équipement jMQTT dont le broker est le serveur TTN (The Things Network)
Quand j’ajoute une nouvelle station LoRaWAN, jMQTT va ajouter automotiquement une commande pour cette station à mon équipement jMQTT.

J’ai créé un scénarion qui va se déclancher quand une nouvelle données est reçu.
J’ai 4 stations, donc 4 commandes de type info.
Pour mon sécnarion, j’ai donc 4 déclancheurs, une par commande.

Si j’ajoute une cinquième station, une nouvelle commande s’ajoutera automatiquement et ceci fonctionne très bien.

Le problème est que de mon côtà, je vais devoir ajouter manuellement un déclancheur pour cette commande à mon scénario, et ceci est contraignant.

J’ai aussi constaté que lorsque je défini un déclanchement, je ne peux que sélectionner une commande de l’équipement jMQTT.


Je ne peux pas sélectionner uniquement mon équipement.

Je me demandais s’il y avait la possiblité que mon scénario " surveille" mon équipement et dèes qu’une commande change de valeur, il s’exécute, avec la possiblité d’identifier la dernière commande qui à changer de valeur

Est-ce possible de le faire et comment?

Merciii

Bonjour,

Tu mets en déclencheur toutes les actions que tu veux surveiller et ton scénario s’exécutera
Fais une copie d’écran de ton ébauche

Hello
Oui c’est bien ce j’ai fais
Voici mes commandes de type info


et voici mes déclencher

Vu que mes commandes sont ajoutées automoatiquement quand une nouvelle station envoit pour la première fois un message, je voulais donc éviter d’ajouter un déclancheur pour cette nouvelle commande manuellement. C’est pourquoi je me demandais si je pouvais surveiller ceci au niveau de l’appareil.

Mais qu’entends-tu pas action?
Tu veux dire une action dans un bloque IF si la condition est remplie? Mais il faut bien un déclencehur? Et d’ailleur l’action ne s’appliquera pas ici, mais sur Telegram qui va envoyer un message

J’aurais faut la même chose que toi, cela ne me semble pas possible de mettre des événements en déclencheur dynamiquement.
A voir si quelqu’un d’autre a une idee

La classe scénario dispose des commandes getTrigger() et setTrigger()… Donc on peut tout à faire un scénario qui ajoute un trigger automatiquement à un scénario en particulier…

Voilà un exemple pour lire tous les triggers de tous les scénarios

$scenarios = $scenario::all();
foreach($scenarios as $scenar) {
	$triggers = $scenar->getTrigger();
	$scenario->setLog($scenar->getHumanName().' trigger='.implode($triggers,' + '));
}

Pour bien faire, il faut prévoir de ne pas ajouter le trigger s’il existe déjà etc

Après niveau perf, faire 1 scénario pour 10 sondes ça va commencer à poser des soucis de perf… Quand 2 triggers vont se lancer 2 instances en même temps ça risque de coincer… Quand un deuxième scénario se lance alors que le précédent n’est pas terminé… etc

Hello
Je comprends pas.

J’ai un scénarion qui fait l’affaire. Le problème est de le déclancher quand la commande d’un équipement jMQTT change de valeur.

Pourquoi devrais-je scanner les autres scénarios qui n’ont rien à voir.

J’utilise déjà ceci dans mon bloque CODE du scénario en question

$cmdID = $scenario->getRealTrigger();

qui me permet d’intenfier le déclencheur (donc la commande info qui est la source du déclencgement). Mais je veux justement supprimer et surveiller toutes les commandes de l’appareil jMQTT qui peuvent changer de valeur

ça réponds au besoin que tu indiques ci-dessus…

Rien à voir, c’est juste un moyen de voir comment c’est fait dans jeedom… pour pouvoir le reproduire dans ton cas particulier

Donc on est bien d’accord : plutôt que d’avoir un scénario qui prends tous les déclencheurs en entrée et qui fait le tri une fois lancé (via la commande getRealTrigger()), l’idée c’est de faire un scénario à part, qui va ajouter uniquement les bons déclencheurs à ton scénario initial

Dans un cas, comme dans l’autre, c’est une usine à gaz en devenir

1 « J'aime »

Mais je ne vois toujours pas pourquoi je devrais scanner les scénarios de ma porte d’entrée de mon chauffage.

Ne serait-il donc pas plus approprié d’avoir une commande, un code qui valire toutes mes commandes d’un équipement et créer ensuite un trigger avec

setTrigger()

Aussi, je me dis que si je dois de toute manière créer les nouvelles stations dans ma base de donnée, je peux aussi créé un virtuel correspondant à ma station. Puis créer un commande de type info à mon virtuel qui définirait l’état de l’alarm.

Mais par contre, pour mon scénario, j’aimerais comme bien trouver une solution pour qu’un trigger soit automatiquement ajouter quand une commande à mon équipement jMQTT est automatiquement ajouté.

Il y a pas « besoin ». As-tu juste regardé comment c’est structuré au sein de jeedom ?
Comme la réponse est très certainement non, je propose juste un bout de code qui permet de commencer à le faire. C’est pas un code à utiliser tel quel … il faut donc l’adapter à ton besoin

Même si l’ajout d’un ou de triggers en automatique répondent à ce besoin, la façon dont tu imagines la solution est à mon avis pas assez efficace :

  • plus il y a de triggers pour un scénario et plus on risque d’avoir des soucis de performance et/ou d’interférence
  • avoir 1 scénario, qui fait tout dedans, c’est pas une bonne approche : c’est long à exécuter, c’est compliqué à écrire

Dans la même idée que ci-dessus, j’en déduit que tu as 1 objet jMQTT qui regroupe tous les infos de toutes tes sondes… C’est le comportement par défaut, de jMQTT mais c’est un mauvaise solution à l’usage

Mais bon, à mon avis on se comprends pas.

Par exmple, avoir un déclencheur quand une commande est ajoutée, à mon équipement jMQTT et qui créera le déclenchement dans mon scénario qui va gérer et déclencher les alarmes pour chaque station?