Recipe and plugin
-
hello everyone, I want to create a recipe using the “onNotificationReceived” plugin. here is the recipe
var recipe = { commands: { "SHOW_EYE": { moduleExec: { module: () => { MM.getModules().enumerate((m)=> { if (m.name == "MMM-EyeCandy") m.show(1000, {lockString: "RECIPE_LOCKED"}) setTimeout(() => {m.hide(1000, {lockString: "RECIPE_LOCKED"}) }, 1000 * 3) } }) } } } plugins: { onNotificationReceived: (notification,payload) { if (notification == "SHOOT") { this.sendSocketNotification("SHOW_EYE") } } } } exports.recipe = recipe
i think i’m not so far, but i’m still wrong, if someone can help me to find where is my bullshit
Or @bugsounet , if you pass by hère, when you’ve one minute, report me what stings your eyes
.
My respects. -
Bonjour à vous, je suis convaincu que vous n’avez le temps de faire professeur pour débutants, je souhaite concevoir mon propre module basé sur le module “Selfie”, mais il me semble plus judicieux de commencer par adapter des recettes de votre module qui est très bien détaillé dans le wiki.
Pour cette recette la partie commande me semble juste car elle est copiée d’un de vos poste antecedent, l’erreur est très certainement dans la structure de notification.onNotificationReceived: () => {
if (notification == “SHOOT_RESULT”) {
this.sendNotification(‘SHOW_EYE’, {foo:bar});
Suis je en bonne voie ou complément à côté de la plaque ? -
Bonjour, désolé pas eu le temps hier soir, je regarde ce soir
-
Merci beaucoup, pas d’urgence ça me laisse encore le temps de chercher mon erreur
-
J’ai vraiment essayé de tourner ça de plusieurs façon, en vain. Mais il me semble que les notifications d’appel que j’ai choisi sont internes au propre module Selfieshot (socketnotitication) et non à l’ensemble des modules. Cependant le résultat reste identique même avec “SELFIE_SHOOT” ou “LAST_SELFIE”
-
un truc de ce style ?
var recipe = { commands: { "SHOW_EYE": { moduleExec: { module: (params) => { if (params.notification == "SHOOT") { MM.getModules().enumerate((m)=> { if (m.name == "MMM-EyeCandy") m.show(1000, {lockString: "RECIPE_LOCKED"}) setTimeout(() => { m.hide(1000, {lockString: "RECIPE_LOCKED"}) }, 1000 * 3) }) } } } } }, plugins: { onNotificationReceived: "SHOW_EYE" } } exports.recipe = recipe
onNotificationReceived: “SHOW_EYE” <— appel le nom de la commande (qui sera executée a chaque notification reçu)
Dans la commande “SHOW_EYE” : on fait le tri des notifications
params.notification => nom de la notification
params.payload => si il y a une valeur a lire a l’interieur de la notification reçu (non utilisé ici) -
@bugsounet Merci pour ces précieuses explications, sorti de votre bouche cela a l’air si simple. Pour le coup je comprends mieux le fil a suivre, je prendrai le temps d’analyser ça correctement, je vais d’abord tester et vous fais un retour très rapidement mais cela semble correspondre parfaitement à ce que je souhaite.
Sincères remerciements. -
@bugsounet la recette est testé, en effet plus de message error lors du chargement de la recette.
Le module SelfieShot fait correctement son travail au premier plan lors de l’appel, cependant rien ne se passe coté module MMM-EyeCandy, il reste figé à l’ecran.
si je fusionne ma recette suivante avec la votre, c’est le contraire, le module Eye-Candy s’affiche le temps du chargement et disparaît bien lorsque magicmirror est pret, mais Eye-Candy ne s’affichera pas 3 secondes comme convenu. petit conflit dont je m’attendais. pour mieux visualiser l’ensemble :var recipe = { commands: { "SHOW_EYE": { moduleExec: { module: (params) => { if (params.notification == "SHOOT") { MM.getModules().enumerate((m)=> { if (m.name == "MMM-EyeCandy") m.show(1000, {lockString: "RECIPE_LOCKED"}) setTimeout(() => { m.hide(1000, {lockString: "RECIPE_LOCKED"}) }, 1000 * 3) }) } } } }, "HIDE_BACKGROUNG": { moduleExec: { module: (params) => { if (params.notification == "SHOOT") { MM.getModules().enumerate((m)=> { if (m.name == "MMM-BackgroundSlideshow") m.hide(1000, {lockString: "RECIPE_LOCKED"}) setTimeout(() => { m.show(1000, {lockString: "RECIPE_LOCKED"}) }, 1000 * 3) }) } } } }, "hide_on_start": { moduleExec: { module: () => { MM.getModules().enumerate((m)=> { if (m.name == "MMM-EyeCandy") m.hide(1000, {lockString: "RECIPE_LOCKED"}) }) } } } }, plugins: { onReady: "hide_on_start", onNotificationReceived: ["SHOW_EYE", "HIDE_BACKGROUND"] } } exports.recipe = recipe
Le but etant d’avoir MMM-BackgroundSlideshow sur l’ecran MM, à l’appel du selfie, (masquer tout les modules sauf MMM-SelfieShot évidement), afficher ponctuellement 3 secondes MMM-EyeCandy, et une fois le SelfieResult affiché, retour au “mode veille” qui affiche uniquement MMM-BackgroundSlideshow.
Je pensais que remplacer {lockString: RECIPE_LOCKED"} par {force: true} aiderai mais cela ne change point.
merci pour votre attention. -
J’ai trouvé une bonne Doc qui devrait m’aider à terminer, je vais devoir jouer avec quelques choses de ce style :
moduleA.show(0, {lockString: “module_c_identifier”});
Le lockString sera supprimé du tableau de verrous du moduleA, et comme cela se traduira par un tableau de verrous vide, le module sera visible :moduleA.lockStrings == []
moduleA.hidden == false
Remarque : Le mécanisme de verrouillage peut être écrasé à l’aide de la balise de force :moduleA.show(0, {force: true});
Cela réinitialisera le tableau lockstring et affichera le module.moduleA.lockStrings == []
moduleA.hidden == false
Utilisez cette forceméthode avec prudence. Voir show()la méthode pour plus d’informations. -
bah c’est pas du tout ça
- onNotificationReceived: [“SHOW_EYE”, “HIDE_BACKGROUND”]
ne fonctionnera pas
tu peux appeler une seul fonction, pas un tableau
il faut donc modifier “ßHOW_EYE” en consequence en y mettant les 2 fonctions
puis en plus j’ai vu que j’ai fait un gourde dans ce que j’avais donné:
setTimeout(() => { m.show(1000, {lockString: "RECIPE_LOCKED"}) }, 1000 * 3)
est executé a chaque module trouvé et non pas uniquement si le module == “MMM-EyeCandy”Je ne sais pas si j’aurai le temps ce soir d’y regarder
bref… Je reviens vers toi des que possibleen ce qui concerne la doc que tu as collé, c’est simplement ce que l’on utilise dans le recipe
- onNotificationReceived: [“SHOW_EYE”, “HIDE_BACKGROUND”]
-
Okay, super pour les explications je vais donc commencer par là.
Pour le 1: “onNotificationReceived : [“SHOW_EYE”, “HIDE_BACKGROUND”]” je vois ce que vous voulez dire je vais y corriger rapidement j’ai déjà vu une recette telegrambot que vous avez fourni avec cette syntaxe double fonction
Et en ce qui concerne la cible du module à masquer je vais voir ce que je trouve là dessus mais j’ai de quoi m’occuper avec ce que vous m’apportez là.
Vous êtes généreux, je tâche de l’être cette fin de semaine avec vous. Merci encore -
ou un truc de ce genre
-
Cetait sur votre recette show/hide et non Telegrambot que j’ai vu quelque chose de similaire mais oui en effet la structure est bien épuré, je regarde comment adapter ça, merci.
-
This post is deleted! -
@bugsounet j’avais pensé à cela, la recette se charge sans erreur à ma grande surprise. cependant le résultat reste identique.
var recipe = { commands: { "SHOW_EYE": { moduleExec: { module: (params) => { if (params.notification == "SHOOT" && module.id == "MMM-EyeCandy") { this.sendNotification (MM.getModules().enumerate((m)=> { m.show(1000, {lockString: "RECIPE_LOCKED"}) setTimeout(() => {m.hide(1000, {lockString: "RECIPE_LOCKED"}) }, 1000 * 5) })) } if (params.notification == "SHOOT" && module.id == "MMM-BackgroundSlideshow") { this.sendNotification (MM.getModules().enumerate((m)=> { m.hide(1000, {lockString: "RECIPE_LOCKED"}) setTimeout(() => {m.show(1000, {lockString: "RECIPE_LOCKED"}) }, 1000 * 5) })) } } } } }, plugins: { onNotificationReceived: "SHOW_EYE" } } exports.recipe = recipe
En vous souhaitant un bon week-end
-
Peux tu tester ceci ?
var recipe = { commands: { "SHOW_EYE": { moduleExec: { module: (params) => { if (params.notification == "SHOOT") { MM.getModules().exceptWithClass(["MMM-EyeCandy","MMM-BackgroundSlideshow"]).enumerate(m => { m.hide(1000, {lockString: "RECIPE_LOCKED"}) setTimeout(() => { m.show(1000, {lockString: "RECIPE_LOCKED"}) }, 5000) }) } } } } }, plugins: { onNotificationReceived: "SHOW_EYE" } } exports.recipe = recipe
J’ai pas de GA fonctionnel sur cette ordi donc pas tester le recipe
Mais j’ai tester la regle de getModules() dans un de mes modules, cela semble etre correctexceptWithClass
fait une exception sur les modulesDonc on demande que lorsque il y a une notification qui s’appel “SHOOT” de faire la liste des modules sauf “MMM-EyeCandy” et “MMM-BackgroundSlideshow”
et sur les modules restant les cacher puis les faire apparaitre 5 sec plus tardc’est ce que tu veux je crois ?
-
@bugsounet vous bossez vraiment 7j/7 mon objectif était de finir cela avant début décembre j’ai encore le temps merci beaucoup.
Je teste cela dès que je rentre d’ici 2 petites heures.
La fonction n’est pas tout à fait cela, mais je pense qu’une fois la bonne syntaxe trouvé je pourrai l’adapter.
Le module MMM-EyeCandy doit être masquer en permanence, (d’où l’idée plugins onReady : hide_on_start)
A l’appel de la notification Selfie, le module MMM-BackgroundSlideshow se cache (le temps du selfie, selfieresult) puis ré apparaît.
Et d’autres part, a l’inverse sur cette même notification, le module MMM-EyeCandy s’affiche (pour une durée de 3/4 secondes) et se remasque comme au démarrage. -
A l’appel de la notification Selfie
Selfie ?
MMM-BackgroundSlideshow se cache (le temps du selfie, selfieresult)
selfieresult ?
etes vous reelement sur sur le nom des notification envoyé ?
j’ai besoin des notification exacte, au cas ou il me faudrait un lien vers le module que je regarde quel notification est envoyé ?
donc je résume:
Le module MMM-EyeCandy doit être masquer en permanence, (d’où l’idée plugins onReady : hide_on_start)
ok pour ça
Quand la noti Shoot arrive:
- cacher “MMM-BackgroundSlideshow”
- afficher “MMM-EyeCandy”
quand la noti “SELFIE_RESULT” arrive (si la noti est s’appel comme ça)
- afficher “MMM-BackgroundSlideshow”
- cacher “MMM-EyeCandy”
Il me faut un schéma de ce style c’et mieux pour traduire en JS
-
@bugsounet Dans le MMM-Selfieshot.js et son node_helper je vois
“this.sendNotification(“SELFIE_RESULT”, result);” et “if (noti == “SHOOT”)” je pense donc possible d’utiliser ces notifications.
voir link text pour confirmation.Votre schema est bon pour le coup, si les notif sont correctes
MASQUER MMM-EyeCandy au démarrage MM
-
Quand la notification SHOOT arrive
1- cacher “MMM-BackgroundSlideshow”
2- faire apparaître MMM-EyeCandy x seconde et le masquer -
Quand la notification SELFIE_RESULT arrive
1- Apres x seconde, afficher MMM-BackgroundSlideshow
-
-
et les autres modules sont caché lors du “SHOOT” ?
sinon d’apres ce que vous avez demandé:
var recipe = { commands: { "SHOW_EYE": { moduleExec: { module: (params) => { MM.getModules().enumerate(m => { if (params.notification == "SHOOT") { if (m.name == "MMM-BackgroundSlideshow") { m.hide(1000, {lockString: "RECIPE_LOCKED"}) } if (m.name == "MMM-EyeCandy") { m.show(1000, {lockString: "RECIPE_LOCKED"}) setTimeout(() => { m.hide(1000, {lockString: "RECIPE_LOCKED"}) }, 5000) } } if (params.notification == "SELFIE_RESULT") { if (m.name == "MMM-BackgroundSlideshow") { setTimeout(() => { m.show(1000, {lockString: "RECIPE_LOCKED"}) }, 5000) } } }) } } } }, plugins: { onNotificationReceived: "SHOW_EYE" } } exports.recipe = recipe