Ich habe ein kleines Bash-Skript geschrieben, das einen Text (Variable sprechtext) an einen MQTT-Broker sendet, wo es an ein TTS-Programm (pico2wave) weitergeleitet wird. Im Prinzip funktioniert es sehr gut, wenn der Sprechtext nur aus einem Wort besteht. Sobald sprechtext mehrere Worte beinhaltet - also Leerzeichen aufweist - bricht mosquitto_pub nach dem ersten Wort mit einer Fehlermeldung ab. Der Inhalt von sprechtext ist z. B. der string "zwei worte". Fehlermeldung:
1 | Error: Unknown option 'worte","lang":"de_DE","siteId":"satellite02.local"}'. |
So sieht mein Skript aus:
1 2 3 4 5 | #!/bin/bash read -p "Gib einen Text ein: " sprechtext payload='{"text":"'$sprechtext'","lang":"de_DE","siteId":"satellite02.local"}' #payload="'"$payload"'" mosquitto_pub -h 192.168.178.20 -t hermes/tts/say -m ${payload} |
Was ich bereits probiert habe:
1. Maskieren der Leerzeichen durch %20 bzw. \[Leerzeichen] durch replace Anweisung. Im ersten Fall lautet die Ansage "zwei Prozent 20 worte", im zweiten Fall bricht mosquitto_pub ebenfalls ab
2. Ersetzen von Leerzeichen durch Zeichen, die nicht angsagt werden wie "(" oder "-". Dies führt aber zu einer unnatürlichen, abgehackten Aussprache.
Hat jemand eine Idee, wie ich den JSON-String in payload so formatieren kann, dass mosquitto_pub das zweite Wort nicht als weitere Option interpretiert sondern als weiteren Inhalt von sprechtext?