Récupérer version plugin via php

Bonjour,

Je viens réclamer votre aide pour une chose qui me semblait simple mais qui me fait me tirer les cheveux depuis plusieurs heures. Malgré mes recherches dans le code pour trouver « comment jeedom fait », je ne trouve pas comment récupérer la version d’un plugin (ex: openzwave) via du code php.
J’aimerai pouvoir faire cela car j’ai un script qui modifie des fichiers de plugins, et je souhaiterai vérifier la bonne version de celui-ci pour éviter tout soucis.

Merci d’avance pour votre aide !

Hello

As-tu cherché dans la doc php ?
https://doc.jeedom.com/dev/phpdoc/4.1/

La chose à savoir c’est que les plugins et la version du core sont traités pas la classe update donc voilà un exemple avec un bloc code

$plugins=update::all();
foreach($plugins as $plugin) {
    $scenario->setLog($plugin->getId().' '.$plugin->getName().' '.$plugin->getLocalVersion().' '.$plugin->getStatus());
}

Pour le reste attention quand même quand on joue avec les sources. On a vite fait de tout casser et on se prive de support

Pas mal ton petit bloc
j’ai tenté une maj sur un plugin avec une condition sur le nom et un
$plugin->getUpdate();
je me suis pris en retour
Call to undefined method update::getUpdate()

c’est peut-être pas la bonne methode … ?

Comme il n’y a pas de fonction getUpdate() c’est logique. Tu peux exploiter getRemoteVersion() à la place et comparer pour savoir s’il y a une mise à jour

Tu appelles ça une doc?
Un inventaire tout au plus!

La forme est pas terrible mais le fond est juste, ça manque cruellement de commantaire…

C’est pas le sujet. Et de toute façon, il y a pas mieux…

Salut,

Un petit algo pour mettre à jour un plugin à partir de son nom :


$nomPluginAUpdater = "nom_du_plugin";

foreach (update::all() as $update) {
    $monUpdate = $update->getName();
    if ($monUpdate == $nomPluginAUpdater) {
        $update->doUpdate();
    }
}

Actuellement inclus dans un scénario (lancé à intervalles réguliers) qui boucle sur la liste des plugins à mettre à jour, quelques asks (confirmation de mise à jour, choix de plugins à mettre à jour, …) et ça fait plutôt bien le job depuis Discord (ou autre) :slight_smile:

3 « J'aime »

@naboleo J 'ai effectivement cherché dans la doc php oui (c’est d’ailleurs comme ça que j’ai su récupérer la version de jeedom). Mais comme le dit @ktn c’est pas vraiment une doc « digne de ce nom », mais plus un aiguillage, qui ne m’a malheureusement pas aidé plus que ça (mais bon comme tu dit on va pas re-ouvrir le débat).
Pour le support ça ne me pose pas de soucis car tout est fait dans un jeedom de test, et en cas de soucis avec le jeedom de prod les sauvegardes (vm) sont là. Qui plus est la plupart des modifications que je fait sont des bêtises (ex: ajouts de commandes à l’inclusion d’un module via le json, réduction du time-out de réponse au ping du plugin network, etc.).
En tout cas merci de ton aide ça fonctionne super !

@noodom Je garde ça dans un coin ça pourrait me servir sait-on jamais haha, merci !

Merci Bruno c’est beaucoup plus prés de ce que je cherche a faire

@naboleo la fonction je l’ait trouvé dans la "doc" et le faite de savoir si il y a une mise a jours est déjà renseigné dans ton bloc …

l’idée bien perçue par bruno est depuis un bloc mettre à jour automatiquement des plugins (choisis) digne de confiance !

Si cela peut vous interesser j’ai une ptite fonction perso qui regarde tous les pugins a mettre à jour et renvoi un json contenant une la liste des plugins à mettre à jour (nom, version courante et nouvelle version)
Je l’utilise au travers d’un script qui s’excute tous les jours et qui m’envoi un etat de santé de mon jeedom …sous cette forme (la partie update des plugins est siuté dans la partie MAJ) :



public static function getUpdatesInfo($scenario) {
      	$response=array();
      	$start_time = microtime(true);
      
      	$updateResponse=array();
        foreach(update::all() as $upd){
            if ($upd->getStatus() != 'ok') {
                 array_push($updateResponse,array('name'=>$upd->getName(),'type'=>$upd->getType(),'currentVersion'=>$upd->getLocalVersion(),'newVersion'=>$upd->getRemoteVersion()));
            }
        }

      	$response=array('nbUpdate'=>update::nbNeedUpdate(),'updateList'=>$updateResponse);

      	return self::buildResponse(''.__FUNCTION__.'',(microtime(true) - $start_time),$response);  
    }

private static function buildResponse($function,$elapseTim,$response) {
      	return json_encode(array('operationName'=>$function,'elapseTime'=>$elapseTim ,'result'=>$response));
    }
  

Sur si cela interesse je peux fournir les class custom de mes fonctions et le script a scheduler
le script ressemble à ça :

require_once dirname(__FILE__) . '/../../data/php/monitoring.function.class.php';
require_once dirname(__FILE__) . '/../../data/php/notification.function.class.php';
$message='';
$message = notificationFunction::writeLine('<b><u>'.'Etat de santé du Jeedom'.'</u></b>',true);
$message .= notificationFunction::writeLine("\n",true);
$message .= notificationFunction::buildCommonTelegramMessage($scenario,monitoringFunction::getDependencies($scenario),'Dependances : ');
$message .= notificationFunction::writeLine("\n",true);
$message .= notificationFunction::buildCommonTelegramMessage($scenario,monitoringFunction::getDaemon($scenario),'Démons : ');
$message .= notificationFunction::writeLine("\n",true);
$message .= notificationFunction::buildTelegramUpdateInfo(monitoringFunction::getUpdatesInfo($scenario),'MAJ : ');
$message .= notificationFunction::writeLine("\n",true);
$message .= notificationFunction::buildTelegramConnexionInfo(monitoringFunction::getConnexionInfo($scenario), 'Connexion info : ','30');
$message .= notificationFunction::writeLine("\n",true);
$message .= notificationFunction::buildTelegramBatteriesInfo($scenario,monitoringFunction::getBatteryInfo($scenario),'Batteries info :',30);
$message .= notificationFunction::writeLine("\n",true);
$message .= notificationFunction::buildTelegramJeedomHealth($scenario,monitoringFunction::getJeedomHealth($scenario),'Santé :');
$message .= notificationFunction::writeLine("\n",true);
$message .= notificationFunction::buildTelegramBackupOK($scenario,monitoringFunction::isBackupOK($scenario,date('Y-m-d')), 'Dernier backup : ');

//to do last communication with array of equipment name
notificationFunction::sendTelegramMessage($scenario,'christophe',NULL,NULL,$message);

Personnellement je préfère maitriser mes MAJ … mais il est tout a fait possible de faire la maj automatiquement lorsqu’une nouvelle version est dispo
@chris94440

2 « J'aime »

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