Commandes info non mises à jour entre équipements virtuels

Bonjour,

Pour construire une vue de supervision globale de mon installation domotique, j’agrège les informations venant de plusieurs équipements virtuels. Mais je me suis rendu compte que lorsque la valeur d’une commande info d’un virtuel changeait, cela n’était pas répercuté vers un autre virtuel qui contient cette info dans une formule de calcul.

En mettant des traces, j’ai observé que le re-calcul s’effectue bien dans les virtuels qui dépendent de mon virtuel initial qui contient l’info changée mais la commande info, elle-même, n’est pas mis à jour.

J’ai solutionné le problème en rajoutant la ligne suivante (celle en commentaire ci-dessous) :

        public function execute($_options = null) {
                if ($this->getLogicalId() == 'refresh') {
                        $this->getEqLogic()->refresh();
                        return;
                }
                switch ($this->getType()) {
                        case 'info':
                        log::add('virtual', 'debug', 'execute ' . $this->getId() . '/' . $this->getHumanName() . ',' . $this->getType());
                        if ($this->getConfiguration('virtualAction', 0) == '0') {
                                try {
                                        log::add('virtual', 'debug', $this->getId() . '/' . $this->getHumanName() . 'calcul: ' . $this->getConfiguration('calcul'));
                                        $result = jeedom::evaluateExpression($this->getConfiguration('calcul'));
                                        log::add('virtual', 'debug', $this->getId() . '/' . $this->getHumanName() . 'result of evaluateExpression: ' . $result);
                                        if(is_string($result)){
                                                $result = str_replace('"', '', $result);
                                        }
                                        log::add('virtual', 'debug', $this->getId() . '/' . $this->getHumanName() . ' - real result: ' . $result);
/* ligne manquante que j'ai ajoutée */  $this->event($result);
                                        return $result;

J’utilise la version stable du plugin virtual avec le core 4.0.38. Est-ce que c’est possible de corriger dans une prochaine mise à jour (ou me dire si je fais un truc de travers) ?

fx

3 « J'aime »

Super faut voir si @loic est pas trop débordé pour ajouter cette ligne.

Bonjour @Loic

Est-ce que tu penses qu’il est possible de faire quelque chose pour ce problème de propagation d’infos entre virtuels ? Le fix que je propose fonctionne très bien depuis plusieurs semaines chez moi.

fx

Bonjour,
La modification est en beta depuis le 12 fevrier ca passera donc dans la prochaine stable mais je peux pas donner de date comme toujours.

Hello tous, Hello @Loic
Est ce que cela a été corrigé ?
J’ai le même souci de temps de propagation entre virtuel et calcul depuis d’autres virtuels.
Je suis en stable 4.0. 61

Merci

Bonjour,
Je me rappel plus du soucis mais tout est passé en stable donc oui

Merci du retour
A priori non car entre temps j ai regardé dans le code et j ai vu que la correction proposée par @tuxedo78 n etait pas présente.
Je l ai rajoutée dans le code, je vous dirais si ca corrige…

A mais cette modification j’ai abandonné ça quand je la mets on me demande de l’enlever quand je l’enlève de la remettre… Je sais pas trancher donc je touche plus

Ah
Quels sont les impacts négatifs ?
Pour moi ca ne pousse qu un refresh…

Ça pousse du double refresh chez certains utilisateurs et ça rame beaucoup… En général suite a la modification je prend 5 a 10 tickets par semaine

Mince,
Comment pourrait on faire du coup pour avancer sur ce problème entre virtuels ?
Pour te résumer le pb:

  • Pour chaque personne (2 actuellement) de la maison, je calcul via OU un état presence personne en fonction d’un etat BLEA, un état « script » presence wifi et un état « geotrav » GPS. Pas de soucis le calcul est instantanée.
  • Pour l’état global de la maison (présence ou non), je fait encore dans un autre virtuel un OU entre les états présence de chaque personne comme ci dessus. C’est celui là qui pose souci aléatoirement et qui peut mettre plusieurs minutes (3 généralement) à se mettre à jour.

Je sais pas corriger désolé… J’ai déjà fait cette modification 2 ou 3 fois et a chaque j’ai eu une vague énorme de personnes pas contente. Je sais pas faire la désolé

Je pense simplement que d’autres personnes avaient la même demande et qu’ils ont utilisé une autre solution que de rajouter une ligne dans le code. Lorsqu’on active cet nv fonctionnalité, ils se retrouvent avec la valeur ajoutée 2* ds le nv virtuel. On pourrait imaginer pire, une boucle qui se passe quand elles se modifient l’une l’autre. Je comprends Loïc, il est très difficile de demander a tout le monde de vérifier s’ils sont dans ce cas et de faire la modif en même temps que la mise a jour.

Il faudrait regarder une méthode alternative pour ne pas devoir ajouter a chaque fois la ligne après une mise a jour

Est ce que cette position à évoluer ou a t on une parade. J’ai toujours la même problématique et même au sein d’un même virtuel.
En gros ma commande qui fait un OU entre 3 commandes infos du même virtuel est remise à jour avec 45 secondes à 1 minute de retard…
Jeedom à jour en stable…virtuel aussi

Vois tu une autre solution ?
J’ai essayé de créer un autre commande info qui fait le calcul du OU logique entre 3 commande info du même virtuel. Mais ça fait pareil.
Lorsque toutes les valeurs sont à 0 et que l’un des 3 passe à 1, ma commande info globale met entre 45 secondes et plusieurs minutes à passer à 1.
C’est assez déroutant et embettant.

Sur un autre forum on m’a dit de reconstruire un virtuel de 0. Pas encore essayé mais ça me semble bizarre