Notification Update plugin + core + lien change log via Telegram

Bonjour à tous,

Tout est dans le titre :slight_smile:

Je souhaiterai recevoir sur telegram les MAJ de « Plugin » et du « Core Jeedom » avec le lien hypertexte du changelog et du community du plugin concerné.

Pour pousser le rendu c’est de récupérer l’info de la Version du plugin installé et la version de la MAJ proposé.
qui pourrait donner cela :

  • Agenda V1.1 → (lien hypertexte) | (lien hypertexte) | New V1.2

Rendu final :

  • Agenda V1.1 → Changelog | Community | New V1.2

J’aimerais obtenir ça →
image

le but de cela est de ne plus avoir à ouvrir l’interface de jeedom pour avoir accès au changelog du plugin qui doit être mise jour.
Le second lien du community c’est pour voir s’il y a d’éventuel remonté de bug sur le plugin.

Je sais que c’est natif à Jeedom mais le message est pas sexy et l’information non fonctionnel.
ça donne ça →
image

Y a t-il un codeur fou qui ce balade ici pour faire un bloc code ?
Car mes compétences en php ce fond ressentir cruellement :joy:

Merci d’avance :slight_smile:

Bonjour,

Allez c’est Noël, je t’ai fait un draft de ce que tu voudrais:

$nbNeedUpdate = update::nbNeedUpdate();

$scenario->setlog('updates:'.$nbNeedUpdate);

foreach (update::all() as $update) {
  if ($update->getStatus()!='update') continue;
  if ($update->getConfiguration('doNotUpdate')==1 && $update->getType()!='core') continue;
  
  $scenario->setlog($update->getType().':'.$update->getLogicalId().' - '.$update->getLocalVersion().'/'.$update->getRemoteVersion());
  
  if ($update->getType() == 'plugin') {
    try {
      $plugin = plugin::byId($update->getLogicalId());
      $scenario->setlog('changelog:'.$plugin->getChangelog());
      $scenario->setlog('community:https://community.jeedom.com/tags/plugin-'.$plugin->getId());
    } catch (Exception $e) {

    }
  }
}

Ce code log les infos dans le log du scénario, a toi d’adapter selon ce que tu veux.

Voir doc ici API Documentation pour les fonctions disponibles sur le class update et plugin

:warning: Attention, il est possible de casser jeedom et de le rendre complétement indisponible avec ce genre de code !

2 « J'aime »

@Mips Hello bas écoute c’est mon plus beau cadeau de noël :slight_smile: je ne sais comment te remercier c’est cool en tous cas :stuck_out_tongue:
J’ai regardé les logs au niveau de ce que ca renvoie c’est que je cherche donc parfait :wink:

J’ai deux questions :

  1. Comment l’exploite dans pour qu’il soit envoyé sur Telegram pour avoir le rendu escompté comme ton mon screen ?

  2. De quel façon je peux faire en sorte qu’il ce déclenche automatiquement à chaque nouvelle update ?

Merci d’avancé pour ta réponse.

Salut

Le plus gros a ete fait par @Mips, le reste est assez basique.
Un idée :

Plutot que de mettre les infos dans la log (avec les « $scenario->setlog ») tu les mets dans une variable $message .= …
A la fin du foreach, tu ajoutes $message dans une variable jeedom

$scenario->setData('msgUpdate', $message);

Apres ton bloc code, tu ajoutes un bloc action dans lequel tu mets ton equipement Telegram est en face de message tu inserts variable(msgUpdate)

(Avant tu peux aussi mettre un bloc si/alors pour tester si cette variable n est pas vide!)

Tu mets un declencheur programmé toutes les heures sur ton scenario

1 « J'aime »

@tomitomas Merci pour ta réponse :slight_smile:

Cela donne ça niveau du code :

Niveau rendu Telegram :

image

J’aimerais rendre les liens changelog & community plus sexy et qu’on puisse cliquer dessus :slight_smile:

De cette façon la c’est peut être plus parlant :slight_smile: :
image

Comme ca :

image

Hello
3 variables + les 3 delete au sein du même scénario,autant passer par 3 tags

1 « J'aime »

Ton code ne fonctionnera que s il y a une seule mise a jour !
Si il y en a plusieurs tu n auras les infos que tu derniers plugin traité !..

(Je suis en voiture donc desole plur les indentations entre autre !)
Mais qlq chose comme ca devrait fonctionner.

$nbNeedUpdate = update::nbNeedUpdate();

if ( $nbNeedUpdate == 0 ) {
$scenario->setlog('0 update');
$messageUpdate = '';
}
else{

$messageUpdate = $nbNeedUpdate . ' Update dispo' . " \n"; 

foreach (update::all() as $update) {
  if ($update->getStatus()!='update') continue;
  if ($update->getConfiguration('doNotUpdate')==1 && $update->getType()!='core') continue;
  
  $messageUpdate  .= $update->getLogicalId().' - '.$update->getLocalVersion().'/'.$update->getRemoteVersion() . "\n";
  $scenario->setlog($update->getType().':'.$update->getLogicalId().' - '.$update->getLocalVersion().'/'.$update->getRemoteVersion());
  
  if ($update->getType() == 'plugin') {
    try {
      $plugin = plugin::byId($update->getLogicalId());
      $messageUpdate  .= '[changelog]('. $plugin->getChangelog() . ')' ."\n" ;
      $scenario->setlog('changelog:'.$plugin->getChangelog());
      $messageUpdate  .= '[community](https://community.jeedom.com/tags/plugin-'.$plugin->getId() . ')' . "\n\n\n" ;
      $scenario->setlog('community:https://community.jeedom.com/tags/plugin-'.$plugin->getId());
    } catch (Exception $e) {

    }
  }
}

}

$scenario->setData('msgUpdate', $messageUpdate);

Et ensuite avec telegram :

Ce qui donne : (a mettre en forme avec tes icons, …)

Ca ne sert a rien de supprimer la variable. Elle est reinitialisee a chaque traitement.

Enjoy !

Je suis d accord ! :slight_smile:
Mais autant y aller doucement pour commencer. Tout le monde n est pas a l aise avec les tag :wink:
Et ici 1 seule variable fait tres bien l affaire !

Conduire ou écrire du code, il faut choisir !

1 « J'aime »

Je suis passager cette fois ^^
Je ne me permettrai pas d écrire au volant !

@tomitomas merci de ta réactivité :slight_smile:

Je bloque encore car oui je suis chiant et perfectionniste lol :stuck_out_tongue:

J’aimerais obtenir ce rendu :

image

Voici ton code que j’ai essayé d’adapte avec ce que je veux mais j’y arrive pas :frowning:

// Solution trouvé et partagé par @noodom
// https://www.quackit.com/character_sets/emoji/emoji_v3.0/unicode_emoji_v3.0_characters_all.cfm
// Récupération des tags passés en paramètre.
$tags = $scenario->getTags();
$tags['#logogreen_circle#'] = "&"."#x1F7E2;";
$tags['#logoorange_circle#'] = "&"."#x1F7E0;";
$tags['#logored_circle#'] = "&"."#x1F534;";
$tags['#logoalerte#'] = "&"."#x1F6A8;";


$nbNeedUpdate = update::nbNeedUpdate();

if ( $nbNeedUpdate == 0 ) {
$scenario->setlog('0 update');
$messageUpdate = '';
}
else{
  
$messageUpdate .= 'Update disponibles : ' '#logogreen_circle# '.$nbNeedUpdate . "\n\n";  


foreach (update::all() as $update) {
  if ($update->getStatus()!='update') continue;
  if ($update->getConfiguration('doNotUpdate')==1 && $update->getType()!='core') continue;
  
  $messageUpdate  .= Plugin : .$update->getLogicalId(). "\n";
  $messageUpdate  .= '#logored_circle# Version installée : .$update->getLocalVersion(). "\n"';
  $messageUpdate  .= '#logogreen_circle# Version disponible : .$update->getRemoteVersion(). "\n\n"';
  $scenario->setlog($update->getType().':'.$update->getLogicalId().' - '.$update->getLocalVersion().'/'.$update->getRemoteVersion());
  
  if ($update->getType() == 'plugin') {
    try {
      $plugin = plugin::byId($update->getLogicalId());
      $messageUpdate  .= '[changelog]('. $plugin->getChangelog() . ')' . "\n";
      $scenario->setlog('changelog:'.$plugin->getChangelog());
      $messageUpdate  .= '[community](https://community.jeedom.com/tags/plugin-'.$plugin->getId() . ')' . "\n\n\n" ;
      $scenario->setlog('community:https://community.jeedom.com/tags/plugin-'.$plugin->getId());
    } catch (Exception $e) {

    }
  }
}

}
// MAJ des tags avant exécution de la suite du scénario
$scenario->setTags($tags);


$scenario->setData('msgUpdate', $messageUpdate);

Voici ce que j’obtien avec le code lol c’est moche :joy:

image

Cette partie la on peut evité de l’avoir ou pas ?

image

oulaaa … tu mélanges pleins de chose là … les strings ne sont pas ‹ fermés › au bon endroit…
je ne vais pas faire un cours de php ici ! :slight_smile:

et les tags que tu initialises, tu ne les utilises pas ensuite …

voici une autre proposition :

$logogreen_circle = "&"."#x1F7E2;";
$logoorange_circle = "&"."#x1F7E0;";
$logored_circle = "&"."#x1F534;";
$logoalerte = "&"."#x1F6A8;";
$logoUpdate = "&" . "#x1F504;" ;


$nbNeedUpdate = update::nbNeedUpdate();

if ( $nbNeedUpdate == 0 ) {
$scenario->setlog('0 update');
$messageUpdate = '';
}
else{
  
$messageUpdate = $logoUpdate. 'Update disponibles : ' . $logogreen_circle . ' '.$nbNeedUpdate . "\n\n";  


foreach (update::all() as $update) {
  if ($update->getStatus()!='update') continue;
  if ($update->getConfiguration('doNotUpdate')==1 && $update->getType()!='core') continue;
  
  $messageUpdate  .= 'Plugin : ' . $update->getLogicalId(). "\n";
  $messageUpdate  .= $logored_circle. ' Version installée : ' .$update->getLocalVersion(). "\n";
  $messageUpdate  .= $logogreen_circle. ' Version disponible : '.$update->getRemoteVersion(). "\n\n";
  $scenario->setlog($update->getType().':'.$update->getLogicalId().' - '.$update->getLocalVersion().'/'.$update->getRemoteVersion());
  
  if ($update->getType() == 'plugin') {
    try {
      $plugin = plugin::byId($update->getLogicalId());
      $messageUpdate  .= "<a href='".$plugin->getChangelog()."'>changelog</a>  //  ";
      $scenario->setlog('changelog:'.$plugin->getChangelog());
      $messageUpdate  .= "<a href='https://community.jeedom.com/tags/plugin-".$plugin->getId()."'>community</a>" . "\n\n\n" ;
      $scenario->setlog('community:https://community.jeedom.com/tags/plugin-'.$plugin->getId());
    } catch (Exception $e) {

    }
  }
}

}

$scenario->setData('msgUpdate', $messageUpdate);

le rendu :
image

en principe sur telegram on peut oui en ajoutant

disable_web_page_preview=true 

mais il semblerait que le plugin telegram ne le gère pas.

1 « J'aime »

@tomitomas Que dire MERCI :slight_smile: Merci @Mips également et merci @Tarlak que j’ai sollicité hors poste.

Merci de votre patiente à tous il en fallait mdrrr

voila ce que ca donne :slight_smile: dommage pour le link en dessous… Hors mit ce détail c’est top!!!

image

J’attend de voir ce que ca donne quand j’aurais plusieurs maj, mais j’ai confiance au codeur fou lol
J’espère que cela va servir à d’autre personnes

J’ai une dernière question cela prend en compte la maj du core aussi ?

Le code d’origine oui.

Hello a vous tous,

Merci a tous d’avoir participé à la requête :+1:

Voici le rendu final de mon côté.

Pour info côté télégram lunarok a fait la modification pour l’option :

disable_web_page_preview=true

Je vous laisse aller voir le poste en question

Encore merci à tous je reviendrai plus fort pour 2021 :joy::rofl:

Bonne fêtes à tous!!!

Merci pour le partage.
Pour ma part, j’ai dû modifier la ligne suivante car je récupère un status à UPDATE et non à update :

if (strtolower($update->getStatus())!='update') continue;

Salut,
Quelle version du core as tu ?

4.0.61 et 4.1.17.
Bizarrement dans le code du core, c’est bien update :thinking:

Oui, j’ai repris ca du core.
Il y a une embrouille quelque part.

Hello @noodom,

Voici mon code :

$logogreen_circle = "&"."#x1F7E2;";
$logoorange_circle = "&"."#x1F7E0;";
$logored_circle = "&"."#x1F534;";
$logoalerte = "&"."#x1F6A8;";
$logoUpdate = "&" . "#x1F504;" ;


$nbNeedUpdate = update::nbNeedUpdate();

if ( $nbNeedUpdate == 0 ) {
$scenario->setlog('0 update');
$messageUpdate = '';
}
else{
  
$messageUpdate .= 'Des mises à jours sont disponibles : ' . $logogreen_circle .' ' .$nbNeedUpdate . "\n\n";  
#$messageUpdate = $logoUpdate. 'Update disponibles : ' . $logogreen_circle . ' '.$nbNeedUpdate . "\n\n";  


foreach (update::all() as $update) {
  if ($update->getStatus()!='update') continue;
  if ($update->getConfiguration('doNotUpdate')==1 && $update->getType()!='core') continue;
  
  $messageUpdate  .= "<b>Plugin : ".$update->getLogicalId()."</b>" . "\n";
  #$messageUpdate  .= ' Plugin : ' . $update->getLogicalId(). "\n";

  $messageUpdate  .= $logored_circle. ' Version installée : ' .$update->getLocalVersion(). "\n";
  $messageUpdate  .= $logogreen_circle. ' Version disponible : ' .$update->getRemoteVersion(). "\n\n";
  $scenario->setlog($update->getType().':'.$update->getLogicalId().' - '.$update->getLocalVersion().'/'.$update->getRemoteVersion());
  
  if ($update->getType() == 'plugin') {
    try {
      $plugin = plugin::byId($update->getLogicalId());
      $messageUpdate  .= "<a href='".$plugin->getChangelog()."'>changelog</a>  |  ";
      $scenario->setlog('changelog:'.$plugin->getChangelog());
      $messageUpdate  .= "<a href='https://community.jeedom.com/tags/plugin-".$plugin->getId()."'>community</a>" . "\n\n\n" ;
      $scenario->setlog('community:https://community.jeedom.com/tags/plugin-'.$plugin->getId());
    } catch (Exception $e) {

    }
  }
}

}

$scenario->setData('msgUpdate', $messageUpdate);
$namescenario .= 'Exécuté par le Scénario : ' .$scenario->getName() .' | Le ' .date('d/m/Y');
$scenario->setData('NameScenario', $namescenario);