Eine neue Stimme für den Saugroboter

Seit mehreren Jahren haben wir einen Saugroboter, den Roborock S5. Da mir nicht ganz wohl dabei war, dass der Roboter ständig mit der Cloud des Herstellers kommuniziert, habe ich ihn gerootet und Valetudo installiert.

Valetudo wird auf dem Roboter installiert und dockt sich an die Cloud-Schnittstelle an. Die Kommunikation mit der Cloud des Herstellers ist dann abgeschnitten. Die Befehle sendet man an den Roboter dann nicht mehr über die App des Herstellers sondern man verbindet sich mit dem Webserver, der auf dem Staubsauger läuft. Ein cooles Konzept …

Da mit der Installation die Root-Schnittstelle in Form eines SSH-Zugriffs bereits offen war, habe ich mich etwas umgesehen. Dabei sind mir die Sound-Dateien für die Sprachausgabe aufgefallen. Diese liegen als .wav-Dateien im Verzeichnis

/mnt/data/rockrobo/sounds

und lassen sich z. B. per scp überschreiben. Zwar gibt es im Internet Soundpakete, die sich über die Oberfläche installieren lassen. Mir haben diese aber nicht gefallen und der Weg über die Konsole ist interessanter.

Zunächst hatte ich die Ansagen mit meiner eigenen Stimme aufgenommen und die Dateien ersetzt. Zwischenzeitlich gibt es aber mehrere Text-To-Speech (TTS) Portale, die Ansagen mit cooleren Stimmen erlauben. Ich habe mich für HAL 9000, dem Bordcomputer aus dem Film „2001: Odyssee im Weltraum“, entschieden.

HAL 9000 im Gespräch mit Andrea

Hier will ich kurz die Schritte vorstellen, mit denen ich die Stimme unseres Saugroboters ersetzt habe.

Backup der Sounddateien

SSH-Verbindung als root auf den Saugroboter öffnen

cd /mnt/data/rockrobo
scp -r sounds user@Rechner:/path/to/working/dir/

Sicherungskopie auf dem Roboter anlegen

cp -r sounds sounds_backup

Erzeugen der neuen Stimme

Eine Übersicht über die Ansagen habe ich hier gefunden. Offenbar kommen mit Firmware-Updates gelegentlich neue dazu, weshalb bei mir einige fehlten.

Für die Sprachgenerierung habe ich Uberduck verwendet. Über den Button „Text to Speech“ ist die TTS-Engine erreichbar. Bevor man eigene Texte synthetisieren kann, muss man sich einen Account angelegen. Der ist aber (mit gewissen Einschränungen) kostenlos.

Der Rest ist dann selbsterklärend:

  • Stimme auswählen (die Qualität der Stimmen ist sehr unterschiedlich)
    • Text eingeben und „Synthesize“ drücken
  • Actions / Download
  • Umbenennen der .wav-Datei in den Namen, den der Saugroboter erwartet

Normalisieren

Die Stimme von HAL 9000 ist sehr leise. Spielt man die generierten Dateien direkt auf den Saugroboter sind die Ansagen nur schwer zu verstehen.

Ich habe deshalb die Audio-Dateien normalisiert, also die Lautstärke soweit angehoben, dass der maximale Wert in der Datei 0 dB entspricht. Hintergrund und verschiedene Methoden sind in diesem Beitrag schön erklärt. Ich habe mir für das manuelle Vorgehen ein kleines Shell-Skript geschrieben.

#!/bin/bash

inputdir=$1
outputdir=$2

for wav in "$inputdir"/*.wav
do
	echo $wav
	datei=${wav##*/}
	echo $datei
	volume=`ffmpeg -i $wav -af "volumedetect" -vn -sn -dn -f null /dev/null 2>&1 | grep max_volume | awk '{print $5}'`
	echo $volume
	volume_norm=`echo "$volume * (-1)" | bc -l`
	echo $volume_norm
	
	ffmpeg -i $wav -af "volume=""$volume_norm""dB" "$outputdir"/"$datei"
done

Es benötigt zwei Parameter: Das Input-Verzeichnis und das Verzeichnis, in das die normierten Dateien geschrieben werden sollen.

Kopieren der Dateien auf den Saugroboter

Nun bleibt nur noch, die Sound-Dateien auf den Roborock zu übertragen. Dazu wieder per SSH als root mit dem Saugroboter verbinden.

cd /mnt/data/rockrobo/sounds
scp user@Rechner:/path/to/working/dir/*.wav .

… und fertig ist die Aktion. Ab sofort redet der Staubsauger mit der Stimme von HAL 9000.

Das Skript und generierten Dateien finden sich hier.

Reise nach Mexiko – Teil 3

Unser nächster Ausflug mit der Metro führte uns ins Zentrum von Guadalajara.

Auch hier erwartete uns eine schöne Altstadt mit zahlreichen Gebäuden im Kolonialstil. Das Zentrum ist größer und touristischer als Zapopan. Inklusive Touristenbusse und Pferdekutschen.

Man findet aber auch zahlreiche Museen, die neben moderner Kunst auch Exponate der Vor-Kolonialzeit ausstellen.

Reise nach Mexiko – Teil 2

Zweite Station unserer Reise war Guadalajara, die Hauptstadt des Bundesstaats Jalisco. Sie besteht aus mehreren zusammen gewachsenen Städten. Als öffentlichen Nahverkehr gibt es einige Metrolinien. Diese sind teilweise auf Stelzen über die Straßen gesetzt. Auch wir Gringos trauten uns die Benutzung nach einer kurzen Einweisung zu: 10 Pesos in den Automat stecken, mit dem Ticket durch die Schranke und fahren. Kein Zonen-Geraffel oder Zeittickets – sehr bequem.

Den ersten Ausflug haben wir nach Zapopan einen Stadtteil mit einer schönen Altstadt im Kolonialstil gemacht.

Zum Abschluss des Ausflugs ging es dann noch in den Park mit japanischem Garten und … verwöhnten Eichhörnchen.

Reise nach Mexiko – Teil 1

Anders als üblich haben wir unseren Urlaub bereits am Jahresanfang genommen, um im mexikanischen Winter dort für drei Wochen die Sonne genießen zu können.

Wir hatten einen Direktflug von Frankfurt nach Cancun im Osten des Landes, wo wir zwei Übernachtungen in der „Zona Hotelera“ hatten. Hier liegen am Strand sehr viele riesige Hotelanlagen. Andrea war sogar bereit, sich in das Meer zu stürzen und von den Wellen an den Strand tragen zu lassen.

Wir hatten außerdem noch eine Tagestour zu den Maya-Ruinen Chichén Itzá und zwei Cenotes gebucht.

Die Maya-Ruinen in Cichén Itzá waren trotz der vielen Besucher sehr eindrucksvoll. Die frei gelegten Gebäude gehören zu verschiedenen Bereichen: Ein Markt, ein Sportstadion und natürlich mehrere Tempel sind zu sehen.

Ein etwas mulmiges Gefühl hinterließ die Erklärung des Guides, dass der beste Spieler im Stadion dann anschließend im Tempel geopfert wurde …

Eine Cenote ist eine Karst-Höhle, in der das Grundwasser steht. Davon gibt es in Mexiko sehr viele. Oft wurde ein Zugang gegraben, der das Baden ermöglicht. Angeblich wird man jünger, wenn man im Wasser schwimmt. Allein dafür hat sich der Flug nach Mexiko gelohnt.