Le résultat donne ceci :
Code : Tout sélectionner
┌────────── Notifications du 13-08-2017
├───── Aquarium
│ 21:01:07 : La lumière de l'aquarium vient d'être éteinte.
│ 15:01:05 : La lumière de l'aquarium est allumée.
├─────
├───── Maison
│ 21:46:18 : Le changement de la cartouche Brita est pris en compte.
│ 17:00:04 : Le remplacement de la cartouche Brita est en retard de 3 jours
├─────
├───── Mode
│ 17:35:21 : [Alerte] Sylvain est arrivé
│ 17:35:09 : [Alerte] Virginie vient d'arriver à la maison
│ 10:05:42 : [Alerte] Virginie vient de sortir de la maison
│ 10:05:24 : [Alerte] Sylvain est sorti
├─────
└──────────
Code : Tout sélectionner
/**
* Type : Scénario
* Fonction : Récupère les tags + explode le tag #msg# + random sur message à envoyer
* Récupère les notifications de la centrale (virtuel), les mets en forme et les envoies.
* Version : 1.0 (2017-08-09) (Modification)
* Copyright : Sartog
*
* Cron : S/O
* Déclencheur : Scénarios
*
* Condition(s) : Horaire -> 24/24
* Mode -> Tous
*
*
* Changelog :
* V0.0 (2017-07-07) -> Création.
* V0.1 (2017-07-26) -> Ajout prise en compte centrale notification.
* V0.2 (2017-08-04) -> Prise en compte des sauts de ligne dans les messages matérialisés par ¤.
* V1.0 (2017-08-09) -> Utilisation du centre de message à la place d'un virtuel + ajout de groupe de message.
*
*/
/** *************************** Variables ********************************* */
$tags = $scenario->getTags(); // Récupération des tags passés en paramètre.
$stop = false;
/** *************************** Traitement ********************************* */
/** ********** Vérification de la corélation des tags ********** */
if ($tags['#opt#'] == "") {
$scenario->setLog("le paramêtre opt ne peut-être vide.");
$stop = true;
}
if (($tags['#opt#'] == 0 || $tags['#opt#'] == 1) && $tags['#msg#'] == "") {
$scenario->setLog("le message ne peut-être vide si opt vaut 0 ou 1");
$stop = true;
}
if ($tags['#opt#'] == 2 && ($tags['#app#'] != 1 && $tags['#slack#'] != 1 && $tags['#smsV#'] != 1 && $tags['#smsS#'] != 1 && $tags['#tts#'] != 1)) {
$scenario->setLog("Aucun choix de média pour envoyer le message de renseigné.");
$stop = true;
}
if ($stop == true) {
$tags['#stop#'] = 1;
$scenario->setTags($tags);
}
/** ********** Extraction et traitement du message ********** */
if ($tags['#opt#'] == 0 || $tags['#opt#'] == 1 || $tags['#opt#'] == 3) {
$msg = explode(" | ", $tags['#msg#']); // Récupération des différents messages espacés par |.
$msg = $msg[array_rand($msg, 1)]; // Choix aléatoire du message.
$msg = str_replace(" ¤ ", "\n", $msg); // Récupération des différentes lignes matérialisées par ¤.
$msg = trim($msg, "\n"); // Nettoyage du message.
$msg = str_replace("\"", "", $msg); // Suppression des "" entourant le(s) message(s) dans le tag.
// MAJ des tags.
$tags['#msg#'] = $msg;
$scenario->setTags($tags);
}
/** ********** MAJ du centre de message Jeedom ********** */
if ($tags['#opt#'] == 0 || $tags['#opt#'] == 1) {
// Liste des groupes authorisés à écrire plusieurs fois la même chose dans le centre de message Jeedom.
$authGroupe = array("Mode","Système");
// Extrait du groupe.
$groupe = str_replace("\"", "", $tags['#groupe#']); // Suppression des "" entourant le(s) message(s) dans le tag.
// Ajout d'un indicateur Alerte si le message est envoyé directement.
($tags['#opt#'] != 0) ? $msg = "[Alerte] ".$msg : null;
// Autorisation à certains scénario d'écrire plusieur fois dans le centre en ajoutant un timestamp.
(in_array($groupe, $authGroupe) == true) ? $msg .= " ¤ ".time() : null;
// MAJ du centre de message Jeedom.
message::add('scr_'.$groupe, $msg);
}
/** ********** Envoi du centre de message Jeedom ********** */
if ($tags['#opt#'] == 2) {
$msg = "┌────────── Notifications du ".Date('d-m-Y')."\n";
// Récupération de la liste des "plugins" ayant générés un message.
$listePlugin = message::listPlugin();
foreach ($listePlugin as $value) {
(strpos($value['plugin'],"scr_") !== false) ? $msg .= "├───── ".str_replace("scr_", "", $value['plugin'])."\n" : $msg .= "├───── ".$value['plugin']."\n";
$plugin = message::byPlugin($value['plugin']);
// Récupération des messages.
foreach ($plugin as $message) {
$msg .= "│ ".substr($message->getDate(), 11)." : ";
(strpos($message->getMessage(),"¤") !== false) ? $msg .= trim(substr($message->getMessage(), 0, -13), "\n")."\n" : $msg .= trim($message->getMessage(), "\n")."\n";
$msg = str_replace('\'', "'", $msg);
}
$msg .= "├─────"."\n";
}
$msg .= "└──────────";
// MAJ des tags.
$tags['#msg#'] = $msg;
$scenario->setTags($tags);
}
Code : Tout sélectionner
opt=0/1/2 app=0/1 slack=0/1 smsV=0/1 smsS=0/1 tts=0/1 groupe="string" msg="string"
opt => 0 = centre de message only | 1 = centre de message + envoi immédiat du message | 2 = envoi centre de message | 3 = envoi immédiat du message