Problème maj commande dans un virtuel

Bonjour à tous

@Loic m’avais demandé de patienter sur ce problème pour voir si il serait présent en 4.2

et oui, ce problème est toujours présent

Smart, V4.2.14

Le problème est simple

J’ai un virtuel pour gérer le lave vaisselle en fonctionne de la puissance de la prise connectée

j’ai donc 3 états : ALLUME, REPOS, ENCOURS

ce sont 3 commandes info/binary

je récupère ces 3 commandes en les additionnant dans une commande info/numeric

et j’ai un widget qui gère l’affichage suivant le chiffre obtenu : 0,1,2,3

ca fonctionne bien sauf que cette commande qui a pourtant un ID supérieur aux 3 autres ne se met pas toujours à jour

par exemple ce matin, les 3 sous commandes ETAT étaient à 1

la commande principale ETAT_LAVEVAISSELLE = 2 !!!

si je sauvegarde le virtuel, elle se met bien à jour.

J’ai ce même phénomène sur des virtuels où une commande info/binary, est le résultat de 2 sous commandes info/binary

je ne comprends pas pourquoi la mise à jour d’une commande contenant des sous commandes ne fonctionne pas correctement.

les mises à jour des virtuels sont quelquefois compliquées … moi aussi j’ai des soucis avec les états qui ne se mettent pas à jour alors que l’équipement source est bien ok.

je te conseille de passer toutes tes valeurs « infos » calculées via la roue crantée/configuration/Répéter les valeurs identiques à NON

Bonjour

Quasiment toutes mes commandes sont à NON

apparemment c’est un soucis dans l’ordre de refresh des commandes, Loïc s’est déjà penché sur ces problèmes, c’est pas facile à reproduire car parfois ca fonctionne très bien, c’est pas systématique

mais je suis content de savoir que je suis pas le seul :slight_smile:
Loïc me dit que j’en demande trop à mon jeedom

en fait le problème vient du fait que l’on affecte des formules aux infos qui dépendent elles même d’autres infos virtuelles calculées. le système de récurrence se perd.

sinon moi ce que j’ai fait et ce que je te propose comme solution, c’est de mettre un scénario provoqué par le changement de valeur d’un des équipements. ce dernier lance un morceau de code php qui remplit les valeurs du virtuel avec une bordée de tests. c’est simple et efficace :slight_smile: si tu ne sais pas programmer en php, tu peux aussi lancer des commandes virtuelles pour remplir tes champs info.

Salut Nemeraud,

Perso, pour pallier au pb de calcul dans les virtuels,
je valorise les données du virtuel à partir de calcul fait dans un scénario.

Un autre exemple

J’ai une commande info/autre qui contient un calcul :

je test la commande :

je test le calcul :

et c’est normal qu’il soit à 0, puisque nous sommes le 1er du mois

Oui, pourquoi pas mais cela devrait être fonctionnel

on peut aussi forcer la sauvegarde de la commande pour la forcer à ce mettre à jour

cmd::byId(ID)->save();

si j’ai bien compris l’explication de Loic a l’époque, le soucis est que quand il fait la correction pour ça, ceux qui ont un cas genre:

Valeur 1 calculée en fonction de valeur 2
Valeur 2 calculée en fonction de valeur 3
Valeur 3 calculée en fonction de valeur 1

Se retrouvent avec jeedom qui plante apres la mise à jour parceque ça fait une boucle…

et du coup il avait du revenir en arriere sur la mise a jour.

oui il avait parlé d’un soucis de boucle mais là ce n’est pas le cas, faire une boucle c’est une erreur, le programme doit pouvoir l’empêcher mais pas bloquer la maj des commandes quand il n’y a pas de boucle

je ne dis pas que la boucle est chez toi, je dis que si il corrige pour que ça marche chez toi ça créé le soucis de boucle chez d’autres.

Je suis bien d’accord que faire une boucle est une erreur, apres si tu sais comment l’empécher dans le code (peut-etre à la config des commande et a l’upgrade pour les virtuels existants, ou alors a l’évaluation), tu peux proposer un PR.

pas sur que le cas soit si simple à gérer :frowning:

Oui j’avais bien compris ton message
mais c’est quand même dommage de faire le choix d’une solution qui fait que cela fonctionne mal pour un usage correcte du système par rapport à une solution qui évite un problème si l’utilisateur fait une boulette en créant une boucle :slight_smile: