Tag dans Equipement > utilisation dans un scénario

Salut tout le monde,

J’essaye d’optimiser un peu l’écriture de mes scénarios et notamment d’en utiliser un seul pour plusieurs commandes.

Prenons l’exemple de mon chauffage :
J’ai un virtuel par bloc de clim qui va lancer des commandes (mode chaud, froid, ventilation à 10, ect.)
J’ai donc une dizaine de virtuels qui ont le même nom à l’exception de la pièce ([Clim Bureau], [Clim Parents], etc.)
Aujourd’hui, j’ai autant de scénario que de blocs de clim, qui font la même chose mais pas sur le même bloc.

Exemple :
Pour le bloc Salon :

Pour le bloc Entrée :

Or il se trouve que dans les équipements, il y a dans « Configuration Avancée » un truc qui s’appelle TAGs et qui me semble prometteur.

J’aimerai affecter le nom de ma pièce à ce tag (salon, bureau, entrée, etc.) et utiliser ce tag dans un seul et unique scénario, du type :

#[Chauffage][Climatisation ###MON_TAG_ICI###][Mode]# != « Arrêt »

Je n’ose croire que ce n’est pas possible, mais je ne trouve rien sur le pourquoi du comment de ce tag dans les équipements et comment les utiliser partout.

Accessoirement, si vous avez une autre méthode pour arriver à solutionner ma problématique (1 scénario, action différentes sur différents blocs de clim), je prends, sachant que toutes mes commandes sont stricto les mêmes hormis sur le nom de la pièce.

Merci,

Salut,

Il y a plusieurs solutions et j’ai survolé ton post sur le tel mais j’ai l’impression que le plus simple est d’utiliser la fonction name() :

name(type,commande) : Permet de récuperer le nom de la commande, de l’équipement ou de l’objet. Type vaut soit cmd, eqLogic ou object.

J’ai vu passer cette fonction, sauf que ca va me remonter « Climatisation Salon » au lieu de « Salon » tout court, et j’ai besoin de « Salon » pour utiliser dans les commandes « Climatiseur Salon ».

Ou je lui colle un regex dans les dents pour extraire que ce dont j’ai besoin ?
Mais c’est un peu lourd pour si peu ^^

Un str_replace devrait être largement suffisant… ou revoir le nommage de tes commandes…

Pour ta question originelle sur ce champ Tags dans la configuration avancée de l’équipement:

Tags : tags de l’équipement, à séparer par des ‘,’. Il permet sur le dashboard de faire des filtres personnalisés

https://jeedom.github.io/core/fr_FR/display#tocAnchor-1-5-1

J’ai bien lu ce passage
Ça ne le dit pas comment l’utiliser.
J’ai vu passer sur le forum des choses comme « PIECE = salon » sans que ça ne donne rien.
En mettant juste salon, ça ne donne rien non plus.
Il y a une syntaxe particuliere pour l’initialiser, ce tag ?

UP !!!

J’étais entrain d’écrire un nouveau sujet quand je suis tombé sur ton poste, j’ai exactement le même souci, est ce que tu as trouvé une solution @axelpg ?

j’essaye d’executer une commande de ce type #[tag(Room,« chambre 1 »)][StoreDescente][On]# dans un scénario mais en vain.

nope :slight_smile:
Si tu trouves, je prends.

Malheureusement je crains que ça soit impossible, et ce n’est pas prêt d’être fait, voici une discussion que j’ai lancé sur le sujet https://community.jeedom.com/t/utiliser-un-tag-dans-le-nom-dune-commande-dans-un-scenario/54678

@zied.nemili As-tu fini par trouver une solution, en code par exemple ?

J’ai plein de scénarios identiques où seul le nom de la pièce (object) change.
Exemple pour l’allumage de la lumière dans la pièce « Bureau »


Je voudrais faire un scénario générique et pouvoir passer en tag des noms de pièces « Cuisine » « Salon » « WC » à la place de « Bureau »

À chaque fois que je fais une modif, il faut répercuter la modif partout. Comme j’ai 15 scénarios pour juste allumer les lumières, j’ouvre 15 onglets et je copie-colle, c’est lourd et surtout source d’erreur. Le copier-coller c’est bien, mais je n’en peu plus, même avec un template.

Hello,

Pourquoi tu passes pas par un petit bloc code au tout début ?

Genre à partir du trigger et en supposant que tout est identique/normalisé :

  • Récupérer le trigger #[objet][equipement][trigger]#
  • Tronquer le prefix #[objet][equipement]
  • Construire tes tags Etat/Luminosité… et en mettant les exécutions dedans prefix+action->exec
  • Le reste de tes blocs avec des tags plutôt que les commandes

J’ai pas testé mais dans ce genre

$tags = $scenario->getTags();
$trigger=cmd::cmdToHumanReadable($scenario->getRealTrigger());
$levels=explode('][',$trigger);
$prefix=$levels[0].']['.$levels[1];
$scenario->setLog($trigger.' -> '.$prefix);
$cmds=array('Etat','Luminosité');
foreach($cmds as $cmd){
	$tags['#'.$cmd.'#'] = cmd::byString($prefix.']['.$cmd.']#')->execCmd();
}
$scenario->setTags($tags);

Oui, tout est identique, seul le nom de la pièce change.
Je voulais juste envoyer un tag avec le nom de la pièce


Puis remplacer avec un bloc code le nom de l’objet par la valeur du tag Piece

Là, tu me propose de tout passer en tag


C’est un peu plus lourd si je dois rajouter une OptionMinuterie, il faudra que je fasse 15 modif

Puis d’appeler tous ces tags dans le scénario générique


Tout fonctionne, mais je suis bloqué sur le problème pour exécuter la commande #[Bureau][Lumiere][Allumer]# qui devient #939# en passant par le tag Allumer

Juste ça, ça ne fonctionne pas

[2021-02-28 16:03:41][SCENARIO] [Erreur] Aucune commande trouvée pour tag(Allumer)

C’est dommage, on y est presque. Un petit bloc code pour pourvoir exécuter la commande #939# ?

Tu peux en déduire la pièce… C’est $level[0] dans le bout de code du dessus (plus ou moins les []#)

Regarde bien le truc au dessus… 1 tableau $cmds avec les 15 actions à créer 1 fois… et ça construit les 15 tags tout seul… La seule modif, c’est quand tu ajoutes la 16ème commande.
Tu mets le bloc code en premier dans ton scénario … Et tu ajoutes interrupteurs en tant que déclencheur

Oui là faut peut-être passer par un bloc code et faire un execCmd par exemple
$ret=cmd::byString($tags['#Allumer#'])->execCmd();

Merci beaucoup @naboleo

Je vais enfin pouvoir retravailler mon unique scénario…

C’est le genre de scénario assez critique car il gère les lumières principales de toute les pièces. Et ce n’est pas l’endroit où faire une erreur : si la lumière principale de la chambre s’allume pendant que Madame dort… :wink:

EDIT: c’est fait

Je vais réfléchir… Pour la partie déclencheur, je compte rester sur un scénario par pièce. C’est plus simple pour le debug général (En effet, lorsque plusieurs personnes se déplacent, les scénarios s’activent dans tous les sens)

C’est effectivement un aspect dont il faut tenir compte.
Dans ce cas, tu remplaces la partie $trigger=cmd::cmdToHumanReadable($scenario->getRealTrigger()); par la lumière que tu veux piloter par exemple (avec l’id par exemple, comme ça si tu renommes ça marche quand même)
Et tu adaptes la création auto des tags en gérant juste la liste de $cmds

Merci encore de ton aide.

2 « J'aime »

Désolé j’arrive trop tard, oui je suis passé par un bloc et j’ai refait tous mes scénarios comme ça mais je trouve que c’est chiant (excusez moi le terme ) parce que j’ai 2 scénarios qui sont un peu compliqué et j’ai dû tout remplacer par des tags, voici la tête de mon bloc code :

Mais comme quoi je ne suis pas le seul à vouloir cette fonctionnalité qui permet de ne pas dupliquer les scénarios :slight_smile:

1 « J'aime »

Ah bah voilà ce que je cherchais au début, merci à toi aussi @zied.nemili

Non, tu n’es pas le seul et il y a plusieurs sujets de ce type qui sont sans solution depuis des mois.
Je n’en peux plus des copier-coller sur Jeedom ! :sweat:

Il manque la notion de hiérarchie, c’est la base pour ne pas dupliquer du code !

Le top, ce serait de pouvoir créer un virtuel template avec des entrées/sorties et des scénarios intégrés, un peu comme pour les circuits électroniques/fonctions informatiques, on crée un bloc qu’on peut réutiliser plusieurs fois et câbler différemment si besoin. Si on effectue une modif à l’intérieur du bloc, la modif se répercute partout où le bloc est utilisé.

Un début de discussion sur la notion de hiérarchie avec @yoannfilloux ici.

1 « J'aime »

eh oui, une template de virtuel avec scénario intégré au virtuel avec ses entrées/sortie…
ce serait plus simple pour tout structurer proprement
tu dupliques à tour de bras