Gestion des Notifications avancées

Temps de lecture : 9 minutes.

Aujourd’hui, je vais vous présenter un scénario inspiré d’un article trouvé sur le blog de Sarakha63Les variables dans Jeedom domotique – Introduction.

Le but est de centraliser les notifications de Jeedom, à un endroit unique qui est appelé par les scénarios, lorsqu’on a besoin d’envoyer une notification.

Jeedom étant compatible avec de multiples médias permettant d’envoyer des notifications, Mail, SMS, TTS,  Message interne, notification IFTTT sur mobile, objects connectés, etc… on a vite fait d’en avoir de partout.

Un autre avantages mis en avant, c’est la possibilité d’ajouter ou supprimer un média de notification, puisqu’il suffit de modifier uniquement le scénario notifications et pas tous les scénarios. Par exemple, la gateway Xiaomi devrait bientôt être mise à jour avec la gestion du haut parleur. Il sera simple de l’ajouter.

Il est facile aussi d’ajouter des options, comme par exemple, bloquer l’envoi de mail en cas de coupure d’internet. Pour les notifications vocales ou les sons, on peut régler le volume en fonction des horaires. On peut aussi changer le type de notifications en, semaines, weekend, vacances…

J’ai aussi choisi de prioriser l’importance des différents médias. Un message vocal sera suffisant pour l’annonce de la météo le matin, alors que pour l’alarme, on pourrait choisir de recevoir tous les types de notifications.

Il y a beaucoup d’instructions possibles, mais je ne vais pas toutes les détailler. Certaines étant relativement similaires.

Les variables

Nous allons utiliser deux variables, « NotifMessage » qui contiendra le message à envoyer et « NotifPriorite » qui indiquera la priorité de la notifications (voir ci dessous).

Priorité 1 == SMS & Mail Femme.
Priorité 2 == Mail Famille.
Priorité 3 == SMS Boulot Guillaume.
Priorité 4 == Mail & SMS Perso Guillaume.
Priorité 5 == TTS Vocal.
Priorité 6 == TTS Audio.
Priorité 7 == Message.

La priorité 1 est pour le média le plus important, « SMS & Mail Femme« , puis on va jusqu’à la priorité 7 qui est le média le moins important, « message » du centre de messages de Jeedom.

Il y a une autre variable, « NotifTitre » qui est utilisée pour les mails par exemple. On peut choisir de l’envoyer depuis les différents scénarios et lui affecter une valeur personnalisée, ou lui affecter une valeur par défaut, dans le scénario notification.

Mode du scénario = Provoqué.

Le scénario sera provoqué par les autres scénarios. Donc, on ne choisit pas de déclencheur.

Action

#[Informations][Google][Rafraîchir]#

Là, on rafraîchit la fonction Ping vers Google, pour pouvoir tester la connexion internet.

Variable

  • Nom : NotifTitre
  • Valeur : Notification ( variable(NotifPriorite) ) de Jeedom.

Là, on affecte la variable « NotifTitre » qui servira pour les médias nécessitant un titre, comme les mails par exemple. Ici j’ajoute la valeur de la variable « NotifPriorite » dans une phrase, mais on peut entrer ce que l’on veut.

Il est aussi possible d’envoyer cette variable depuis les scénarios, si on veut plus de personnalisation.

 SI variable(NotifPriorite,0) == 0 ALORS

Variable

  • Nom : NotifPriorite
  • Valeur : 7

Si la variable « NotifPriorite » n’existe pas, ou est égal à 0, alors on la mets à 7. C’est juste une sécurité pour bloquer au minimum la valeur de la variable.

 SI variable(NotifPriorite,0) != 6 ALORS

Message : variable(NotifMessage,Message)

Si la variable « NotifPriorite » n’est pas 6 (TTS Music), alors on envoie un message dans le centre de message de Jeedom.

  • On ne veut pas envoyer de message avec le nom d’un fichier TTS Music correspondant à la priorité 6.
  • Un message est envoyé dans tous les autres cas. Si on veut envoyer un message seulement pour la priorité 7 on remplace « != 6 » par « == 7« .

SI #[Informations][Google][Statut]# == 1 ALORS

On fait un ping vers Google et si la connexion internet est active, alors on entre dans la boucle.

SI variable(NotifPriorite) == 1 ALORS

On teste la priorité, si elle est égale à 1, alors on envoi « Mail & SMS Femme« .

#[Notifications][Mail Jeedom][Femme Perso]#

  • Titre : variable(NotifTitre,Titre)
  • Message : variable(NotifMessage,Message)

On affecte le titre et le message pour le Mail.

#[Notifications][SMS Via JPI][SMS_Femme]#

  • Titre : variable(NotifTitre,Titre)
  • Message : variable(NotifMessage,Message)

On affecte le titre et le message pour le SMS. Le titre n’est pas utile pour un SMS, mais il est demandé et je n’aime pas laisser une variable vide, surtout quand on a de quoi la remplir.

SINON

Là, je ne mets rien et je fais un autre bloc, SI – ALORS – SINON, après. On pourrait vouloir imbriquer les instructions les unes dans les autres, mais personnellement, je ne sais pas si cela représente un intérêt ou pas ? Si quelqu’un à la réponse, qu’il n’hésite pas à me le faire savoir.

SI variable(NotifPriorite) <= 2 ALORS

Alors maintenant, on teste la priorité. Si elle est inférieure ou égale à 2, alors on envoi « Mail Famille« . Le test « <= » va donc prendre les priorités 1 et 2. Si on veut seulement prendre les priorités 2, on remplace « <= 2 » par « == 2« .

#[Notifications][Mail Jeedom][Mail famille]#

  • Titre : variable(NotifTitre,Titre)
  • Message : variable(NotifMessage,Message)

On affecte le titre et le message pour le Mail.

On continue de la même manière pour les autres médias de notifications, en changeant les priorités. Voir l’image precedente.

Gestion du volume pour les TTS Vocal et TTS Audio

SI variable(NotifPriorite) <= 5 ALORS

Action : #[Notifications][Lapinou][Parle]#

  • Message : variable(NotifMessage,Message)

Si la priorité est inférieure ou égale à 5, alors on fait parler le Nabaztag.

Action : wait

  • Condition : #[Salon][Mouvement][Calme depuis : ]#<=1
  • TimeOut : 3600

On attend qu’il y est quelqu’un dans la pièce avant de jouer les notifications, pour être certain qu’on ne les joue pas dans le vide.

SI #time# >=630 ET #time#<=2100 ALORS

Action : #[Notifications][TTS Volume Jour][TTS]#

  • Message : variable(NotifMessage,Message)

SINON

Action : #[Notifications][TTS Volume Nuit][TTS]#

  • Message : variable(NotifMessage,Message)

Si on est en journée, entre 6:30 et 21:00, on joue la notification avec le volume de jour, sinon on joue avec le volume de nuit.

SINON

Rappel : On arrive ici, s’il n’y a pas de connexion internet suite au test « SI #InformationsGoogleStatut#== 1_ALORS« .

Là, on recommence sur le même principe, sauf qu’on supprime tous les médias de notification qui ont besoin d’internet pour fonctionner. Mail, Push IFTTT, SMS Free, etc…

Envoi des variables vers le scenario Notifications.

Maintenant que nous pouvons jouer les notifications en fonction de leurs priorités, nous allons voir comment appeler le scénario avec les deux variables « NotifMessage » et « NotifPriorite ».

Si vous voulez personnaliser la variable « NotifTitre« , il faudra la rajouter au même endroit et la supprimer dans le scénario notification.

Je vais utiliser le scénario qui me donne diverses informations le matin, pour vous montrez le fonctionnement. Mais pour faire simple, il faut remplir les variables et lancer le scénario Notification.

Eviter le chevauchement des notifications.

Pour ne pas que 2 notifications soient jouées en même temps, je fais un test sur l’état du scénario notification.

SI scenario(#[Notifications][Notifications][Toutes les notifications]# ) == 1 ALORS

  • Action : wait
  • Condition : scenario(#[Notifications][Notifications][Toutes les notifications]# ) == 0
  • TimeOut : 120 (sec)

Si le scénario est en cours (1), j’attends qu’il s’arrête (0), attente maximum de 2 minutes.

Changer la priorité en fonction de divers critères.

On peut faire un test qui change la priorité de la notification, en fonction d’un ou plusieurs critères. Ici, les jours travaillés ou chômés.

SI #[Informations][Infos][Weekend]# == 1 OU #[Informations][Infos][Férié]# == 1 ALORS

  • Action : Variable
  • Nom : NotifPriorite
  • Valeur : 7

SINON

  • Action : Variable
  • Nom : NotifPriorite
  • Valeur : 5

Si nous sommes le weekend, ou un jour férié, alors on affecte la variable de priorité à 7 (Message) sinon à 5 (TTS vocal).

On envoi les variables vers le scénario des notifications.

ACTION 1 : Variable

  • Nom : NotifMessage
  • Valeur : Bonjour, Guillaume… Nous sommes le #sjour#, #jour#, #smois#  et il est #heure# heure  #minute#… Le temps sera : #[Informations][Lyon][Condition]#… La température maximal : #[Informations][Liergues][Température Max]# °… L’horoscope du jour : #[Guillaume][Guillaume (horoscope)][horoscopeDuJour]#…  Les évenements du jour : variable(AgendaJeedomToday), variable(AgendaPersoToday). Bonne journée.

Ici, on remplit la variable « NotifMessage« , avec le texte qui sera joué par les notifications. Les «  » dans la phrase servent à faire des pauses pour le TTS.

ACTION 2 : Variable

  • Nom : NotifPriorite
  • Valeur : de 1 à 7

ACTION 3 : SCÉNARIO : [NOTIFICATIONS][NOTIFICATIONS][Toutes les notifications] ACTION : START.

Pour finir, on lance le scénario avec la fonction scénario start.

Conclusion

Voilà un scénario un peu complexe, mais qui permet à long terme une meilleure gestion et utilisation des notifications dans Jeedom. Il peut être utile de le dupliquer et de faire une autre version qui ne lance que le média correspondant à la priorité et non tous ceux qui ont une priorité inférieure à celle choisie, comme c’est le cas dans l’article. Pour cela il faut remplacer les « <= » par des « ==« , je vous l’explique ici.

On peut aussi ajouter des options, comme nous l’avons fait pour l’accès à internet, les créneaux horaires.

Retrouvez la liste des plugins, les scénarios, les images et le matériel compatible Jeedom sur la page: Matériel, Plugin et plus.

Si vous avez des idées de déclinaisons, d’optimisations ou des remarques n’hésitez pas à laisser un commentaire.

Gestion des Notifications avancées
5 (100%) 1 vote
Partager :

Laisser un Commentaire

38 Commentaires sur "Gestion des Notifications avancées"

avatar
  Notifications  
plus récents plus anciens plus de votes
Me notifier des
Ouquoi

Super article !

J’avais commencé à faire un systeme de notification mais la c’est bien poussé et très fonctionnel. Ca mériterais je pense un plugin dédié dans jeedom
Je reviendrai plus tard je pense reposer des questions.

J’en pose une toute suite quand même 😉
Je me posais la question de comment gérer le chevauchement c’était un problème que j’avais aussi identifié, ca me semble pas mal t’as solution mais j’ai lu que le wait n’était pas conseillé sur jeedom car cela bloque le process tu en penses quoi ?

Merci en tous cas pour tous tes articles sur l’usage de jeedom

Loup

Bonjour. J’entend souvent parler d’un ping google .
Possible de dire comment le faire. SVP. ???
Merci

Ouquoi

Re, peux tu partagr l’export de ton scenario, voir le partager sur market ?

Merci

Je viens de relire et je suis vraiment fan !

trackback
Les DomoNews de la semaine du 11/03 au 18/03

[…] JEEDOM SCÉNARIO – NOTIFICATIONS AVANCÉES : Guillaume Braillon […]

Guillaume
Bonjour Guillaume, Je suis aussi en train de travailler sur une approche semblable à la tienne. Je bute sur une problématique de calendrier. En effet, j’aimerai définir des plages où je ne suis pas notifié (genre la nuit), et j’aimerai idéalement que les notif attendent le lendemain matin pour m’arriver. En effet, je suis content de savoir que mon Yucca a besoin d’être arrosé, mais pas trop à 5h du mat… Pour info complémentaire, Je mets mon téléphone en mode « ne pas déranger » la nuit, ce qui met en silence les IFTTT, Pushbullet et autres, mais j’ai mis les SMS… Lire la suite »
Guillaume

Bonjour,

Effectivement, bonne idée.
Je suis d’accord que coté élégance, ca laisse une marge de manoeuvre, mais je te trouve dur avec toi, c’est quand même assez propre 🙂

Je vais partir là dessus ce WE

Bonne journée à toi

Guigeek

KiR
Bonjour ! Super scénario 🙂 « On pourrait vouloir imbriquer les instructions les unes dans les autres, mais personnellement, je ne sais pas si cela représente un intérêt ou pas ? Si quelqu’un à la réponse, qu’il n’hésite pas à me le faire savoir. » La réalisation de l’action souhaitée sera pareille, que tu imbriques ou non les blocs « SI ». C’est un niveau de la charge imposée au processeur (et de la longueur des logs) que ça change. – Si tu imbriques, le serveur ne va contrôler que les conditions qui mènent à la décision. Par exemple, pour un message de priorité… Lire la suite »
fred59

Bonjour,
tout d’abord, merci pour tes partages.
j’ai rempli le scénario « notifications avancées » en suivant ton tuto
par contre après je suis perdu…
ma problématique qui je pense à besoin de ce scénario est la suivante:
on est inondé par jeedom soit de free sms, soit sms jpi ou de notification sonore ou de telegram , pour être ok je suis obligé de désactiver, le plugin que je n’utilise pas
du coup je pense que ton scénario (complexe pour un newbies comme moi !) m’aidera
cependant je ne vois pas comment une fois ce scénario ok, remplacer dans tous mes scénarios une ligne et gérer la priorité…

trackback
Tuto : notification TTS avancée – Mon pense bête

[…] cette exemple, j’utilise le centre de notification de Guillaume, pour chaque notification TTS, il faut 3 lignes (1 pour la variable priorité, 1 pour la variable […]

Christian R.

Bonjour,
Tout d’abord un grand merci pour le partage de ce scénario de notifications centralisées. 🙂
Grace à toi, j’ai pu mettre un peu d’ordre dans mes notifications ! Beaucoup plus simple d’avoir un seul scénario qui gère tout que plusieurs…. Et le principe des variables est impeccable !
Merci encore…

PS: petite question, je vois que dans les priorités tu as mis « Priorité 2 == Mail Famille », s’agit-il dans mail unique ou as-tu un regroupement de plusieurs mails ?

Eric

Bonsoir Guillaume

Merci pour tes partages c’est vraiment nickel.
Je viens d’installer sur une tablette PAW server et JPI, tout fonctionne parfaitement. J’arrive à utiliser le TTS via des requêtes HTTP, de plus JPI « voit » bien le jeedom.

Par contre sur jeedom depuis le plugin JPI de Jerome, impossible d’utiliser le TTS. Je suis perdu.

Pourrais tu m’aider stp?
Eric

Eric

Honnêtement j’en sais rien …
C’est la premiere foiscque cela m’arrive.
Alors, on va essayer de faire cela pas à pas. jai l’impression que le plugin est correctement installé. Comment puis je verifier?
Merci d’avance pour ton temps.

Eric
Bon j’ai essayé de comprendre hier, voici un topo que j’espere exhaustif. – Sur le tablette, dans l’appli JPI, Jeedom est vu « online » – dans jeedom/plugin JPI j’ai créé l’équipement « tablette ». – A partir de là, c’est la galère. Je rentre dans l’équipement, je clique sur «  » j’obtiens une erreur: « Impossible de trouver l’adresse DNS du serveur http. » Du coup, je penche sur un probleme reseau – la tablette voit jeedom – par contre depuis mon raspberry, impossible de pinger ma tablette pi@raspberrypi:~ $ ping 192.168.131.148 PING 192.168.131.148 (192.168.131.148) 56(84) bytes of data. From 192.168.31.254 icmp_seq=1 Destination Host Unreachable From… Lire la suite »
idem2lyon

Salut, super l’article, j etais en train de me casser les dents a en faire un.

Pourrais tu re exporter ton scenario please? Il n’est plus disponible sur le lien.

Merci par avance

Herve

Encore une fois, un Super article Guillaume ! Merci !
Je suis entrain de mettre cela en place 🙂
Je me heurte à un pb : les retours à la ligne dans les Variables …
Si tu as une solution je suis preneur .
En attendant je fais avec plusieurs variables les unes au dessous des autres mais cela ne me satisfait pas :
variable(NotifMessage,Message)
variable(NotifMessageL2,Message)
variable(NotifMessageL3,Message)

Vincent

Hello, j’ai eu le même problème en utilisant variable(message) et en incrémentant mon message au fur et à mesure de mon scénario.
J’ai résolu le problème avec Chr(10).
Exemple : variable(message)Chr(10)le reste de ton message
et lorsque j’envoie un Telegram avec variable(message), j’ai bien les retours de ligne.
J’espère que cela servira.

Jonathan

Bonjour,
si je comprend bien, tu utilises un autre scénario « notifications », où il y a « toutes les notifications », est ce que tu le détailles quelque part?

Scholl

Beau tuto et merci pour le partage

Merci à ceux qui ont contribué.
Votre don contribuera à fournir encore plus de contenu de qualité.