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

Hello,

Avec le fonctionnement que tu décris ok.
Néanmoins, lastOrder a l’air d’être mis à jour même si la commande n’est pas forcément envoyé dans un cas précis : lorsque Azimut ok pour une action et pendant cette plage (Azimut) la condition est devenue valide alors qu’elle ne l’était pas au départ (de la plage Azimut).

Pourrais-tu m’indiquer le bout de code qui met à jour lastOrder stp histoire d’essayer de comprendre?

C’est la toute la question je ne sais pas ou se passe le set de lastOrder alors qu’il ne devrait pas donc je peux pas te dire ou c’est.

Hello,

Bon, ben comme chaque année en début de période chaude, je rencontre à nouveau ce problème.

Pour rappel, lorsqu’une valeur de variable dans la condition pour vérification change, ça bug.

Exemple :

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

Ici, #[Extérieur][Meteo][Température Max]# avait une valeur inférieure ou égale à 18 ce matin.
Et maintenant, elle est à 18,2.

Du coup, maintenant et seulement maintenant (et sans toucher au volet) que la condition pour vérification est OK, alors le plugin pense que la dernière position est celle qui aurait dû avoir si la condition avait toujours été valide.

Si la condition était valide 5 minutes auparavant par exemple, le volet aurait dû en partie se fermer.
Vu que ce n’était pas le cas, il est resté ouvert (logique).
Entre temps, la condition est devenue valide. Et depuis que la condition est valide, le plugin pense que la dernière position aurait dû être en partie fermée.
Mais ce n’est évidement pas le cas vu la condition n’était pas valide…


[2023-05-13 11:55:03][DEBUG] : [Chambre xxx][Auto_volet_Chambre_xxx] Démarrage de la gestion automatique
[2023-05-13 11:55:03][DEBUG] : [Chambre xxx][Auto_volet_Chambre_xxx] Condition générale non remplie - Aucune action : (valueDate(#9038#,Ynj) == #annee##mois##jour#) ET (valueDate(#9038#,G) > 5) ET #53# > 18 ET #mois# > 4 ET #mois# < 9
[2023-05-13 12:00:23][DEBUG] : [Chambre xxx][Auto_volet_Chambre_xxx] Démarrage de la gestion automatique
[2023-05-13 12:00:23][DEBUG] : [Chambre xxx][Auto_volet_Chambre_xxx] Ecart avec la dernière position connue : 68.69 %
[2023-05-13 12:00:23][DEBUG] : [Chambre xxx][Auto_volet_Chambre_xxx] Ecart avec la dernière position connue supérieur à 4 % : suspension de la gestion automatique

Encore une fois, bug reproductible facilement. C’est expliqué dans un post plus haut où j’indique pas à pas comment reproduire le bug.
Il suffit de créer une variable que l’on mettra dans la condition de vérification de sorte que la condition soit invalide, puis, sans toucher au volet, changer la valeur de cette variable (sans toucher au plugin) afin de rendre la condition valide (en configurant des positions dans l’onglet positionnement bien entendu). Par exemple avec une simple variable binaire que l’on changerait de 0 à 1 ou inversement suivant la condition.

Bonjour,
J’essaye de reprendre ce sujet mais je doute d’y arriver la le code est devenu bien trop compliqué pour moi et je ne comprends meme pas ce qu’il fait la plupart du temps… Enfin pourrais tu :

  • passer en beta
  • faire la 1er partie :
[2023-05-13 11:55:03][DEBUG] : [Chambre xxx][Auto_volet_Chambre_xxx] Démarrage de la gestion automatique
[2023-05-13 11:55:03][DEBUG] : [Chambre xxx][Auto_volet_Chambre_xxx] Condition générale non remplie - Aucune action : (valueDate(#9038#,Ynj) == #annee##mois##jour#) ET (valueDate(#9038#,G) > 5) ET #53# > 18 ET #mois# > 4 ET #mois# < 9
  • aller sur l’équipement en question puis configuration avancé puis information et prendre la partie cache
  • faire la partie
[2023-05-13 12:00:23][DEBUG] : [Chambre xxx][Auto_volet_Chambre_xxx] Démarrage de la gestion automatique
[2023-05-13 12:00:23][DEBUG] : [Chambre xxx][Auto_volet_Chambre_xxx] Ecart avec la dernière position connue : 68.69 %
[2023-05-13 12:00:23][DEBUG] : [Chambre xxx][Auto_volet_Chambre_xxx] Ecart avec la dernière position connue supérieur à 4 % : suspension de la gestion automatique
  • me donner les nouvelles logs
  • aller sur l’équipement en question puis configuration avancé puis information et prendre la partie cache

Bonjour Loic,

Cela me fait un peu peur quand le lis :

C’est toi qui a codé ça non? Manque de commentaires ? :stuck_out_tongue:

Bon, histoire de ne pas jouer sur mes volets et ma prod, j’ai sur mon Jeedom Alpha mis en place des tests.

Tout d’abord, une explication sur ce que j’ai mis en place (comme ça, si tu veux reproduire…).

Création d’un virtuel voletVirtuel :

  • info : Etat
    — Type : info numérique
  • Commande : Positionnement
    — Commande information liée : Etat
    — Valeur : Etat
    — Option : min : 0 / max : 99
  • Commande : Bas
    — Commande information liée : Etat
    — Valeur : Etat
    — Option avancée > Configuration > Action après exécution de la commande > #[Bureau][voletVirtuel][Positionnement]# = 0
  • Commande : Haut
    — Commande information liée : Etat
    — Valeur : Etat
    — Option avancée > Configuration > Action après exécution de la commande > #[Bureau][voletVirtuel][Positionnement]# = 99

Ensuite, création d’un virtuel permettant de changer la valeur d’une variable dans la condition : testAuto

Et enfin, la création d’un objet sunshutter :

Le tout, actionnable via le Dashboard :

Pour rappel de mon utilisation : dans l’onglet Equipement de mon objet sunshutter, sous Gestion automatique, j’ai comme Condition pour vérification la température max du jour.
Suivant la température max (et autre condition mais peu importe), je fais mes actions.

Quand les conditions dans Positionnement sont OK mais que la condition de vérification est NOK, rien ne se passe. Normal.
Par contre, si, au courant de la même journée, avec les conditions dans Positionnement toujours OK, la condition pour vérification devient OK, cela ne fonctionne pas.

Dans mon montage actuel, voici les conditions :

  • Si testAuto actif est à 1 alors :
    – Je positionne le volet virtuel à 30% si on est en mode Jour et si l’Azimuth et l’élévation sont aux valeurs indiquées (j’ai exprès mis une grand plage)

Là, j’ai exprès mis une grande plage d’Azimuth et d’élévations pour les tests.
Du coup, il faudrait juste que je passe en mode Jour et que je mette testAuto actif à 1.

En stable (pas encore testé en beta), actuellement, si je suis en mode Nuit avec testAuto actif à 0 et que je passe en mode Jour alors rien ne se fait. Ce qui est normal car testAuto actif est à 0.
Par contre, les conditions de positionnements sont OK (Mode Jour OK, Azimuth OK, Elevation OK).

Si, toujours en Mode Jour avec Azimuth et Elevation OK, je passe testAuto actif à 1 (donc condition pour vérification OK) alors le volet devrait se positionner à 30% comme indiqué. Ce qui ne se fait pas.
MAIS CELA DEPEND!

Je viens de faire plusieurs essais et j’ai trouvé dans quel cas cela ne fonctionnement pas précisément.

Faisons la démonstration à partir d’un cas où la gestion automatique est fonctionnel :

Si je bouge le volet manuellement, la gestion automatique s’arrête (normal) :

Et là, tout dépend de la suite. Si Je passe en Mode Nuit avec testAuto actif à 1, la dernière position est bien à jour :

Par contre, reprenons un screen au dessus :

Si au lieu de passer en Mode Nuit avec testAuto Actif à 1, je passe testAuto Actif à 0 :

Là, il détecte toujours la dernière position à 30% au lieu de 67%. Si je passe à ce moment (donc avec la condition pour vérification NOK) en Mode Nuit :

Dans ce cas, il ne met pas la dernière position à jour. Et je pense que le problème vient peut-être de là.
Lors d’un passage d’un Mode à l’autre avec l’option Reprendre sur changement de mode activé, on est censé reprendre la gestion automatique.

En fait, il faudrait mettre à jour la position du volet au changement de Mode même si la condition pour vérification n’est pas actif.

Parce que là :

Si je remets la condition de vérification (testAuto) :

La gestion automatique est arrêté dès que le cron est lancé car pour lui le volet a bougé manuellement alors que non… Simplement que la dernière position n’a pas été mis à jour au changement de mode.

[2024-01-22 10:22:05][DEBUG] : [Bureau][autoVoletSunshutter] Démarrage de la gestion automatique
[2024-01-22 10:22:05][DEBUG] : [Bureau][autoVoletSunshutter] Condition générale non remplie - Aucune action : #11739#==1
[2024-01-22 10:23:04][DEBUG] : [Bureau][autoVoletSunshutter] Démarrage de la gestion automatique
[2024-01-22 10:23:05][DEBUG] : [Bureau][autoVoletSunshutter] Ecart avec la dernière position connue : 37.37 %
[2024-01-22 10:23:05][DEBUG] : [Bureau][autoVoletSunshutter] Ecart avec la dernière position connue supérieur à 4 % : suspension de la gestion automatique
[2024-01-22 10:24:05][DEBUG] : [Bureau][autoVoletSunshutter] Gestion automatique suspendue : aucune action

J’espère que cette analyse va t’aider.

Je vais ensuite tester avec le plugin en beta.

Idem avec le plugin beta :

[2024-01-22 10:29:20][DEBUG] : [Bureau][autoVoletSunshutter] Calcul de positionnement - Conditions remplies : #2165#==&apos;Jour&apos; Elévation = -90°-90 Azimuth = 0°-500° (30 %)
[2024-01-22 10:29:20][DEBUG] : [Bureau][autoVoletSunshutter] Position actuelle : 67 % → Position cible : 30 %
[2024-01-22 10:29:20][DEBUG] : [Bureau][autoVoletSunshutter] Ecart avec la position cible : 37.37 %
[2024-01-22 10:29:20][DEBUG] : [Bureau][autoVoletSunshutter] Positionnement à 30 %
[2024-01-22 10:30:19][DEBUG] : [Bureau][autoVoletSunshutter] Démarrage de la gestion automatique
[2024-01-22 10:30:21][DEBUG] : [Bureau][autoVoletSunshutter] Condition générale non remplie - Aucune action : #11739#==1
[2024-01-22 10:30:48][DEBUG] : [Bureau][autoVoletSunshutter] Passage en mode Nuit
[2024-01-22 10:30:48][DEBUG] : [Bureau][autoVoletSunshutter] Démarrage de la gestion automatique 1
[2024-01-22 10:30:48][DEBUG] : [Bureau][autoVoletSunshutter] Condition générale non remplie - Aucune action : #11739#==1
[2024-01-22 10:31:05][DEBUG] : [Bureau][autoVoletSunshutter] Démarrage de la gestion automatique
[2024-01-22 10:31:05][DEBUG] : [Bureau][autoVoletSunshutter] Condition générale non remplie - Aucune action : #11739#==1
[2024-01-22 10:31:12][DEBUG] : [Bureau][autoVoletSunshutter] Passage en mode Jour
[2024-01-22 10:31:12][DEBUG] : [Bureau][autoVoletSunshutter] Démarrage de la gestion automatique 1
[2024-01-22 10:31:12][DEBUG] : [Bureau][autoVoletSunshutter] Condition générale non remplie - Aucune action : #11739#==1
[2024-01-22 10:32:04][DEBUG] : [Bureau][autoVoletSunshutter] Démarrage de la gestion automatique
[2024-01-22 10:32:05][DEBUG] : [Bureau][autoVoletSunshutter]Position actuel du volet 65
[2024-01-22 10:32:05][DEBUG] : [Bureau][autoVoletSunshutter] Ecart avec la dernière position connue : 35.35 %
[2024-01-22 10:32:05][DEBUG] : [Bureau][autoVoletSunshutter] Ecart avec la dernière position connue supérieur à 4 % : suspension de la gestion automatique

A noter qu’en beta, je n’ai plus les boutons Jour/Nuit sur le widget :

Pour la partie cache, on voit bien que la dernière position connue n’a pas été mise à jour :

{"lastPositionOrder":"30","lastPositionOrderTime":1705915760,"beginSuspend":1705915925,"manualSuspend":false}

Bonjour,
Non ce n’est pas moi qui ait fait le code de tout le plugin d’ou mon soucis pour rien que savoir si c’est bien un bug ton soucis ou un probleme de compréhension.

Si je comprends bien le soucis c’est en faite par exemple :

  • position volet 0
  • mouvement manuel a 65%
  • changement de mode qui fait mettre le volet a 65%
  • la ca marche plus car il reste toujours en suspension

C’est ca ? Si c’est le cas il me faudrait la log du changement de mode pour que je vois ou il passe dans le code.

C’est un bug :stuck_out_tongue:

Plus sérieusement, je ne peux pas être plus précis dans ma démo.
On voit bien que lors d’un changement de mode, la dernière position n’est pas mis à jour si la condition de vérification n’est plus valide à ce moment là.
Du coup, lorsque la gestion automatique est censé fonctionné, ce n’est pas le cas car le plugin s’appuie sur une ancienne position.

Avant tout, je précise que je parle du Mode du plugin shunshutter (donc les logs sont déjà présent dans mes précédents messages).

Le changement de Mode ne fait pas bouger le volet. Enfin, ça dépend.
Je t’invite à relire mon loooooonngg message avec un café :sweat_smile:
Je sais qu’il est long… Et qu’il faut se concentrer pour suivre. J’ai volontairement mis pleins d’infos pour que t’es toutes les billes en mains.

Mais pour résumer, le problème est que la dernière position ne se met pas à jour lors d’un changement de mode si la condition n’est pas valide.

Cas OK :

  • Condition de vérification OK
  • Position du volet à x via la gestion automatique
  • Position du volet à y manuellement
  • Stop de la gestion automatique car un mouvement manuel a été réalisé
  • Il fait nuit donc passage de l’objet sunshutter en mode Nuit
  • A ce moment, la condition de vérification est toujours OK
  • Le passage en mode Nuit met à jour la dernière position (à y)
  • Passage en mode Jour… tout roule car la dernière position a bien été mise à jour

Cas NOK :

  • Condition de vérification OK
  • Position du volet à x via la gestion automatique
  • Position du volet à y manuellement
  • Stop de la gestion automatique car un mouvement manuel a été réalisé
  • Condition de vérification est devenue NOK*
  • Il fait nuit donc passage de l’objet sunshutter en mode Nuit
  • A ce moment, la condition de vérification est toujours NOK
  • Le passage en mode Nuit ne met pas à jour la dernière position (à y)
  • Passage en mode Jour
  • Condition de vérification OK et STOP immédiat de la gestion automatique car il détecte un écart de la position du volet. Ce qui est faux car le plugin n’avait pas mis à jour la dernière position.

Mais comme dit, si tu relis le long message, tout est indiqué.
Et si tu le souhaites, tu peux reproduire vu que j’ai indiqué toutes les étapes avec screens à l’appui.

A dispo si besoin de faire des tests. Ou tu peux également te connecter sur mon Jeedom de test.

Salut,

J’ai bien lu et j’ai bien compris que le soucis vient au moment du changement de mode c’est pour ca qu’il me faudrait les logs a ce moment la.

Mais j’ai tout mis dans mes posts. Je n’ai pas plus de logs. Je suis en debug.

Il y a bien dans mes logs le passage au mode Jour/Nuit :

Je comprends pas je suis pas convaincu du bug plus un soucis de comprehension. La quand je vois ton log tout est bon :

  • le volet a été bougé donc c’est suspendu
  • changement du mode en mode force mais aucun action donc le volet reste suspendu
  • ensuite a un moment la condition devient valide et le plugin est dans le bon mode mais comme toujours suspendu il bouge pas.

En gros meme si un changement de mode bypass la suspension si il n’y a aucun action a faire le volet reste suspendu.

Oui, on est en phase.

Aucune action? De quelle action du parle?
Quand je passe en mode Nuit, il ne se passe jamais rien donc normal.

Je ne comprends quand tu parles que le volet reste suspendu.
Le volet ou la gestion automatique?

Non, la gestion automatique ne devrait pas être suspendu vu que l’option Reprendre sur changement de mode est activée.

Le problème est que la position du volet ne se met pas à jour lors du changement de mode si et seulement si à ce moment la condition n’est plus valide.

Cas OK :

  • Condition OK. Gestion auto ok. Volet à 30% (normal) :

  • Mouvement manuel à 67%. Stop de la gestion auto car Reprendre la main à Non :

  • Je passe en mode Nuit avec toujours la condition OK (testAuto), il reprend la gestion automatique car l’option Reprendre sur changement de mode est activée.


    La dernière position se met donc à jour. Tout ce qui a de plus normal.

Là donc est donc OK.

Cas NOK :

  • Condition OK. Gestion auto ok. Volet à 30% (normal) :

  • Mouvement manuel à 67%. Stop de la gestion auto car Reprendre la main à Non :

  • La condition passe à NOK (testAuto) :

  • Je passe en mode Nuit avec toujours la condition NOK (testAuto), il est censé reprendre la gestion automatique car l’option Reprendre sur changement de mode est activée. Sauf qu’avec une condition NOK, au changement de mode, il ne met pas à jour la dernière position :

Donc quand je vais passer en mode Jour, la dernière position connue sera 30% au lieu de la réelle à 67%.
Quand la condition sera remplie (testAuto OK) et que le cron se lancera :

[2024-01-22 10:32:04][DEBUG] : [Bureau][autoVoletSunshutter] Démarrage de la gestion automatique
[2024-01-22 10:32:05][DEBUG] : [Bureau][autoVoletSunshutter]Position actuel du volet 65
[2024-01-22 10:32:05][DEBUG] : [Bureau][autoVoletSunshutter] Ecart avec la dernière position connue : 35.35 %
[2024-01-22 10:32:05][DEBUG] : [Bureau][autoVoletSunshutter] Ecart avec la dernière position connue supérieur à 4 % : suspension de la gestion automatique

Il me détectera un écart avec la dernière position connue. Tout cela, parce que cette fichue dernière position ne s’est pas mise à jour.

Et je crois que c’est le même problème ici :

Tu confirmes @gdseb ?

Je confirme donc c’est pas un bug c’est le fonctionnement attendu. Si tu change de mode avec reprise mais que aucune action ne se fait (car aucune condition valide) alors la gestion automatique reste suspendu.

Le changement de mode avec reprise (je pense le nom est pas bon c’est changement de mode forcé en vrai) désactive la suspension de la gestion automatique si et seulement si il y a une action applicable si elle ne fait rien alors pas de désactivation de la suspension sur la gestion automatique.

Je ne suis pas certain de comprendre. C’est quoi une action dans ton explication ?
Une action manuelle du volet?

Si je change de mode avec reprise et que la condition est ok alors la gestion automatique devrait reprendre non?
Tu me dis le contraire. Et si c’est ça et que ce n’est pas un bug c’est totalement illogique.

Ce n’est donc pas logique qu’après un changement de mode puis reprise de la gestion automatique avec toutes les conditions OK, le plugin signale un mouvement de volet qui n’a pas eu lieu (car il n’a pas mis à jour la dernière position malgré plusieurs changement de mode).

Tu ne peux pas me dire que c’est logique que le plugin démarrage la gestion automatique (avec toutes les conditions OK) et qucron qu’il arrête la gestion automatique parce que j’ai soit disant bouger un volet (alors que non… enfin oui mais la veille et plusieurs changements de mode ont eu lieu entre-temps).

Ben oui, je suis d’accord. Si pas d’action applicable car pas toutes les conditions OK alors il ne fait rien.
Mais moi je parle d’un changement de mode avec actions applicables car toutes les conditions OK.

Je sais pas comment l’expliquer… tu as un mode A avec une condition 1. La gestion de volet est en mode forcer la reprise au changement de mode.

Ton volet a été mis à 0% par le plugin de gestion tu le bouge à 30%. La gestion automatique est donc suspendu.

Tu lances le mode A, vu qu’il force la reprise le plugin analyse les conditions malheureusement la condition 1 n’est pas valide. Il ne se passe donc rien et la gestion automatique reste suspendue.

La condition 1 devient vrai mais tu es toujours suspendu donc le volet ne bouge pas.

Pas de bug là dedans c’est le fonctionnement attendue il faut que lors du passage sur le mode A une condition soit vrai et que le volet bouge pour que ça lève vraiment la suspension.

Jusque là, on est d’accord.

Ben c’est là que ça coince… Soit c’est illogique, soit ça bug.
Car à ce moment là, je lis bêtement les logs mais :

[2024-01-22 10:32:04][DEBUG] : [Bureau][autoVoletSunshutter] Démarrage de la gestion automatique

Il y a bien un redémarrage de la gestion automatique.

Sauf que :

[2024-01-22 10:32:05][DEBUG] : [Bureau][autoVoletSunshutter]Position actuel du volet 65

Il a toujours la position de la veille.

Effectivement dans ce cas, cela fonctionne, je suis d’accord.
Et c’est illogique.

Je prends mon vrai exemple : je me base sur la température max du jour dans la condition de vérification.
En gros, quand il fait chaud, je veux que les volets se ferment quand le soleil tape sur la fenêtre.
Lorsque le volet s’ouvre la première fois dans la journée, il passe en mode Jour.

Sauf que… La valeur de la température max du jour change de temps en temps (plugin officiel).
Et si cette valeur change, et ben il va me détecter un changement de position alors que je n’ai pas du tout toucher au volet depuis qu’il est passé en mode jour… et du coup, la gestion sera arrêtée.

Je comprends ce que tu as expliqué et je comprends aussi que t’as cerné ma problématique.

Pourquoi le plugin ne pourrait simplement pas récupérer la position du volet au moment du changement de Mode ? Il ferait simplement une MAJ de la position.
Et quel intérêt à ne pas le faire?

Je pourrais très bien mettre ma règle de température max du jour dans les conditions de positionnement de volet au lieu de la mettre dans condition pour vérification, cela réglerait très certainement mon problème.
Mais si je poste ici, c’est pour que cela en profite à tout le monde.

Bonjour,

En faite ca marche pas comme ca, le plugin enregistre le derniere ordre qu’il a demandé et non la position actuel du volet. Si il envoi pas d’ordre alors forcement il désactive la gestion automatique. C’est vraiment pas un bug mais le comportement attendu. On pourrait voir pour faire une demande d’évolution auprès de jeedom mais a voir si c’est pertinant car ca changerait pas mal de le comportement et donc il va avoir des gens qui vont dire que ca va pas et demander un retour arriere.

Hello,

Du coup, il y a deux choses qui ne vont pas avec ce fonctionnement :

  • Le log n’est pas bon car il indique bien une reprise de la gestion automatique (Démarrage de la gestion automatique). D’après tes explications, il ne devrait pas reprendre du tout.
  • L’option Reprendre sur changement de mode (cocher la case pour reprendre la gestion automatique en cas de changement de mode) n’est pas forcément le bon terme. Ce serait plutôt Reprendre sur changement de mode si et seulement si la condition de vérification était valide pendant les différents changements de mode. Enfin, tu vois ce que je veux dire et où je veux pointer du doigt. D’où le fait que je ne trouve pas logique.

Mais peut-être quelque chose m’échappe dans cette logique.
As-tu un exemple concret à me donner pour que je comprenne (j’aime comprendre, surtout quand je ne trouve pas un comportement logique) le fait de ne pas mettre à jour la dernière position connue si la condition de vérification n’est pas OK lors du changement de mode?
Et dans quel cas, cela pourrait poser problème? Je ne vois vraiment pas. Mais je n’ai pas la science infuse.

Je ne suis pas d’accord avec toi sur ce point. Le plugin met bien à jour la position du volet actuel du volet au moment du changement de mode (quand condition de vérification OK).
Dans les screens ci-dessous, l’ordre de plugin sunshutter était de mettre le volet à 30%. J’ai bougé manuellement le volet à 67%. Et lors du changement du mode, la dernière position s’est bien mise à jour.
De plus, on parle bien de dernière position et non de dernier ordre (ça non plus, ce ne serait pas logique).