[TUTO] RTE Tempo - Envoyer un récap sur Telegram

Ola !

Afin de recevoir via le plugin telegram les infos du plugin RTE Tempo

Ca vaut ce que cela vaut, je ne suis pas dev et je suis sûr qu’il y a moyen d’optimiser, mais j’ai fait avec mes faibles connaissances PHP et de l’API Jeedom

En gros voilà ce que cela donne
image

Je viendrai poster mon code ici…

// Renseigner la commande Jeedom qui vous permet d'envoyer un Telegram
$cmd_id = '#[Communication][Telegram][A Moi]#';

// Récupération des infos du plugin RTE donc à adapter a votre cas
$today = cmd::byString('#[Home][Tempo][Aujourdhui]#')->execCmd();
$tomorrow = cmd::byString('#[Home][Tempo][Demain]#')->execCmd();
$jb = cmd::byString('#[Home][Tempo][Jours Bleus restants]#')->execCmd();
$jw = cmd::byString('#[Home][Tempo][Jours Blancs restants]#')->execCmd();
$jr = cmd::byString('#[Home][Tempo][Jours Rouges restants]#')->execCmd();
$total_jb = cmd::byString('#[Home][Tempo][Total jours Bleus]#')->execCmd();
$total_jw = cmd::byString('#[Home][Tempo][Total jours Blancs]#')->execCmd();
$total_jr = cmd::byString('#[Home][Tempo][Total jours Rouges]#')->execCmd();

// Liste des icônes
/*$iconeBleu = '&' . '#128998';
$iconeBlanc = '&' . '#11036';
$iconeRouge = '&' . '#128997';
$liste_icones = array($iconeBleu, $iconeBlanc, $iconeRouge);
*/
$liste_icones = array('&' . '#128998', '&' . '#11036', '&' . '#128997');
$couleurs_uk = array("BLUE", "WHITE", "RED");

// Si votre scénario est configuré pour avoir des logs, ce qui suit vous permet
// de valider que vous récupérez bien l'ensemble des valeurs de votre équipement RTE
$scenario->setLog('Aujourd\'hui     -> ' . $today);
$scenario->setLog('Demain          -> ' . $tomorrow);
$scenario->setLog('Bleus Restants  -> ' . $jb);
$scenario->setLog('Blancs Restants -> ' . $jw);
$scenario->setLog('Rouges Restants -> ' . $jr);
$scenario->setLog('Total Bleus     -> ' . $total_jb);
$scenario->setLog('Total Blancs    -> ' . $total_jw);
$scenario->setLog('Total Rouges    -> ' . $total_jr);

$journees = '<b>*** EDF Tempo ***</b>';
$bilan = '<b>Reste :</b>';

// Création du message qui va être envoyé
$journees .= "\n" . 'Aujourd\'hui : ' . str_replace($couleurs_uk, $liste_icones, $today). "\n";
$journees .= 'Demain : ' . str_replace($couleurs_uk, $liste_icones, $tomorrow). "\n";


// Construction du bilan
$bilan .= "\n" . $liste_icones[0] . ' : ' . $jb . ' / ' . $total_jb . "\n" . $liste_icones[1] . ' : ' . $jw . ' / ' . $total_jw . "\n" . $liste_icones[2] . ' : ' . $jr . ' / ' . $total_jr . "\n";

// Je concatène les 2, celui qui ne veut pas le bilan laisse juste =$journees;
$messages = $journees . "\n" . $bilan;

$cmd = cmd::byString($cmd_id);
$cmd->execCmd($options = array('title' => "empty=1", 'message' => $messages), $cache = 0);
1 « J'aime »

@Phpvarious

Si tu passes par là et que tu as 30 sec pour regarder mon code dès fois que j’ai fait une c… même si c’est fonctionnel mais bon.

Merci :pray: :pray: :beers: :beers:

Hello,

Ci-dessous quelques propositions d’optimisations :

  • une seule variable $journees pour un seul champ construit au final
  • définition des icônes dans des variables
  • remplacement des tests par un str_replace (tableau des icônes)

Non testé donc à valider si pas d’erreurs de saisie :slight_smile:
(Pour l’optimisation en commentaire, ajouter la vérification si le champ n’est pas vide si besoin)

/* Variables Jeedom à créer (enlever le + et les espaces entre & et # !!)
JBleu valeur :  & + #128998
JBlanc valeur : & + #11036
JRouge valeur : & + #128997
*/

// Renseigner la commande Jeedom qui vous permet d'envoyer un Telegram
$cmd_id = '#[Communication][Telegram][A Moi]#';

// On récupère les infos du plugin RTE donc a adapter a votre cas
$today = cmd::byString('#[Home][Tempo][Aujourdhui]#')->execCmd();
$tomorrow = cmd::byString('#[Home][Tempo][Demain]#')->execCmd();
$jb = cmd::byString('#[Home][Tempo][Jours Bleus restants]#')->execCmd();
$jw = cmd::byString('#[Home][Tempo][Jours Blancs restants]#')->execCmd();
$jr = cmd::byString('#[Home][Tempo][Jours Rouges restants]#')->execCmd();
$total_jb = cmd::byString('#[Home][Tempo][Total jours Bleus]#')->execCmd();
$total_jw = cmd::byString('#[Home][Tempo][Total jours Blancs]#')->execCmd();
$total_jr = cmd::byString('#[Home][Tempo][Total jours Rouges]#')->execCmd();

//traduction juste pour le fun
$couleurs_uk = array("BLUE", "WHITE", "RED");
$couleurs_fr = array("Bleu", "Blanc", "Rouge");
$today = str_replace($couleurs_uk, $couleurs_fr, $today);
$tomorrow = str_replace($couleurs_uk, $couleurs_fr, $tomorrow);

// Si votre scénario est configuré pour voir des logs,ce qui suit vous permet de valider que vous récupérez
// bien l'ensemble des valeurs de votre équipement RTE
$scenario->setLog('Aujourd\'hui     -> ' . $today);
$scenario->setLog('Demain          -> ' . $tomorrow);
$scenario->setLog('Bleus Restants  -> ' . $jb);
$scenario->setLog('Blancs Restants -> ' . $jw);
$scenario->setLog('Rouges Restants -> ' . $jr);
$scenario->setLog('Total Bleus     -> ' . $total_jb);
$scenario->setLog('Total Blancs    -> ' . $total_jw);
$scenario->setLog('Total Rouges    -> ' . $total_jr);

$journees = '*** EDF Tempo ***';
$bilan = '';

// Liste des icônes
$iconeBleu = '&' . '#128998';
$iconeBlanc = '&' . '#11036';
$iconeRouge = '&' . '#128997';

// Jour courant
if ($today == 'Bleu') {
    $journees =  $journees . '\n' . 'Aujourd\'hui : ' . $iconeBleu . '\n';
} else if ($today == 'Blanc') {
    $journees = $journees . '\n' . 'Aujourd\'hui : ' . $iconeBlanc . '\n';
} else if ($today == 'Rouge') {
    $journees = $journees . '\n' . 'Aujourd\'hui : ' . $iconeRouge . '\n';
}

// Lendemain
if ($tomorrow == 'Bleu') {
    $journees = $journees . 'Demain : ' . $iconeBleu . '\n';
} else if ($tomorrow == 'Blanc') {
    $journees = $journees . 'Demain : ' . $iconeBlanc . '\n';
} else if ($tomorrow == 'Rouge') {
    $journees = $journees . 'Demain : ' . $iconeRouge . '\n';
}

// Optimisation à  tester : Code précédent Jour courant et Lendemain à remplacer par :
/*
$liste_icones = array($iconeBleu, $iconeBlanc, $iconeRouge);
$journees = $journees . '\n' . 'Aujourd\'hui : ' . str_replace($couleurs_fr, $liste_icones, $today). '\n';
$journees = $journees . '\n' . 'Demain : ' . str_replace($couleurs_fr, $liste_icones, $tomorrow). '\n';
*/

// Construction du bilan
$bilan = 'Reste :' . '\n' . $iconeBleu . ' : ' . $jb . ' / ' . $total_jb . '\n' . $iconeBlanc . ' : ' . $jw . ' / ' . $total_jw . '\n' . $iconeRouge . ' : ' . $jr . ' / ' . $total_jr . '\n';

// Je concatène les 2, celui qui ne veut pas le bilan laisse juste $demain;
$messages = $journees . '\n' . $bilan;

$cmd = cmd::byString($cmd_id);
$cmd->execCmd($options = array('title' => "empty=1", 'message' => $messages), $cache = 0);

Merciiii

Je vais regarder cela de pret, ca va me permettre d’apprendre un peu plus

Si je ne met pas « \n » donc guillemet a la place des simples quote, ca affiche le \n mais ne fait pas le retour a la ligne…

La ca me depasse donc en remettant entre guillement c’est bon.

Maintenant je vais essayer de comprendre l’optimisation en commentaire lol

Sa va être dur de mieux optimiser derrière @noodom :wink:

petite contribution quand même :
Je supprimerai la trad qui ne sert que pour le log

//traduction juste pour le fun
$couleurs_uk = array("BLUE", "WHITE", "RED");
//$couleurs_fr = array("Bleu", "Blanc", "Rouge");
//$today = str_replace($couleurs_uk, $couleurs_fr, $today);
//$tomorrow = str_replace($couleurs_uk, $couleurs_fr, $tomorrow);

sa implique de modifier de remplacer $couleurs_fr par $couleurs_uk sur cette optimisation :

$journees = $journees . '\n' . 'Aujourd\'hui : ' . str_replace($couleurs_uk, $liste_icones, $today). '\n';
$journees = $journees . '\n' . 'Demain : ' . str_replace($couleurs_uk, $liste_icones, $tomorrow). '\n';

sur cette même optimisation :
$journees = $journees . '\n' . 'Aujourd... peut s’écrire $journees .= '\n' . 'Aujourd...

Oui, j’avais laissé la traduction à cause du commentaire « juste pour le fun » :yum: Je sentais que c’était important.

Pour la dernière optimisation (.=), j’avais hésité à l’ajouter pour le perdre définitivement ou pas :wink:

Bon voila le dernier code produit grâce a vous 2

// Renseigner la commande Jeedom qui vous permet d'envoyer un Telegram
$cmd_id = '#[Communication][Telegram][A Moi]#';

// Récupération des infos du plugin RTE donc à adapter a votre cas
$today = cmd::byString('#[Home][Tempo][Aujourdhui]#')->execCmd();
$tomorrow = cmd::byString('#[Home][Tempo][Demain]#')->execCmd();
$jb = cmd::byString('#[Home][Tempo][Jours Bleus restants]#')->execCmd();
$jw = cmd::byString('#[Home][Tempo][Jours Blancs restants]#')->execCmd();
$jr = cmd::byString('#[Home][Tempo][Jours Rouges restants]#')->execCmd();
$total_jb = cmd::byString('#[Home][Tempo][Total jours Bleus]#')->execCmd();
$total_jw = cmd::byString('#[Home][Tempo][Total jours Blancs]#')->execCmd();
$total_jr = cmd::byString('#[Home][Tempo][Total jours Rouges]#')->execCmd();

// Liste des icônes
$iconeBleu = '&' . '#128998';
$iconeBlanc = '&' . '#11036';
$iconeRouge = '&' . '#128997';
$liste_icones = array($iconeBleu, $iconeBlanc, $iconeRouge);

$couleurs_uk = array("BLUE", "WHITE", "RED");

// Si votre scénario est configuré pour avoir des logs, ce qui suit vous permet
// de valider que vous récupérez bien l'ensemble des valeurs de votre équipement RTE
$scenario->setLog('Aujourd\'hui     -> ' . $today);
$scenario->setLog('Demain          -> ' . $tomorrow);
$scenario->setLog('Bleus Restants  -> ' . $jb);
$scenario->setLog('Blancs Restants -> ' . $jw);
$scenario->setLog('Rouges Restants -> ' . $jr);
$scenario->setLog('Total Bleus     -> ' . $total_jb);
$scenario->setLog('Total Blancs    -> ' . $total_jw);
$scenario->setLog('Total Rouges    -> ' . $total_jr);

$journees = '*** EDF Tempo ***';
$bilan = 'Reste :';

// Création du message qui va être envoyé
$journees .= "\n" . 'Aujourd\'hui : ' . str_replace($couleurs_uk, $liste_icones, $today). "\n";
$journees .= 'Demain : ' . str_replace($couleurs_uk, $liste_icones, $tomorrow). "\n";


// Construction du bilan
$bilan .= "\n" . $iconeBleu . ' : ' . $jb . ' / ' . $total_jb . "\n" . $iconeBlanc . ' : ' . $jw . ' / ' . $total_jw . "\n" . $iconeRouge . ' : ' . $jr . ' / ' . $total_jr . "\n";

// Je concatène les 2, celui qui ne veut pas le bilan laisse juste =$journees;
$messages = $journees . "\n" . $bilan;

$cmd = cmd::byString($cmd_id);
$cmd->execCmd($options = array('title' => "empty=1", 'message' => $messages), $cache = 0);

Testé ca me donne bien le même resultat sur telegram

Mon premier code n’etait pas optimisé, mais bon fonctionnel et j’avais reussi a trouver comment recuperer les infos, pour un novice je suis assez content qd meme ! lol

J’avais un doute en effet, donc il faut garder les doubles guillemets.

Pas si compliqué, c’est surtout que ça évite de dupliquer du code identique (à éviter quand c’est possible en règle générale) et ça raccourcit le code pour une meilleure lisibilité (quoique subjectif).

// Liste des icônes
//$iconeBleu = '&' . '#128998';
//$iconeBlanc = '&' . '#11036';
//$iconeRouge = '&' . '#128997';
//$liste_icones = array($iconeBleu, $iconeBlanc, $iconeRouge);
$liste_icones = array('&' . '#128998', '&' . '#11036', '&' . '#128997');

...............

$bilan = 'Reste :' . '\n' . $liste_icones[0] . ' : ' . $jb . ' / ' . $total_jb . '\n' . $liste_icones[1] . ' : ' . $jw . ' / ' . $total_jw . '\n' . $liste_icones[2] . ' : ' . $jr . ' / ' . $total_jr . '\n';

je n’ai pas encore ces reflexes d’optimisation
je reflechis basique, j’ecris tout pour que ca marche

apres je comprends ce que tu as proposé.
il faudra pour mon prochain truc que je tente la meme chose de moi meme si je trouve les trucs pour le faire comme le $journees .= qui vaut $journees = $journees .

Super j’ai appris pleins de trucs

GRANDS MERCI A VOUS 2
:pray: :pray: :beers: :beers:

Juste pour le fun :partying_face:

  • Passage de la commande Telegram en tag
  • Passage de l’équipement du plugin RTE en tag
  • Passage des commandes infos et de leur valeur dans des tableaux

// Récupération des tags
$tags = $scenario->getTags();
// Récupération de la commande Telegram qui vous permet d'envoyer un Telegram
$cmd_id = '#' . $tags['#telegramCmd#'] . '#';

// Equipement Tempo
$eqTempo = $tags['#widgetTempo#'];

// Récupération des infos du plugin RTE donc à adapter à votre cas
// Liste des commandes infos à récupérer
$infos = array("Aujourdhui", "Demain", 
               "Jours Bleus restants", "Jours Blancs restants", "Jours Rouges restants",
               "Total jours Bleus", "Total jours Blancs", "Total jours Rouges");

// $infos_jeedom : Tableau des valeurs des infos récupérées
$infos_jeedom = array_map(function($info) use ($eqTempo) {
  $cmd_info = '#' . $eqTempo . '[' . $info . ']#';
  return cmd::byString($cmd_info)->execCmd();
}, $infos);

// Log de la commande Telegram passée en tag
$scenario->setLog('commande Telegram : ' . $cmd_id);

// Log des commandes infos du plugin RTE
array_map(function($info, $info_jeedom) use ($scenario) {
  $scenario->setLog($info . ' : ' . $info_jeedom);
}, $infos, $infos_jeedom);

// Liste des icônes
$liste_icones = array('&' . '#128998', '&' . '#11036', '&' . '#128997');
$couleurs_uk = array("BLUE", "WHITE", "RED");

$journees = '*** EDF Tempo ***' . "\n";
$bilan = 'Reste :' . "\n";

// Création du message qui va être envoyé
$journees .= 'Aujourd\'hui : ' . str_replace($couleurs_uk, $liste_icones, $infos_jeedom[0]). "\n";
$journees .= 'Demain : ' . str_replace($couleurs_uk, $liste_icones, $infos_jeedom[1]). "\n";

$bilan = $liste_icones[0] . ' : ' . $infos_jeedom[2] . ' / ' . $infos_jeedom[5] . "\n"
  	   . $liste_icones[1] . ' : ' . $infos_jeedom[3] . ' / ' . $infos_jeedom[6] . "\n" 
  	   . $liste_icones[2] . ' : ' . $infos_jeedom[4] . ' / ' . $infos_jeedom[7] . "\n";

// Je concatène les 2, celui qui ne veut pas le bilan laisse juste =$journees;
$messages = $journees . "\n" . $bilan;

$cmd = cmd::byString($cmd_id);
$cmd->execCmd($options = array('title' => "empty=1", 'message' => $messages), $cache = 0);

Seul petite différence, qui a son importance, c’est qu’il ne faut pas renommer sont équipement, car il me semble que écrit comme sa dans un tag, le rename (id) ne suivra pas dans le scénario. a tester :wink:

Coupure réseau en plein enregistrement de mon post précédent ! J’ai complété l’intro d’explications.

Pour la commande Telegram, on est d’accord : j’ai suivi le scénario original, mais pour ma part, je fais autrement en effet :je crée un tag pour le contenu du message et j’appelle la commande Telegram (en lui passant le tag du message) depuis un bloc Action après le bloc code.

La ca y est je suis perdu lol

En fait tu ajoutes un bloc action avec la commande pour envoyer sur telegram ou autre et tu y met un tag que tu remplis ds le bloc code ?

Tt ca cest api jeedom et jai deja eu du mal de trouver mes simples trucs alors la je suis ébloui car du coup jen apprends et je trouve cela plus efficace

En fait, c’est juste pour ajouter à la facilité d’utilisation (ou de partage) : ça permet de ne pas toucher au contenu du bloc code et donc de limiter les erreurs en personnalisant le scénario.
Tout dépend donc du but et de l’utilisation du scénario pour le choix du code et des optimisations (priorité de lisibilité, partage, tuto, efficacité, générique, …)

1 « J'aime »

Ah mais je suis pour.

Mais depuis le bloc code je ne sais pas comment renvoyer le message en tag ou autre vers une action jeedom qui contient lenvoie telegram. Je vais chercher et analyser tt ca

Merci

// Récupération des tags
$tags = $scenario->getTags();

// ajout d'un tag
$tags['#message#'] = 'Mon message'

// sauvegarde des tags (et donc le tag(message) )
$scenario->setTags($tags);

Et ensuite, il suffit d’appeler la commande Telegram dans un bloc Action du scénario avec comme contenu du message à envoyer : tag(message)

Bon j’ai une erreur

-- Start : Scenario lance manuellement.
[2023-03-28 01:15:18][SCENARIO] - Exécution du sous-élément de type [action] : action
[2023-03-28 01:15:18][SCENARIO] Mise à jour du tag #widgetTempo# => [Home][Tempo]
[2023-03-28 01:15:18][SCENARIO] - Exécution du sous-élément de type [action] : code
[2023-03-28 01:15:18][SCENARIO] Exécution d'un bloc code 
[2023-03-28 01:15:18][SCENARIO] syntax error, unexpected '$scenario' (T_VARIABLE)
[2023-03-28 01:15:18][SCENARIO] - Exécution du sous-élément de type [action] : action
[2023-03-28 01:15:18][SCENARIO] Exécution de la commande  [Communication][Telegram][A Moi] avec comme option(s) : {"background":"0","title":"empty=1","message":""}
[2023-03-28 01:15:19][SCENARIO] Fin correcte du scénario

Mon code

// Récupération des tags créés dans les blocs action du scénario
$tags = $scenario->getTags();

// Récupération du nom de la commande Tempo de votre equipement RTE Tempo
$eqTempo = $tags['#widgetTempo#'];

// Liste des commandes infos à récupérer depuis equipement Tempo. Saisir à l'identique les infos
$infos = array("Aujourdhui", "Demain", 
               "Jours Bleus restants", "Jours Blancs restants", "Jours Rouges restants",
               "Total jours Bleus", "Total jours Blancs", "Total jours Rouges");

// Création Tableau des valeurs infos récupérées de l'équipement Tempo
$infos_jeedom = array_map(function($info) use ($eqTempo) {
  $cmd_info = '#' . $eqTempo . '[' . $info . ']#';
  return cmd::byString($cmd_info)->execCmd();
}, $infos);

// Log des commandes infos du plugin RTE
array_map(function($info, $info_jeedom) use ($scenario) {
  $cmd_info = '#' . $eqTempo . '[' . $info . ']#';
  $scenario->setLog($info . ' : ' . $info_jeedom);
}, $infos, $infos_jeedom);

// Log de la commande Telegram passée en tag
$scenario->setLog('commande Telegram : ');

// Log des commandes infos du plugin RTE
array_map(function($info, $info_jeedom) use ($scenario) {
  $cmd_info = '#' . $eqTempo . '[' . $info . ']#';
  $scenario->setLog($info . ' : ' . $info_jeedom);
}, $infos, $infos_jeedom);

$liste_icones = array('&' . '#128998', '&' . '#11036', '&' . '#128997');
$couleurs_uk = array("BLUE", "WHITE", "RED");

$journees = '<b>*** EDF Tempo ***</b>' . "#\n";
$bilan = '<b>Reste :</b>' . "#\n";

// Création du message qui va être envoyé
$journees .= 'Aujourd\'hui : ' . str_replace($couleurs_uk, $liste_icones, $infos_jeedom[0]). "\n";
$journees .= 'Demain : ' . str_replace($couleurs_uk, $liste_icones, $infos_jeedom[1]). "\n";

$bilan .= $liste_icones[0] . ' : ' . $infos_jeedom[2] . ' / ' . $infos_jeedom[5] . "\n"
  	   . $liste_icones[1] . ' : ' . $infos_jeedom[3] . ' / ' . $infos_jeedom[6] . "\n" 
  	   . $liste_icones[2] . ' : ' . $infos_jeedom[4] . ' / ' . $infos_jeedom[7] . "\n";

// Je concatène les 2, celui qui ne veut pas le bilan laisse juste =$journees;
$messages = $journees . "\n" . $bilan;

$tags['#tosend#'] = '$messages'

// sauvegarde des tags (et donc le tag(message)
$scenario->setTags();

Pas lié à l’erreur mais je viens de voir une ligne inutile (en commentaire ici) :

Sinon, $scenario semble le gêner en paramètre :

  • essaie en supprimant la ligne en commentaire
  • si ko, essaie en supprimant tout ce code pour tester le scénario sans (bloc servant juste à loguer les valeurs des cmd infos)