Roborock S5 – серия недорогих роботов-пылесосов с лидаром, входящая в категорию товаров для “умного дома” от Xiaomi. Дистанционное управление со смартфона и root-доступ ко встроенной операционке на базе Linux прилагаются.
Наличие root-доступа предоставляет возможность немного поиграться с системой. Например, по умолчанию на каждое конкретное действие робот отвечает одной единственной фразой. И хорошо, если не по-китайски. Не очень весело, правда?
Попробуем сделать так, чтобы вместо этого робот отвечал случайной репликой из соответствующей категории фраз. Для этих целей будет использоваться самописная пользовательская файловая система fuse, сделанная на базе bbfs. Смысл состоит в том, чтобы при обращении к какому-либо файлу со звуком – например, sound.wav – модифицированная ФС проверяла наличие рядом файлов с именами sound_1.wav, sound_2.wav и т.д. и случайно выбирала один из них. Все прочие же действия bbfs просто пробрасывает в нижележащую файловую систему без изменений.
Инструкция далее предполагает минимальное умение пользоваться linux-терминалом через putty и (win)scp, а так же уже рутированное ПО на роботе. Если это не для вас – смело пропускайте этот раздел и переходите ниже.
Теперь мы готовы запустить bbfs. Для этого заходим из-под ruby (или другого пользователя, главное – не root) и набираем следующую команду: bbfs -o nonempty,allow_root /mnt/data/rockrobo/sounds_multi /mnt/data/rockrobo/sounds
. После этого в каталоге sounds будут показаны все файлы из sounds_multi, но при выборе основного файла sounds/sound.wav в действительности будет запрошен случайным образом либо sounds_multi/sound_N.wav, либо исходный sounds_multi/sound.wav.
Отметим, что N ∈ [1;20] – и только в порядке возрастания (т.о. если файла sound_1.wav нет, то sound_2.wav даже проверяться не будет).
Для размонтирования обратно используем команду fusermount -u /mnt/data/rockrobo/sounds
, и в /mnt/data/rockrobo/sounds возвращается его исходное содержимое.
Если вручную все завелось корректно, то для автоматического старта при запуске робота можно добавить в /etc/rc.local следующую строку: su ruby -c "bbfs -o nonempty,allow_root /mnt/data/rockrobo/sounds_multi /mnt/data/rockrobo/sounds"
. Не забываем указывать правильного пользователя после su и не теряем кавычки.
На сайте github.com/rand256 есть предсобранные прошивки с рут-доступом, Valetudo RE и предустановленной в том числе и системой рандомизации фраз. После установки такой прошивки необходимо только создать на роботе директории /mnt/data/rockrobo/sounds и /mnt/data/rockrobo/sounds_multi и положить в последнюю набор файлов озвучки, включающих разные перефразированные реплики под каждое событие: например, start.wav, start_1.wav, start_2.wav.
Таким образом, после перезагрузки робот станет использовать для одного и того же события разнообразные слова вместо постоянного повторения единственной фразы – и это звучит намного живее и естественнее.
Прив, не находил способа добавить воспроизведение рандомных фраз во время уборки? ( в прошивке не заложены такие функции изначально)