It would be awesome if this repo started to add other LED controls #45
Replies: 14 comments 83 replies
-
|
Hey @JenniferHatches. Thanks for the feedback. It is good to hear that others find the repo useful and it's not just relegated to my own LVAs. Thanks for letting me know about @cknic 's repo as well. It wasn't on my radar yet. When you mention the LED controls from cknic's repo, are you referring to the hardware of the LEDs or the LED effects? If it is hardware, I suspect that should be supportable via the config.json file as you can pass (Dotstar or Neopixel), (GPIO or SPI) as well as identifying the data and clock (for dotstar) pins in there. I am fighting with permission when trying to run Neopixel on GPIO though, but Dotstar work great. If you are wanting some more advanced LED effects, that is something that I'm intending to improve as well. I just started with the most common effects up front just to get the code working. |
Beta Was this translation helpful? Give feedback.
-
|
More than willing to help with the XVF3800 LEDs. |
Beta Was this translation helpful? Give feedback.
-
|
i actually used this GitHub https://github.com/KasunThushara/reSpeakerXVF_rpi and then call the xvf_host commands via my led_controller_xvf3800.py |
Beta Was this translation helpful? Give feedback.
-
|
If you have a ReSpeaker XVF3800 4-Mic Array (mine is in the mail) and you’re willing to help test integration with the Linux Voice Assistant (LVA), please follow the steps below and paste the outputs. We’ll do this in two tiers: Tier 1: Quick basic info (fast, low effort – ideal starting point)Tier 2: Deeper audio probe (only if you have time / are comfortable)Prep: Clone the XVF3800 branchPlease clone the XVF3800 branch of the LVA: cd ~
git clone --branch XVF3800 --single-branch https://github.com/imonlinux/linux-voice-assistant.git
cd linux-voice-assistantRun the script/setup to establish the venv environment and dependencies. script/setupTier 1 – Basic system + audio info (recommended for everyone)Please run these commands and paste the full outputs in your reply. It’s fine to redact IPs, usernames, or anything you consider sensitive. 1. System infouname -acat /etc/os-release2. ALSA view of the XVF3800arecord -larecord -Laplay -l3. PulseAudio / PipeWire viewIf you have PulseAudio / pipewire-pulse: pactl list short sourcespactl list short sinksIf pactl isn’t available, just mention that in your reply. 4. LVA’s view of audio devicesFrom inside the linux-voice-assistant repo: cd ~/linux-voice-assistant
script/run --list-input-devices
script/run --list-output-devices👉 In your reply, please highlight the lines that correspond to the ReSpeaker XVF3800 (copy the exact text). Tier 2 – Deeper XVF3800 audio probe (optional but very helpful)If you’re comfortable going a bit further, this will tell us exactly how many channels LVA sees and whether we need explicit 2→1 downmixing. These commands assume you’re still in ~/linux-voice-assistant and your venv (if any) is active. source .venv/bin/activate5. Short arecord test with VU outputFirst, find the card number N for the XVF3800 from arecord -l (e.g. card 4: Array [reSpeaker XVF3800 4-Mic Array] → N=4). Then run: arecord -D plughw:N,0 -c 2 -r 16000 -f S16_LE -d 5 -vv /tmp/xvf3800-test.wavReplace N with your actual card number! You can optionally check playback: aplay /tmp/xvf3800-test.wav6. USB descriptor (if available)If you’re comfortable sharing USB info, run: lsusb
lsusb -v -d 2886:001aIf 2886:001a is not present, just paste the lsusb output and we’ll adjust. 7. Python probe script (from XVF3800 branch)In the XVF3800 branch there is a small probe script at tests/xvf3800_probe.py. Run: cd ~/linux-voice-assistant
python tests/xvf3800_probe.py --device "<XVF3800 device name from --list-input-devices>"Examples:If --list-input-devices shows something like python tests/xvf3800_probe.py --device "reSpeaker XVF3800 4-Mic Array: USB Audio (hw:4,0)"or python tests/xvf3800_probe.py --device 3Please paste the entire output of this probe script, including: The device list it prints The Opened stream section The Recorded array shape: ... line What we’ll do with thisWith these outputs we can: Confirm how the XVF3800 appears at each layer (ALSA → PipeWire → PortAudio / sounddevice). See whether LVA receives 1 or 2 channels from the device. Decide if we need any XVF3800-specific handling, or just a generic “if channels > 1, downmix to mono” in the audio engine. Thank you for helping test the XVF3800 integration! |
Beta Was this translation helpful? Give feedback.
-
🧪 XVF3800 Mute Button / HID Probe – Help WantedFirst round of XVF3800 testing confirmed that audio works out of the box with LVA using PipeWire (and the audio stack handles the 2-channel → mono conversion for us) I have added an initial tutorial to the XVF3800 branch. Next goal: fully integrate the XVF3800 mute button + red mute LED with the LVA’s existing mute path (MQTT, tray icon, etc.). To do that, we need to see how the XVF3800 reports its mute button over USB HID. I’ve added a small probe script on the If you have an XVF3800 connected, you can help by running this probe and posting the output. ❤️ 1. Clone the XVF3800 branch (if you haven’t already)If you’re starting fresh: cd ~
git clone --branch XVF3800 --single-branch https://github.com/imonlinux/linux-voice-assistant.git
cd linux-voice-assistantIf you already have the repo: cd ~/linux-voice-assistant
git fetch origin
git checkout XVF3800Then (re)run the setup to ensure dependencies + venv are ready: cd ~/linux-voice-assistant
script/setupThat should create/refresh 2. Install the HID library in the LVA virtualenvThe probe script uses From the cd ~/linux-voice-assistant
# Activate the LVA venv if your shell doesn’t auto-activate it
source .venv/bin/activate
# Install hidapi inside this venv
pip install hidapiYou can confirm it installed with: python -c "import hid; print('hid version OK')"If that prints without errors, you’re good. 3. Run the XVF3800 HID mute probeMake sure your XVF3800 is:
Then make sure that the .venv is still source, if not run: cd ~/linux-voice-assistant
source .venv/bin/activateThen run: python tests/xvf3800_hid_mute_probe.pyYou should see something like: Now:
4. What to post back in the DiscussionPlease paste:
For example: You don’t need to redact the serial unless you want to; it’s only used for debugging. Once we have a couple of these samples from different testers, we’ll:
Thanks in advance to anyone who runs the probe—this gets us much closer to full, “just like a smart speaker” behavior on the XVF3800. 🙌 |
Beta Was this translation helpful? Give feedback.
-
|
FYI if you are looking to upgrade the firmware do NOT wget the files, clone the repo. wget is corrupting them somehow |
Beta Was this translation helpful? Give feedback.
-
|
i didn't even realize there was a python script now.. interested to see what you can do with that, but with the normal xvf_host, i can mute the device, with "sudo ./xvf_host GPO_WRITE_VALUE 30 1" that sets X0D30 to high, which is mute, and 0 which is unmute. I was also disabling the LEDs, as i didn't want LOA all the time by setting 33 to 0. |
Beta Was this translation helpful? Give feedback.
-
Call for Testing: XVF3800 USB LED and Mute Button Support in
|
Beta Was this translation helpful? Give feedback.
-
|
I vaguely remember coming across that during my adventures and had to change the order of things. I’ll poke through my git for what I did because I don’t specifically remember |
Beta Was this translation helpful? Give feedback.
-
|
ok i'm having a strange issue on a re-install. It responds to Alexa or whatever the wake word is but is getting stuck. So it detects the wakeword, plays the wake word sound, changes to the pulsing blue but never actually follows up and gives me "2025-12-22 12:03:22 DEBUG linux_voice_assistant.event_bus: Publishing event to 1 listeners on topic 'set_listening_color' |
Beta Was this translation helpful? Give feedback.
-
|
my big question is, are we actually using the correct channels on the microphone? by default, the two channels (stereo mic) are two different feeds - I can't imagine that pipewire just mashing the two together is the optimal configuration. it works, yes, but optimal? Surely detection would be improved with a change? |
Beta Was this translation helpful? Give feedback.
-
|
@JenniferHatches i'm starting to mess with Music Assistant on this device.. it's telling me its working, but i'm getting this error in the logs. 2026-01-05 08:54:07 ERROR linux_voice_assistant.mpv_player: mpv[ffmpeg/audio]: mp3float: Header missing |
Beta Was this translation helpful? Give feedback.
-
|
@JenniferHatches @cknic, The latest HA update 2026.1 breaks LLM conversation agents. This is the bug report: I'm going to see if restoring from last nights backup restores the functionality. |
Beta Was this translation helpful? Give feedback.
-
|
@JenniferHatches @cknic Planning to create the PR to merge the XVF3800 branch into main tomorrow or shortly after. I have updated the linux-voice-assistant-xvf3800.md (install and config document) and pushed some code changes that addressed some identified issues and general cleanup of the code. I really want to thank you both for all your help getting this branch started and stable. Couldn't/wouldn't have done it without you. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
I think this repo currently has the best LVA client; I've been trying them all. I use respeaker vxf3800 microphones on my two lva machines, and I'd love it if you could integrate the LED controls from this fork, which uses lots of your work already:
https://github.com/cknic/linux-voice-assistant
Beta Was this translation helpful? Give feedback.
All reactions