Bonjour à tous,
Tout est dans le titre
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 →
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 →
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
Merci d’avance
Mips
Décembre 25, 2020, 10:03
2
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
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 je ne sais comment te remercier c’est cool en tous cas
J’ai regardé les logs au niveau de ce que ca renvoie c’est que je cherche donc parfait
J’ai deux questions :
Comment l’exploite dans pour qu’il soit envoyé sur Telegram pour avoir le rendu escompté comme ton mon screen ?
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
Cela donne ça niveau du code :
Niveau rendu Telegram :
J’aimerais rendre les liens changelog & community plus sexy et qu’on puisse cliquer dessus
De cette façon la c’est peut être plus parlant :
Comme ca :
Hello
3 variables + les 3 delete au sein du même scénario,autant passer par 3 tags
1 « J'aime »
AnOnYmEnEt:
niveau du code :
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 !
Mais autant y aller doucement pour commencer. Tout le monde n est pas a l aise avec les tag
Et ici 1 seule variable fait tres bien l affaire !
Mips
Décembre 27, 2020, 1:51
9
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é
Je bloque encore car oui je suis chiant et perfectionniste lol
J’aimerais obtenir ce rendu :
Voici ton code que j’ai essayé d’adapte avec ce que je veux mais j’y arrive pas
// 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
Cette partie la on peut evité de l’avoir ou pas ?
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 !
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 :
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 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 dommage pour le link en dessous… Hors mit ce détail c’est top!!!
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 ?
Hello a vous tous,
Merci a tous d’avoir participé à la requête
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
J’ai modifié le code pour prendre en compte toute option non prévue, comme ca si Telegram en ajoute ou qu’il y en a d’autres qui serviraient à quelqu’un, suffit de faire option=valeur
En validation en beta au market demain
Encore merci à tous je reviendrai plus fort pour 2021
Bonne fêtes à tous!!!
noodom
Décembre 31, 2020, 12:21
16
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;
Mips
Décembre 31, 2020, 7:19
17
Salut,
Quelle version du core as tu ?
noodom
Décembre 31, 2020, 8:43
18
4.0.61 et 4.1.17.
Bizarrement dans le code du core, c’est bien update
Mips
Décembre 31, 2020, 8:49
19
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);