How to: Run Wyoming Satellite and OpenWakeWord on Android

Hey @jnvk I finally figured this out… you need to enable accessibility services for Termux and Termux:API, and it should then start correctly on boot up.

From the termux command prompt, assuming you’re starting from the home directory, use:

cd ../usr/var/service/wyoming-wakeword

Then edit the “run” file with nano or some other text editor

nano run

Add a new line at the end of the file and paste
“–threshold 0.9 \”

I’ll warn that the performance improvement wasnt night and day, I ultimately ended up going back and training a better wakeword, which has performed much better overall.

I love it, thanks for the how to.
Is there any way to mute the mic, for example with an automation to only listen when presence is detected in the room?

Use hassmic
:smile:
It will register a mute button for wyoming integration.

1 Like

I got this all working on my fire 10 HD. All recognised by HA can send test words to the device etc. everything is working fine, except, when I use the wake word nothing happens. I have tried it on two of my devices and always the same. I also get it with hassmic. It just won’t work.

Wake word fails to be recognized here as well, but on Lenovo ThinkSmart View (Lineage OS). There are no errors in any of the logs and the service is registered in Wyoming in HA. pactl list short sources contains ‘OpenSL_ES_source’ and shows it as running and not muted. All 3 termux applications are excluded from power management and termux-cli has the microphone permission allowed. Running the rec ...| play ... command does NOT play any audio however, and termux-microphone-record -f ./tmp.wav returns ‘Recording error: null’

Below is the script and instructions I followed. Everything works except at boot, running May be working now but not rebooting to find out right now. Beta version of Android 16. Don’t use Termux from the Play store. Download the APK from GitHub. The Play store version apparently has a lot of functionality missing. Spent way to much time before uninstalling and reinstalling using the below. You can easily change options later by running a command and adding what you want to set. Like wake word to get harvis would have --wake-word=hey_jarvis You can also set it up for Events. That method requires a API token generated from HA. Under profile>Security then create a long lives access token. That’s only needed for events, default way doesn’t need an API token.

Download Termux-API to get microphone access

Prerequisites
Install Termux (open source terminal emulator app)
Install Termux:API (necessary to get mic access)
Install Termux:Boot and open it once + disable battery optimization for Termux & Termux:Boot (only required if you want wyoming-satellite to autostart when your device restarts)
Install Termux via F-Droid or from the GitHub APKs. The version on Google Play should be treated as an unofficial fork Termux Play Store as not all features are available in this version due to Google Play publishing policies.
1 Like

Did you install Termux-API? That’s requires for microphone access. See my previous post.

yes I installed it from f-droid

https://github.com/jeffc/hassmic
I’ve tested it and it works great

1 Like

I installed hassmic too on a cheap android tablet.
It does work but was winding a few things
It created a media player entity that doesn’t seem to work and also when triggering the wake word I get no tone or signal that it’s activated.
This would be a good feature that would be built in.

same, I have it on several devices now, still in active dev.
I also use them as Media Players for Music Assistant, works really well

maybe i’m just dense but i have no idea how to build the apk as mentioned for hassmic. i used chatGPT to try to help walk me through it but it just had me spinning in circles

Thank you so much for this! Giving purpose to my old S10 I had lying around!

To start, a note to everyone struggling with their own wake words.

  1. Follow this guide to create the files needed.
  2. Copy the .tflite file over to your device
  3. RENAME IT to “whatever_youwant_v0.1.tflite” I can’t stress enough how important adding the “v0.1.tflite” is to making this work.
  4. mv it to the ~/wyoming-openwakeword/wyoming_openwakeword/models folder
  5. nano into your ~/wyoming.conf file and adjust the SELECTED_WAKE_WORD to be “whatever_youwant” (file name of the tflite without the v0.1.tflite).

Alright, now my question lol.

I have this working, with my own wake word, and it’s great! however, I’m noticing in Home Assistant the assist device only has “1” supported feature. I thought there should be more?

I’m also not able to get the assist_satellite.start_conversation action to work from HA over to the satellite, it says it’s not supported…

Am I potentially missing something very simple here? I’m rather new to Wyoming Satellites so I have very little idea as to what to expect.

Thank you in advance for anyone who can help :slight_smile:

1 Like

I have also followed this guide and have the wyoming satellite running in several tablets and old phones. I’ve run into the same issue that after a reboot wakeword does not work. After expending more time that I am willing to admit, I found that removing the microphone permission from the termux api, grant it again and then runing termux and waiting a few seconds, the wake word work again and I can use my satellite with no issues.
I’ve tried a few things but nothing worked:
Adding a sleep 30 at the top of ~/.termux/boot/services-autostart.
Running a dummy termux‑microphone‑record for a couple of seconds at boot to "wake” the mic.
Re‑ordering or delaying service startup (sv‑enable vs sv up).
Keeping Termux in a wakelock or disabling every battery‑saver toggle I could find.
All the other services come up fine; it’s just the mic permission that seems to go half‑asleep until I do the manual toggle dance. Would love to hear if anyone’s cracked a cleaner fix.

Amazing work.

Managed to set it up on my Xiaomi Poco F3. Works like a charm.

The only thing I hate is the wake and done sounds. Replaced them with downloaded from freesound.org

You’re more patient then me. I noticed this to so I used n Android program called autostart manager to start Termux at boot.

I will try to this to verify because one app to launch Termux at boot is kinda one more app on my phone that serves one function.

For those not getting audio, is there anything in the squeezlite logs? I’ve got this running on an NSPanel Pro 120, although it was not fun as I runs Android 8 but for some reason I have to rerun the install every reboot. I’m sure there is a much easier way but only way I’ve been able to accomplish it on that device. .It’s also slow because it’s a very low powered ARM device so that’s expected.

I’m pretty sure this function only works on ESP32 devices. If I choose announce all my devices pop up as I have a few Wyoming satellites but when going to dev tools and choosing the above action only my ESP32 devices show up as options so I’m pretty sure the functionality was just never added to the Wyoming Satellite integration.

While they have gone back and added some features, stuff like stop words don’t work on Wyoming Satellite’s of any kind, at least without some extra setup which may be possible but a raspberry pi zero or newer Android phone should support full-duplex audio which just means it can listen and play at the same time so a stop word works.

I can make announcements but can’t start conversations.


1 Like

Hey all, just an FYI, there is an easy way to get Wyoming satellite to work on Android devices, tgere is an app in development that works extremely well called HassMic, i hsve it on several devices. HA integration to go with it.
Release v0.9.5

2 Likes

Very very informative, thank you so much for the detailed response!!