From ece08f0f2f28ca627969933933f8b8095b97f848 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 30 May 2026 23:09:11 +0200 Subject: [PATCH] =?UTF-8?q?debug(wake):=20RVS-Log=20in=20endConversation?= =?UTF-8?q?=20=E2=80=94=20sichtbar=20machen=20ob=20re-arm=20greift?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stefan beobachtet dass Wake-Word nach Conversation manchmal nicht re-armt. endConversation hatte bisher kein RVS-Logging — wir waren beim Diagnose blind. Loggt jetzt: - 'endConversation called but state=X → noop' (state-Mismatch) - 'endConversation called, calling OpenWakeWord.start()' (Eintritt) - 'OpenWakeWord.start() OK → state=armed' (Erfolg) - 'OpenWakeWord.start() FAIL: ... → state=off' (Native-Fehler) - 'fallback: nativeReady=false → state=off' (kein Native-Modul) Damit sehen wir im naechsten Test welcher Pfad gegriffen hat und ob das Native-Modul ueberhaupt aufgerufen wurde. --- android/src/services/wakeword.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/android/src/services/wakeword.ts b/android/src/services/wakeword.ts index b9c53e1..bfd8886 100644 --- a/android/src/services/wakeword.ts +++ b/android/src/services/wakeword.ts @@ -346,19 +346,34 @@ class WakeWordService { * Ohne: zurueck zu 'off'. */ async endConversation(): Promise { - if (this.state !== 'conversing') return; + if (this.state !== 'conversing') { + // Nicht in conversing — typ. nach App-Resume bevor Streaming endete. + // Trotzdem loggen damit wir's im Diagnostic sehen. + import('./logger').then(m => m.reportAppDebug('wake.end', + `endConversation called but state=${this.state} → noop`)).catch(()=>{}); + return; + } + import('./logger').then(m => m.reportAppDebug('wake.end', + `endConversation called, nativeReady=${this.nativeReady}, calling OpenWakeWord.start()`)).catch(()=>{}); if (this.nativeReady && OpenWakeWord) { try { await OpenWakeWord.start(); console.log('[WakeWord] Konversation zu Ende — zurueck zu armed'); + import('./logger').then(m => m.reportAppDebug('wake.end', + `OpenWakeWord.start() OK → state=armed, keyword=${this.keyword}`)).catch(()=>{}); ToastAndroid.show(`Lausche wieder auf "${KEYWORD_LABELS[this.keyword]}"`, ToastAndroid.SHORT); this.setState('armed'); return; - } catch (err) { + } catch (err: any) { console.warn('[WakeWord] re-arm fehlgeschlagen:', err); + import('./logger').then(m => m.reportAppDebug('wake.end', + `OpenWakeWord.start() FAIL: ${err?.message || err} → state=off`, + )).catch(()=>{}); } } console.log('[WakeWord] Konversation zu Ende — Ohr aus'); + import('./logger').then(m => m.reportAppDebug('wake.end', + `fallback: nativeReady=${this.nativeReady} → state=off`)).catch(()=>{}); ToastAndroid.show('Mikro aus', ToastAndroid.SHORT); this.setState('off'); }