Passage d'option aléatoire entre deux scénarios

Bonjour à tous,

J’aimerais vous soumettre aujourd’hui un phénomène que je trouve aléatoire (vu que je n’en comprend pas la logique). Voici le contexte :

Pour chacune de mes clims dans les chambres j’ai un scénario qui définit en fonction de la saison, du jour, de la température de la pièce etc, le lancement d’un autre scénario avec des options.

Typiquement, nous somme Samedi matin, il est 8 h 15, il fait trop froids dans la chambre par rapport à la consigne, alors lance le scénario d’allumage de la clim en mode chaud pour telle pièce.

[2023-01-21 08:15:03][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [condition] : if #[Maison][Présence Maison][Etat]# == 1 ET  #[Technique][Info Pour Scénario][Saison]# in ["Automne","Hiver","Printemps"]
[2023-01-21 08:15:03][SCENARIO] Evaluation de la condition : [1 == 1 ET  "Hiver" in ["Automne","Hiver","Printemps"]] = Vrai
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [action] : then
[2023-01-21 08:15:03][SCENARIO] Exécution d'un bloc élément : 452
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [condition] : if #[Maison][Température des chambre clim et capteur][Marius]# < (#[Chambre Marius][Thermostat Chambre Marius][Temperature]# + 0.5)
[2023-01-21 08:15:03][SCENARIO] Evaluation de la condition : [18.45 < (19 + 0.5)] = Vrai
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [action] : then
[2023-01-21 08:15:03][SCENARIO] Exécution d'un bloc élément : 453
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [condition] : if #sday# in ["Samedi", "Dimanche"] OU #[Technique][Info Pour Scénario][Jour Férié]# == 1
[2023-01-21 08:15:03][SCENARIO] Evaluation de la condition : ["Samedi" in ["Samedi", "Dimanche"] OU 0 == 1] = Vrai
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [action] : then
[2023-01-21 08:15:03][SCENARIO] Exécution d'un bloc élément : 454
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [condition] : if #time# >=1800 ET #time# < 2000
[2023-01-21 08:15:03][SCENARIO] Evaluation de la condition : [815 >=1800 ET 815 < 2000] = Faux
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [action] : else
[2023-01-21 08:15:03][SCENARIO] Exécution d'un bloc élément : 456
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [action] : action
**[2023-01-21 08:15:03][SCENARIO] Lancement du scénario : Clim chambre à thermostat options : {"#mode#":"chaud","#piece#":"marius"}**
[2023-01-21 08:15:03][SCENARIO] Affectation de la variable Clim_auto_chambre_marius => oui = oui
[2023-01-21 08:15:03][SCENARIO] Fin correcte du scénario

Le second scénario recoit dans la plus part du temps la commande d’exécution avec les options (correspondant à la piece dans laquelle il faut allumer la clim et le mode (chaud, froid …)

[2023-01-21 08:15:04][SCENARIO] Start : Lancement provoque par le scenario  : [Clim][Technique][Controle de la clim Marius]. Tags : {"#mode#":"chaud","#piece#":"marius"}

Jusque la tout va bien

Mais aléatoirement (jamais pour la même chambre, ni à la même heure), ce second scénario recoit la commande d’exécution sans les options.

Un petit tout dans les log me montre bien que le premier à bien envoyer les options …

Scénario de départ :

[2023-01-21 08:15:03][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [condition] : if #[Maison][Présence Maison][Etat]# == 1 ET  #[Technique][Info Pour Scénario][Saison]# in ["Automne","Hiver","Printemps"]
[2023-01-21 08:15:03][SCENARIO] Evaluation de la condition : [1 == 1 ET  "Hiver" in ["Automne","Hiver","Printemps"]] = Vrai
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [action] : then
[2023-01-21 08:15:03][SCENARIO] Exécution d'un bloc élément : 472
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [condition] : if #[Maison][Température des chambre clim et capteur][Chambre du haut]# < (#[Chambre damis haut][Thermostat Chambre Amis][Temperature]# + 0.5)
[2023-01-21 08:15:03][SCENARIO] Evaluation de la condition : [18.1 < (19 + 0.5)] = Vrai
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [action] : then
[2023-01-21 08:15:03][SCENARIO] Exécution d'un bloc élément : 473
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [condition] : if #sday# in ["Samedi", "Dimanche"] OU #[Technique][Info Pour Scénario][Jour Férié]# == 1
[2023-01-21 08:15:03][SCENARIO] Evaluation de la condition : ["Samedi" in ["Samedi", "Dimanche"] OU 0 == 1] = Vrai
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [action] : then
[2023-01-21 08:15:03][SCENARIO] Exécution d'un bloc élément : 474
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [condition] : if #time# >=1800 ET #time# < 2000
[2023-01-21 08:15:03][SCENARIO] Evaluation de la condition : [815 >=1800 ET 815 < 2000] = Faux
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [action] : else
[2023-01-21 08:15:03][SCENARIO] Exécution d'un bloc élément : 476
[2023-01-21 08:15:03][SCENARIO] Exécution du sous-élément de type [action] : action
**[2023-01-21 08:15:03][SCENARIO] Lancement du scénario : Clim chambre à thermostat options : {"#mode#":"chaud","#piece#":"amis"}**
[2023-01-21 08:15:05][SCENARIO] Affectation de la variable Clim_auto_chambre_amis => oui = oui
[2023-01-21 08:15:05][SCENARIO] Fin correcte du scénario

Puis de l’autre coté :

[2023-01-21 08:15:06][SCENARIO] Start : Lancement provoque par le scenario  : [Clim][Technique][Controle de la clim chambre Amis du haut].
[2023-01-21 08:15:06][SCENARIO] Exécution du sous-élément de type [condition] : if #mode# = "chaud"
[2023-01-21 08:15:06][SCENARIO] Evaluation de la condition : [#mode# = "chaud"] = #mode# = "chaud"
[2023-01-21 08:15:06][SCENARIO] Expression non valide : #mode# = "chaud"
[2023-01-21 08:15:06][SCENARIO] Exécution du sous-élément de type [condition] : if #mode# = "boost"
[2023-01-21 08:15:06][SCENARIO] Evaluation de la condition : [#mode# = "boost"] = #mode# = "boost"
[2023-01-21 08:15:06][SCENARIO] Expression non valide : #mode# = "boost"
[2023-01-21 08:15:06][SCENARIO] Exécution du sous-élément de type [condition] : if #mode# = "froid"
[2023-01-21 08:15:06][SCENARIO] Evaluation de la condition : [#mode# = "froid"] = #mode# = "froid"
[2023-01-21 08:15:06][SCENARIO] Expression non valide : #mode# = "froid"
[2023-01-21 08:15:06][SCENARIO] Exécution du sous-élément de type [condition] : if #mode# = "stop"
[2023-01-21 08:15:06][SCENARIO] Evaluation de la condition : [#mode# = "stop"] = #mode# = "stop"
[2023-01-21 08:15:06][SCENARIO] Expression non valide : #mode# = "stop"
[2023-01-21 08:15:06][SCENARIO] Fin correcte du scénario

Un petit coup de main pour m’indiquer ou chercher pour debuguer plus me serrait fort utile !

Par avance merci d’avoir pris le temps de me lire.

Je vous souhaite une belle journée.

1 « J'aime »

Hello,

Il faudrait les captures en plus des logs pour suivre le déroulement du scénario.

Bonjour
J’ai pas la solution, mais en attendant de trouver la source, n’oublie pas que tu peux mettre une valeur par défaut à tes tag.
Ainsi, si ça déconne :

  1. tu peux avoir un alerte. Par exemple en donnant à « Mode » par défaut le nom « Defaut » dans un test final. A la fin du scénario SI tag(mode,defaut)==« defaut » Alors : m’envoyer un message, ou incrémenté une variable, mémorisé une heure, etc,
  2. De plus en mettant dans le premier SI : #mode# = « chaud » OU #mode# = « chaud_Defaut ». Tu choisi le mode « par défaut » quand ça déconne (en manuel évidement) mais tu peux faire cela avec les autres modes « stop_defaut », etc…

Bonne découverte !

Avec plaisir, mais les scénario son un poil long. Je vais donc le faire en plusieurs capture.

Voici le premier scénario (celui de la chambre d’amis, toutes les chambre ont leurs propre scénario basé sur le même fonctionnement que celui ci )



Et voici le second (Chambre à thermostat)







Est ce bon pour toi ?

Merci Henri pour cette proposition.

Je l’avais envisagé mais en fait cela ne me sert pas vraiment dans se cas (car je risque quand même d’avoir froids, mais j’aurais un SMS pour me le confirmer lol)

Ce que je ne comprend pas, c’est pourquoi tout fonctionne la plupart du temps et d’un coup une ou l’autre des chambre ne fonctionne plus.

Lecture rapide des scénarios :

  • Dans tes SI, même je Jeedom accepte les deux, il faut mieux mettre SI A==B plutôt que SI A=B.

  • #mode# est l’ancienne notation qui peut disparaitre à toute nouvelle version de Jeedom. Il faut mieux utiliser tag(mode) : SI tag(mode) == "chaud"

  • Dans le premier scénario, utilise plutôt tag que variable pour Clim_auto_chambre_amis : la valeur sera modifiée que pour l’appel en cours du scénario et non pour l’ensemble de Jeedom (et éventuellement provoquer des mélanges)

ba non !
C’est ma proposition 2.

En faisant ça, si le tag ne passe pas, le chauffage est en route !

1 « J'aime »

Merci,

Je vais mettre à jour en ce sens tous mes scénarios.

Pour ma variable, j’en ai une par clim. Cela me permet de détecter si quelqu’un utilise la télécommande pour un réglage précis et donc cela empêche le scénario de couper la clim. (y a d’autre scénario qui interroge cette variable)

Ok, je me doutais un peu pour l’utilisation de ta variable mais je préférais le remonter au cas où :slightly_smiling_face:

En relisant les erreurs dans les logs, ça semble confirmer des problèmes liés à mes remarques. A valider quand tu auras effectué les corrections.

Je viens de mettre à jour selon tes propositions.

On verra d’ici quelque jour car cela se produit assez régulièrement.

Le seul truc qui « titille mon esprit » c’est que je vois ca dans les les log du second scénario :

[2023-01-21 08:15:06][SCENARIO] Start : Lancement provoque par le scenario  : [Clim][Technique][Controle de la clim chambre Amis du haut].

Lorsque cela ne fonctionne pas et ceci lorsque cela fonctionne

[2023-01-10 06:30:07][SCENARIO] Start : Lancement provoque par le scenario  : [Clim][Technique][Controle de la clim chambre Amis du haut]. Tags : {"#mode#":"chaud","#piece#":"amis"}

Selon ta proposition, le log di scénario 2 afficherait les tags ou pas selon l’écriture du SI. Moi je pensais que c’était le scénario 1 qui n’envoyais pas les arguments TAG au 2 et donc faire des modif sur le 1.

Bon dans tous les cas, on va voir rapidement.

Encore merci et je vous tiens informé.

1 « J'aime »

C’est également ce qui m’ennuie.
C’est pour ça que j’ai rien dit sur le fond, je ne vois pas d’erreur ds le scénario 1.
Toutes les modif que t’a demandé noodom sont clairement les bienvenue et aurait été à faire un de ces 4, mais… ça n’explique pas pourquoi le lancement du second scénario se fait sans info de Tag. Je ne vois pas comment le scénario 1 pourrait lancer le scénario 2 sans tag…

Après si il y a un bug à la con, voilà ce que je tenterai à ta place :

  • Tu désactives le scénario 1 et tu créer une copie (bouton Dupliquer) (avec comme nom xxx_v2)
  • Dans le nouveau tu l’optimises / Allège

Comment :
Dans toute tes actions âpres un alors / sinon, tu effaces le lancement du scénario et la variable et les remplace par des tag
tag(mode)= xx
tag(piece)=xxx
tag(variable=xxx)
(pour vite faire cela : tu mets les 3 tag dans un bloc Action, que tu va copier/coller sous tes blocs Action actuel, Tu rempli ton nouveau bloc (l’info des tag selon les cas), tu effaces l’ancien bloc Action (avec le scénario et la variable))
Puis à la toute fin du scénario (apres ton premier SI), tu fais un bloc Action :
Lancer le scénario avec mode=tag(mode) piece=tag(piece)
variable = tag(variable)

Sur le fond ça change rien avec ce que tu à fais, mais… c’est-on jamais…

Édit : Mettre une action « STOP » après l’action message de celui-ci pour que la dernière Action (lancer le scénario ne se fasse pas !) :

Édit 2 : Évidement, juste avant de lancer le scénario 2, mettre un log avec:
tag mode = tag(mode)
tag piece = tag(piece)
tag variable = tag(variable)
:slight_smile:

1 « J'aime »

J’aime bien l’idée. en gros tu collecte des infos dans des tag que tu n’exécute que à la fin du scénario pour être certain que tout le scénario s’exécute bien … (si j’ai bien compris)

Je teste ca demain sur 2 chambres, cela me permet par élimination de voir si cela fonctionne.

merci

1 « J'aime »

Oui, et tu verras que ton scénario sera plus « compact ».
De manière générique créer l’information avec des tag, puis faire l’action final avec, est une logique qui est pas mal.
Exemple tu t’envoies un message d’alarme et tu as 10 détecteurs.
Tu testes les détecteurs, écris un tag(piece)= tag(piece) - salon
Puis UN message « detection dans tag(piece) ».
Si plusieurs détecteurs sollicités le tag contient plusieurs pièces . Si tu ajoutes un détecteur, tu copie/ colle un SI, sans rien toucher d’autre.
Bref, j’aime bien cette écriture :slight_smile:

1 « J'aime »

Re Bonjour à tous,

Encore merci pour votre réactivité et vos propositions. Persuadé que les modifications que vous m’avez proposées sont nécessaire pour plus de clarté et de conformité, malheureusement cela n’as pas résolu le problème.
Je viens de tenter autre chose aujourd’hui (affaire à suivre donc), j’ai décalé l’exécution de chacun des premiers scénario (pour rappel j’en ai un par chambre). Mon idée c’est que le scénario 2 qui reçoit les commandes depuis chacun des scénario 1 ne soit pas « sollicité » en même temps.

J’ai donc modifié le CRON de chacun des numéros 1 (un toutes les 14 minutes, l’autre 15, le troisième 16 et le dernier 17 minutes).
Bon je n’ai pas fait le calcul si dans X temps les planètes allaient s’aligner mais bon cela me permet de tester quelque jour. :slight_smile:

Je ne manquerais pas de vous tenir informé.

Encore merci et belle journée.

Question bête : tu as bien paramétré le scenario 2 en execution multiples du coup?

1 « J'aime »

Bonjour,
Je ne reviens pas sur la proposition de @fwehrle, qui est très pertinente (ça te permets que tout ce lance en même temps), mais…
si tu veux lancer plusieurs scénario les un après les autres (car pas d’urgence et autant diminuer la charge), il y a une méthode plus simple et sûr.
Tu crées un scénario de « lancement », il se lance toute les 10 min. par exemple, et lance les autres.
En faisant
Action : Lancer le scénario 1
Wait : scenario(#[…]#)==0 ET lastScenarioExecution(#[…]#)<8 ; Time out = 10
Action : Lancer scénario 2
etc…

1 « J'aime »

Oui j’y avais pensé, merci !

Belle journée.

Ah oui aussi !

C’est ce que j’aime, jamais une seule solution, toujours plusieurs possibilité :slight_smile:

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