Widget Kroomba qui n'en fait qu'à sa tête!

Hello !
Je tente de modifier un peu le widget Kroomba mais sans succès.

J’ai tenté un affichage en tableau pour réorganiser les icônes, ça ne s’appliquer jamais correctement (j’ai pourtant bien sauvegardé, vidé les caches, retenté plusieurs fois).

Egalement, j’ai créé deux petits widgets, un pour l’état, et un autre pour le bac plein.
J’arrive à les appliquer depuis le widget, je recharge et ça fonctionne environ 3min, puis ça revient au widget d’origine.

Enfin, je n’arrive pas à faire descendre l’icône de la batterie du titre vers l’intérieur du widget.

Bref, Kroomba n’en fait qu’à sa tête et me rend chèvre…
Tout est bien sur vérifiable, les widgets & co, mais peut-être que quelqu’un a déjà rencontré ce problème ?

Bonne soirée :slight_smile:

Bonjour,
Tu es en Jeedom V3 ou en Jeedom V4 ?
En fait ce plugin était mon premier essai pour avoir un plugin compatible à la fois V3 et V4 donc j’ai peut-être fait des erreurs dans ma volonté d’avoir un widget présentable en V4 sans passer par un widget personnalisé donc à l’intérieur du plugin je définit des widgets pour les commandes état, bac plein et batterie de la même manière qu’un utilisateur pourrait le faire par le menu Outils Widget.
Une fois que tu m’auras dit quelle version de Jeedom tu utilises et ce que tu voudrais obtenir j’essayerai de voir pourquoi tu n’y arrives pas.
Voila mon widget en V4 thème dark (j’ai caché l’info batterie que je n’utilises pas)
kroomba
Il me plait bien mais bon les gouts et les couleurs …

Tu peux réordonner les commandes dans l’onglet commandes de la page équipement par glissé déplacé je trouve çà plus pratique que de le faire sur le dashboard par contre si tu es e V3 je pense que çà ne marchera pas car hélas en V3 il y a un widget pour la tuile entière (c’est comme çà depuis l’origine du plugin et c’est parce que çà ne me plaisait pas que j’ai changé en V4)

En y réfléchissant je pense que tu es en V3 et que c’est çà qui cause tous tes problèmes car en V3 je n’ai rien modifié et donc on ne peut pas personnaliser le widget du robot.
Comme je l’ai dit çà ne me plaisait pas et j’ai changé çà en V4.
Par contre pour ne pas perturber les anciens utilisateurs de la V3, j’ai décidé de ne rien changer pour eux.
A l’époque j’avais vu que pour le plugin de l’aspirateur robot Neato, Loic avait fait un choix différent et avait supprimé le widget global pour tout le monde (V3 et V4), résultat les utilisateurs de la V3 on râlé en disant « Mon widget est tout moche » sans réaliser qu’au moins maintenant ils pouvaient le personnaliser.
Comme quoi c’est difficile de contenter tout le monde.
Pour moi ce serait un changement facile à faire, il suffirait de supprimer les fichiers core/template/dashboard/kroomba.html et core/template/mobile/kroomba.html mais pas sûr que çà contenterai tout le monde.
Si tu es bien en V3 une solution serait que tu me passes les templates que tu as fait pour les commandes etat, bac plein et batterie. Je n’ai pas de V3 de test pour le moment donc çà m’es difficile d’en faire et de tester en plus je manque de temps.
Je pourrai alors enlever le template global de tuile et intégrer tes widgets pour la V3 et laisser les miens pour la V4.
J’ai déjà fait le code qui sélectionne les widgets en fonction de la version de Jedom pour un autre plugin donc facile à transposer pour kroomba.
Ainsi les utilisateurs de kroomba en V3 auraient les mêmes possibilités de personnalisation que ceux qui sont en V4.
pour moi, idéalement les 3 widgets devraient avoir comme noms cmd.info.string.kroomba_state_v3.html, cmd.info.numeric.kroomba_battery_v3.html et cmd.info.binary.kroomba_binfull_v3.html

Hello @vedrine !
Merci pour tes réponses :slight_smile:

Je suis en V4, et effectivement j’ai le même affichage que toi.
Pour être plus sécurisé sur les mises à jour j’essaie d’utiliser la fonction proposée par Jeedom, à savoir utiliser de manière assez simple les widgets proposés.

J’en ai donc créé 2, un pour le bac et un pour l’état.
(je n’ai pas de souci avec ton design, comme tu dis ce sont les goûts et les couleurs, et c’est surtout pour harmoniser le design que je suis en train de créer)

Voici à quoi ça ressemblait avant :
45

Voici mes deux widgets, une fois que j’ai appliqué sur la commande, celui du bac fonctionne, celui de l’état ça dépend de son humeur, surtout parfois rien n’est affiché (chose qui ne m’arrivait pas avec ton widget à toi)


Et du coup le souci c’est que l’affichage est assez instable, et surtout au bout d’un certain temps ça revient à la version de ton widget
27

Donc il est possible que ce ne soit pas du à ton plugin ou à ton widget. C’est le seul avec lequel j’ai rencontré un souci mais il peut s’agir d’un problème au niveau du widget en lui-même, ou à un autre niveau. J’ai un peu du mal à trouver d’où ça vient…

Le fait que ça se remettre sur l’ancienne version au bout d’un certain temps me fait penser que c’est peut-être le cron ou le changement d’état qui fait ça.

Apparemment c’était une histoire d’accent et de caractères dans les balises « title » de l’image.
Je les ai complètement supprimées, et j’ai tenté d’afficher chaque statut au moins une fois.
Pour le bloqué et le unknown c’est compliqué à faire :stuck_out_tongue:

J’avais un souci avec le statut « home » qui ne s’affichait pas non plus.
Mais j’ai regardé ton fichier de class et j’ai vu que sur certains états il y avait deux valeurs possibles.
Je les ai donc intégrées à mon widget, et maintenant ça a l’air de fonctionner !

A voir maintenant sur la durée si le widget sautait à cause de ça ou à cause d’autre chose…

Ce qui me donne maintenant mon beau widget dans mon design !

Si tu sais comment je peux ajouter le niveau de batterie à côté de la poubelle c’est encore mieux !

04

Normalement pour le niveau de batterie il suffit de cocher la case Afficher sur le ligne de cette commande dans l’onglet Commandes de la page de l’équipement et de glisser-déplacer cette ligne pour la mettre après celle du bac plein. Dis moi si tu as essayé et que ça ne marche pas, chez moi c’est OK :
kroomba2
Si ton problème c’est que le widget bac plein se met à coté de ton widget Etat au lieu de passer en dessous il te suffit de cocher la case « Retour à la ligne forcé après le widget » dans l’onglet Affichage des réglages de la commande Etat
Les images que j’utilise date d’avant ma reprise du plugin. Si tu veux me passer les tiennes c’est avec joie que je ferai évoluer le plugin car je trouve qu’elles datent un peu.

Oh yeah ça fonctionne. Un peu de CSS pour réduire la largeur des zones pour les icônes bac plein et batterie et on sera bon !

Par contre j’ai compris le souci : à chaque fois que je modifie la disposition interne du widget, je perds la personnalisation, donc je dois réappliquer mes widgets persos. En gros jusqu’à ce que j’ai exactement ce que je souhaites, je suis bon pour recommencer maintes fois.

Je ne sais pas pourquoi il ne garde pas en mémoire les widgets personnalisés et il remet les widgets par défaut à chaque fois, c’est le dernier mystère à résoudre.

Merci beaucoup en tout cas pour le coup de main ! Super plugin !!

C’est hors de mon contrôle, c’est sans doute le core de Jeedom qui fait çà. Je vais le signaler à @Loic

@vedrine

Cela ne vient pas du core mais du fait que tu utilises la fonction toHtml() dans ton plugin.

1 « J'aime »

Merci @ZygOm4t1k mais tu es sûr ? Il est en V4 et la première chose que je fais dans mon toHtml c’est de passer la main au toHtml du core si on es en v4 :

    if (version_compare(jeedom::version(), '4.0.0') >= 0) {
       return parent::toHtml($_version);
    }

En fait j’y ai réfléchi cette nuit et je crois que c’est la façon dont je fais mes setTemplate dans postSave qui créé le problème

J’ai tenté de déplacer l’assignement des widgets de la fonction postSave vers la fonction postInsert et ça a l’air de fonctionner !
Du coup j’ai créé la fonction postInsert, le tout mériterait surement d’être réécrit, mais là je n’ai pas les capacités de savoir exactement quoi mettre à quel endroit pour que ce soit vraiment propre :confused:
Et je n’ai pas testé ce que ça donne sur la création d’un nouvel objet non plus !

Voici la section modifiée :

 public function postInsert() {
    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'status');
    // On defini le template a appliquer par rapport à la version Jeedom utilisée
    if (version_compare(jeedom::version(), '4.0.0') >= 0) {
        $cmdlogic->setTemplate('dashboard','kroomba::state');
        $cmdlogic->setTemplate('mobile','kroomba::state');
    }
    $cmdlogic->save();

    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'binFull');
    // On defini le template a appliquer par rapport à la version Jeedom utilisée
    if (version_compare(jeedom::version(), '4.0.0') >= 0) {
        $cmdlogic->setTemplate('dashboard','kroomba::binfull');
        $cmdlogic->setTemplate('mobile','kroomba::binfull');
    }
    $cmdlogic->save();

    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'battery');
    // On defini le template a appliquer par rapport à la version Jeedom utilisée
    if (version_compare(jeedom::version(), '4.0.0') >= 0) {
        $cmdlogic->setTemplate('dashboard','kroomba::battery');
        $cmdlogic->setTemplate('mobile','kroomba::battery');
    }
    $cmdlogic->save();

  }
  public function postSave() {
    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'status');
    if (!is_object($cmdlogic)) {
      $cmdlogic = new kroombaCmd();
      $cmdlogic->setName(__('Etat', __FILE__));
      $cmdlogic->setEqLogic_id($this->getId());
      $cmdlogic->setLogicalId('status');
      $cmdlogic->setIsVisible(1);
      $cmdlogic->setDisplay('generic_type', 'MODE_STATE');
    }
    $cmdlogic->setType('info');
    $cmdlogic->setSubType('string');
    $cmdlogic->save();

    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'binFull');
    if (!is_object($cmdlogic)) {
      $cmdlogic = new kroombaCmd();
      $cmdlogic->setName(__('Bac plein', __FILE__));
      $cmdlogic->setEqLogic_id($this->getId());
      $cmdlogic->setLogicalId('binFull');
      $cmdlogic->setIsVisible(1);
      $cmdlogic->setDisplay('generic_type', 'GENERIC_INFO');
    }
    $cmdlogic->setType('info');
    $cmdlogic->setSubType('binary');
    $cmdlogic->save();

    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'battery');
    if (!is_object($cmdlogic)) {
      $cmdlogic = new kroombaCmd();
      $cmdlogic->setName(__('Batterie', __FILE__));
      $cmdlogic->setEqLogic_id($this->getId());
      $cmdlogic->setLogicalId('battery');
      $cmdlogic->setDisplay('generic_type', 'BATTERY');
      $cmdlogic->setIsVisible(0);
    }
    $cmdlogic->setType('info');
    $cmdlogic->setSubType('numeric');
    $cmdlogic->save();

    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'mission');
    if (!is_object($cmdlogic)) {
      $cmdlogic = new kroombaCmd();
      $cmdlogic->setName(__('Rafraichir', __FILE__));
      $cmdlogic->setLogicalId('mission');
      $cmdlogic->setIsVisible(0);
      $cmdlogic->setDisplay('generic_type', 'GENERIC_ACTION');
    }
    $cmdlogic->setType('action');
    $cmdlogic->setEqLogic_id($this->getId());
    $cmdlogic->setSubType('other');
    $cmdlogic->save();

    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'start');
    if (!is_object($cmdlogic)) {
      $cmdlogic = new kroombaCmd();
      $cmdlogic->setName(__('Démarrer', __FILE__));
      $cmdlogic->setLogicalId('start');
      $cmdlogic->setIsVisible(1);
      $cmdlogic->setDisplay('generic_type', 'GENERIC_ACTION');
      $cmdlogic->setDisplay('icon', '<i class="fas fa-play"></i>');
    }
    $cmdlogic->setType('action');
    $cmdlogic->setEqLogic_id($this->getId());
    $cmdlogic->setSubType('other');
    $cmdlogic->save();

    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'pause');
    if (!is_object($cmdlogic)) {
      $cmdlogic = new kroombaCmd();
      $cmdlogic->setName(__('Pause', __FILE__));
      $cmdlogic->setLogicalId('pause');
      $cmdlogic->setIsVisible(1);
      $cmdlogic->setDisplay('generic_type', 'GENERIC_ACTION');
      $cmdlogic->setDisplay('icon', '<i class="fas fa-pause"></i>');
    }
    $cmdlogic->setType('action');
    $cmdlogic->setEqLogic_id($this->getId());
    $cmdlogic->setSubType('other');
    $cmdlogic->save();

    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'resume');
    if (!is_object($cmdlogic)) {
      $cmdlogic = new kroombaCmd();
      $cmdlogic->setName(__('Continuer', __FILE__));
      $cmdlogic->setLogicalId('resume');
      $cmdlogic->setIsVisible(1);
      $cmdlogic->setDisplay('generic_type', 'GENERIC_ACTION');
      $cmdlogic->setDisplay('icon', '<i class="fas fa-step-forward"></i>');
    }
    $cmdlogic->setType('action');
    $cmdlogic->setEqLogic_id($this->getId());
    $cmdlogic->setSubType('other');
    $cmdlogic->save();

    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'stop');
    if (!is_object($cmdlogic)) {
      $cmdlogic = new kroombaCmd();
      $cmdlogic->setName(__('Stop', __FILE__));
      $cmdlogic->setLogicalId('stop');
      $cmdlogic->setIsVisible(1);
      $cmdlogic->setDisplay('generic_type', 'GENERIC_ACTION');
      $cmdlogic->setDisplay('icon', '<i class="fas fa-stop"></i>');
    }
    $cmdlogic->setType('action');
    $cmdlogic->setEqLogic_id($this->getId());
    $cmdlogic->setSubType('other');
    $cmdlogic->save();

    $cmdlogic = kroombaCmd::byEqLogicIdAndLogicalId($this->getId(),'dock');
    if (!is_object($cmdlogic)) {
      $cmdlogic = new kroombaCmd();
      $cmdlogic->setName(__('Base', __FILE__));
      $cmdlogic->setLogicalId('dock');
      $cmdlogic->setIsVisible(1);
      $cmdlogic->setDisplay('generic_type', 'GENERIC_ACTION');
      $cmdlogic->setDisplay('icon', '<i class="fas fa-home"></i>');
    }
    $cmdlogic->setType('action');
    $cmdlogic->setEqLogic_id($this->getId());
    $cmdlogic->setSubType('other');
    $cmdlogic->save();
  }

Ah oui j’avais pas regarder le code plus que ça.

Mais tu réinitialises le Template à chaque save donc il remet le template du plugin.

    if (version_compare(jeedom::version(), '4.0.0') >= 0 &&  $cmdlogic->getTemplate() == "" ) {
        $cmdlogic->setTemplate('dashboard','kroomba::state');
        $cmdlogic->setTemplate('mobile','kroomba::state');
    }

Pas sûr mais à tester…

@ZygOm4t1k Oui je crois que tu as raison.
@Guigro Je viens de publier sur le market une nouvelle version où j’ai déplacé les setTemplate. Dis moi si avec cette nouvelle version tes modifs restent bien et ne sont pas oubliées à chaque sauvegarde de l’équipement.
Attention, dans cette nouvelle version j’ai aussi essayé de résoudre les problèmes de connexion avec les Roombas i7 donc il faut relancer l’installation des dépendances.

1 « J'aime »

Oh yeahhh ça marche de mon côté !
La version de @ZygOm4t1k est peut-être mieux car elle permet en cas de bug de vérifier la présence ou non d’un widget activé sur l’objet.
Pour savoir quelle est la meilleure solution je n’arrive pas à me faire d’avis, mais en tout cas maintenant ça fonctionne !

Merci beaucoup !

Merci pour le retour.
Si tu es d’accord je suis toujours preneur de tes images pour le widget etat.

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