Bug de récupération de la dernière position connue lorsque la condition change

Hello,

J’ai l’impression qu’il y a un souci sur la récupération de la dernière position connue lorsque la condition change.

Je m’explique par l’exemple de ma configuration.

Tout d’abord, voici ma configuration :

  • Jeedom 4.2.15
  • Plugin SunShutter 2022-05-03 01:03:18

J’ai un scénario qui se déclenche quand est volet devient complètement ouvert (ex : #[Chambre Tom][Volet Tom][Etat]#==99) et qui passe le volet en mode Jour. Typiquement, le matin.
(A 2h du matin, tous les volets passent automatiquement en mode Nuit.)

Dans ce scénario, j’ai ceci :

Dans 2 min, Faire :
Si #[Chambre Tom][Volet Tom][Etat]#==99
	Alors
		Si #[Chambre Tom][Auto_volet_Chambre_Tom][Mode]# != 'Jour'
			#[Chambre Tom][Auto_volet_Chambre_Tom][Jour]#

Ma configuration ne bouge pas depuis 2 ans et est fonctionnelle.

Ma condition :
(valueDate(#[Chambre Tom][Volet Tom][Etat]#,Ynj) == #annee##mois##jour#) ET (valueDate(#[Chambre Tom][Volet Tom][Etat]#,G) > 5) ET #[Extérieur][Meteo][Température Max]# > 21 ET #mois# > 4 ET #mois# < 9

En gros, je teste si le volet a été ouvert (histoire de ne pas faire bouger les volets automatiquement si une personne dort) en testant si le volet a bougé ce jour après 5h.
Je teste également la période et surtout la température max du jour. Et c’est ce dernier point qui est important pour la suite.

Voici les logs du jour.

Log de ce matin lors du passage en mode Jour :

[2022-05-12 07:08:52][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Passage en mode Jour
[2022-05-12 07:08:52][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Démarrage de la gestion automatique 1
[2022-05-12 07:08:52][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Condition générale non remplie - Aucune action : (valueDate(#299#,Ynj) == #annee##mois##jour#) ET (valueDate(#299#,G) > 5) ET #53# > 21 ET #mois# > 4 ET #mois# < 9

Donc là, il a reconnu que le volet a été ouvert et est donc passé en mode Jour (Option Reprendre sur changement de mode coché).

[2022-05-12 11:30:04][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Démarrage de la gestion automatique
[2022-05-12 11:30:04][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Condition générale non remplie - Aucune action : (valueDate(#299#,Ynj) == #annee##mois##jour#) ET (valueDate(#299#,G) > 5) ET #53# > 21 ET #mois# > 4 ET #mois# < 9

Pas de démarrage automatique car les conditions ne sont pas rempli à cause de la température max du jour.

[2022-05-12 11:35:03][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Démarrage de la gestion automatique
[2022-05-12 11:35:03][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Ecart avec la dernière position connue : 69.7 %
[2022-05-12 11:35:03][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Ecart avec la dernière position connue supérieur à 4 % : suspension de la gestion automatique

Là, les conditions sont remplis. Le seul élément qui a changé depuis 5 minutes, c’est la température max du jour (plugin officiel) qui est finalement supérieur à 21°.

Le volet n’a pas bougé de position depuis ce matin 07h58 et est toujours à 99%.

Je ne sais pas d’où sort le 69.7% (qui doit correspondre à 30% d’ouverture qui est la condition qu’il devait mettre en pratique si la condition est remplie).

[2022-05-12 11:40:03][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Gestion automatique suspendue : aucune action

J’ai ensuite forcé la reprise automatique (sans toucher au volet) et forcément tout est ok :

[2022-05-12 11:47:32][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Reprise manuelle de la gestion automatique
[2022-05-12 11:47:32][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Démarrage de la gestion automatique 1
[2022-05-12 11:47:32][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Calcul de positionnement - Conditions remplies : #3752# == 'Jour' ET #6027# != 'Couvert' ET #6027# != 'Fortement nuageux' Elévation = 0°-90 Azimuth = 112°-268° (30 %)
[2022-05-12 11:47:32][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Position actuelle : 99 % → Position cible : 30 %
[2022-05-12 11:47:32][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Ecart avec la position cible : 69.7 %
[2022-05-12 11:47:32][DEBUG] : [Chambre Tom][Auto_volet_Chambre_Tom] Positionnement à 30 %

Entre 11h30 et 11h35, la température max du jour du plugin météo officiel a changé (à 11h30, c’était < 21 et entre 11h30 et 11h35 > 21). Donc toutes les conditions étaient remplies.
On dirait qu’à partir du moment où la température max a été revu à la hausse, le plugin a estimé que le volet devait être à 30%.
Au moment du cron de 11h35, au lieu de lancer l’action de baisser le volet à 30%, il estimait déjà que la dernière position était de 30%.

Pour moi, le problème vient de là.

Hier par exemple où il faisait quelques degrés de plus, aucun soucis.
Il y a quelques jours où la température max avoisinait 21-22, j’ai eu le même souci. Et je pense que la température max du plugin a changé au cours de la matinée.

Idem aujourd’hui. Et j’avais récupéré les infos de la météo avant et après et cela confirme ce que j’ai dit.

Dès qu’un élément de la condition change, la gestion automatique est stoppé car d’après les logs, la dernière position du volet doit déjà (alors que non) être à 30%. Et donc il détecte un mouvement imaginaire…

@Loic est-ce que cela est pris ou va être pris en compte?
Dois-je faire un ticket où le post suffit?

Sachant que ce n’est pas une demande d’assistance…

Salut,
J’ai bien vu le poste et dès que je trouve du temps j’essayerais de comprendre le soucis mais je n’en ai plus trop en ce moment…

Ok, merci de ton retour.

Hello,

On est donc bien en face d’un bug.
Pour ma part, je ne rencontre que ce souci depuis cette année… Ou du moins, je n’ai jamais remarqué ce problèmes les deux années précédentes (chez moi, la gestion auto ne fonctionne qu’en cas de chaleur donc en période estivale).

Bonjour,
J’ai regarder vite fait le code je ne vois aucun soucis dedans a chaque fois qu’on a besoin de la position du volet on rappel bien la commande d’état. Honnêtement je pense que votre probleme va être trop complexe pour moi, ça semble vraiment être un cas particulier de configuration qui va me prendre des jours voir plus pour comprendre ce que vous voulez faire et ou le soucis se trouve (pas sur que ça soit le plugin je penche plus pour un soucis de compréhension sur son fonctionnement).

Je garde ca dans un coin mais je vais malheureusement devoir repousser l’analyse après tous les autres sujet que j’ai deja en cours.

Hello,

A confirmer mais je pense qu’un test assez simple peut être fait (je n’ai pas testé donc pas certain non plus) :

  • Tu mets une règle en place qui te bouge tes volets à 30% par exemple.
  • Tu crées un virtuel avec une info binaire par exemple. Admettons que ta commande s’appelle sunTest. Mets-la à 0.
  • Tu ajoutes dans ta condition qui fonctionne le fait que sunTest doit être égal à 1 pour valider la condition.
  • Quand en condition normal je volet est censé bouger (sans la condition supplémentaire que sunTest doit être égal à 1), tu changes la valeur dans le virtuel en mettant 1 justement.

Ensuite voir comment cela réagit.

Je vais essayer de mettre en place un test qui fait buguer le truc à tous les coups.
Si j’y arrive, je reviens vers toi avec la configuration exacte.

@cddu33 une autre idée?

En tout cas Loic, cela se produit uniquement pour ma part quand la valeur de la météo max du jour change en cours de journée.

J’ai beau relire le code je vois pas ou ca peut bloquer

@Loic, j’ai pu reproduire le souci sans problème avec l’explication donnée plus haut.

Création d’un virtuel :

Avec une simple valeur :

Création d’un objet dans sunshutter avec comme simple condition la valeur du virtuel :

Condition d’ouverture, le mode Jour :

Les logs commentés :

# Test du fonctionnement. Valeur mise à 1 pour #[Aucun][testAuto][actif]#
[2022-05-17 14:38:39][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Passage en mode Jour
[2022-05-17 14:38:39][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Démarrage de la gestion automatique 1
[2022-05-17 14:38:39][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Calcul de positionnement - Conditions remplies : #8561# == 'Jour' Elévation = 0°-90 Azimuth = 0°-350° (50 %)
[2022-05-17 14:38:39][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Position actuelle : 99 % → Position cible : 50 %
[2022-05-17 14:38:39][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Ecart avec la position cible : 49.49 %
[2022-05-17 14:38:39][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Positionnement à 50 %
# Ok, ça fonctionne.

# Je passe en mode Nuit, ré ouvre le volet et je passe la valeur à 0 pour #[Aucun][testAuto][actif]#
[2022-05-17 14:39:01][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Passage en mode Nuit

[2022-05-17 14:39:01][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Démarrage de la gestion automatique 1

#Passage en mode Jour
[2022-05-17 14:39:50][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Passage en mode Jour
# Là, on est en mode jour et le volet est ouvert (avant le passage en mode jour)

[2022-05-17 14:39:50][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Démarrage de la gestion automatique 1
[2022-05-17 14:39:50][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Condition générale non remplie - Aucune action : #8569#==1
[2022-05-17 14:40:03][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Démarrage de la gestion automatique
[2022-05-17 14:40:03][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Condition générale non remplie - Aucune action : #8569#==1
[2022-05-17 14:45:03][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Démarrage de la gestion automatique
[2022-05-17 14:45:03][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Condition générale non remplie - Aucune action : #8569#==1
# Condition non remplie car #[Aucun][testAuto][actif]#==0. J’ai exprès laissé au moins un cron avec la valeur à 0 pour qu’il détecte une condition non remplie.

# Je passe #[Aucun][testAuto][actif]# à 1 pour que la condition soit remplie.
[2022-05-17 14:50:03][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Démarrage de la gestion automatique
[2022-05-17 14:50:03][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Ecart avec la dernière position connue : 49.49 %
# Et là, il me détecte une mauvaise dernière position…

[2022-05-17 14:50:03][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Ecart avec la dernière position connue supérieur à 4 % : suspension de la gestion automatique
[2022-05-17 14:55:03][DEBUG] : [Salle de jeux][Auto_volet_SdJ_Milieu] Gestion automatique suspendue : aucune action

Voilà, dès que l’on change une valeur dans une condition, ça bug.

Donc j’insiste mais c’est plus un bug qu’un problème de compréhension sur le fonctionnement du plugin… Sinon, il faut m’expliquer ce que je n’ai pas compris.

De mon côté, je ne peux rien faire de plus, j’ai fourni une configuration permettant de tester ce dysfonctionnement qui n’est pas aléatoire.

Je comprends toujours pas… la log est bonne la ya pas de soucis, après si c’est juste le qualificatif qui vous pose soucis très bien c’est un bug pas de soucis pour moi j’ai de toute facon l’habitude que tout soit un bug.

Je ne sais pas comment être plus clair @Loic. Surtout que je montre comment reproduire le souci.
Le log montre bien qu’il y a un problème.

La première partie du log, ok, pas de problème, c’était juste un test. Donc normal que tout soit ok comme indiqué dans les commentaires de mon log.

Ensuite, je passe en mode Nuit. J’ouvre le volet à fond (donc il n’est pas à 50%) et je remets #[Aucun][testAuto][actif]#==0 afin que la condition ne soit pas ok. Je passe en mode Jour. Le changement de mode, permet une reprise d’un mode automatique.

Pendant quelques crons, la condition n’est PAS rempli car pour qu’elle soit rempli il faut que #[Aucun][testAuto][actif]#==1 (mais à cet instant la valeur est à 0).
Là, le volet est toujours ouvert. Je change la valeur de #[Aucun][testAuto][actif]# que je mets à 1. Je n’ai toujours pas touché au volet, il est toujours ouvert.
Au prochain cron, la condition est valide vu que j’ai mis #[Aucun][testAuto][actif]# à 1.

Mais au lieu de me fermer le volet (qui est ouvert à fond), le log m’indique que la dernière position est à 50 (alors qu’il est bien ouvert!) et du coup qu’il arrête la gestion automatique… Au lieu de me le fermer à 50%.

Le problème n’est toujours pas clair? Parce que je ne sais plus comment expliquer…

Je comprends toujours pas… Tu as fait bouger le volet par rapport au dernière ordre que le plugin a envoyé donc c’est normal qu’il ne veuille pas reprendre le controle.

Coche reprendre la main pour que le plugin une fois la condition d’arrêt passée se repositionne

Le dernier ordre était de mettre à 50%, ok. Mais on s’en fiche du dernier ordre. Entre temps de l’eau a coulé sous les ponts.

Entre temps, j’ai ré ouvert le volet et j’ai changé de mode. Et le changement de mode implique une reprise de la gestion automatique des volets.

Et si et seulement si une valeur dans une condition change alors le plugin voit ou plutôt croit voir que le volet est déjà à 50% alors que non et annule la gestion automatique.

Exemple ok :

  • Mode jour
  • Volet totalement ouvert
  • Condition gestion auto : entre 12h et 15 et toto==1
  • Commande : volet à 50%
  • Valeur de toto => 1
    => Tout fonctionne normalement, la commande est exécutée

Exemple nok :

  • Mode jour
  • Volet totalement ouvert
  • Condition gestion auto : entre 12h et 15 et toto==1
  • Commande : volet à 50%
  • Valeur de toto => 0
    => Pas d’action car toto==0. Jusque-là normal.
    => A 12h08, changement de la valeur toto qui passe à gogo
    => Le volet est toujours ouvert. Il n’a pas bougé en Mode Jour
    => 12h10, nouveau cron. Le plugin me dit que la dernière position connue est 50% alors que non! Et il m’arrête la gestion automatique.

En fait, à partir de 12h dans mon exemple, pour le plugin, la valeur de la dernière position passe à 50% même si la condition n’était pas rempli avant.

Donc pour résumer, le problème se pose parce que le plugin prend pour dernière valeur une commande même si la condition n’est pas rempli alors qu’il devrait le faire uniquement si la condition est pleinement rempli.

Non parce que je veux que lors d’une action manuelle du volet, la gestion automatique soit arrêté.

Exemple : si un volet se ferme à 30% dans une chambre, que l’on a pas assez de lumière et que l’on ouvre plus, il ne faut pas que le volet se referme à 30% 5 minutes plus tard.

ce que tu explique est normal. En gros vu que tu n’as pas mis de délais de reprise automatique, tant que tu n’aura pas lancer la commande « Reprendre » le plugin ne fera rien.

Donc soit:

  • après un laps de temps définis quand les conditions sont OK il reprend la gestion automatique
  • tu lances la commande « reprendre » quand tu veux que la gestion automatique reprenne

Je ne sais pas si on parle de la même chose là. Tu parles de mon dernier message où je te réponds?
Je disais simplement que je ne peux pas mettre « Reprendre la main » à Oui car je ne veux pas que ça reprenne si le volet a été bougé. Donc c’est normal que la gestion automatique s’arrête dans ce cas présent (jusqu’à ce que je force une reprise). Là, pas de débat.

Sauf que le problème est que la gestion automatique s’arrête sans raison alors que le volet n’a pas bougé et que la commande « Reprendre » a automatiquement été lancée par le biais du changement de Mode (Option Reprendre sur changement de mode).

Donc je ne comprends pas pourquoi tu me parles de « Reprendre » alors que c’est fait automatiquement.

Encore une fois, le problème est que le plugin estime que l’action du positionnement du volet paramétré dans l’onglet « Positionnement » a été effectué même si la condition paramétré dans « Condition pour vérification » dans l’onglet « Equipement » n’est pas valide.

Bonjour,
Comme dit j’ai analysé le code et c’est le 1er que j’ai verifié, ce que tu dis n’est pas possible il y a un return avant l’enregistrement en cache de la position du volet si la condition général est fausse :


image

C’est bien evidement la 1er chose que j’ai verifié suite a ton 1er message pour etre sur que le soucis ne venait pas de la.

@Loic, j’ai continué d’investiguer.
Et je peux encore être plus précis. Considérons que le volet est totalement ouvert, qu’ensuite il a changé de mode (mode Jour) et que le changement de mode est paramétré pour une reprise automatique. La commande du volet positionne ce dernier à 50%. Et pas de reprise de la gestion automatique en cas de mouvement manuel du volet.

  • [Cas 1] Onglet Equipement : Condition pour vérification de gestion automatique OK + Onglet Positionnement : condition de position de volet OK => la commande s’exécute, normal. Le volet passe à 50%.
  • [Cas 2] Onglet Equipement : Condition pour vérification de gestion automatique OK + Onglet Positionnement : condition de position de volet NOK => la commande ne s’exécute pas, normal aussi. Le volet reste totalement ouvert.

Jusque-là, c’est normal.

Dans le [Cas 1,] si l’on bouge le volet manuel, la gestion automatique s’arrête si l’on a pas demander une reprise. Normal aussi.

Passons à la suite :

  • [Cas 3] Onglet Equipement : Condition pour vérification de gestion automatique NOK + Onglet Positionnement : condition de position de volet OK => la commande ne s’exécute pas car la condition de vérification de gestion automatique est NOK. Le volet ne bouge pas.

Là où ça coince, c’est si dans ce [Cas 3], la condition de vérification de gestion automatique dans l’onglet Equipement passe à OK.
Si c’est le cas, donc si OK pour les conditions dans l’onglet Equipement et dans l’onglet Positionnement, alors la gestion automatique devrait démarrer.
Or, dans ce cas bien précis, pour le plugin, la dernière position est à 50% alors que les deux conditions n’ont jamais été à OK. Juste celle dans l’onglet Positionnement.
Et c’est bien cela qui n’est pas normal. La dernière position devrait être prise en compte uniquement si toutes les conditions (donc onglet Equipement ET onglet Positionnement) sont valides et pas uniquement celle de l’onglet Positionnement, tu n’es pas d’accord?

Je me base comme indiqué dans mon premier sur la valeur de la météo qui indique la température max du jour (du plugin météo officiel). Et cette valeur change des fois.

Par contre, j’ai continué dans mes tests. Et si la variable qui change se trouve dans la condition de l’onglet Positionnement, cela ne bloque pas.
C’est-à-dire que :

  • [Cas 4] Onglet Equipement : Condition pour vérification de gestion automatique OK + Onglet Positionnement : condition de position de volet NOK => la commande ne s’exécute pas car la condition de la commande de positionnement est NOK. Le volet ne bouge pas.

Dans ce [Cas 4], si la condition de la commande de positionnement passe, il n’y as pas de problème. Cela fonctionne bien.

Donc le problème se pose uniquement si la condition dans l’onglet Equipement passe de NOK à OK lorsque la condition dans positionnement est déjà OK.

ok ben désolé je ne sais pas corriger le bug car je ne le vois pas, je laisse d’autre personne me dire quoi corriger et ou.