(WIP) FHEMWEB interaktiv (speziell mit RHASSPY)

Begonnen von Beta-User, 03 April 2026, 11:24:46

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Bei mir sieht das so aus

A: Nur Sprache
- Wakeword-Engine detektiert Wakeword
- Liefert Event an FHEM
- FHEM fordert beim AMAD-Device "activateVoiceInput" an
- Tablet zeigt Sprachaufforderung
- Sprache wird vom Tablet an Google geschickt, kommt als Text zurück
- Text wird vom AMAD-Device zur Auswertung an Babble gesendet

B: Spracheingabebutton in FTUI3
- Button-Event wird vom Tablet an FHEM gesendet
- FHEM fordert beim AMAD-Device "activateVoiceInput" an (6 verschiedene Tablets)
- Tablet zeigt Sprachaufforderung
- Sprache wird vom Tablet an Google geschickt, kommt als Text zurück
- Text wird vom AMAD-Device zur Auswertung an Babble gesendet

Das Problem ist jetzt erstens, dass je nach Auslastung der Tablets durch FTUI3-Aufgaben durchaus 1-2 Sekunden vergehen können, bis die Spracheingabe aufgeht.

Und zweitens, dass das dumme Automagic zusammen mit Google nicht in der Lage ist, nach einem Timeout (fehlende Spracheingabe ...) sauber abzubrechen. Sondern dann ab und zu ein Fehlerfenster auf dem Bildschirm des Tablets stehen bleibt, das man auch durch ein AMAD-Skript nicht wegbekommt.

LG

pah

Beta-User

Zitat von: Prof. Dr. Peter Henning am 18 April 2026, 17:07:45- FHEM fordert beim AMAD-Device "activateVoiceInput" an
[...]
- Text wird vom AMAD-Device zur Auswertung an Babble gesendet
Für den ersten Schritt "activateVoiceInput" kennen wir - immer vorausgesetzt, die Verbindung zum Browser auf dem Endgerät (nicht beschränkt auf Android!) steht - zwischenzeitlich drei Alternativen, RHASSPY verwendet (allerdings derzeit nur zur Fortsetzung der Dialoge) den js-Aufruf von f18_stt() via devspec.
my $aVICommand = $hash->{helper}->{SpeechDialog}->{config}->{$device}->{activateVoiceInput};
         3053        $aVICommand //= 'set $DEVICE activateVoiceInput' if InternalVal($device, 'TYPE', '') eq 'AMADDevice';
         3054        $aVICommand //= q({ my $js = "if((document.querySelector('input[name=\"fw_id\"]')||{}).value==='$hash->{FW_ID}'){f18_stt()}"; FW_directNotify("#FHEMWEB:$_", $js, "")
         3055                for devspec2array("TYPE=FHEMWEB"); }) if InternalVal($device, 'TYPE', '') eq 'FULLY';
         3056        $aVICommand //= q({ FW_AsyncOutput($defs{$DEVICE},'',qq/["#FHEMWEB:","f18_stt()",""]/)}) if InternalVal($device, 'TYPE', '') eq 'FHEMWEB';
Den Text greift dann entweder das FULLY-Device ab, oder RHASSPY per NotifyFn() auf FHEMWEB-Events; da muss ich noch eventuelle Doppelungen rausoperieren...
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors