Rhasspy with Master and Raspi zeros

IMPORTANT:

After dowloading (./download-dependencies.sh), you have to change:

1.) In “requirement.txt”:**

change networkx >= 2.2
to
networkx == 2.3
If not, V2.4 will be installed, which is not compatible

2.) in “create-venv”:

change line 276 to: (add “l armv6l”)

271-# -----------------------------------------------------------------------------
272-# Snowboy
273-# -----------------------------------------------------------------------------
274-
275-case “${CPU_ARCH}” in
276- x86_64|armv7larmv6l)

I use snowboy/jarvis.umdl with 0.6,0.6
Every client got a sitId (Enable MQTT in Settings, write siteID, Disable MQTT)

Controlled with nodered and WebSocket In-Node.
SiteID is stored to global variable (global.siteId)
At end of nodred, answer ist send to clients with WebSocket out
(one Websocket out for each client, output depends on global.siteId

Everything is perfekt.
Same performance as snips.
I will explain nodered configuration later here.

4 Likes

Did you managed to install picoTTS on the pizero ?

Have a 0WH with buster lite, install goes without error but:

pico2wave -l fr-FR -w test.wav “Bonjour”

-> illegal instruction

ok, on pi 0 WH raspbian buster lite, this works:

wget http://archive.raspberrypi.org/debian/pool/main/s/svox/libttspico-utils_1.0+git20130326-3+rpi1_armhf.deb
wget http://archive.raspberrypi.org/debian/pool/main/s/svox/libttspico0_1.0+git20130326-3+rpi1_armhf.deb
sudo apt-get install -f ./libttspico0_1.0+git20130326-3+rpi1_armhf.deb ./libttspico-utils_1.0+git20130326-3+rpi1_armhf.deb

pico2wave -l fr-FR -w test.wav "Bonjour"
aplay test.wav

:upside_down_face:

[{“id”:“1a63faa2.992aa5”,“type”:“websocket in”,“z”:“21f11887.571048”,“name”:“client_wohnzimmer”,“server”:“ff5e9bb4.86a7e8”,“client”:"",“x”:130,“y”:520,“wires”:[[“8bfe9bed.087f28”]]},{“id”:“e018a3e7.18e02”,“type”:“websocket in”,“z”:“21f11887.571048”,“name”:“client_badezimmer”,“server”:“7be5bdf3.1d85f4”,“client”:"",“x”:130,“y”:640,“wires”:[[“8bfe9bed.087f28”]]},{“id”:“8bfe9bed.087f28”,“type”:“switch”,“z”:“21f11887.571048”,“name”:“slots.room ?”,“property”:“slots.room”,“propertyType”:“msg”,“rules”:[{“t”:“null”},{“t”:“else”},{“t”:“else”}],“checkall”:“false”,“repair”:false,“outputs”:3,“x”:370,“y”:560,“wires”:[[“1069d4bd.29dcab”],[“c7b8dd14.a92c2”],[]]},{“id”:“1069d4bd.29dcab”,“type”:“change”,“z”:“21f11887.571048”,“name”:“siteId -> slots.room”,“rules”:[{“t”:“set”,“p”:“slots.room”,“pt”:“msg”,“to”:“siteId”,“tot”:“msg”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:610,“y”:520,“wires”:[[“c7b8dd14.a92c2”]]},{“id”:“c7b8dd14.a92c2”,“type”:“change”,“z”:“21f11887.571048”,“name”:“global.siteId”,“rules”:[{“t”:“set”,“p”:“siteId”,“pt”:“global”,“to”:“siteId”,“tot”:“msg”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:870,“y”:560,“wires”:[[“4eb02bff.670de4”]]},{“id”:“f6d29c2a.5d2bd”,“type”:“websocket in”,“z”:“21f11887.571048”,“name”:“client_schlafzimmer”,“server”:“7b62cbee.a065b4”,“client”:"",“x”:130,“y”:600,“wires”:[[“8bfe9bed.087f28”]]},{“id”:“ea8b4be4.94f1a8”,“type”:“websocket in”,“z”:“21f11887.571048”,“name”:“client_küche_____”,“server”:“9bfd55e8.6866b8”,“client”:"",“x”:130,“y”:560,“wires”:[[“8bfe9bed.087f28”]]},{“id”:“ff5e9bb4.86a7e8”,“type”:“websocket-listener”,“z”:"",“path”:“ws://10.2.30.1:12101/api/events/intent”,“wholemsg”:“true”},{“id”:“7be5bdf3.1d85f4”,“type”:“websocket-listener”,“z”:"",“path”:“ws://10.2.30.4:12101/api/events/intent”,“wholemsg”:“true”},{“id”:“7b62cbee.a065b4”,“type”:“websocket-listener”,“z”:"",“path”:“ws://10.2.30.3:12101/api/events/intent”,“wholemsg”:“true”},{“id”:“9bfd55e8.6866b8”,“type”:“websocket-listener”,“z”:"",“path”:“ws://10.2.30.2:12101/api/events/intent”,“wholemsg”:“true”}]

node_output

‘[{“id”:“da3c33ce.1cf8f”,“type”:“link in”,“z”:“21f11887.571048”,“name”:“to-Answer”,“links”:[“30891a19.059636”,“40d03058.321ef”,“4bddebca.073a74”,“572ea58c.5813fc”,“7292021c.0edb8c”,“93bfaa03.be2c78”,“c353ad17.3b3e”,“cb5d707f.eca”,“e260aa56.06e828”,“ec037c87.5b545”,“f3ee94cf.b530d8”,“cb4ca0f5.aa211”,“db33c7b7.6270c8”,“af2cb1e1.57b1e”,“5653bc5d.debf64”,“203eabbf.02dad4”,“9ddab69d.17d9e8”,“afe50baf.4a9498”,“ba54b4f0.819818”],“x”:175,“y”:860,“wires”:[[“5d7ba474.1791fc”]]},{“id”:“caff38fb.2ffbd8”,“type”:“comment”,“z”:“21f11887.571048”,“name”:“Antworten___”,“info”:"",“x”:110,“y”:860,“wires”:[]},{“id”:“c4f9369f.236bf8”,“type”:“comment”,“z”:“21f11887.571048”,“name”:"---------- AUSGANG ----------",“info”:"",“x”:650,“y”:740,“wires”:[]},{“id”:“ec69f81b.708e98”,“type”:“http request”,“z”:“21f11887.571048”,“name”:"-> Wohnzimmer",“method”:“POST”,“ret”:“txt”,“paytoqs”:false,“url”:“http://10.2.30.1:12101/api/text-to-speech",“tls”:"",“persist”:false,“proxy”:"",“authType”:“basic”,“x”:680,“y”:820,“wires”:[[]]},{“id”:“5d7ba474.1791fc”,“type”:“switch”,“z”:“21f11887.571048”,“name”:“global.siteId”,“property”:“siteId”,“propertyType”:“global”,“rules”:[{“t”:“eq”,“v”:“telegram”,“vt”:“str”},{“t”:“eq”,“v”:“wohnzimmer”,“vt”:“str”},{“t”:“eq”,“v”:“küche”,“vt”:“str”},{“t”:“eq”,“v”:“schlafzimmer”,“vt”:“str”},{“t”:“eq”,“v”:“badezimmer”,“vt”:“str”}],“checkall”:“false”,“repair”:false,“outputs”:5,“x”:470,“y”:860,“wires”:[[“c2ad07df.517ca8”],[“ec69f81b.708e98”],[“9139132b.7579c”],[“4698c6c3.f965c8”],[“cf8777c.c7ee988”]]},{“id”:“cf8777c.c7ee988”,“type”:"http request”,“z”:“21f11887.571048”,“name”:"-> Badezimmer",“method”:“POST”,“ret”:“txt”,“paytoqs”:false,“url”:“http://10.2.30.4:12101/api/text-to-speech",“tls”:"",“persist”:false,“proxy”:"",“authType”:“basic”,“x”:680,“y”:940,“wires”:[[]]},{“id”:“c2ad07df.517ca8”,“type”:“function”,“z”:“21f11887.571048”,“name”:"-> Telegram___”,“func”:“if(msg.chatId){\n msg.payload = {chatId : msg.chatId,\n type : “message”,\n content : msg.payload,\n options: msg.ops\n }\nreturn msg;\n}”,“outputs”:1,“noerr”:0,“x”:680,“y”:780,“wires”:[[“21df72e1.9732de”]],“icon”:“node-red-contrib-telegrambot/telegram.png”},{“id”:“9139132b.7579c”,“type”:“http request”,“z”:“21f11887.571048”,“name”:"-> Küche",“method”:“POST”,“ret”:“txt”,“paytoqs”:false,“url”:“http://10.2.30.2:12101/api/text-to-speech",“tls”:"",“persist”:false,“proxy”:"",“authType”:“basic”,“x”:660,“y”:860,“wires”:[[]]},{“id”:“4698c6c3.f965c8”,“type”:"http request”,“z”:“21f11887.571048”,“name”:"-> Schlafzimmer",“method”:“POST”,“ret”:“txt”,“paytoqs”:false,“url”:“http://10.2.30.3:12101/api/text-to-speech",“tls”:"",“persist”:false,“proxy”:"",“authType”:“basic”,“x”:680,“y”:900,"wires”:[[]]}]’

Most of the time, you want to control your lights and blends an all the other stuff not only with a voice-control. For example You could use the switchers from IKEA (IKEA TRADFRI remote control ).
E1524-E1810
https://www.zigbee2mqtt.io/devices/E1524_E1810.html
I added them inside each room to the rhasspy control, so I only have to write one Execution node.
First I read the IKEA zigbee information with zigbee2mqtt:
https://www.zigbee2mqtt.io/


Inside each room is one Ikea Switch. All device have names like “room_device”. So I only have to store rooms name in the first part.
[{“id”:“1f84ffb3.43ed2”,“type”:“mqtt in”,“z”:“9e6edf1f.1371a”,“name”:“kueche_schalter_ikea”,“topic”:“zigbee2mqtt/kueche_schalter_ikea/#”,“qos”:“2”,“datatype”:“json”,“broker”:“6f747297.64151c”,“x”:260,“y”:260,“wires”:[[“9da84204.1240b”]]},{“id”:“9da84204.1240b”,“type”:“change”,“z”:“9e6edf1f.1371a”,“name”:“Räume”,“rules”:[{“t”:“set”,“p”:“slots.room”,“pt”:“msg”,“to”:“küche”,“tot”:“str”},{“t”:“set”,“p”:“next_room”,“pt”:“msg”,“to”:“schlafzimmer”,“tot”:“str”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:480,“y”:260,“wires”:[[“720eb064.68649”]]},{“id”:“4cc8999e.7c0198”,“type”:“comment”,“z”:“9e6edf1f.1371a”,“name”:“Küche”,“info”:"",“x”:470,“y”:220,“wires”:[]},{“id”:“c54cbe28.92cd6”,“type”:“mqtt in”,“z”:“9e6edf1f.1371a”,“name”:“wohnzimmer_schalter_ikea”,“topic”:“zigbee2mqtt/wohnzimmer_schalter_ikea/#”,“qos”:“2”,“datatype”:“json”,“broker”:“6f747297.64151c”,“x”:270,“y”:180,“wires”:[[“69875500.9c701c”]]},{“id”:“12110d38.18cbd3”,“type”:“comment”,“z”:“9e6edf1f.1371a”,“name”:“Wohnzimmer”,“info”:"",“x”:470,“y”:140,“wires”:[]},{“id”:“4fbff732.749f08”,“type”:“mqtt in”,“z”:“9e6edf1f.1371a”,“name”:“schlafzimmer_schalter_ikea”,“topic”:“zigbee2mqtt/schlafzimmer_schalter_ikea/#”,“qos”:“2”,“datatype”:“json”,“broker”:“6f747297.64151c”,“x”:280,“y”:340,“wires”:[[“c9edb2c1.8acd1”]]},{“id”:“f867db4b.99b738”,“type”:“comment”,“z”:“9e6edf1f.1371a”,“name”:“Schlafzimmer”,“info”:"",“x”:470,“y”:300,“wires”:[]},{“id”:“df44c6d1.5a1e28”,“type”:“mqtt in”,“z”:“9e6edf1f.1371a”,“name”:“badezimmer_schalter_ikea”,“topic”:“zigbee2mqtt/badezimmer_schalter_ikea/#”,“qos”:“2”,“datatype”:“json”,“broker”:“6f747297.64151c”,“x”:270,“y”:420,“wires”:[[“cfb596df.ee8c98”]]},{“id”:“b3be6729.8713b8”,“type”:“comment”,“z”:“9e6edf1f.1371a”,“name”:“Badezimmer”,“info”:"",“x”:470,“y”:380,“wires”:[]},{“id”:“69875500.9c701c”,“type”:“change”,“z”:“9e6edf1f.1371a”,“name”:“Räume”,“rules”:[{“t”:“set”,“p”:“slots.room”,“pt”:“msg”,“to”:“wohnzimmer”,“tot”:“str”},{“t”:“set”,“p”:“next_room”,“pt”:“msg”,“to”:“küche”,“tot”:“str”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:480,“y”:180,“wires”:[[“720eb064.68649”]]},{“id”:“c9edb2c1.8acd1”,“type”:“change”,“z”:“9e6edf1f.1371a”,“name”:“Räume”,“rules”:[{“t”:“set”,“p”:“slots.room”,“pt”:“msg”,“to”:“schlafzimmer”,“tot”:“str”},{“t”:“set”,“p”:“next_room”,“pt”:“msg”,“to”:“badezimmer”,“tot”:“str”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:480,“y”:340,“wires”:[[“720eb064.68649”]]},{“id”:“cfb596df.ee8c98”,“type”:“change”,“z”:“9e6edf1f.1371a”,“name”:“Räume”,“rules”:[{“t”:“set”,“p”:“slots.room”,“pt”:“msg”,“to”:“badezimmer”,“tot”:“str”},{“t”:“set”,“p”:“next_room”,“pt”:“msg”,“to”:“flur”,“tot”:“str”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:480,“y”:420,“wires”:[[“720eb064.68649”]]},{“id”:“720eb064.68649”,“type”:“switch”,“z”:“9e6edf1f.1371a”,“name”:"",“property”:“payload.action”,“propertyType”:“msg”,“rules”:[{“t”:“nempty”}],“checkall”:“true”,“repair”:false,“outputs”:1,“x”:670,“y”:300,“wires”:[[“5d836107.b2f1d”]]},{“id”:“5d836107.b2f1d”,“type”:“link out”,“z”:“9e6edf1f.1371a”,“name”:“from-IKEA-Button”,“links”:[“9d1f5ac7.70eca8”],“x”:795,“y”:300,“wires”:[]},{“id”:“5167c4fe.829ccc”,“type”:“comment”,“z”:“9e6edf1f.1371a”,“name”:“to-IKEA-switch”,“info”:"",“x”:880,“y”:300,“wires”:[]},{“id”:“6f747297.64151c”,“type”:“mqtt-broker”,“z”:"",“name”:“MQTT”,“broker”:“10.2.254.1”,“port”:“1883”,“clientid”:"",“usetls”:false,“compatmode”:true,“keepalive”:“60”,“cleansession”:true,“birthTopic”:"",“birthQos”:“0”,“birthPayload”:"",“closeTopic”:"",“closeQos”:“0”,“closePayload”:"",“willTopic”:"",“willQos”:“0”,“willPayload”:""}]

After this Input, the differnt Action, that i will do by pressing one of the buttons will be created.
This Ikea Button has 5 Buttons, Each of them can be used to send a signal for:

  • press
  • release
  • long press
  • double click
    I use single press to:
  • Toggle the main Light (Center button)
  • Toggle the Light in the next room (Left Button)
  • Switch the diffent Scenes, I created (Right click)
  • Increase Brightness +25( (Up Click)
  • Decrease Brightness -25( (Down Click)
  • Increase and Decrease Brightness as long as I hold the Up/Down Buttons

[{“id”:“ad5c205a.6cb4a”,“type”:“switch”,“z”:“d3956bfe.d5e5c8”,“name”:“IKEA”,“property”:“payload.action”,“propertyType”:“msg”,“rules”:[{“t”:“eq”,“v”:“brightness_down_release”,“vt”:“str”},{“t”:“eq”,“v”:“brightness_up_release”,“vt”:“str”},{“t”:“eq”,“v”:“toggle”,“vt”:“str”},{“t”:“eq”,“v”:“arrow_left_click”,“vt”:“str”},{“t”:“eq”,“v”:“arrow_right_click”,“vt”:“str”},{“t”:“eq”,“v”:“brightness_up_click”,“vt”:“str”},{“t”:“eq”,“v”:“brightness_up_hold”,“vt”:“str”},{“t”:“eq”,“v”:“brightness_down_click”,“vt”:“str”},{“t”:“eq”,“v”:“brightness_down_hold”,“vt”:“str”}],“checkall”:“false”,“repair”:false,“outputs”:9,“x”:390,“y”:460,“wires”:[[“48d2c945.a2b4a8”],[“48d2c945.a2b4a8”],[“e3ebc15.df3444”],[“7ecaf4b9.f57c9c”],[“9ccfa159.7cb7e”],[“3ba2c003.d6719”],[“3ba2c003.d6719”,“7668deef.f9e29”],[“d7b37b28.38a3b8”],[“d7b37b28.38a3b8”,“7668deef.f9e29”]]},{“id”:“9d1f5ac7.70eca8”,“type”:“link in”,“z”:“d3956bfe.d5e5c8”,“name”:“to-IKEA-Switch”,“links”:[“7374d9b.2707128”,“20e22bcb.8e7754”,“bac67226.58015”,“5a33cf01.e8871”,“548fefac.397f5”,“9805e63.bfca218”,“e721de25.ba2ff”,“5d836107.b2f1d”],“x”:275,“y”:460,“wires”:[[“ad5c205a.6cb4a”]]},{“id”:“9ccfa159.7cb7e”,“type”:“function”,“z”:“d3956bfe.d5e5c8”,“name”:“Scenen ++”,“func”:“var numeric_array = [];\nvar arrScenes = global.get(‘arrScenes’);\nfor ( var scene in arrScenes[msg.slots.room]){\n numeric_array.push(scene);\n //node.send({payload:scene})\n}\n\n//node.send({payload:numeric_array})\n\nvar currentDeviceVariable = msg.currentLightDevice + “deviceScene"\nvar currentState = flow.get(currentDeviceVariable)|| 0;\n\n\ncurrentState += 1;\ncurrentState %= numeric_array.length;\nflow.set(currentDeviceVariable, currentState);\nmsg.intent = {“name”: “ChangeLightScene”}\nmsg.slots.scene=numeric_array[currentState]\nreturn msg\n",“outputs”:1,“noerr”:0,“x”:650,“y”:460,“wires”:[[“a50e25e6.ad9288”]]},{“id”:“7668deef.f9e29”,“type”:“change”,“z”:“d3956bfe.d5e5c8”,“name”:“hold -> True”,“rules”:[{“t”:“set”,“p”:“hold”,“pt”:“flow”,“to”:“true”,“tot”:“bool”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:650,“y”:600,“wires”:[[]]},{“id”:“48d2c945.a2b4a8”,“type”:“change”,“z”:“d3956bfe.d5e5c8”,“name”:“hold -> False”,“rules”:[{“t”:“set”,“p”:“hold”,“pt”:“flow”,“to”:“false”,“tot”:“bool”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:650,“y”:320,“wires”:[[]]},{“id”:“4c9acee4.f4f13”,“type”:“comment”,“z”:“d3956bfe.d5e5c8”,“name”:“from-IKEA-Button”,“info”:"",“x”:200,“y”:460,“wires”:[]},{“id”:“e3ebc15.df3444”,“type”:“change”,“z”:“d3956bfe.d5e5c8”,“name”:“Hauptraum”,“rules”:[{“t”:“set”,“p”:“slots.state”,“pt”:“msg”,“to”:“toggle”,“tot”:“str”},{“t”:“set”,“p”:“intent.name”,“pt”:“msg”,“to”:“ChangeLightState”,“tot”:“str”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:650,“y”:380,“wires”:[[“a50e25e6.ad9288”]]},{“id”:“f51a2491.ca9128”,“type”:“inject”,“z”:“d3956bfe.d5e5c8”,“name”:“ON”,“topic”:"",“payload”:“false”,“payloadType”:“bool”,“repeat”:"",“crontab”:"",“once”:true,“onceDelay”:0.1,“x”:190,“y”:320,“wires”:[[“48d2c945.a2b4a8”]]},{“id”:“a50e25e6.ad9288”,“type”:“change”,“z”:“d3956bfe.d5e5c8”,“name”:“Licht”,“rules”:[{“t”:“set”,“p”:“slots.device”,“pt”:“msg”,“to”:“licht”,“tot”:“str”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:1050,“y”:460,“wires”:[[“46020a69.5e8264”]]},{“id”:“51bd8b66.11ed64”,“type”:“delay”,“z”:“d3956bfe.d5e5c8”,“name”:“750ms”,“pauseType”:“delay”,“timeout”:“750”,“timeoutUnits”:“milliseconds”,“rate”:“1”,“nbRateUnits”:“1”,“rateUnits”:“second”,“randomFirst”:“1”,“randomLast”:“5”,“randomUnits”:“seconds”,“drop”:false,“x”:790,“y”:560,“wires”:[[“ae23dd73.8a8b8”]]},{“id”:“ae23dd73.8a8b8”,“type”:“switch”,“z”:“d3956bfe.d5e5c8”,“name”:“hold?”,“property”:“hold”,“propertyType”:“flow”,“rules”:[{“t”:“true”}],“checkall”:“true”,“repair”:false,“outputs”:1,“x”:910,“y”:560,“wires”:[[“ed98ac24.1f72f”]]},{“id”:“ed98ac24.1f72f”,“type”:“change”,“z”:“d3956bfe.d5e5c8”,“name”:"Schrittweises Erhöhen”,“rules”:[{“t”:“set”,“p”:“slots.unit”,“pt”:“msg”,“to”:“Steps”,“tot”:“str”},{“t”:“set”,“p”:“intent.name”,“pt”:“msg”,“to”:“ChangeLightBrightness”,“tot”:“str”}],“action”:”",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:850,“y”:520,“wires”:[[“a50e25e6.ad9288”,“51bd8b66.11ed64”]]},{“id”:“d7b37b28.38a3b8”,“type”:“change”,“z”:“d3956bfe.d5e5c8”,“name”:"-25",“rules”:[{“t”:“set”,“p”:“slots.value”,“pt”:“msg”,“to”:"-25",“tot”:“num”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:630,“y”:540,“wires”:[[“ed98ac24.1f72f”]]},{“id”:“3ba2c003.d6719”,“type”:“change”,“z”:“d3956bfe.d5e5c8”,“name”:"+25",“rules”:[{“t”:“set”,“p”:“slots.value”,“pt”:“msg”,“to”:“25”,“tot”:“num”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:630,“y”:500,“wires”:[[“ed98ac24.1f72f”]]},{“id”:“7ecaf4b9.f57c9c”,“type”:“change”,“z”:“d3956bfe.d5e5c8”,“name”:“Nebenraum”,“rules”:[{“t”:“set”,“p”:“slots.state”,“pt”:“msg”,“to”:“toggle”,“tot”:“str”},{“t”:“set”,“p”:“intent.name”,“pt”:“msg”,“to”:“ChangeLightState”,“tot”:“str”},{“t”:“set”,“p”:“slots.room”,“pt”:“msg”,“to”:“next_room”,“tot”:“msg”}],“action”:"",“property”:"",“from”:"",“to”:"",“reg”:false,“x”:650,“y”:420,“wires”:[[“a50e25e6.ad9288”]]}]

In the change-nodes, I set the same slots as I used in Rhasspy.
Like:

  • intent.name
  • slots.state to switch On/Off/Toggle Lights
  • slots.value to set the difference for Brightness

After that, the flow enters the same Switch-Node as my Input from Rhasspy, as you can see in the first picture in this thread:
intent_input
The switch node “global.siteID N” sets the SiteID to nothing. Thats the different to Rhasspy Input. If this isset to nothing, no answer will be given. Otherwise Rhasspy answered to my command like:
“I switched on the Light in the living room”

Hope this helps someone

nice work! I do not have ikea devices, but I would try it otherwise

I am also revisiting the options for the satellite hardware and am wondering what output device you use on the Rpi zero.

Not sure, what you mean with output device.
I’m using ReSpeaker 2-Mic HAT für Raspberry Pi:
https://www.reichelt.de/respeaker-2-mic-hat-fuer-raspberry-pi-rpi-resp-2mic-p248718.html

I also use Osram, Gledopto and Xiaomi zigbee devices. As long as it works with zigbee2mqtt, it will work.
If you use the same kind of switchers everywhere, you can use my system too.

Sorry for that. I meant which audio output device you connect to the rpi zero like a Bluetooth or wired speaker next to the Respeaker microphones.

I see.
I use this case:
Snips Satelite Case

with this speaker:
Adafruit Mono Enclosed 3W Speaker

For both snips and rhasspy all my devices (masters and pi0) have reSpeaker2 pihat and Creative Metallix speaker, connected with jack on the respeaker. Works perfectly.

Thank you both for the feedback! Yesterday I came across the Thingiverse link as well and will probably use that one.

Now I can start looking for a place that sells hopefully more than one Rpi zero per customer.

Wow, do they really still have that restriction? I remember this from when the Pi Zero just came out, but now?

SOS Solutions amongst others mentions it on their website :blush:

I also tried these:
Snips case for Rpi3 + ReSpeaker 2-Mics Pi HAT + Speaker 3W
Same Speaker and HAT but with Raspi3.
Quicker reaction and rhasspy in docker

Snips Voice Assistant Case (with Jabra Speak)
Raspi3 with Jabra 410
I got Jabra on ebay for arround 40€
Best of all. Stays in Living room near TV with selfmade Wakeword ( Snowboy-CustomMaker / Thanks to KiboOst)
This Raspi is also zigbee2mqtt Server with CC2530. There is place enough for the antenna insite or outsite with a hole in the case.

As I wrote, the Jabra 410 is a very good microphone. I guess most of wakeword problems came from a cheap microphone (2-Mic PI HAT) or a very high sensitivity. I use my own wakewords (computer, jarvis) with a sensitivity lower 0.5. In the living room, nearby the TV the jabra sensitivity was reduced step by step as long as it doesn’t react anymore on tv sound.
Now I added in node red a new flow, which reacts on the wakeword

ws://10.2.30.1:12101/api/events/wake

This sends a signal to my harmony hub to mute the TV for 5 seconds. This time is used to give the voice command to rhasspy. After that tv sound starts again.

You could also use mqtt in nodes for hermes/nlu/intentNotRecognized and hermes/intent/# to unmute your TV instead of a timer :slight_smile: