"hermes/tts/say" not working - Rhasspy or Node-Red issue?

(This was originally posted on Reddit, but got no response. I have changed my system since then, it's mostly the same)

I have a very simple (for testing) flow to testing TTS - listed below. When I trigger it in Node-Red I get the debug output but nothing is spoken. If I then copy and paste the JSON into MQTT Explorer I get the speech.

  • Node-Red version: 1.3.3 (in Linux Docker)
  • Rhasspy version: 2.5.10 (on Raspberry Pi 4 Docker) with reSpeaker 2 hat.
  • Mosquitto version 2.10 (on Linux Docker)

[{"id":"296dc5d5.fa270a","type":"tab","label":"TESTING","disabled":false,"info":""},{"id":"1e20a9e9.83f226","type":"inject","z":"296dc5d5.fa270a","name":"","props":[{"p":"payload"},{"p":"siteId","v":"Lounge","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"Welcome to the thunder dome","payloadType":"str","x":290,"y":220,"wires":[["c6d77012.a0042"]]},{"id":"c6d77012.a0042","type":"function","z":"296dc5d5.fa270a","name":"To TTS","func":"msg.topic = \"hermes/tts/say\";\nmsg.text = msg.payload;\n\n//msg.topic = \"hermes/dialogueManager/startSession\";\n//msg.init = {};\n//msg.init.type = \"notification\";\n//msg.init.text = msg.payload;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":440,"y":220,"wires":[["45eed33a.ecde3c","49e733e0.e6f3bc"]]},{"id":"45eed33a.ecde3c","type":"mqtt out","z":"296dc5d5.fa270a","name":"TTS Output","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"3fa40965.92a3d6","x":610,"y":240,"wires":[]},{"id":"49e733e0.e6f3bc","type":"debug","z":"296dc5d5.fa270a","name":"TTS Output","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":610,"y":200,"wires":[]},{"id":"3fa40965.92a3d6","type":"mqtt-broker","name":"MQTT Server","broker":"192.168.1.100","port":"1883","clientid":"","usetls":false,"protocolVersion":"4","keepalive":"10","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""}]

Can anyone help or point me to where to look? Thanks

What do you see in msg.payload in the debug node and what are you entering into MQTT Explorer?

msg.payload contains just the text entered into the inject node.
I copy/paste the entire msg object into MQTT explorer entering hermes/tts/say into the Topic field.

The MQTT node only publishes what is in msg.payload, not the whole message, you need to construct the object to be sent to mqtt inside msg.payload. So you need to set msg.payload.text and msg.payload.siteId, not msg.text and msg.siteId

Also you could have seen that was the problem by looking in MQTT Explorer to see what node-red was publishing.

Thank you, it's working now.