PHP: Parcourir les commandes d'un equipement

Bonjour,

J’ai le bloc code suivant:

cmd::byString('#[Environnement][Pluie1h_OW][1]#')->event($pluie[0]);
cmd::byString('#[Environnement][Pluie1h_OW][2]#')->event($pluie[1]);
cmd::byString('#[Environnement][Pluie1h_OW][3]#')->event($pluie[2]);
cmd::byString('#[Environnement][Pluie1h_OW][4]#')->event($pluie[3]);
cmd::byString('#[Environnement][Pluie1h_OW][5]#')->event($pluie[4]);

que j’aimerai bien remplacer par:

$ListeCommandes = cmd::byEqLogicId('#[Environnement][Pluie1h_OW]'->getId());
    foreach($ListeCommandes as $commandes)
    {
      $commandes->event($pluie[$commandes->getName()-1]);      
    }

Mais la premiere ligne me renvoie Call to a member function getId() on string
OK je comprends que faut pas faire une getId sur une chaine, mais faut faire quoi alors ?

Bonjour,

Placez le getid() hors de la parenthèse.
D’abord on récupère l’objet cmd ensuite on récupère l’id

$ListeCommandes = cmd::byEqLogicId('#[Environnement][Pluie1h_OW]#')->getId();

Edit : il manquait un # aussi.

Si vous avez un doute, écrivez votre code en plusieurs lignes au lieu de vouloir tout faire en une ligne.

Mais en fait cela ne fonctionnera toujours pas car vous récupérez un id, donc un entier, pas une liste de commandes.
Donc je ne sais pas pq vous vouliez rajouter le getid()

Comme je l’avais déjà testé sans succès:

$ListeCommandes = cmd::byId('#[Environnement][Pluie1h_OW]#');
foreach($ListeCommandes as $commandes)
    {
      $commandes->event($pluie[$commandes->getName()-1]);
      $scenario->setLog('Nom cmd='.$commandes->getName());
    }

Je n’ai certes pas de message d’erreur mais je ne rentre pas dans la boucle (pas de log).

J’en reviens donc à ma question du titre: Comment parcourir les commandes d’un equipement (sans me les faire une par une comme dans mon premier post)

Salut,

Pour ça il faut déjà avoir à disposition un objet représentant l’équipement (XXX = id de l’équipement) :

$eqLogic = eqLogic::byId(XXX);

Puis pour récupérer les commandes :

$cmdsInArray = $eqLogic->getCmd();

que les commandes de type info (les commandes action en remplaçant info par action) :

$cmdsInArray = $eqLogic->getCmd('info');
2 « J'aime »

Il me manquait qq connaissances pour comprendre cette phrase. Mais avec les explications de @Salvialf , je comprends mieux votre remarque.

Merci à vous 2 de partager vos connaissances.

Pour la posterité:

$Equipement = eqLogic::byId(220);  //creation d'un objet représentant l’équipement 220 [Environnement][Pluie1h_OW]
$ListeCommandes = $Equipement->getCmd(); //creation de la liste des commandes
    foreach($ListeCommandes as $commandes)
    {
      $commandes->event($pluie[$commandes->getName()-1]); //Met la valeur pluie[x-1] dans chaque commande info [x]
    }

Si tu veux gagner une ligne :

$ListeCommandes = eqLogic::byId(220)->getCmd();

Oui en effet.
Au passage, j’ai mis le nom plu^tot que l’id (qui me semble personnellement plus explicite)

$ListeCommandes = eqLogic::byString('#[Environnement][Pluie1h_OW]#')->getCmd();

Par contre je m’étonne de ne pas trouver le eqLogic::byString dans la doc de l’API: Incompréhension de ma part ou oubli dans la doc ?

Besoin de lunette ?

1 « J'aime »

Plutôt une mise à jour de mon lien…Du coup mon lien ne serait pas bon ?
https://jeedom.github.io/documentation/phpdoc/classes/eqLogic.html#methods

image

Edit: Avec le bon lien effectivement c’est mieux: API Documentation

1 « J'aime »

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