Eqlogic::getConfiguration

Bonjour,

Nouveau week end, je tente mon 1er plugin « agendad », avec l’intégration de la collecte de l’agenda et heure de réveil du script ici :

je n’arrive pas à passer mes paramètres de configuration :

  • URL (param1)
  • Nom (param2)
  • Prénom (param3)

dans mon fichier Agendad.php

<legend><i class="fas fa-cogs"></i> {{URL}}</legend>
							<div class="form-group">
								<label class="col-sm-3 control-label">{{URL Agenda}}</label>
								<div class="col-sm-7">
									<input type="text" class="eqLogicAttr form-control" data-l1key="configuration" data-l2key="param1" placeholder="{{http:xxxxxx}}"/>
								</div>
							</div>

							<div class="form-group">
								<label class="col-sm-3 control-label">{{Nom}}</label>
								<div class="col-sm-7">
									<input type="text" class="eqLogicAttr form-control" data-l1key="configuration" data-l2key="param2" placeholder="{{Nom}}"/>
								</div>
							</div>

							<div class="form-group">
								<label class="col-sm-3 control-label">{{Prenom}}</label>
								<div class="col-sm-7">
									<input type="text" class="eqLogicAttr form-control" data-l1key="configuration" data-l2key="param3" placeholder="{{Prénom}}"/>
								</div>
							</div>

et dans agendad.class.php


log::add('agendad','info','-----SET UP----------');
log::add('agendad','info','Url : '.$this->getConfiguration('param1').' -----');
log::add('agendad','info','Nom: '.$this->getConfiguration('param2').' -----');
log::add('agendad','info','Prenom: '.$this->getConfiguration('param3').' -----');
log::add('agendad','info',' ');

le log

[2021-01-08 22:32:45] agendad.INFO: -----SET UP---------- [] []
[2021-01-08 22:32:45] agendad.INFO: Url :  ----- [] []
[2021-01-08 22:32:45] agendad.INFO: Nom:  ----- [] []
[2021-01-08 22:32:45] agendad.INFO: Prenom:  ----- [] []

Pourriez-vous m’éclairer ?

Bonsoir @SWR

Vous avez placé les log::add dans une fonction de la classe agendad ?
Avec

Le résultat dans le log agendad devrait être:

[2021-01-08 22:32:45][INFO] -----SET UP----------

Probablement que le $this n’est pas un équipement. Voir dans les autres logs s’il y a des erreurs.

Merci @jpty de prendre le temps de m’aider.
Je vais essayer de te répondre le plus précisement possible, mais je découvre le PHP

Voici le log

[2021-01-09 09:06:03] agendad.INFO:  --------INIT----------- [] []
[2021-01-09 09:06:04] agendad.INFO: Time : 09:06 [] []
[2021-01-09 09:06:04] agendad.INFO: Date : 01-09-21 [] []
[2021-01-09 09:06:04] agendad.INFO: -----SET UP---------- [] []
**[2021-01-09 09:06:04] agendad.INFO: Url :  ----- [] []**
**[2021-01-09 09:06:04] agendad.INFO: Nom:  ----- [] []**
**[2021-01-09 09:06:04] agendad.INFO: Prenom:  ----- [] []**
**[2021-01-09 09:06:04] agendad.INFO: Api test : 01-09-21?firstname=xxxx&lastname=xxxxx [] []**
[2021-01-09 09:06:04] agendad.INFO: Api : https://api-calendar.calendz.app/v1/day/:01-09-21?firstname=xxxxxxx&lastname=xxxxx[] []
[2021-01-09 09:06:04] agendad.INFO: -----RAW---------- [] []
[2021-01-09 09:06:04] agendad.INFO: RAW : {"courses":[]} [] []
[2021-01-09 09:06:04] agendad.INFO: -----DECODE----- [] []
[2021-01-09 09:06:04] agendad.INFO: -----IMPORT SUCCESS----- [] []
[2021-01-09 09:06:04] agendad.INFO: -------COURSES------- [] []
[2021-01-09 09:06:04] agendad.INFO: ------------1er cours----------- [] []
[2021-01-09 09:06:04] agendad.INFO: ------------tous les cours----------- [] []

Voici le début de « function execute » du fichier agendad.class.php

    public function execute($_options = array()) {
    $eqlogic = $this->getEqLogic(); //récupère l'éqlogic de la commande $this
    switch ($this->getLogicalId()) {
        case 'refresh': // LogicalId de la commande rafraîchir que l’on a créé dans la méthode Postsave de la classe vdm . 
   // $info = $eqlogic->randomVdm();  //On lance la fonction randomVdm() pour récupérer une vdm et on la stocke dans la variable $info
    //$info = $eqlogic->getCmd('info', 'next_event_start');
      // $eqlogic->checkAndUpdateCmd('next_event_start', $info); // on met à jour la commande avec le LogicalId "story"  de l'eqlogic 
log::add('agendad','info',' ');
log::add('agendad','info',' --------INIT-----------');
log::add('agendad','info',' ');
// Step 1: Recuperation du contenu du fichier 
$alarm_hours=00;
$alarm_minutes=00;
$next_event=0;
//initialisation des variables jeedom
$eqlogic->checkAndUpdateCmd('alarm',"~~.~~");
$eqlogic->checkAndUpdateCmd('next_event_start',"");   
$eqlogic->checkAndUpdateCmd('next_event_end',"no event"); 
$eqlogic->checkAndUpdateCmd('next_event_subject',"");  
$eqlogic->checkAndUpdateCmd('next_event_room',""); 
$eqlogic->checkAndUpdateCmd('next_event_professor',"");  
$eqlogic->checkAndUpdateCmd('current_event_start',"");   
$eqlogic->checkAndUpdateCmd('current_event_end',"no event"); 
$eqlogic->checkAndUpdateCmd('current_event_subject',"");  
$eqlogic->checkAndUpdateCmd('current_event_room',""); 
$eqlogic->checkAndUpdateCmd('current_event_professor',"");  

$time_hours=date('H', time());
//force l'heure pour des tests
//$time_hours=10;

$time_minutes=date('i', time());
log::add('agendad','info','Time : '.$time_hours.":".$time_minutes);
$eqlogic->checkAndUpdateCmd('current_time_epsi',$time_hours.":".$time_minutes);  

$date_jour= date("m-d-y");
//force la date pour des tests
//$date_jour= "09-28-20";
$eqlogic->checkAndUpdateCmd('current_date_epsi'," ".$date_jour);  

log::add('agendad','info','Date : '.$date_jour);

$param1 =$this->getConfiguration('param1');
$param2 =$this->getConfiguration('param2');
$param3 =$this->getConfiguration('param3');

**log::add('agendad','info','-----SET UP----------');**
**log::add('agendad','info','Url : '.$this->getConfiguration('param1').' -----');**
**log::add('agendad','info','Nom: '.$this->getConfiguration('param2').' -----');**
**log::add('agendad','info','Prenom: '.$this->getConfiguration('param3').' -----');**
**log::add('agendad','info',' ');**
//$api = $this->getConfiguration('param1').$date_jour."?firstname=xxx&lastname=xxxxx";
log::add('agendad','info','Api test : '.$api);

$api = "https://api-calendar.calendz.app/v1/day/:".$date_jour."?firstname=xxxx&lastname=xxxx";
log::add('agendad','info','Api : '.$api);
$json = file_get_contents($api);

Pour rappel, la page de config « agendad.php » avec param1/2 et 3

<legend><i class="fas fa-cogs"></i> {{URL}}</legend>
							<div class="form-group">
								<label class="col-sm-3 control-label">{{URL Agenda}}</label>
								<div class="col-sm-7">
									<input type="text" class="eqLogicAttr form-control" data-l1key="configuration" data-l2key="param1" placeholder="{{http:xxxxxx}}"/>
								</div>
							</div>

							<div class="form-group">
								<label class="col-sm-3 control-label">{{Nom}}</label>
								<div class="col-sm-7">
									<input type="text" class="eqLogicAttr form-control" data-l1key="configuration" data-l2key="param2" placeholder="{{Nom}}"/>
								</div>
							</div>

							<div class="form-group">
								<label class="col-sm-3 control-label">{{Prenom}}</label>
								<div class="col-sm-7">
									<input type="text" class="eqLogicAttr form-control" data-l1key="configuration" data-l2key="param3" placeholder="{{Prénom}}"/>
								</div>
							</div>

$param1 =$eqlogic->getConfiguration('param1');
...

Bravo a tous les 2 @ZygOm4t1k, @jpty

Bingo, ca marche :wave:

@ZygOm4t1k : Pourrais tu expliquer pourquoi « eqlogic » et pas « this »

[2021-01-09 09:53:01] agendad.INFO:  --------INIT----------- [] []
[2021-01-09 09:53:02] agendad.INFO: Time : 09:53 [] []
[2021-01-09 09:53:02] agendad.INFO: Date : 01-09-21 [] []
[2021-01-09 09:53:02] agendad.INFO: -----SET UP---------- [] []
**[2021-01-09 09:53:02] agendad.INFO: Url : test1 ----- [] []**
**[2021-01-09 09:53:02] agendad.INFO: Nom: test2 ----- [] []**
**[2021-01-09 09:53:02] agendad.INFO: Prenom: test3 ----- [] []**
[2021-01-09 09:53:02] agendad.INFO: Api test : 01-09-21?firstname=xxx&lastname=xxxx [] []
[2021-01-09 09:53:02] agendad.INFO: Api : https://api-calendar.calendz.app/v1/day/:01-09-21?firstname=xxxxx&lastname=xxxx [] []
[2021-01-09 09:53:02] agendad.INFO: -----RAW---------- [] []
[2021-01-09 09:53:02] agendad.INFO: RAW : {"courses":[]} [] []
[2021-01-09 09:53:02] agendad.INFO: -----DECODE----- [] []
[2021-01-09 09:53:02] agendad.INFO: -----IMPORT SUCCESS----- [] []
[2021-01-09 09:53:02] agendad.INFO: -------COURSES------- [] []
[2021-01-09 09:53:02] agendad.INFO: ------------1er cours----------- [] []
[2021-01-09 09:53:02] agendad.INFO: ------------tous les cours----------- [] []

Dans le fichier agendad.class.php, il y a 2 classes:

  • agendad qui est une extension de la classe eqLogic. $this->getConfiguration est valide dans cette classe
  • agendadCmd qui est une extension de la classe cmd. Il faut un eqLogic pour accéder à sa configuration

Vous avez un format spécial pour vos logs ?

@jpty,

Je ne comprends pas ta question concernant le format spécial des logs?
J’ai ajouté, ceci pour afficher dans mes logs les infos

log::add('agendad','info',' ');
log::add('agendad','info',' --------INIT-----------');
log::add('agendad','info',' ');

Bonsoir @jpty, @ZygOm4t1k,

J’ai essayé de sortir mon code de la commande refresh pour pouvoir l’appeler du « refresh » et d’un « cron30 » et créé la fonction suivante :
mais cela bloque à $eqlogic->checkAndUpdateCmd(‹ alarm ›,".");
Il y a vraiement quelque chose qui m’échappe

function collect_agenda(){

log::add('agendad','info',' --------collect_agenda_begin-----------');
log::add('agendad','info',' ');
log::add('agendad','info',' --------INIT-----------');
log::add('agendad','info',' ');
// Step 1: Recuperation du contenu du fichier 
$alarm_hours=00;
$alarm_minutes=00;
$next_event=0;
//initialisation des variables jeedom
**$eqlogic->checkAndUpdateCmd('alarm',"~~.~~");**

  log::add('agendad','info',' --------collect_agenda_end-----------');

}

Dans quelle classe est la fonction collect_agenda ?

Selon la classe, voir ma réponse au dessus: Eqlogic::getConfiguration - #6 par jpty

Je vous ai demandé si vous aviez un format spécial pour les logs parce que vos logs ne sont pas au format standard de Jeedom : Eqlogic::getConfiguration - #2 par jpty

Bonjour @jpty,

Je suis désolé, j’ai suivi la trame du tuto VDM pour créer un plugin. C’est donc mon premier sans filet.
Je ne comprends pas la question concernant le format spécial des logs, j’ai coché « debug », j’imagine que tu attends quelque chose d’autre ?

concernant la classe du bug eqlogic->checkAndUpdateCmd('alarm',"~~.~~")
je comprends que ce n’est pas eqlogic, comment déterminer la classe ? j’ai relu ta réponse et regardé sur YouTube des tuto, mais je suis comme « une poule devant un couteau »

Bonjour,

as-tu un repo sur github pour ton plugin? si pas commences par là de toute façon c’est obligatoire pour le publier plus tard.
Ca sera plus simple ensuite pour ceux qui peuvent aider d’y avoir accès et de voir le code parce que pour le moment c’est un dialogue de sourd: tu ne comprends pas les questions posées et inversement, en tout cas pour ma part je ne comprend pas toutes les questions que tu poses.

Aussi tu devrais faire ton inscription en tant que dev, une fois validé tu auras accès à la section développeur de commmunity dans laquelle poser ce genre de question en fait.

@mips,

Déjà merci de ta réponse, avec ton message, j’ai déjà un peu l’impression de jouer dans la cours des grands.
Je reviens une fois les prérequis complétés :wink:

@mips,

Je viens de créer le Github suivant :

et j’ai accepté les conditions ici :

et lié le compte au market
image

@mips,

Peux tu me confirmer si c’est cela qu’il fallait faire STP?

J’avais flag le sujet avec un rappel pour ce matin :wink:

Je suis occupé dessus, je vais te faire un PR pour que tu puisses voir les changements.

Remarques générales que j’ai déjà vu:

  • il faut être super clean sur les indentations dans le code parce que là pour le dire sèchement: c’est le bordel! :smiley: le code est illisible.
    je ne sais pas quel éditeur tu utilises mais beaucoup gère cela normalement et propose même de formater cela automatiquement: utilises ces fonctions.
  • dans ton fichier class (et de manière général sauf que pour quelques éléments jeedom l’impose): pas de méthode (fonction) en dehors d’une classe ! donc ta fonction collect_agenda doit faire partie de la class eqlogic
  • n’hésites pas à suivre un tuto pour apprendre les bases de php si tu n’en as jamais fait

Autre remarques:

  1. j’ai l’impression que tu t’embrouilles un peu avec le concept de class, quand utiliser $quelquechose-> ou quand utiliser $this-> etc; d’où l’utilité de trouver un tuto pour les bases php;
    en 2 mots: la syntaxe -> permet d’accéder à une propriété ou une méthode de l’objet (étant une instance d’une class); donc depuis le execute tu récupères ton objet eqlogic lié et tu appelles sa méthodes collect_agenda():
    $eqlogic = $this->getEqLogic();
    switch ($this->getLogicalId()) {
      case 'refresh':
        $info = $eqlogic->collect_agenda();

et donc dans la méthode collect_agenda, « dans » ton objet eqlogic, tu es dans une des instance de la class, et pour accéder aux autres méthodes de cette même instance, tu peux utiliser le mot clé $this et plus $eqlogic comme dans la fonction ci-dessus qui était juste un nom arbitraire de variable, cela aurait pu être par exemple $monequipement = $this->getEqLogic();
$this est un mot réservé et retourne toujours l’objet courant, et donc ne peut être utilisé que dans une méthode de class.

  public function collect_agenda()
  {
    log::add('agendad', 'info', ' --------collect_agenda_begin-----------');
    log::add('agendad', 'info', ' ');
    log::add('agendad', 'info', ' --------INIT-----------');
    log::add('agendad', 'info', ' ');
    // Step 1: Recuperation du contenu du fichier
    $alarm_hours = 00;
    $alarm_minutes = 00;
    $next_event = 0;
    //initialisation des variables jeedom
    $this->checkAndUpdateCmd('alarm', "~~.~~");
    log::add('agendad', 'info', ' --------collect_agenda_end-----------');
  }
  1. sur les foreach, j’ai l’impresssion que tu inverses key et value (mais je n’ai pas vu le json donc je ne suis pas sur)
    je vois par exemple:
foreach ($jsonData as $value => $jsonKey) {

or ici le foreach va retourner la clé du tableau dans $value et la valeur dans $jsonKey donc ce n’est pas logique d’avoir nommé tes variables ainsi.

Merci @mips, j’ai bien vu ton message. je vais prendre le temps de comprendre et faire une réponse aussi construite que la tienne.

N’hésites pas si tu as des questions

Sinon je n’ai pas regardé la logique, je ne sais pas trop le but du plugin donc je n’ai pas du tout regarder cela.

Bonjour @mips,

Du positif, pour démarrer :

  • j’ai trouvé l’option d’indentation sur sublime texte (CTRL+Shift+P et cliquer sur reindent), ca fait déjà plus clair. :innocent:
  • la fonction « collect_agenda » j’ai fais des millions d’essais et d’erreurs. j’ai même réussi à planter Jeedom du PI4 et eu le plaisir d’utiliser la fonction « sudo php /var/www/html/install/restore.php » avant que ma femme passe Jeedom par la fenêtre. Je me suis résigné à faire un Docker sur un Nas pour les essais (c’est hyper rapide, je comprends mieux les adeptes). Pas tout compris, ou il faut le mettre, mais miracle, cela fonctionne.
    -En effet les classes sont obsures, j’ai regardé plusieurs tutos, assez clairs, mais dans le code du plugin, ca semble tout de suite moins clair. Aprés plusieurs itérations le résultat est satisfaisant.
    -Concernant les foreach, le script fonctionnait, j’avais fait cela ici
    Parse JSON - #11 par SWR

Ayant dit cela, je ne sais pas si cela respecte les règles de l’art. Mais comme je n’ai pas d’erreur (au début)
Etape 1 :
« Refresh » appelle la fonction
$eqlogic->collect_agenda();

et les logs nickels :wink:

[2021-01-12 21:43:56] agendad.INFO:  --------INIT collect_agenda----------- [] []
[2021-01-12 21:43:56] agendad.INFO: Time : 21:43 [] []
[2021-01-12 21:43:56] agendad.INFO: Date : 01-12-21 [] []
[2021-01-12 21:43:56] agendad.INFO: -----SET UP---------- [] []
[2021-01-12 21:43:56] agendad.INFO: Api : https://api-calendar.calendz.app/v1/day/:01-12-21?firstname=xxxx&lastname=xxx [] []
[2021-01-12 21:43:56] agendad.INFO: -----RAW---------- [] []
[2021-01-12 21:43:56] agendad.INFO: RAW : {"courses":[{xxxxxxx []
[2021-01-12 21:43:56] agendad.INFO: -----DECODE----- [] []
[2021-01-12 21:43:56] agendad.INFO: -----IMPORT SUCCESS----- [] []
[2021-01-12 21:43:56] agendad.INFO: -------COURSES------- [] []
[2021-01-12 21:43:56] agendad.INFO: ------------1er cours----------- [] []
[2021-01-12 21:43:56] agendad.INFO: ------------#0----------- [] []
[2021-01-12 21:43:56] agendad.INFO: Date          : 01/12/21 [] []
[2021-01-12 21:43:56] agendad.INFO: Start~End  :08:00~10:00 [] []
[2021-01-12 21:43:56] agendad.INFO: Sujet          :  [] []
[2021-01-12 21:43:56] agendad.INFO: Professeur : [] []
[2021-01-12 21:43:56] agendad.INFO: Room         : N112 [] []
[2021-01-12 21:43:56] agendad.INFO: wake-up     : 07:00 [] []
[2021-01-12 21:43:56] agendad.INFO: ------------tous les cours----------- [] []
[2021-01-12 21:43:56] agendad.INFO: ------------#0----------- [] []
[2021-01-12 21:43:56] agendad.INFO: Date           : 01/12/21 [] []
[2021-01-12 21:43:56] agendad.INFO: Start~End  :08:00~10:00 [] []
[2021-01-12 21:43:56] agendad.INFO: Sujet          : [] []
[2021-01-12 21:43:56] agendad.INFO: Professeur :  [] []
[2021-01-12 21:43:56] agendad.INFO: Room         : N112 [] []
[2021-01-12 21:43:56] agendad.INFO: ****Past event**** [] []
[2021-01-12 21:43:56] agendad.INFO: ------------#1----------- [] []
[2021-01-12 21:43:56] agendad.INFO: Date           : 01/12/21 [] []
[2021-01-12 21:43:56] agendad.INFO: Start~End  :10:00~12:00 [] []
[2021-01-12 21:43:56] agendad.INFO: Sujet          :  [] []
[2021-01-12 21:43:56] agendad.INFO: Professeur :  [] []
[2021-01-12 21:43:56] agendad.INFO: Room         : N112 [] []
[2021-01-12 21:43:56] agendad.INFO: ****Past event**** [] []
[2021-01-12 21:43:56] agendad.INFO: ------------#2----------- [] []
[2021-01-12 21:43:56] agendad.INFO: Date           : 01/12/21 [] []
[2021-01-12 21:43:56] agendad.INFO: Start~End  :13:00~15:00 [] []
[2021-01-12 21:43:56] agendad.INFO: Sujet          :  [] []
[2021-01-12 21:43:56] agendad.INFO: Professeur :  [] []
[2021-01-12 21:43:56] agendad.INFO: Room         : N302 [] []
[2021-01-12 21:43:56] agendad.INFO: ****Past event**** [] []
[2021-01-12 21:43:56] agendad.INFO: ------------#3----------- [] []
[2021-01-12 21:43:56] agendad.INFO: Date           : 01/12/21 [] []
[2021-01-12 21:43:56] agendad.INFO: Start~End  :15:00~17:00 [] []
[2021-01-12 21:43:56] agendad.INFO: Sujet          : [] []
[2021-01-12 21:43:56] agendad.INFO: Professeur : [] []
[2021-01-12 21:43:56] agendad.INFO: Room         : N302 [] []
[2021-01-12 21:43:56] agendad.INFO: ****Past event**** [] []
[2021-01-12 21:43:56] agendad.INFO:  --------END collect_agenda----------- [] []

Etape 2
Cron appelle la fonction
$eqlogic->collect_agenda();
Et là…c’est le bug

[2021-01-12 21:44:03] agendad.ERROR: Erreur sur la fonction cron du plugin : Call to a member function collect_agenda() on null [] []

Je mets à jour le github

Pourrais tu jeter un oeil STP en particulier sur le CRON ?
Merci d’avance

Je n’ai pas encore regardé mais je suppose que $eqlogic n’est pas défini.

Il n’y a pas de magie, il faut mettre quelque chose dans ta variable $eqlogic (et ici tu veux y mettre ton équipement) avant d’appeler une de ses fonctions, ce n’est pas parce que tu la nommés ainsi qu’il va « comprendre »