Comprendre les bases de la création d'un plugins

Hello,

Je suis entrain de travailler sur un plugins pour Jeedom et j’essaie tant bien que mal à me familiariser avec l’architecture des dossiers,
Je me suis basé sur le tuto VDM pour la base : https://doc.jeedom.com/fr_FR/dev/tutorial_plugin

J’ai bien repris l’arborescence du dossier : https://doc.jeedom.com/fr_FR/dev/plugin_template

J’arrive bien a créer mon équipement et lui faire les actions voulus.

Maintenant je suis sur la partie du design.

J’aimerais que mon plugins ai son propre design pour afficher les informations comme il faut.

J’ai donc créer un fichier html dans le dossier : /core/template/dashboard/index.html

Sauf que je n’arrive pas à faire en sorte que le contenu de cette page html soit affiché dans ma tuile.

Le tuto VDM s’arrête avant la partie création de son propre template et j’ai l’impression que le web ne regorge pas de masse d’infos sur le sujet.

j’ai tenté d’initialisé la page dans mon fichier info.json:

,
    "widgets": [
    {
      "type": "other",
      "name": "Mon Widget Personnalisé",
      "file": "core/template/dashboard/index.html",
      "category": "energy"
    }
  ]

Mais cela n’as eu aucun effet ! Si quelqu’un vadrouille dans le coin et as la réponse je suis preneur ! merci beaucoup !

Bonjour,
Regardez du coté de la fonction toHtml dans la classe du plugin.

Merci pour ton retour, j’ai fais ca , mais sans succès :

  public function execute($_options = array()) {
      $eqlogic = $this->getEqLogic();
      switch ($this->getLogicalId()) {
        case 'refresh': 
        $this->toHtml("<div>COUCOUUU</div>");

        break;
      }
  }

je suis pas sûr d’utiliser la commande comme il faut

Non, ce n’est pas dans refresh.
C’est une fonction de la classe à définir dans votre plugin.

Le plugin officiel weather utilise toHtml comme beaucoup d’autres.

Ah, là dans mon test l’objectif était de refresh le contenu de la tuile à l’aide du bouton, je vais éplucher le plugins weather ^^ merci !

Dans ma class principale de mon widget j’ai créé cette fonction

  public function toHtml($_version = 'dashboard') {
    $replace = $this->preToHtml($_version);
    if (!is_array($replace)) {
      return $replace;
    }
    $version = jeedom::versionAlias($_version);

    $replace['#baliseTest#'] = 'Salut !!!';
    return $this->postToHtml($_version, template_replace($replace, getTemplate('core', $version, 'index', 'id_mon_plugin')));
  }

j’ai repris celle de weather et l’ai simplifié, j’ai créé un élément html dans ma page index

<center>#baliseTest#</center>

J’ai tout save, mais je ne vois pas à quel moment la fonction toHtml est appelée,

j’ai testé dans ma commande refresh d’ajouter la ligne :

$this->toHtml();

mais aucun résultat

OK ma fonction fonctionne !

En fait c’est le rafraichissement dans Jeedom qui se fait pas.

J’ai vu qu’en désactivant/ activant l’équipement il mettait à jour le thème !

Merci à toi !

C’est Jeedom qui gère l’appel à toHtml quand besoin d’afficher l’équipement.

Vous avez bien mis l’id de votre plugin à la place de 'id_mon_plugin' ?
Vous pouvez le remplacer par __CLASS__ Ca rendra cette ligne indépendante de l’ID du plugin.

Quand vous appelez $this->toHtml dans la fonction execute de la classe extends cmd, à quoi correspond $this?
L’eqLogic à réafficher ou la cmd refresh …

yes le $this fait référence à l’eqLogic , cela fonctionne bien, maintenant j’aimerais ajouter une mise à jour auto à mon plugins tous les jours à 11h10

J’ai créé dans mon fichier de configuration.php :

    <div class="form-group">
      <label class="col-sm-4 control-label">{{Auto-actualisation}}
        <sup><i class="fas fa-question-circle tooltips" title="{{Fréquence de rafraîchissement des informations}}"></i></sup>
      </label>
      <div class="col-sm-6">
        <div class="input-group">
          <input type="text" class="eqLogicAttr form-control roundedLeft" data-l1key="configuration" data-l2key="autorefresh" placeholder="{{Cliquer sur ? pour afficher l'assistant cron}}"value="10 11 * * *">
          <span class="input-group-btn">
            <a class="btn btn-default cursor jeeHelper roundedRight" data-helper="cron" title="Assistant cron">
              <i class="fas fa-question-circle"></i>
            </a>
          </span>
        </div>
      </div>
    </div>

j’arrive à définir la variable et la lire dans ma class, par contre je sais pas comment l’utiliser dans les fonction cron.

Là dans ma cron j’ai :

  public static function cron() {
    if ($_eqLogic_id == null) { //La fonction n’a pas d’argument donc on recherche tous les équipements du plugin
      $eqLogics = self::byType('edf_tempo', true);
    } else { //La fonction a l’argument id(unique) d’un équipement(eqLogic)
      $eqLogics = array(self::byId($_eqLogic_id));
    }

    foreach ($eqLogics as $edf_tempo) {
      $cmd = $edf_tempo->getCmd(null, 'refresh'); //retourne la commande "refresh si elle existe
      if (!is_object($cmd)) { //Si la commande n'existe pas
        continue; //continue la boucle
      }
      $cmd->execCmd(); //la commande existe on la lance
    }    
  }

elle tourne toutes les minutes, mais je sais pas comment comparer la valeur de

config::byKey('autorefresh', 'edf_tempo');

avec ma cron … une idée ?

J’ai également un autre problème, dans mon widget html j’ai mis la ligne :

  <span class="cmd refresh pull-right cursor" data-cmd_id="#refresh_id#">
    <i class="fas fa-sync"></i>
  </span>

Mais cela ne refresh pas la commande, j’ai l’impression qu’il me manque un bout JS

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