Gestion des multiples notifications?

Salut @Mips

ça fait un moment que je reluque ton plugin et je me pose une question.
Est-il possible de lier certaines notifications entre elles ? Par exemple

  • Mettre une notification dans N files différentes (TTS, Android TV, présence etc…) avec leurs conditions propres
  • Traiter cette notification de la 1ère file quand la condition est remplie
  • Effacer cette notifications dans les N-1 autres files pour éviter les répétitions ?

Bonjour,

En l’état non mais suite à ta demande j’ai quelque chose en tête qui correspond à l’esprit du plugin;
je vais reformuler pour être sur que ça correspond.

Donc pour l’instant, un équipement du plugin correspond à une file, et il n’y a (pour l’instant) qu’une commande « ajouter » pour ajouter des notifications.
Sur la config de l’équipement on peut mettre une condition et une action de notification à utiliser si la condition est remplie.

Ce que je pourrais faire c’est qu’on puisse gérer N conditions (sur un même équipement et associer N commandes de notifications (respectivement).
L’ordre des conditions déterminerait la priorité.

Le plugin vérifiera les conditions et utilisera la première valide pour envoyer la notification à la commande correspondante.

Je pense que cela correspond à ce que tu voudrais mais il n’y aura pas « plusieurs files » ni plusieurs message de notification, ce sera le même message qui pourra partir sur différent canaux en fonctions de certaines conditions, dès que une est valide le message part sinon on attend.

Merci pour ton retour
Je pense que cela correspond à ce que tu voudrais mais il n’y aura pas “plusieurs files” ni plusieurs message de notification, ce sera le même message qui pourra partir sur différent canaux en fonctions de certaines conditions, dès que une est valide le message part sinon on attend.

Effectivement ça pourrait correspondre à ce que j’envisage de faire files/canaux c’est quasi la même notions. Il manque le fait de pouvoir avoir de pouvoir traiter les canaux séparément, prenons un exemple :

Perso, je veux les notifications par TTS (dans cuisine), Android TV (dans le salon), mail (la nuit) ou Telegram (le jour). Basées aussi sur ma présence ou non à la maison (globalement).

Pour ma moitié, les canaux sont TTS, Android TV (forcement on a une télé unique), mais pas télégramme ni les mails. Les conditions sont similaires.

Si je veux envoyer le message « sortir les poubelles », je vais avoir besoin de le poster dans mes canaux à moi, et dans ceux de ma moitié. Le premier canal validé par les conditions délivre le message.

Par contre, le message « défaillance de la sonde XXX », j’ai plutôt dans l’idée de me l’envoyer juste à moi et donc plutôt par un canal qui n’est pas en commun genre mail ou télégram

ça marche qui marchote ici mais :

  • j’ai des scénarios compliqués/illisibles après coup/en cascade à organiser pour éviter au mieux le truc.
  • De temps en temps il y a des doublons genre TTS et Android TV (c’est moins gênant que pas délivré du tout)
    Par contre, c’est « facile » parce que j’ai une seule commande (le scénario principal + une série de tags qui sont fonction du type de message et pas du canal) pour poster le message et il arrive au bon endroit sans avoir besoin de mettre la logique dans les virtuels …

Donc si je peux arriver à déléguer une partie de la gestion des canaux et simplifier la complexité de mes scénarios alors c’est bon

Si je continue ton exemple, qui quand jeedom t’a notifié de sortir les poubelles via telegram? (car pas présent dans la cuisine ni salon je suppose), il ne va pas le notifier à d’autres personnes? (via android tv par exemple) ?
j’imagine que oui mais du coup, quid s’il te la notifié par androidTV aussi? 2 notifications?
c’est possible de le faire si je fais les modifs mais ca me parait compliqué de faire autrement sans faire une « soupe »… : gérer qu’il y a une notif à faire car c’est le même canal etc ca me parait tordu à réaliser

autre façon de voir le cas: tu fais une file « notif commune » qui va partir soit sur TTS ou androidTV (et il notifiera dès que l’un de vous est à proximité)
et une autre « notif system » qui t’envoit à tes canaux à toi.
et ca, avec 2 équipements du plugin c’est faisable (si je le code :wink: )

OK ça progresse :sweat_smile:

Pour la notification de la sortie des poubelles, typiquement c’est une action du calendrier… En principe ça ne doit pas passer par via telegram puisque je ne suis pas là, mais surtout parce que c’est une action physique. D’où le fait de pouvoir à un moment orienter certains canaux ou pas. Typiquement ça peut se gérer dans un scénario global par exemple : Si tag=action, il faut être présent, j’oriente vers les canaux basés sur la présence, si tag=systeme n’importe quel canal mais que chez moi… Si tag=global, vers tout le monde
Mais ça semble quand même nécessaire de notifier les autres personnes dans le cas des poubelles (si elles sont à la maison justement) et ce via le premier moyen possible, afin de s’arranger pour que ce soit fait. Quitte à avoir chacun l’info à des timings différents.

En fait j’imagine l’organisation des canaux comme les feuilles d’un arbre
On peut poster un message dessus. => ça correspond peu ou prou à ton exemple 2 canaux ci dessus.
Mais on peut aussi poster le message sur une branche (regroupent des canaux) sur un tronc (qui regroupe plusieurs branches). Voire même sur une foret (typiquement les membres de la familles)
En le décrivant, on pourrait presque avoir des conditions au niveau des feuilles, des branches, des arbres, de la forêt… Au bout de la feuille, c’est la somme des conditions par « chemins ».
Dans un scénario, on définit le « niveau » de la forêt où déposer le message via les tag. Et il y reste jusqu’à sa délivrance, dès que le chemin est valide :
Si je veux envoyer 1 message à la première personne capable de le prendre en compte. Je le poste sur dans la forêt.
Si je veux être certains que tout le monde reçoive l’information 1 fois, le scénario poste un message dans chaque arbre. donc N messages

C’est simple pour l’utilisateur, mais surement beaucoup moins pour le plugin.
Au final il faut quand même effectivement éviter de faire ce que tu mentionnes comme une soupe, aussi bien coté plugin que côté scénarios

Bonjour @Mips,

J’ai installé ton plugin. La gestion en file par FIFO est très bien.
Jusqu’à maintenant, je réalisais cela avec des variables dans des scénarios. Je souhaite utiliser ton plugin pour des messages TTS. Lors de mes tests, j’ai constaté que régulièrement la fin des messages est tronquée par le message suivant. En parallèle, j’ai réalisé des tests avec un scénario et la même condition dans une commande Attendre (#[Google][GH Mini][Statut]# != ‹ Casting: TTS ›). J’ai remarqué qu’il fallait une pause de 2 à 3 secondes pour avoir un retour de l’état de la GH. Sans cette pause, j’ai la fin des messages qui est tronquée comme avec ton plugin.
Actuellement as-tu un temps de pause entre chaque message?
De plus, avec la condition KO, je mets en file d’attente des messages. Lorsque je rends la condition OK, les messages TTS s’enchaîne (avec le problème décrit au-dessus) mais de façon assez fluide. En revanche, si la condition est OK, et que je lance mon scénario d’ajout de messages, l’ensemble n’est pas fluide. J’ai un premier message puis une pause de 1 minute puis les autres messages.
As-tu un moyen d’éviter cette coupure?
Merci pour ta réalisation.

Bonjour,

Concernant la pause, oui il y a une pause de 1s entre chaque évaluation de condition, chez moi ce délai suffisait pour avoir le retour d’état mais cela prend p-e plus de temps sur certaine config.
J’ai rajouté en beta une option sur l’équipement pour choisir ce délai, si tu as l’occasion de tester cela et me dire si en mettant 2s ou 3s de pause chez toi cela règle le problème?

Pour ton deuxième message, c’est curieux cela veux dire que la condition ne revient pas à OK assez vite et que donc les messages sont laissés dans la file jusqu’au check prochain (qui est fait chaque minute).
Chez moi je testais avec la commande #[Home][Google Home Salon][Statut Player]# != 'PLAYING' mais pourtant cela à l’air de revenir au même, [Statut] et [Statut Player] au l’air d’être mis à jour en même temps.

Mais globalement je réfléchi pour réduire ce délai d’une minute et pouvoir lancer les notifications dès que la condition est OK et pas en vérifiant chaque minute.

Bonjour @Mips
Je poste ici l’échange commencé sur l’ancien forum

Je test : not(#[Communication][Google Home][Statut]# matches « /TTS/ »)

plutôt que PLAYING, car je souhaite que le TTS soit prioritaire sur la musique ou radio

J’ai refait quelques tests, avec la dernière MAJ du plugon

Rappel du scenario de test

Avec ta condition, j’ai toutes les phrases sauf la 4 qui est tronquée, il ne dit que ‹ ceci est le message 4 ›

Si j’enlève le cache du plugin de la GH, il me coupe la 4 et la 7 et ne dit pas la 6

Si je passe par mon virtuel et scénario intermédiaire, pour avoir les commandes TTS, c’est une catastrophe…

J’ai optimisé mon scénario « PARLER »
Si la GH n’est pas disponible, je stock le message dans un flux, et je relançais le scenario via une balise DANS, donc avec un minimum d’1 minute (pas terrible)
Maintenant, j’active un autre scenario à la place, qui lui se déclenche dès que la GH est dispo et relance le scenario « PARLER », ca réduit le temps entre le message

Je sais pas si tu veux continuer à faire avancer ton plugin pour l’usage du TTS, ce que j’aimerais bien :slight_smile: mais dans ce cas, il faudrait pouvoir jouer sur les options directement dans ton plugin.

et une évolution possible, si on pouvait ajouter des conditions et redirections de message différents

je m’explique

J’ai le test = GH DISPO et la commande de base = TTS
mais si, par exemple, la famille est absente, je veux pas que cela parte vers le commande de base mais vers un TELEGRAM

ce serait bien non ?

Bonjour @Mips,

Je viens de faire différents tests. Tout fonctionne très bien. J’ai essayé avec différents temps de pause. Sur ma config, 1 secondes c’est trop court, je coupe la fin de phrases. 2 secondes c’est le temps parfait. Par contre, en essayant 3 et 4 secondes, je me suis aperçu que le temps entre chaque phrase était très long même après que la GH soit dispo. En regardant le code, j’ai compris la cause.
Dans ta fonction wait, le temps de pause est dans la boucle.Pour moi, il faudrait mettre le temps de pause avant la boucle puis mettre un temps de pause de 1 secondes dans la boucle. Le système devient plus réactif.

private static function wait($condition, $sleep) {
	$result = false;
	$occurence = 0;
	$limit = 30;
  	sleep($sleep);
	while ($result !== true) {
		$result = jeedom::evaluateExpression($condition);
		if ($occurence > $limit) {
			return $result;
		}
		sleep(1);          
		$occurence++;
	}
	return $result;

Désolé le message est parti plus vite que voulu.
Pour le deuxième point sur la fluidité, je n’ai pas rencontré de problème lors de mes tests.
Je continue les tests dans différentes conditions.

Je pense que j’ai été trop vite hier, je n’avais pas trop le temps et j’ai voulu tester un truc vite fait mais en relisant ce que j’ai fait c’est pas terrible (merci les betas :slight_smile:)
je vais revoir ca dès que possible mais en ayant l’esprit à ça et pas entre 2 autres trucs.

bonjour à tous

cela fait quelques semaines que j’ai basculé la voix de ma domotique sur ce plugin.
J’ai quand même gardé un bout de mon ancien scenario pour faire quelques tests et redirection autres que TTS mais la gestion du flux TTS est gérée par le plugin et avec une pause de 4s ca marche pas mal.

Merci pour ce plugin

1 « J'aime »