(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

schwatter

Zitat von: Beta-User am 18 April 2026, 11:32:41
Zitat von: schwatter am 18 April 2026, 07:15:12Daher ignoriere mich einfach...
Ungern ;D .

Brauchst du denn jetzt noch eine Anleitung oder nicht? Ich hatte neulich auf Basis meiner hier geposteten Notizen auf einem Testsystem die Installation nochmal gemacht, und das hat da ohne größere Umstände funktioniert. Dabei habe ich die Installation erst mit meinem Standarduser gemacht, und dann danach die Rechte auf /opt/piper auf fhem:dialout geändert und in der systemd-unit-file fhem als User angegeben.

Danke erstmal nicht. Komme zu einem späteren Zeitpunkt darauf zurück. Mir schwirrt der Kopf. Gerade weil soviel
Nachholbedarf besteht und viele Sachen sich gerade vermischen.
Da kommt schon wieder die nächste Idee. Ich habe gerade neben Rudi seinem STT Button noch einen Audiobutton eingebaut.
Damit konnte ich erfolgreich eine MP3 abspielen. Im Modul TTS kann auch der Pfad in einem Adressraum geändert werden,
den der Browser versteht.
Ziel: Button 1 x drücken, JS im f18 lauscht dauerhaft nach neuen TTS-Events und spielt direkt immer die aktuelle MP3 ab.
Hier kommt dann das neue attr additionalInform TTS ins Spiel.

Gruß schwatter