diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bd3616..166f59b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to the OpenClaw Home Assistant Integration will be documented in this file. +## [0.1.30] - 2026-02-20 + +### Fixed +- Treated `SpeechRecognition` `no-speech` as a normal listening condition instead of an error. +- Reduced voice error noise by avoiding retry scheduling for `no-speech` events. +- Added clearer in-card status text for silence/no-speech scenarios. + ## [0.1.29] - 2026-02-20 ### Fixed diff --git a/custom_components/openclaw/__init__.py b/custom_components/openclaw/__init__.py index 892342e..3d956f2 100644 --- a/custom_components/openclaw/__init__.py +++ b/custom_components/openclaw/__init__.py @@ -76,7 +76,7 @@ _CARD_PATH = Path(__file__).parent / "www" / _CARD_FILENAME # URL at which the card JS is served (registered via register_static_path) _CARD_STATIC_URL = f"/openclaw/{_CARD_FILENAME}" # Versioned URL used for Lovelace resource registration to avoid stale browser cache -_CARD_URL = f"{_CARD_STATIC_URL}?v=0.1.29" +_CARD_URL = f"{_CARD_STATIC_URL}?v=0.1.30" OpenClawConfigEntry = ConfigEntry diff --git a/custom_components/openclaw/manifest.json b/custom_components/openclaw/manifest.json index b315bb6..26667d1 100644 --- a/custom_components/openclaw/manifest.json +++ b/custom_components/openclaw/manifest.json @@ -8,7 +8,7 @@ "iot_class": "local_polling", "issue_tracker": "https://github.com/techartdev/OpenClawHomeAssistant/issues", "requirements": [], - "version": "0.1.29", + "version": "0.1.30", "dependencies": ["conversation"], "after_dependencies": ["hassio", "lovelace"] } diff --git a/custom_components/openclaw/www/openclaw-chat-card.js b/custom_components/openclaw/www/openclaw-chat-card.js index bd50ed7..d9eb274 100644 --- a/custom_components/openclaw/www/openclaw-chat-card.js +++ b/custom_components/openclaw/www/openclaw-chat-card.js @@ -13,7 +13,7 @@ * + subscribes to openclaw_message_received events. */ -const CARD_VERSION = "0.2.8"; +const CARD_VERSION = "0.2.9"; // Max time (ms) to show the thinking indicator before falling back to an error const THINKING_TIMEOUT_MS = 120_000; @@ -611,6 +611,13 @@ class OpenClawChatCard extends HTMLElement { console.debug("OpenClaw: Speech recognition aborted"); return; } + if (err === "no-speech") { + this._voiceStatus = this._isVoiceMode + ? "Listening… (no speech detected yet)" + : "No speech detected. Tap mic and try again."; + this._render(); + return; + } if (err === "network") { console.warn("OpenClaw: Speech recognition network error"); } else { @@ -642,7 +649,7 @@ class OpenClawChatCard extends HTMLElement { this._voiceStatus = `Voice error: ${err}`; } - if (["network", "audio-capture", "no-speech"].includes(err) && !this._voiceBackendBlocked) { + if (["network", "audio-capture"].includes(err) && !this._voiceBackendBlocked) { this._scheduleVoiceRetry(); } this._render(); diff --git a/www/openclaw-chat-card.js b/www/openclaw-chat-card.js index 53fbc81..1c7b6a4 100644 --- a/www/openclaw-chat-card.js +++ b/www/openclaw-chat-card.js @@ -1,7 +1,7 @@ (async () => { try { if (!customElements.get("openclaw-chat-card")) { - const src = "/openclaw/openclaw-chat-card.js?v=0.1.29"; + const src = "/openclaw/openclaw-chat-card.js?v=0.1.30"; console.info("OpenClaw loader importing", src); await import(src); }