Desmond-Dong's picture
v0.5.11: Reset feature extractors when switching wake words to prevent false triggers
0e3f2eb
raw
history blame
14.3 kB
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>Reachy Mini for Home Assistant</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="hero">
<div class="hero-content">
<div class="app-icon">πŸ€–βš‘</div>
<h1>Reachy Mini for Home Assistant</h1>
<p class="tagline">Control your Home Assistant with voice using Reachy Mini robot</p>
</div>
</div>
<div class="container">
<div class="main-card">
<div class="app-details">
<h2>What is this?</h2>
<p style="text-align: center; color: #475569; line-height: 1.8; margin-bottom: 2rem;">
This app integrates your <strong>Reachy Mini robot</strong> with <strong>Home Assistant</strong>.
Speak to Reachy Mini, and it will control your smart home devices through Home Assistant's voice commands.
Reachy Mini provides visual feedback with head movements and antenna animations while listening and responding.
</p>
<h2>Installation</h2>
<div class="how-to-use">
<h3>Install from Reachy Mini Dashboard:</h3>
<div class="steps">
<div class="step">
<div class="step-number">1</div>
<div>
<h4>Open Reachy Mini Dashboard</h4>
<p>Navigate to the Applications section in your browser</p>
</div>
</div>
<div class="step">
<div class="step-number">2</div>
<div>
<h4>Show Community Apps</h4>
<p>Check the "Show community apps" checkbox to see third-party applications</p>
</div>
</div>
<div class="step">
<div class="step-number">3</div>
<div>
<h4>Find and Install</h4>
<p>Search for "Reachy Mini for Home Assistant" and click Install</p>
</div>
</div>
<div class="step">
<div class="step-number">4</div>
<div>
<h4>Connect to Home Assistant</h4>
<p>The app will be automatically discovered by Home Assistant via mDNS</p>
</div>
</div>
</div>
</div>
<h2>Features</h2>
<div class="template-info">
<div class="info-box">
<h3>🎀 Voice & Tap Wake</h3>
<p>Say "Okay Nabu" or tap Reachy Mini's head to activate. Multiple wake options for convenience.</p>
</div>
<div class="info-box">
<h3>🏠 Smart Home Control</h3>
<p>Home Assistant processes your voice commands and controls your smart home devices automatically.</p>
</div>
<div class="info-box">
<h3>πŸ‘€ Face Tracking</h3>
<p>YOLO-based face detection enables Reachy Mini to look at you during conversations for natural interaction.</p>
</div>
<div class="info-box">
<h3>😊 Facial Expressions</h3>
<p>Automatic emotional feedback with head movements and antenna animations while listening and responding.</p>
</div>
<div class="info-box">
<h3>πŸ“Ή Camera Streaming</h3>
<p>MJPEG video stream available in Home Assistant as a Generic Camera for real-time monitoring.</p>
</div>
<div class="info-box">
<h3>πŸ”Š Sendspin Audio</h3>
<p>Multi-room audio support via Sendspin protocol. Sync playback with other speakers in your home.</p>
</div>
<div class="info-box">
<h3>πŸŽ›οΈ 30+ Control Entities</h3>
<p>Complete robot control via Home Assistant: motors, head position, LEDs, emotions, tap sensitivity, and more.</p>
</div>
</div>
<h2>Changelog</h2>
<div class="how-to-use changelog-container">
<div class="changelog-scroll">
<div class="changelog-entry">
<span class="version">v0.5.11</span>
<span class="date">2026-01-10</span>
<ul>
<li>Fix: Reset feature extractors when switching wake words to prevent false triggers</li>
<li>Fix: Add refractory period after wake word switch</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.5.10</span>
<span class="date">2026-01-10</span>
<ul>
<li>Fix: Wake word models now have 'id' attribute set correctly</li>
<li>Fix: Wake word switching from Home Assistant now actually works</li>
<li>Fix: _update_wake_words_list properly filters by active_wake_words</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.5.9</span>
<span class="date">2026-01-10</span>
<ul>
<li>New: Default wake word changed to "Hey Reachy"</li>
<li>Fix: Wake word switching from Home Assistant now works correctly</li>
<li>Fix: All selected wake words are loaded (was only loading first one)</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.5.8</span>
<span class="date">2026-01-09</span>
<ul>
<li>Fix: Tap detection now waits for emotion playback to complete (polls daemon API)</li>
<li>Fix: Prevents false tap triggers during long emotion animations</li>
<li>New: DOA turn-to-sound at wakeup (robot turns toward speaker)</li>
<li>New: DOA angle and speech_detected entities in Home Assistant</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.5.7</span>
<span class="date">2026-01-09</span>
<ul>
<li>Fix: DOA direction inversion corrected (left/right now correct)</li>
<li>Fix: Home Assistant shows raw DOA angle (0-180Β°)</li>
<li>Fix: EntityRegistry 'state' attribute error in tap_sensitivity</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.5.6</span>
<span class="date">2026-01-09</span>
<ul>
<li>Fix: Better pipeline state tracking to prevent duplicate audio playback</li>
<li>Fix: Ignore duplicate RUN_END events during network lag</li>
<li>Fix: Stop previous TTS if new pipeline starts unexpectedly</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.5.5</span>
<span class="date">2026-01-09</span>
<ul>
<li>Fix: Prevent concurrent pipelines (only one conversation at a time)</li>
<li>New: Play prompt sound when ready for next input in continuous conversation</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.5.4</span>
<span class="date">2026-01-09</span>
<ul>
<li>Fix: Wait for RUN_END event before starting new conversation</li>
<li>Fix: Prevents APIConnectionError during continuous conversation</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.5.3</span>
<span class="date">2026-01-09</span>
<ul>
<li>Fix: Continuous conversation now uses conversation_id for context tracking</li>
<li>Fix: Conversation state properly cleared when conversation ends</li>
<li>Improve: conversation_id reused within 5-minute timeout (same as ESPHome)</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.5.2</span>
<span class="date">2026-01-09</span>
<ul>
<li>Fix: Home Assistant pose control restored (head, antennas, body yaw)</li>
<li>Fix: Continuous conversation (tap-to-wake) now properly continues after TTS</li>
<li>Fix: Emotion mapping updated to use available robot emotions</li>
<li>New: 50+ emotions available in Home Assistant emotion selector</li>
<li>Rename: Project renamed to "Reachy Mini for Home Assistant"</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.5.1</span>
<span class="date">2026-01-08</span>
<ul>
<li>Fix: Sendspin now connects to music_player (fixes music not resuming after voice conversation)</li>
<li>Fix: tap_sensitivity persistence - saved to preferences.json and restored on startup</li>
<li>Fix: Audio conflict prevention - Sendspin pauses during voice assistant wakeup</li>
<li>Fix: AttributeError for _camera_server in satellite.py</li>
<li>Fix: tap_sensitivity default changed from 2.0g to 0.5g</li>
<li>Optimize: ReSpeaker 16kHz prioritized in Sendspin supported formats</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.5.0</span>
<span class="date">2026-01-07</span>
<ul>
<li>Face tracking offset compensation (pitch +9Β°, yaw -7Β°)</li>
<li>Adaptive face tracking: high freq (15fps) during conversation, low freq (3fps) when idle</li>
<li>Auto switch to low-power mode after 10s without face detection</li>
<li>Optimized shutdown mechanism (reduced timeout from ~7s to ~2s)</li>
<li>Sendspin multi-room audio integration (PLAYER role)</li>
<li>Audio resampling for Sendspin (44.1/48kHz β†’ 16kHz)</li>
<li>Pose composition using SDK's compose_world_offset</li>
<li>Noise suppression default reduced to 15%</li>
<li>Fix: Replace non-existent clear_output_buffer with stop_playing</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.4.0</span>
<span class="date">2026-01-07</span>
<ul>
<li>Daemon stability fixes and microphone optimization</li>
<li>Face tracking enabled by default</li>
<li>Tap detection logging improvements</li>
<li>SDK compose_world_offset for proper pose composition</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.3.0</span>
<span class="date">2026-01-06</span>
<ul>
<li>Tap sensitivity slider entity for Home Assistant</li>
<li>Face tracking optimization</li>
<li>Music Assistant compatibility fixes</li>
<li>Reduced noise suppression for better mic sensitivity</li>
<li>Tap-to-wake blocking fixes</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.2.x</span>
<span class="date">2026-01-05 ~ 2026-01-06</span>
<ul>
<li>v0.2.21: Fix daemon crash - reduce control loop to 2Hz</li>
<li>v0.2.18: Fix audio playback - restore wakeup sound</li>
<li>v0.2.17: Remove head_joints/passive_joints, move error_message to diagnostic</li>
<li>v0.2.16: Fix TTS playback - pause recording during playback</li>
<li>v0.2.12: Disable breathing animation to prevent serial port overflow</li>
<li>v0.2.9: Remove DOA/speech detection - replaced by face tracking</li>
<li>v0.2.8: Replace DOA with YOLO face tracking</li>
<li>v0.2.6: Thread-safe ReSpeaker USB access</li>
<li>v0.2.4: Fix microphone volume control via daemon HTTP API</li>
<li>v0.2.3: Fix daemon crash from conflicting pose commands</li>
<li>v0.2.2: Fix second conversation motion failure</li>
<li>v0.2.1: Fix daemon crash and optimize code</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.2.0</span>
<span class="date">2026-01-05</span>
<ul>
<li>Automatic facial expressions during conversation</li>
<li>Emotion playback integration with MovementManager</li>
<li>Event loop blocking fixes</li>
<li>SDK compliance refactoring</li>
<li>Improved shutdown and connection error handling</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.1.x</span>
<span class="date">2026-01-04</span>
<ul>
<li>v0.1.5: Code optimization and crash fixes</li>
<li>Reachy Mini 3D visualization card for Home Assistant</li>
<li>Home Assistant Material Design styling</li>
<li>Initial release with voice assistant functionality</li>
</ul>
</div>
<div class="changelog-entry">
<span class="version">v0.0.0</span>
<span class="date">2026-01-01</span>
<ul>
<li>Initial project setup</li>
<li>Basic Home Assistant voice satellite integration</li>
<li>Reachy Mini SDK integration</li>
<li>Wake word detection ("Okay Nabu")</li>
<li>MJPEG camera streaming</li>
<li>30+ Home Assistant control entities</li>
</ul>
</div>
</div>
</div>
<h2>Usage</h2>
<div class="how-to-use">
<h3>After Installation:</h3>
<div class="steps">
<div class="step">
<div class="step-number">1</div>
<div>
<h4>Automatic Discovery (Recommended)</h4>
<p>Home Assistant will automatically discover your Reachy Mini via mDNS. A notification will appear - just click to add.</p>
</div>
</div>
<div class="step">
<div class="step-number">2</div>
<div>
<h4>Manual Setup (if needed)</h4>
<p>Settings β†’ Devices & Services β†’ Add Integration β†’ ESPHome β†’ Enter Reachy Mini IP:6053</p>
</div>
</div>
<div class="step">
<div class="step-number">3</div>
<div>
<h4>Start Using</h4>
<p>Say "Okay Nabu" or tap Reachy Mini's head, then speak your command (e.g., "turn on the lights")</p>
</div>
</div>
</div>
</div>
<h2>Links</h2>
<div class="template-info">
<div class="info-box">
<h3>πŸ“¦ Source Code</h3>
<p><a href="https://huggingface.co/spaces/djhui5710/reachy_mini_ha_voice/tree/main" target="_blank">View on HuggingFace</a></p>
</div>
<div class="info-box">
<h3>πŸ”§ Original Project</h3>
<p><a href="https://github.com/OHF-Voice/linux-voice-assistant" target="_blank">OHF-Voice/linux-voice-assistant</a></p>
</div>
<div class="info-box">
<h3>πŸ€– Pollen Robotics</h3>
<p><a href="https://www.pollen-robotics.com/" target="_blank">Visit Website</a></p>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<p>
πŸ€– Reachy Mini HA Voice β€’
<a href="https://github.com/pollen-robotics" target="_blank">Pollen Robotics</a> β€’
<a href="https://huggingface.co/spaces/pollen-robotics/reachy-mini-landing-page#apps" target="_blank">Browse More Apps</a>
</p>
</div>
</body>
</html>