Un exemple en français avec Node-red

J’apporte ici ma modeste contribution, si ça peut aider les débutants sur Rhasspy + Node-red qui le rend directement opérationnel, sans besoin de Home Assistant, Jeedom ou autre.

I can translate in English (oder auf deutsch wenn nötig).

[SwitchState]
allume {state:on} [la lumière]
éteint {state:off} [la lumière]

[GetTime]
quelle heure [est-il]
il est quelle heure

[GetWeather]
quelle [est la] température
quel temps fait-il [aujourd'hui]
quel temps fera-t-il aujourd'hui

[GetWeatherForecast1]
quel temps fera-t-il demain
quel temps va-t-il faire demain

[GetWeatherForecast2]
quel temps fera-t-il après-demain
quel temps va-t-il faire après-demain

Je pense qu’il n’est pas beaucoup besoin de commenter les exemples de phrases. Il est plus intéressant de voir la partie Node-red avec d’abord une connexion websocket qui permet de récupérer les fichiers json, à partir de quoi on peut travailler sur les intents [SwitchState] etc.

Pour la partie météo du jour et prévisions, j’ai fait très simple en ne travaillant que sur aujourd’hui, demain et après-demain. Mais il est possible d’aller jusqu’à 7 jours gratuitement avec Openweather (il suffit de s’inscrire pour obtenir une clé API). Dans ce cas, il faudra peut être aller plus loin dans la logique des intents.

Pour le TTS, je vous recommande Google WaveNet qui offre le meilleur rendu son. Il suffit de s’inscrire à Google Cloud et de là paramétrer son compte pour obtenir une clé API…

NB : je n’avais jamais utilisé Node-red il y a 15 jours, donc je peux répondre à vos questions, mais je ne suis pas un vrai geek.

1 Like

And for those of you who need a shopping list system, here it is!

Pour ceux qui cherchent un système de liste de courses…

[{"id":"9e1cf1fd.d7ddf","type":"tab","label":"Flow 2","disabled":false,"info":""},{"id":"37f700ac.246f6","type":"file in","z":"9e1cf1fd.d7ddf","name":"","filename":"/home/pi/ShoppingList.txt","format":"lines","chunk":false,"sendError":false,"encoding":"utf8","x":449,"y":260,"wires":[["8e5302ff.f4785"]]},{"id":"1a3d3279.0dadde","type":"http request","z":"9e1cf1fd.d7ddf","name":"http://localhost:12101/api/text-to-speech","method":"POST","ret":"txt","paytoqs":"ignore","url":"http://localhost:12101/api/text-to-speech","tls":"","persist":false,"proxy":"","authType":"basic","x":720,"y":460,"wires":[[]]},{"id":"cd4f8ead.fd43","type":"template","z":"9e1cf1fd.d7ddf","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Item {{parts.index}}: {{payload}} !","output":"str","x":400,"y":380,"wires":[["1a3d3279.0dadde"]]},{"id":"8e5302ff.f4785","type":"switch","z":"9e1cf1fd.d7ddf","name":"","property":"payload","propertyType":"msg","rules":[{"t":"nempty"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":390,"y":320,"wires":[["cd4f8ead.fd43"],["7819fb36.9cb494"]]},{"id":"7819fb36.9cb494","type":"template","z":"9e1cf1fd.d7ddf","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Fin de la liste","output":"str","x":400,"y":420,"wires":[["1a3d3279.0dadde"]]},{"id":"9e154e42.37a18","type":"websocket in","z":"9e1cf1fd.d7ddf","name":"","server":"","client":"b6a5c0dd.6135","x":200,"y":89,"wires":[["b78aca49.dfd3e8"]]},{"id":"b78aca49.dfd3e8","type":"switch","z":"9e1cf1fd.d7ddf","name":"","property":"intent.name","propertyType":"msg","rules":[{"t":"eq","v":"AddToList","vt":"str"},{"t":"eq","v":"ReadList","vt":"str"},{"t":"eq","v":"EraseList","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":4,"x":193,"y":168,"wires":[["4ad4a94f.f70fb8"],["37f700ac.246f6"],["42a0c952.a1ef08"],["3e4167ca.b840d8"]]},{"id":"5061031.c4cbefc","type":"file","z":"9e1cf1fd.d7ddf","name":"","filename":"/home/pi/ShoppingList.txt","appendNewline":true,"createDir":false,"overwriteFile":"false","encoding":"utf8","x":770,"y":276,"wires":[[]]},{"id":"7130ea33.5b34c4","type":"comment","z":"9e1cf1fd.d7ddf","name":"Liste des courses - créer / ajouter","info":"","x":737,"y":100,"wires":[]},{"id":"9c44c7d1.47cad8","type":"template","z":"9e1cf1fd.d7ddf","name":"je complète la liste","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"je complète la liste avec {{slots.item_courses}}","output":"str","x":748,"y":319,"wires":[["1a3d3279.0dadde"]]},{"id":"4ad4a94f.f70fb8","type":"template","z":"9e1cf1fd.d7ddf","name":"","field":"slots.item_courses","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"- {{slots.item_courses}}","output":"str","x":673,"y":150,"wires":[["f065144d.f9bdf8"]]},{"id":"f065144d.f9bdf8","type":"change","z":"9e1cf1fd.d7ddf","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"slots.item_courses","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":695,"y":208,"wires":[["5061031.c4cbefc","9c44c7d1.47cad8"]]},{"id":"218470f5.88324","type":"comment","z":"9e1cf1fd.d7ddf","name":"Liste des courses - lire","info":"","x":442,"y":210,"wires":[]},{"id":"42a0c952.a1ef08","type":"file","z":"9e1cf1fd.d7ddf","name":"","filename":"/home/pi/ShoppingList.txt","appendNewline":true,"createDir":false,"overwriteFile":"delete","encoding":"utf8","x":443,"y":564,"wires":[["45d97948.79a708"]]},{"id":"4d3693ae.f3fc3c","type":"comment","z":"9e1cf1fd.d7ddf","name":"liste des courses - effacer","info":"","x":426,"y":510,"wires":[]},{"id":"45d97948.79a708","type":"template","z":"9e1cf1fd.d7ddf","name":"j'efface la liste","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"j'efface la liste","output":"str","x":698,"y":564,"wires":[["1a3d3279.0dadde"]]},{"id":"3e4167ca.b840d8","type":"template","z":"9e1cf1fd.d7ddf","name":"Non reconnu","field":"payload","fieldType":"msg","format":"text","syntax":"plain","template":"je ne connais pas - pas compris","output":"str","x":181,"y":462,"wires":[["1a3d3279.0dadde"]]},{"id":"b6a5c0dd.6135","type":"websocket-client","path":"ws://localhost:12101/api/events/intent","tls":"","wholemsg":"true"}]

It can be combined with the previous flow or run on its own.

Il peut compléter le flow précédent ou fonctionner indépendamment.
Il suffit de ces phrases et d’une list d’items (la votre) dans les slots.

[AddToList]
(complète | ajoute) [à la] liste [avec] ($liste_items){item_courses}

[ReadList]
(lis | lecture) [de la] liste [des] courses

[EraseList]
efface [la] liste [des] courses
1 Like

Merci pour ton partage.
Pour ma part, je vais faire la même chose mais via jeedom.
Mon plus gros souci étant d’avoir la liste complète de produits.

Je partage mon slot tel qu’il est actuellement. En partageant chacun, ca devrait finir par être complet !

Poivrons
Épices
Sirop
Savon
rasoirs
Anti-insectes
Lingettes
cire épilation
Prunes
Courge
Concombres
Comté
Huile végétale
thé froid
Bouillon cube
Film étirable
Cookies
Tablettes vaisselle
haricots secs
Haricots
Sacs-poubelle Bureau
œufs
Jambon
sucre vanillé
Compote
Fromages
lait
enveloppes
Soupe
Charcuterie
Ketchup
Bloc-notes
crème
croûtons
légumes
mayonnaise
encre imprimante
Viande hachée
Lait hydratant
Hygiène
apéritifs
Miel
Serviettes papier
Lessive
Cabillaud
Savon de Marseille
oignons
Thon
Déodorant
chocolat
Timbres
Fruits secs
Champagne
Emmental
Bière
Pommes
Lames rasoir
épices
glaces
Oranges
Carottes
Pamplemousses
Cuisine
Cacao
Huîtres
Lait
Pizza
Bœuf
Pain tortillas
Gingembre
Fruits à coques
Worcestershire Divers
Sorbet
pâtes
Kiwis
Biscuits salés
Persil
prd plaques
Thé
Sirop d’érable
Moules
pain précuit
biscuits salés
Pain
Fruits rouges
Shampooing
Poissons
Mouchoirs papier
Légumes
Boulangerie
Charbon de bois
sel machine
Mousse à raser
Chou-fleur
Soirée pizza
Fromage à tartiner
Riz
Moutarde
viande froide
crème mains
Désodorisant
Œufs
Houmous
Hygiène intime
Croissants
Chips
Graines
Vinaigre blanc
Saumon
Céleri
cure-dents
jus de citron
Avocats
Vinaigre de cidre
Bananes
Bicarbonate
Cannelle
Bâtonnets poisson
maïzena
Olives
Sacs congélation
sacs aspirateur
Bouteille de gaz
ail
sucre en poudre
Rhum
Beurre
Pêches
Fil dentaire
Coton
Huiles essentielles
Produits voiture
Soirée tacos
Dinde
sachets congél
Essuie tout
Maquillage
poissons
Crabe
Coriandre
Soda
Bretzels
tomates
Produits ménagers
Mozzarella
semoule
mousse à raser
cacao
après rasage
Dorade
sachets plastique
charcuteries
anchois
Asperges
piles
olives
Sauce pour pâtes
prd vitres
Conserves
Chapelure
Basilic
Écran solaire
riz
purée
Plateau fromages
sucre en morceaux
Magazines
Pâtes alimentaires
Filtres à café
Carte de vœux
crayons
Crème à récurer
Liniment
dentifrice
colle
Poivre noir
Liquide vaisselle
Journaux
Crème fraîche
Papier alu
huile
Crème
Papier cuisson
Sucre Snacks
serviettes papier
café
Épinards
papier sulfurisé
Nourriture bébé
Pain pita
Champignons
Sauce BBQ
Cotons Tiges
Poulet
feuille plastique
mousse
mouchoirs
prd vaisselle main
Menthe
bouillon
Jus de fruits
scotch
Bleu
farine
Crème fouettée
lessive
Dentifrice
Mélange gâteau
Salsa
ge -douche
Pommes noisettes
Cornichons
après-shampooing
étiquettes
Porc
Soirée spaghetti
Céréales
Huile d’olive
Lait en poudre
sachets glaçons
Raisins
Vinaigre
Gin
ficelle
Savon noir
bière
Oignon
Tarte Pâtisserie
prd sol
Jus de citron
Eau gazeuse
Poires
Origan
fruits
levure chimique
Décorations gâteau
Laque cheveux
Fromage blanc
Citrons jaunes
Nettoyant vitres
sirop
cirage
Paprika
Pommes de terre
Pâtisseries
papier alu
Colle
savon mains
Papier hygiénique
Pain hamburger
biscuits
Extrait de vanille
shampooing
ketchup
Parmesan
Sauce pesto
Nutella
Enveloppes
Piles
Plats cuisinés
Bonbons
Purée Mousline
Bacon
röstis
jus de fruits
poisson
essuie-lunettes
Pop-corn
yoghourts
thon
Soirée hamburger
brosses à dents
Homard
Condiments
Café
huile d'olive
Mélange brownies
Flocons d’avoine
pois chiches
Soirées repas
Vitamines
Pépites chocolat
Boissons
Citrons verts
Margarine
Nectarines
pommes de terre
Gel douche
Piment de Cayenne
Gel lavant bébé
fromage
Sacs aspirateur
Maïs
Crayons papier
Frites
Tomates
éponges
moutarde
Sel Frais
Démaquillant
Brocolis
Vodka
Tofu
Recharges Swiffer
Sauce soja
sel
Whisky
Préservatifs
Ampoules
Muesli
beurre
Farine
Après shampooing
Glaçage
Cerises
pansements
Melon
Baume à lèvres
prd vaisselle
viande
fruits secs
Sucettes à glacer
Salade
Confiture
Divers
Éponges
Courgettes
Papier imprimante
Bicarbonate de soude
Surgelés
levure
Hamburgers
Chewing gum
Gâteaux
vin rouge
Gel cheveux
Vinaigrette
vinaigre
Crevettes
protection périodique
Pain de mie
poivre
anticalcaire
papier ménage
Beignets
Fromage tranches
Couches
Sauce piquante
Édulcorant
Ail
Yaourts
papier toilette
vin blanc
Fromage râpé
Fruits
Barres de céréales
Éponges grattantes
Levure
Stylos
Feta
Chèvre
guacamole
Nettoyage naturel
imperméabilisant
Saucisses
thé
Mayonnaise
sacs poubelle
Vin
Scotch
Huile de coco
Viandes
Soirée chili

Salut @bart11064
Je crois qu’on peut dire à chacun sa liste. Personnellement, il y a presque la moitié des items de ta liste que je n’achète jamais…
Par contre, à partir du moment où ta liste couvre 90% de tes besoins, ce serait intéressant d’avoir un moyen d’enregistrer un item non reconnu. Sous forme de fichier wav à restituer ??? le temps de compléter la liste “en dur”. Si tu vois ce que je veux dire.

1 Like

Salut,

Je n’ai pas la même approche. Pour ma part, je préfère avoir une liste bien supérieure à celle que j’utilise habituellement. Le but : parer à un maximum de cas, et ne plus avoir à repasser régulièrement pour ajouter ce qui manque. Cette première liste est d’ailleurs tirée d’exemples sur le web. Je cherche à être exhaustif le plus possible, d’où ma proposition de partager ses listes.

Hello @kart-able

désolé de déterrer ce topic mais je suis intéressé par ta liste.

J’ai copié ton code Node Red.
Il fonctionne bien chez moi.

Peux-tu me dire à quoi sert dans les noeuds TEmplate le format “Mustache” ?

Par ailleurs, j’ai réussi à alimenter la carte “Shopping list” sur mon dashboard :slight_smile:

Saurais tu lire les éléments de cette Shopping list (et non pas du fichier liste.txt) ?

merci pour ton aide

Quand je dis lire, je veux dire “lire avec rhasspy” bien sûr :slight_smile: