How to speak to Gladys with Snips assistant


#42

En fait j’ai et je dois encore ajuster le module coté Gladys pour qu’il s’auto suffise :wink:
Notamment la partie configuration ou je dois rajouter une aide / explication directement dans la vue.

Coté Snips, j’ai pas envie de faire un tuto car c’est pas mon job, si Snips évolue, faut faire évoluer le tuto coté Gladys, c’est un peu redondant.

La variante auquelle j’avais pensé et on voit que ca pose probème, c’est si quelqu’un souhaite utiliser un broker mqtt maison plutôt que celui embarqué dans snips, la il faudrait creuser ce point, mais la doc snips est hyper complète.

S’il faut, on peut se caler un point avec @Gurwan et @jojolll pour essayer debuger la conf en live.


#43

Exactement, ça sert à rien de réinventer la roue. +1


#44

Hello,

Peux-tu rajouter cela:

sails.log.info(message);

ligne 4 du fichier snips.handler.js

et
sails.log.info(userid)

ligne10 du même fichier ?

Puis refaire un test et me poster le résultat avec un pm2 log gladys en // ?


#45

Oulala ! :joy:

0|gladys | Snips : New message in topic hermes/hotword/default/detected
0|gladys | { siteId: ‘default’,
0|gladys | modelId: ‘hey_snips’,
0|gladys | modelVersion: ‘hey_snips_3.1_2018-04-13T15:27:35_model_0019’,
0|gladys | modelType: ‘universal’,
0|gladys | currentSensitivity: 0.5,
0|gladys | detectionSignalMs: 1547053427921,
0|gladys | endSignalMs: 1547053427921 }
0|gladys | ReferenceError: userid is not defined
0|gladys | at module.exports (/home/pi/gladys/api/hooks/snips/lib/snips.handler.js:7:16)
0|gladys | at MqttClient. (/home/pi/gladys/api/hooks/snips/lib/snips.connect.js:27:15)
0|gladys | at emitThree (events.js:136:13)
0|gladys | at MqttClient.emit (events.js:217:7)
0|gladys | at MqttClient._handlePublish (/home/pi/gladys/api/hooks/snips/node_modules/mqtt/lib/client.js:792:12)
0|gladys | at MqttClient._handlePacket (/home/pi/gladys/api/hooks/snips/node_modules/mqtt/lib/client.js:282:12)
0|gladys | at process (/home/pi/gladys/api/hooks/snips/node_modules/mqtt/lib/client.js:238:12)
0|gladys | at Writable.writable._write (/home/pi/gladys/api/hooks/snips/node_modules/mqtt/lib/client.js:248:5)
0|gladys | at doWrite (/home/pi/gladys/api/hooks/snips/node_modules/readable-stream/lib/_stream_writable.js:237:10)
0|gladys | at writeOrBuffer (/home/pi/gladys/api/hooks/snips/node_modules/readable-stream/lib/_stream_writable.js:227:5)
0|gladys | at Writable.write (/home/pi/gladys/api/hooks/snips/node_modules/readable-stream/lib/_stream_writable.js:194:11)
0|gladys | at Socket.ondata (_stream_readable.js:639:20)
0|gladys | at emitOne (events.js:116:13)
0|gladys | at Socket.emit (events.js:211:7)
0|gladys | at addChunk (_stream_readable.js:263:12)
0|gladys | at readableAddChunk (_stream_readable.js:250:11)
0|gladys | at Socket.Readable.push (_stream_readable.js:208:10)
0|gladys | at TCP.onread (net.js:601:20)
PM2 | App [gladys:0] exited with code [1] via signal [SIGINT]
PM2 | App [gladys:0] starting in -fork mode-
PM2 | App [gladys:0] online

Je pense que ca ne change rien mais j’ai placé tes deux lignes avant la clause try{}

EDIT : J’ai l’impression qu’ici ce n’est que la détection du hotword. Tu ne voulais pas plutôt le message ?
Sans ces lignes, pour le hotword voici mes logs pm2 :
0|gladys | Snips : New message in topic hermes/hotword/default/detected


#46

Ok je pense avoir trouvé et je t’ai induit en erreur, pour le paramètre SNIPS_WAKEWORDS il ne faut pas mettre default:1 mais hey_snips:1
Car par défaut, le nom du wakeword, c’est hey_snips, c’est la clé modelId dans le log que tu as posté.

Je pousserais une nouvelle version pour qu’en cas de mauvaise détection du wakeword, cela fonctionne quand meme (avec un user par défaut malheureusement car le brain.classify attend un user)

Tu peux virer les logs que je t’ai demandé à rajouter, sinon ca va planter car sails.log.info(userid) n’est pas bon :wink:


#47

Excellent !! merci du débogage ! :smiley:
En effet, ça mérite une petit modif :wink:
Par contre, pourquoi tu ne mets pas simplement pour n’importe quel hotword, comme ca pas besoin de param ?
(Plusieurs hotwords simultanés sur snips c’est possible pour appeler des prog différents ?)

Bon travail en tout cas :smile:

PS : du coup je m’amuse et je viens de trouver une première “incompatibilité” de la reco de snips et du brain : “reveille moi à 6h40” fonctionnerai (gladys-voice donc google) mais “reveille moi à six heures quarante” ne fonctionne pas (snips) ^^

il faudrait une traduction ou dire au brain que ce sont des chiffres mais je ne vois pas comment, les modifs du brain sont difficiles ?


#48

Voici une erreur dans les logs que je rencontre UNIQUEMENT avec la phrase “allume éclaire à ce soir”. j’ai cru que c’était les accents mais a priori non.

Snips : New message in topic hermes/hotword/default/detected
0|gladys | Snips : New message in topic hermes/intent/JeanPhilippe:pushToGladysBrain
0|gladys | Unhandled rejection TypeError: Cannot read property ‘toLowerCase’ of undefined
0|gladys | at classify (/home/pi/gladys/api/hooks/snips/lib/snips.handler.js:36:71)
0|gladys | at shared.setSessionId.then (/home/pi/gladys/api/hooks/snips/lib/snips.handler.js:20:18)
0|gladys | at tryCatcher (/home/pi/gladys/node_modules/bluebird/js/release/util.js:16:23)
0|gladys | at Promise._settlePromiseFromHandler (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:512:31)
0|gladys | at Promise._settlePromise (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:569:18)
0|gladys | at Promise._settlePromiseCtx (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:606:10)
0|gladys | at Async._drainQueue (/home/pi/gladys/node_modules/bluebird/js/release/async.js:138:12)
0|gladys | at Async._drainQueues (/home/pi/gladys/node_modules/bluebird/js/release/async.js:143:10)
0|gladys | at Immediate.Async.drainQueues (/home/pi/gladys/node_modules/bluebird/js/release/async.js:17:14)
0|gladys | at Immediate.args.(anonymous function) (/usr/lib/node_modules/pm2/node_modules/event-loop-inspector/index.js:138:29)
0|gladys | at runCallback (timers.js:810:20)
0|gladys | at tryOnImmediate (timers.js:768:5)
0|gladys | at processImmediate [as _immediateCallback] (timers.js:745:5)

Mais après cette commande ça fonctionne normalement

même “éclaire à ce soir” ne pose pas problème, ça viens peut être directement du brain du coup


#49

Par contre, pourquoi tu ne mets pas simplement pour n’importe quel hotword, comme ca pas besoin de param ?

Car définir les hotwords par user permet de faire de la détection d’utilisateur.
Pour cela, il faut créer des hotwords personnels.

PS : du coup je m’amuse et je viens de trouver une première “incompatibilité” de la reco de snips et du brain : “reveille moi à 6h40” fonctionnerai (gladys-voice donc google) mais “reveille moi à six heures quarante” ne fonctionne pas (snips) ^^

Effectivement Snips ne conserve pas les numériques.
Je ne sais pas trop comment traiter cela, est-ce au module ou bien au brain de gérer … j’aurais tendance à dire que ca devrait etre le job du brain.

J’ai poussé une PR pour pouvoir parser des valeurs de type % ou j’ai justement faire une table de translation text -> numérique.

Voici une erreur dans les logs que je rencontre UNIQUEMENT avec la phrase “allume éclaire à ce soir”. j’ai cru que c’était les accents mais a priori non.

Ta phrase est bizarre :wink: Néanmoins ca ne justifie pas l’erreur.
C’est étonnant, il doit trouver le mot lumière comme étant un devicetype.

Pourrais-tu ajoutersails.log.info(message) ligne 30 de snips.handler.js ? :wink:


#50

Ok :slight_smile:

La phrase n’est pas bizarre ! enfin…son interprétation de l’ASR snips oui, mais a la base j’ai dis “allume éclairage soir”
vraiment impossible de lui faire comprendre le mot “éclairage” :exploding_head: dans n’importe quelle phrase donc ma logique des deviceType de gladys est a revoir pour mes scénarios :cold_sweat:

Pas de soucis, voici le résultat du test :

0|gladys | Snips : New message in topic hermes/intent/JeanPhilippe:pushToGladysBrain
0|gladys | { sessionId: ‘c8ad8141-b47a-4efb-b9e3-a57eafab89e0’,
0|gladys | customData: null,
0|gladys | siteId: ‘default’,
0|gladys | input: ‘allume eclaire à ce soir’,
0|gladys | asrTokens: [ [ [Object], [Object], [Object], [Object], [Object] ] ],
0|gladys | intent:
0|gladys | { intentName: ‘JeanPhilippe:pushToGladysBrain’,
0|gladys | probability: 0.5385255 },
0|gladys | slots:
0|gladys | [ { confidence: 1,
0|gladys | rawValue: ‘ce soir’,
0|gladys | value: [Object],
0|gladys | range: [Object],
0|gladys | entity: ‘snips/datetime’,
0|gladys | slotName: ‘date’ } ],
0|gladys | user: ‘1’ }
0|gladys | You have triggered an unhandledRejection, you may have forgotten to catch a Promise rejection:
0|gladys | TypeError: Cannot read property ‘toLowerCase’ of undefined
SUITE DE L’ERREUR…


#51

Merci ! :slight_smile:

Je comprends mieux.

En fait, snips fonctionne en local, donc il connait pas le dictionnaire francais en entier.
Donc pour qu’il reconnaisse les phrases qui nous intéresse, on l’entraine via l’application que l’on créer sur le portail developper snips.
C’est l’objet de l’app gladys que j’ai fait, en essayant d’etre pas mal exhaustif. (c’est insuffisant de toute facon actuellement)

La on voit que le mot “éclairage” n’est pas connu, donc il va au plus pres, d’ou “éclaire a ce soir”.

Après, snips permet de déclarer des slots que l’on peut entrainer dynamiquement en local.
J’ai donc créé un slot devicetype que j’entraine avec les devicetype de gladys.

Donc soit, “éclairage du soir” est un devicetype, et la ca devrait le faire mais faudrait voir si c’est le nom d’un devicetype, faut que j’adapte le code je crois.

Sinon, il faut que je rajoute ce mot dans l’app gladys sur la console snips, puis mettre a jour chez toi l’application avec un sam update assistant

Pour l’erreur, en revanche, je crois que c’est lié au parsing du slot de type datetime, pourrais-tu cette fois remplacer le sails.log.info(message) par sails.log.info(message.slots[0].value)


#52

Pas de soucis :slight_smile:

Voici ci dessus ce que j’ai mis dans mes périf et les deviceTypes. J’aurai peut être du mettre “éclairage soir” au lieu de “soir” dans périphériques ?
Les majuscules sont peut être dérangeantes pour que le module prennent en compte le nom ?

Ok ^^ mais ne t’embête pas a faire une mise a jour juste pour ça, ça peut très bien attendre

Ah, ta commande ne marche pas cette fois :

0|gladys | Snips : New message in topic hermes/intent/JeanPhilippe:pushToGladysBrain
0|gladys | Unhandled rejection TypeError: Cannot read property ‘value’ of undefined

Je réessaierai demain avec plaisir si tu as une autre proposition :wink:


#53

Ok merci.

Ma commande ne marche pas car il n’y a justement pas de valeur lorsque le slot est de type datetime.
Ici snips reconnait soir comme étant une variable temporelle, et donc ne traite pas la value de la même manière, il faut que je gère cette exeption.

Sinon, au vu de ton screenshot, aujourd’hui, le nom de ton devicetype, c’est Eclairage soir ?

Peux-tu cliquer sur le bouton Configuration du module Snips ?

En fait, à l’install, Gladys lance la configuration du module, et ce dernier se charge de prendre tous les devicetype connus dans gladys, et les entraine dans Snips.

Sauf que si tu install ou met à jour un assistant dans Snips, cet entrainement est perdu, et il repart qu’avec ce qui est connu du modèle. C’est embetant. J’ai amélioré le truc, mais pour le moment, il faut que tu relances la config.
Si ton devicetype, c’est Eclairage soir, ca devrait le faire.


#54

Bonjour @Jean-Philippe,

Petite question : certains modules peuvent être dans Gladys et/ou snips exemple (la météo, gestion Freebox) donc qui gère quoi pour ces modules Gladys ou snips ou on doit les mettre dans les deux ?

Merci @phoenix3472


#55

En fait, les applications snips sont auto-suffisante.

Par exemple, la météo, c’est le code de l’application snips météo qui le gère (un bout de code python).

Tu peux les installer si tu veux mais ces applications la ne seront fonctionnelles qu’a travers snips.

Pour ma part, je fais le choix de laisser Gladys gérer le fonctionnel, et Snips se charge simplement de récupérer la phrase et de “l’envoyer” à Gladys.

Pour la météo, c’est donc Gladys qui la donne.


#56

OK merci pour ta réponse rapide

cependant j’installe donc le module météo sur Gladys et la gestion Freebox sur Gladys aussi ?
Et je ne mets aucun module sur Snips ?

C’est ça


#57

En fait c’est comme tu le sens, mais tout ce qui est mis sur Snips ne sera pas utilisable au travers de Gladys tout simplement :slight_smile:

Si tu veux juste utiliser Snips en moteur de Voice To Text, effectivement, n’installe que l’application Gladys que j’ai créé dans la console Snips.

@tous si vous avez des phrases non reconnues par snips, n’hésitez pas m’envoyer un mp, ou mieux, une issue dans github sur le repo de mon module, pour que je les ajoute dans snips. C’est à mon sens mieux que de forker l’application snips et de se retrouver avec 15 applis gladys comme c’est le cas pour jeedom.


#58

@Jean-Philippe

Alors quels sont les modules intéressant à installer sur Snips pour avoir le maximum d’info comme la météo de Marseille qui je croit n’est pas donné par le module de Gladys ou les code postaux d’une ville ?

Merci


#59

Installes le module Météo sur Gladys.


#60

@Jean-Philippe

Excuse moi mais tu n’a pas toute à fait répondu à ma question ?

Et dois t on installer le module speak sur Gladys

En tous cas merci de prendre le temps d’y répondre.

@phoenix3472


#61

Pardon j’avais mal lu, il faut que tu installes l’application Gladys.