FHEM Forum

FHEM => Frontends => Sprachsteuerung => Thema gestartet von: mediastudio am 02 November 2025, 17:59:16

Titel: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 02 November 2025, 17:59:16
Meine neue FHEM WebView App – Sprachbefehle & TTS ist nun bereit für den Einsatz!

Hallo liebe Community,
ich freue mich, euch heute meine neue FHEM WebView App vorstellen zu können.
Die frühere WebView-Apps ist auf neue Android-Versionen nicht mehr lauffähig.
Meine neue App knüpft genau dort an und bringt die beliebten Sprachbefehle und TTS-Rückmeldungen (Text-to-Speech) zurück ins Spiel!

Die Highlights und Neuerungen:
Sprachbefehle (Voice Recognition) voll integriert: Es ist jetzt wieder möglich, Befehle einfach zu sprechen, anstatt lange Menüs zu öffnen.

Volle Kompatibilität: FHEM-Installationen, die bereits in der Vergangenheit Sprachbefehle über eine WebView-App genutzt haben, können ohne Änderungen in der fhem.cfg sofort wieder genutzt werden.

TTS-Rückmeldung von FHEM: Die akustische Rückmeldung durch FHEM ist wieder voll implementiert.
Einfache Einrichtung: Für die Funktion habe ich einen einfachen Dummy namens voiceRecognitionLastResult im Code vorbereitet. FHEM trägt das Ergebnis des gesprochenen Befehls dort ein und kann es sofort verarbeiten.

Stabile Basis: Die App bietet eine schlanke und performante mobile Schnittstelle, die auch auf aktuellen Android-Versionen zuverlässig läuft.

Die App basiert auf einer Webview-Technologie und bietet eine optimierte Darstellung eures bestehenden FHEM-Frontends (z.B. FTUI, Standard-UI oder jede andere Web-Oberfläche, die ihr nutzt) in einem nativen App-Container. Das Ziel war es, eine schnellere, reaktionsfähigere und fokussiertere Nutzererfahrung im Vergleich zur Nutzung im Standard-Browser zu schaffen.

Hier paar Screenshots meiner Steuerung mit FHEM-Frontends ( FTUI, Standard-UI)
Beim Start der App erscheint das Eingabefenster mit Eingabe der IP, PORT, USER, Passw.
Danach öffnet sich das Webview mit eurer Applikation.
Unten rechts erscheint der Button mit dem man wieder in das Setting gelangt.
Auf der rechten Seite befindet sich der Botton für den Sprachbefehl.

Ich habe viel Zeit in dieses Projekt gesteckt und hoffe, dass es euch auch den täglichen Umgang mit FHEM erleichtert. Bei Interesse die App zu testen, gebt mir bescheid, ich stelle die ,,FHEMVoiceClient.akp" dann ins Forum.   

#################################
# TTS Text2Speech
#################################
define MyTTS Text2Speech hw=0.0
attr MyTTS TTS_UseMP3Wrap 1
attr MyTTS room Text2Speech


#######################################################################
##  im Webinterface unter Android zwei Readings:                     ##
##                                                                   ##
##  lastTTS → wird vom Handy gelesen und gesprochen                  ##
##  debugTTS → dient nur der Kontrolle, was wirklich gesendet wurde  ##
#######################################################################

define voiceRecognitionLastResult dummy
attr voiceRecognitionLastResult room Android
attr voiceRecognitionLastResult setList textField


define androidTablet dummy
attr androidTablet room Android
attr androidTablet setList ttsSay:textField
attr androidTablet webCmd ttsSay


define androidTablet_tts notify androidTablet:ttsSay.* { \
  my @parts = ();; \
  for (my $i = 1;; $i < 10;; $i++) { ;;\
    my $var = "\$EVTPART$i";; \
    no strict 'refs';; \
    push @parts, eval $var if defined(eval $var) && eval($var) ne '';; \
  };; \
  my $text = join(' ', @parts);; \
  if ($text) { ;;\
  fhem("setreading androidTablet lastTTS $text");; \
  fhem("setreading androidTablet debugTTS $text");; \
      Log3('androidTablet', 3, "androidTablet_tts -> $text");; \
  } else { ;;\
      Log3('androidTablet', 3, "androidTablet_tts -> kein Text erkannt");; \
  } \
}

_1.jpg _2.jpg _3.jpg _4.jpg
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Gisbert am 03 November 2025, 10:25:19
Hallo mediastudio,

ich hab Interesse deine "FHEMVoiceClient.akp" zu testen. Ich nutze derzeit den flex Style auf meinem Handy, der leider :'( nicht mehr weiterentwickelt wird. Zur Spracheingaben nutze ich AMAD und zur Verarbeitung RHASSPY - das läuft sehr geschmeidig.

Viele Grüße Gisbert
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 03 November 2025, 20:52:59
Moin,

melde auch mal Interesse (v.a. auch im Zusammenspiel mit RHASSPY als AMAD-Ersatz) an.
Allerdings kann ich grade nicht viel Zeit in diese Sache stecken.

Danke vorab!
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 03 November 2025, 22:00:36
Hallo, ich habe gestern den Beitrag im Forum verfasst und wollte wissen, wie ihr ihn gefunden habt. Mir ist aufgefallen, dass es gestern etwas umständlicher war, einen neuen Beitrag zu erstellen. Früher wurde der neueste Beitrag immer ganz oben angezeigt, was die Interaktion erleichtert hat. Also die App als APK-Datei kann ich zum Testen auf einem Android-Handy oder Tablet zur Verfügung zu stellen. Teste der App ohne Gewährleistung testen auf eigene Gefahr.
Sie können sich die App direkt von meinem Server herunterladen. Scannen Sie den QR-Code.
User und Password:FHEMVoiceClient
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Gisbert am 04 November 2025, 11:28:16
Hallo mediastudio,

ich nutze HTTPS - das kann man aber nicht eingeben, und damit gibt es keinen Zugriff auf Fhem.

Viele Grüße Gisbert

Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 04 November 2025, 12:16:14
git config --list
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 04 November 2025, 12:31:37
Hallo Gisbert,
ich habe die App mit meinem Rasperry über seine IP und Zugangsdaten verbunden, ohne http oder https,
für den Aussenzugang habe ich WireGuard-Server auf dem Raspberry eingerichtet und auf dem Handy oder Tablet den Client.
Das ist eine sichere VPN Verbindung bei der keine Ports auf der Fritzbox geöffnet sein müssen.
Deshalb nur IP ohne http. Hast du die App mal nur mit deiner IP und Zugangsdaten von FHEM ausprobiert?
Auf FHEM kommt man local immer so auf das WEBGUI. 
 
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Gisbert am 04 November 2025, 15:19:48
Hallo mediastudio,

ich hab ein neues Fhemweb mit http definiert - damit funktioniert die App. Ich versuche mich dann mal mit deiner App näher zu beschäftigen.

Viele Grüße Gisbert
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Gisbert am 04 November 2025, 21:46:05
Hallo mediastudio,

die App läuft schon mal. Da ich den flex Style auf dem Handy nutzen möchte, hab ich eine entsprechende Web-Definition definiert.

Jetzt erhalte ich vor jedem Bild folgende Einblendung, die sich zwar mit "ok" wegklicken lässt, aber das ist sehr unpraktikabel.

flex.js line 2346:
Uncaught TypeError: Cannot read properties of undefined (reading '0')

Welche Infos brauchst du ggf., um mir weiterhelfen zu können?

Viele Grüße Gisbert
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 05 November 2025, 21:34:10
Flex Style" bezieht sich auf den Flex-Modus von faltbaren Handys
wie dem Samsung Galaxy Z Fold oder Z Flip. Dabei wird der Bildschirm
in der Mitte zusammengeklappt, um das Layout der App anzupassen.
Ist das so richtig? Ich habe bis jetzt keine Möglichkeit das so zu testen
da ich nur normale Handys habe. Ich werde es mal untersuchen.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: marvin78 am 06 November 2025, 07:48:15
Warum habe ich das Gefühl, es mit einem Sprachmodell zu tun zu haben? Es geht um den style für fhem (CSS und Co.).
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Gisbert am 06 November 2025, 11:28:45
Zitat von: mediastudio am 05 November 2025, 21:34:10Flex Style" bezieht sich auf den Flex-Modus von faltbaren Handys
wie dem Samsung Galaxy Z Fold oder Z Flip. Dabei wird der Bildschirm
in der Mitte zusammengeklappt, um das Layout der App anzupassen.
Ist das so richtig? Ich habe bis jetzt keine Möglichkeit das so zu testen
da ich nur normale Handys habe. Ich werde es mal untersuchen.


flex style ist ein Style in Fhem, der festlegt, wie eine Fhem-Seite im Browser angezeigt wird. Mein Handy ist ein ganz gewöhnliches Smartphone.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 06 November 2025, 12:01:00
Die Fehlermeldung ist ein JavaScript-Fehler in der WebView, also nicht direkt in der Android-App, sondern in
der FHEM-FTUI-Weboberfläche die über webView.loadUrl() geladen wird.
Folgendes, flex.js line 2346: Uncaught TypeError: Cannot read properties of undefined (reading '0').
Das bedeutet, irgendein JavaScript im flex.js-Skript versucht, auf das erste Element eines Arrays oder Objekts (
FHEM Frontend (FTUI) – genauer: fhem/ftui/flex.js. Die Zeilennummer (2346) deutet auf eine neuere Version
von FTUI hin. Das Skript steuert die Layout- und Widget-Logik (z. B. flexbox, devices, states usw.).
Ursachen können sein: FTUI-Version ist nicht kompatibel mit deiner Seite (index.html oder den Widgets).
Ein Widget auf deiner FHEM-Seite nutzt eine Variable oder ein device, das leer oder nicht vorhanden ist.
FHEM liefert kein korrektes JSON für ein bestimmtes Attribut.
WebView verhält sich leicht anders als ein Browser (z. B. kein localStorage oder window-Objekt anders).
Mann muss also genau bestimmen können wo genau die Stelle der des Fehlers liegt.
FTUI-Debug in deinem Browser (nicht in der App) einschalten: http://<deine-fhem-ip>:8083/fhem/ftui/index.html?debug=1
Öffne die Browser-Konsole (F12 → Console), Du siehst, welche Widgets oder Variablen Fehler verursachen.
Oder direkt: console.log('Debug:', variableName); im betroffenen Widget oder Skript.
Zeile 2346 in flex.js prüfen:  /opt/fhem/www/pgm2/ftui/flex.js und suche nach der Zeile 2346.
Sie wird wahrscheinlich sowas enthalten wie: var x = y ,Dann schau, woher data kommt — meistens aus einem Widget-Attribut wie: <widget data="DEVICE:STATE"></widget>.
Wenn DEVICE nicht existiert → Fehler. Erster Vorschlag: FTUI aktualisieren: in Fhem update check update all,
danach Neustart von FHEM. Ich werde versuchen die App so zu ändern das diese Fehler unterdrückt werden.



Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 06 November 2025, 20:47:30
Hallo Gisbert ich habe in der App im unterenbereich eine Anzeige eingefügt die fehler von flex.js anzeigen müsste.
Teste das mal, die App wie gewohnt runterladen.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: schwatter am 06 November 2025, 21:07:41
Nabend,

debug zeigt nichts an. Die Zeile 2346 aus flex.js ist:

if (typeof data.Results[0] !== "object") return;

gatherInformations: function() {
flex.fhemPath = $('head').attr('root');
flex.webName = $("body").attr("data-webName");
flex.fwcsrf = $('body').attr('fwcsrf');
flex.room  = flex.helper.urlParam("room") || $('#content').attr('room');
flex.device = flex.helper.urlParam("detail");
flex.cmd('jsonlist2 '+flex.webName,function(data){
if (typeof data.Results[0] !== "object") return;
if (data.Results[0].Attributes.hiddengroup)
flex.hiddenGroups = data.Results[0].Attributes.hiddengroup.split(',');
else flex.hiddenGroups = [];})
},

Gruß schwatter
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 06 November 2025, 21:23:29
Funktioniert die App mit flex.js überhaupt nicht oder nur bestimmte Ansichten, ich werde morgen mal
deine Fehlermeldung prüfen, andernfalls müsste ich mir ein FHEM mit  flex Style  aufsetzen.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Gisbert am 06 November 2025, 21:43:35
Zitat von: mediastudio am 06 November 2025, 21:23:29Funktioniert die App mit flex.js überhaupt nicht oder nur bestimmte Ansichten, ich werde morgen mal
deine Fehlermeldung prüfen, andernfalls müsste ich mir ein FHEM mit  flex Style  aufsetzen.

Die App funktioniert schon, nur dass bei jedem Seitenwechsel die besagte Meldung als Einblendung vorhanden ist, die man dann erst schließen muss (mit einem ok).
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 07 November 2025, 08:28:46
Ich habe das mal untersucht,
if (typeof data.Results[0] !== "object") return;
Diese Zeile wirft den Fehler, wenn data.Results nicht existiert oder leer ist.
Also: data kommt vom FHEM-Aufruf jsonlist2 <webName>, aber FHEM liefert manchmal kein Objekt zurück, z. B. wenn:
webName leer oder falsch ist, das Device in FHEM nicht existiert, der Nutzer nicht eingeloggt ist oder falsche Rechte hat,
oder FHEM temporär nichts liefert (z. B. wegen Caching).
Dann ist data.Results undefined, und JavaScript kann data.Results[0] nicht lesen → Cannot read properties of undefined
(reading '0').
Lösung auf der JavaScript-Seite (sicherer Code),Falls du Zugriff auf flex.js hast (z. B. über dein
FTUI oder das FHEM-Verzeichnis /opt/fhem/www/pgm2/flex.js), kannst du die problematische Zeile robust absichern.

Ersetze:
 if (typeof data.Results[0] !== "object") return;

durch:
 if (!data || !data.Results || !Array.isArray(data.Results) || typeof data.Results[0] !== "object") {
    console.warn("⚠️ flex.js: Unerwartete Datenstruktur bei jsonlist2", data);
    return;
}

Damit verschwindet der JavaScript-Fehler, und du bekommst stattdessen eine Warnung in der Konsole.

Verhalten in der App: (Android-WebView), ich habe ein onConsoleMessage-Handler eingebaut, es sollte bei den Fällen:
⚠️ FTUI-Fehler in flex.js (Zeile 2346): Cannot read properties of undefined (reading '0')
Die App sollte nicht abstürzen, sondern sollte sauber den Fehler anzeigen.


Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Gisbert am 07 November 2025, 11:01:05
Ich hab den QR-Code ausgeführt, eine ...apk.zip Datei heruntergeladen und installiert.
Ich musste, das .zip entfernen (Änderung des Dateinamens, nicht Entpacken) - war das richtig?
Es ist anders, aber nicht besser geworden.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 07 November 2025, 12:56:04
Hallo Gisbert,
danke für Deine Rückmeldung, ich habe noch keine Erfahrung mit fhem-flex,
Ich werde mich mal damit beschäftigen. Sollte ich die Fehler abstellen können,
werde ich das hier weitergeben. Für FHEM und FTUI Layouts sollte die App aber
ohne Probleme funktionieren. Warum habe ich diese App programmiert, ein Muss für
mich war es. die Sprachsteuerung ohne große Änderung an der fhem.cfg wieder herstellen
zu können. 
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 08 November 2025, 18:19:54
Betreff: Austausch der flex.js

Ich habe das Problem nun untersucht und festgestellt, dass der Fehler nicht vom FHEMVoiceClient kommt, sondern von der flex.js. Ich habe eine modifizierte Version der flex.js erstellt, die keinen Fehler mehr erzeugt. Ich habe dies bereits auf meinem System getestet und es funktioniert einwandfrei.

Es sollte keine Probleme beim Austausch der Datei flex.js geben. Bitte sichere deine aktuelle flex.js und tausche sie gegen die neue Version aus. Ich werde die Datei auf meinem Server bereitstellen, zusammen mit einer FHEMVoiceClient.apk, die ohne die vorherige Fehleranzeige läuft. Auf dem Server ist eine Datei Testapk.7z , die beinhaltet die App und die flex.js.

**Hinweis zum Herunterladen des QR-Codes**
Um den QR-Code erfolgreich aufzurufen, benötigen Ihr das bereits bekannte Passwort.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Gisbert am 08 November 2025, 20:21:40
Hallo mediastudio,

deine App funktioniert jetzt mit der modifizierten flex.js-Datei. Bis auf einen Unterschied bei der Formatierung einer readingsGroup sehe ich auf den ersten Blick keine Unterschiede.
Wie geht es denn jetzt weiter mit der Sparcheingabe/erkennung?

Viele Grüße Gisbert

Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 08 November 2025, 21:09:42
Hallo Gisbert,
was meinst Du mit Spracherkennung, sollte erstmal so funktionieren über den unteren
Button Microfon. Ich arbeite an einer App die wie Alexa über ein Wort z.B. Hallo App Fehm
befehle ausführt. Wie gesagt, im experiment, noch nicht zu frieden stellend.
Fehm sollte dann ohne weitere Handhabung Sprachbefehle ausführen.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Gisbert am 08 November 2025, 21:33:50
Hallo mediastudio,

ich hab die 4 Devices aus Thread #1 bei mir definiert.
Wenn ich das Mikrofon drücke, erscheint die Google Spracheingabe, nimmt einen beliebigen Befehl entgegen - aber es "passiert" dann rein gar nichts. Meine Erwartungshaltung ist vermutlich komplett falsch.

An welcher Stelle muss ich starten, bzw. welche Voraussetzungen müssen denn vorliegen, damit das, was ich als Sprachbefehl eingebe, auch ausgeführt wird?

Viele Grüße Gisbert
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 09 November 2025, 11:49:53
Hallo Gisbert,

ich habe vor 14 Jahren mit FHEM meine Hausautomation in ENOCEAN Technik aufgebaut. Da gab es die WebView App, die auch bis Android V7 funktionierte, danach war die App nicht mehr auf spätere Versionen lauffähig. Ich habe bei mir in der fhem.cfg über 100 Sprachbefehle eingefügt, die waren dann nicht mehr zu gebrauchen, einfach tot.

Aus diesem Grund hab ich die neue FHEMVoiceClient App programmiert. Ohne Änderung in der fhem.cfg habe ich alle Sprachbefehle wieder funktionsfähig.

Mein FHEMVoiceClient sollte ohne Probleme funktionieren, wenn Du auch schon mal Sprachbefehle in deiner fhem.cfg integriert hast. Wichtig ist, dass Du folgendes in der fhem.cfg stehen hast:

#################################
# TTS Text2Speech
#################################
define MyTTS Text2Speech hw=0.0
attr MyTTS TTS_UseMP3Wrap 1
attr MyTTS room Text2Speech

#######################################################################
##  im Webinterface unter Android zwei Readings:                     ##
##                                                                   ##
##  lastTTS → wird vom Handy gelesen und gesprochen                  ##
##  debugTTS → dient nur der Kontrolle, was wirklich gesendet wurde  ##
#######################################################################

define voiceRecognitionLastResult dummy
attr voiceRecognitionLastResult room Android
attr voiceRecognitionLastResult setList textField

define androidTablet dummy
attr androidTablet room Android
attr androidTablet setList ttsSay:textField
attr androidTablet webCmd ttsSay


define androidTablet_tts notify androidTablet:ttsSay.* { \
  my @parts = ();; \
  for (my $i = 1;; $i < 10;; $i++) { ;;\
    my $var = "\$EVTPART$i";; \
    no strict 'refs';; \
    push @parts, eval $var if defined(eval $var) && eval($var) ne '';; \
  };; \
  my $text = join(' ', @parts);; \
  if ($text) { ;;\
  fhem("setreading androidTablet lastTTS $text");; \
  fhem("setreading androidTablet debugTTS $text");; \
      Log3('androidTablet', 3, "androidTablet_tts -> $text");; \
  } else { ;;\
      Log3('androidTablet', 3, "androidTablet_tts -> kein Text erkannt");; \
  } \
}

Und deine Sprachbefehle sollten folgenderweise so wie hier in der fhem.cfg eingetragen


### Licht Küche
define speechRecognizer_kuecheLich_ein notify .*voiceRecognitionLastResult.*Küche.*Licht.*(ein|an).* set Deckenstrahler_Actor on;; set androidTablet ttsSay Licht in der Küche eingeschaltet
define speechRecognizer_kuecheLich_aus notify .*voiceRecognitionLastResult.*Küche.*Licht.*aus.* set Deckenstrahler_Actor off;; set androidTablet ttsSay  Licht in der Küche ausgeschaltet


### Flur Esszimmer Licht
define speechRecognizer_FlurEsszimmer_ein notify .*voiceRecognitionLastResult.*Flur.*Esszimmer.*Licht.*(ein|einschalten|an).* set Flur_Esszimmer_Actor on;; set androidTablet ttsSay  Licht im Flur Esszimmer eingeschaltet
define speechRecognizer_FlurEsszimmer_aus notify .*voiceRecognitionLastResult.*Flur.*Esszimmer.*Licht.*(ausgeschaltet|aus).* set Flur_Esszimmer_Actor off;; set androidTablet ttsSay  Licht im Flur Esszimmer ausgeschaltet


### Licht Esszimmer Deckenlampe
define speechRecognizer_Deckenlampe_ein notify .*voiceRecognitionLastResult.*(Tischlampe|Tischleuchte).*(einschalten|ein|an|1).* set Tischleuchte_Licht_Actor on;; set androidTablet ttsSay  Licht im Esszimmer Deckenlampe eingeschaltet
define speechRecognizer_Deckenlampe_aus notify .*voiceRecognitionLastResult.*(Tischlampe|Tischleuchte).*(ausschalten|aus).* set Tischleuchte_Licht_Actor off;; set androidTablet ttsSay  Licht im Esszimmer Deckenlampe ausgeschaltet


So war das mit ttsSay aufgebaut und funktioniert auch mit der FHEMVoiceClient App, bei mir sind wie gesagt über
100 Befehle vor 14 Jahren so programmiert und das ist heute auch noch so funktionsfähig.

Teste das mal.
 
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 09 November 2025, 12:50:09
Im Vergleich zu RHASSPY (oder evtl. Terco(?)) ist das mit den vielen notify ziemlich umständlich.

Komme nur leider grade nicht dazu, mich zu kümmern.

@Gisbert: es sollte funktionieren, das Reading mit dem erkannten Text auf ein AMAD-Device zu schicken und die AMAD-Variante von RHASSPY zu verwenden.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Gisbert am 09 November 2025, 14:11:09
Hallo mediastudio,

die Anleitung verstehe ich - ich komme aber erst später nächste Woche zum Testen.

Hallo Jörg,

den Weg über AMAD habe ich nicht verstanden. Teste ich auch gerne, falls du Zeit hast, ein konkreteres Beispiel zu nennen. Eilt aber nicht, da ich erst später nächste Woche Zeit habe.

Viele Grüße Gisbert
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 09 November 2025, 14:45:59
https://commandref.fhem.de/#RHASSPY-attr-rhasspySpeechDialog

Konzept wäre, tts über die App zu machen und dann wieder stt. Dazwischen "einfach" RHASSPY.

@mediastudio
Die Auswertung auf FHEM-Devices macht dann RHASSPY, dein Flur_Esszimmer_Actor muss dann nur ein genericDeviceType "light" sein und der Devspec in RHASSPY entsprechen und eleinen "sprechbaren Namen" bekommen.
Die Satzstruktur wird in Rhasspy in der sentence.ini zentral festgelegt.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 09 November 2025, 17:01:19
Ich habe mir mal RHASSPY angesehen, https://rhasspy.readthedocs.io/en/latest/tutorials/
und https://wiki.fhem.de/wiki/RHASSPY, das scheint sehr  interessant zu sein, ich selbst habe
damit noch keine Erfahrung. Nun eines ist zu sagen, eine NEUE Struktur nicht einfach nur FHEM.
Sollte ich mir RHASSPY installieren, werde ich es mit meiner App versuchen zu verbinden.   

RHASSPY kann auf dem gleichen Raspberry Pi wie FHEM laufen, aber es kommt darauf an, wie man es installieren und
betreiben will. RHASSPY ist ein verteiltes Spracherkennungs-Framework, das typischerweise als separater Server
läuft und mit Rhasspy (dem Spracherkennungsprojekt) oder anderen Clients spricht. FHEM kann über passende
Bindings oder HTTP-Requests mit RHASSPY kommunizieren.

Wichtige Punkte:

- Architektur
 RHASSPY wird oft als eigenständiger Sprachverarbeitung-Server betrieben (Spracherkennung, NLU, Intent-Handling). FHEM kann als Hausautomations-Zentrale die Kommandos steuern und mit RHASSPY integrieren, z. B. über REST- oder MQTT-Schnittstellen.
Hardware-Anordnung
Man kannst RHASSPY auf demselben Raspberry Pi installieren, auf dem auch FHEM läuft, solange Ressourcen ausreichend sind (CPU, RAM, Netzwerk). Ein Pi 4 oder neuer ist hier vorteilhaft.

Besser den RHASSPY auch auf einem separaten Raspberry Pi betreiben (z. B. ein Pi Zero, Pi 3/4).
In vielen Setups wird das empfohlen, wenn man mehrere Zonen abdecken oder sprachgesteuerte Eingänge in verschiedenen Räumen realisieren will. Mehrere Zonen / Raum-Verteilte
Spracherkennung.  Jeder Raum braucht  einen passenden Client (z. B. ein kleines Raspberry Pi-Gerät) mit einem Mikrofon, das die Sprache aufzeichnet und an den RHASSPY-Server sendet. Der Server führt die Spracherkennung aus und sendet die Ergebnisse zurück (NLU, Intent).
Ein Pi Zero kann als leichter Client dienen, der Sprachaufnahmen an den Zentralserver sendet. Allerdings hat der Pi Zero begrenzte Rechenleistung und Netzwerk-Bandbreite; die Spracherkennung wird eher im zentralen Server oder auf leistungsfähigeren Geräten erledigt.

Konkrete Installationshinweise grober Überblick:
RHASSPY-Installation: Man installierst Rhasspy oder RHASSPY-Komponenten auf dem Server (z. B. RHASSPY-Server-Teil). Es wird eine API-Verbindung zu FHEM eingerichtet (z. B. über MQTT oder HTTP), damit Befehle weitergegeben werden. In FHEM wird ein Command-Device oder eine URL/HTTP-Befehl-Verbindung einrichten, sodass erkannte Absichten an FHEM weitergereicht werden (z. B. "Turn on Licht im Wohnzimmer" -> FHEM-Befehl).
Clients in Räumen: Auf jedem Raumgerät (Pi Zero, Pi 3/4) installierst du Rhasspy-Client-Funktionen oder konfigurierst den Mikrofonzugriff so, dass Audio an den zentralen RHASSPY-Server gesendet wird.

 
 
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 10 November 2025, 08:27:21
Danke für deine Erläuterungen, Gisbert und ich kennen RHASSPY/Rhasspy bereits und zumindest ich bin auf der Suche nach einer einfachen Android App, die neben Füllescreen- Browser (dafür nehme ich bisher fully) auch eine tts+stt-Schnittstelle zu fhem bietet.
Diesen Job hatte bisher AMAD, das aber bisher nicht auf meinem aktuellen Handy läuft, weil zumindest eine der beiden Apps, die man dafür braucht eol ist/war.
Bevor ich also auf ein totes Pferd setzt, schaue ich mir gerne dein Fohlen an😉.

Wie sieht deine Roadmap aus? Gibt es Pläne, die App in den Play Store zu bringen?
Oder den Quellcode zu veröffentlichen?
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 11 November 2025, 17:27:03
Sprachbefehle von Fhem modifizieren:

Ich habe mehrere Sprachbefehle in ein  99_myVoiceControl.pm gebracht.
Ein einzelnes Notify + eine Perl-Funktion die automatisch
erkennt, welches Licht gemeint ist (z. B. ,,Küche", ,,Schlafzimmer", ,,Wandlampen" usw.)
erkennt, ob ein oder aus gesagt wurde, den passenden Actor setzt und den
Text-to-Speech-Antworttext erzeugt. Die fhem.cfg bleibt übersichtlich und der
Einsatz von Text-to-Speech funktioniert mit der FHEMVoiceClient.app funktioniert.

99_myVoiceControl.pm 

use utf8;
use Encode qw(decode);

sub myVoiceLight {
  my ($cmd) = @_;

  # UTF-8 sicherstellen
  $cmd = decode("utf8", $cmd) unless utf8::is_utf8($cmd);
  $cmd = lc($cmd);

  # Umlaute normalisieren
  my %replacements = (
    'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss'
  );
  $cmd =~ s/([äöüß])/$replacements{$1}/ge;

  Log 1, "Sprachbefehl empfangen: $cmd";

 # Räume + Gerätezuordnung
  my %devices = (
    'kueche'             => 'Deckenstrahler_Actor',
    'flur esszimmer'     => 'Flur_Esszimmer_Actor',
    'tischlampe'         => 'Tischleuchte_Licht_Actor',
    'tischleuchte'       => 'Tischleuchte_Licht_Actor',
    'schlafzimmer'       => 'Schlafzimmer_Actor',
    'schrankbeleuchtung' => 'Schrankbeleuchtung_Actor',
    'wandlampe'          => 'Wandlampen_Actor',
    'wandlampen'        => 'Wandlampen_Actor',
    'gaeste wc'         => 'Gaeste_WC_Actor',
    'badezimmer'         => 'Badezimmer_Actor',
    'hauswirtschaftsraum' => 'HWR_Licht_Actor',
    'gästezimmer'         => 'Gaestezimmer_Actor',
    'flur'                 => 'Flur_Eingang_Actor',
    'schlummerlicht'    => 'SchlummerlichtDimmer',
    'multimedia wand'  => 'Multimedia_Actor',
  );

  my $foundDevice;
  my $foundName;

  # Welcher Raum / welches Gerät?
  foreach my $name (keys %devices) {
    if ($cmd =~ /$name/) {
      $foundDevice = $devices{$name};
      $foundName = $name;
      last;
    }
  }

  if (!$foundDevice) {
    fhem("set androidTablet ttsSay Ich habe den Raum oder das Licht nicht erkannt");
    Log 1, "Kein Gerät erkannt in Sprachbefehl: $cmd";
    return;
  }

  # Ein / Aus erkennen
  if ($cmd =~ /\b(aus|ausschalten)\b/) {
    fhem("set $foundDevice off");
    fhem("set androidTablet ttsSay Licht $foundName ausgeschaltet");
    Log 1, "[$foundName] ausgeschaltet";

  } elsif ($cmd =~ /\b(an|ein|einschalten)\b/) {
    fhem("set $foundDevice on");
    fhem("set androidTablet ttsSay Licht $foundName eingeschaltet");
    Log 1, "[$foundName] eingeschaltet";

  } else {
    fhem("set androidTablet ttsSay Ich habe kein 'an' oder 'aus' verstanden");
    Log 1, "[$foundName] Kein An/Aus in Befehl erkannt: $cmd";
  }
}


In der fhem.cfg

#########################################
###  Licht Modul 99_myVoiceControl.pm ###
#########################################
define speechRecognizer_Licht notify .*voiceRecognitionLastResult.*(Licht|Lampe|Leuchte|Steckdose).* { myVoiceLight($EVENT);; }


Sprachbefehle z.B. Küche Licht an / Wandlampen Licht an / wichtig in  # Räume + Gerätezuordnung sollten die Räume in kleinschrift sein
Ich hab das getestet und meine fhem.cfg wird schlanker.

Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 11 November 2025, 17:51:53
Schau dir auch mal https://www.fhemwiki.de/wiki/Modul_Babble und Talk2fhem an.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 11 November 2025, 20:01:03
Ich habe mir Modul Babble mal angesehen, besonders wichtig für mein Projekt war es, die Funktionalität der Sprachbefehle
aus der fhem.cfg beizubehalten, die zuvor problemlos mit der Webview-App funktionierten. Die Herausforderung lag darin,
eine benutzerfreundliche App zu entwickeln, die es ermöglicht, Aktoren direkt anzusprechen, ohne dass zusätzliche Hardware
oder Server erforderlich sind. Diese Anforderung führte mich zur der Entscheidung, das Projekt FHEMVoiceClient zu entwickeln.
FHEMVoiceClient hat sich als besonders geeignet erwiesen, da es eine direkte Schnittstelle zu FHEM bietet und somit die
Integration von Sprachbefehlen wieder bereitstellt.
Die Entwicklung der App habe ich mit Android Studio erstellt, einem leistungsstarken Tool, das eine effiziente Programmierung
und einfache Verwaltung von Projekten ermöglicht. Ich habe es auf GitHub geladen und es wird in kürze möglich sein, die App
der breiten Öffentlichkeit zur Verfügung zu stellen. Dies fördert nicht nur die Transparenz des Projekts, sondern ermöglicht
auch anderen Entwicklern, zur Weiterentwicklung beizutragen oder eigene Anpassungen vorzunehmen.

Insgesamt zielt das Projekt darauf ab, die Benutzerfreundlichkeit von FHEM zu erhöhen und den Zugang zu Sprachsteuerungsfunktionen
zu erleichtern. Die Kombination aus bewährter Technologie und der Fähigkeit, bestehende Konfigurationen zu nutzen, stellt sicher,
dass Anwender ihre Smart-Home-Aktivitäten wie gewohnt steuern können, ohne sich mit komplizierten neuen Systemen auseinandersetzen zu müssen.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 12 November 2025, 07:41:07
Zitat von: mediastudio am 11 November 2025, 20:01:03auf GitHub geladen
Das klingt gut!

Habe die App (über den ersten Link, weil das Entpacken der 7z-File auf dem verwendeten Handy nicht auf die Schnelle geklappt hat) mal runtergeladen und installiert.

Folgendes ist mir aufgefallen:
- Es wird bei jedem Start nach den settings gefragt?
- die App läßt oben die normale Android-Statusleiste offen, färbt aber den Hintergrund blau ein. Meine Anregung wäre, die Leiste auszublenden, so wie z.B. fully das macht, aber jedenfalls nicht irgendeine Farbe vorzugeben.
- Es erscheint dauerhaft "Connection lost, trying a reconnect...". Die URL zeigt auf die Standard-fhem-UI, die benutzte FHEMWEB-Instanz steht auf "websocket". Die Seite wird angezeigt und auch aktualisiert.
- die beiden dummy-Devices habe ich mal angelegt, sehe aber weder Events (im Event-Monitor, mit der regexp für dein notify), noch werden Readings befüllt, wenn ich über die STT-Option der App was einspreche. Wo liegt mein Verständnisfehler?


Was die Hinweise auf weitere "text-to-fhem-action"-Optionen angeht:
Es ist super, wenn es eine Android-Fullscreen-Lösung gibt, die einen einfachen Zugang zu Sprachsteuerungsoptionen in FHEM bietet. Die gezeigte "notify"-Lösung ist eine gute Sache, um das Prinzip zu erklären und ggf. auch für einfache Anwendungsfälle (oder bestehende Alt-Konfigurationen) eine plug-and-play-Lösung anzubieten. Wer bereits andere, komplexere Lösungen kennt (oder einrichten will), sollte nur eben die Möglichkeit haben, deinen Baustein "App" so in das Gesamtsystem einzubauen, dass auch solche komplexeren Anwendungsszenarien erfüllt werden können.
In Bezug auf RHASSPY würde das bedeuten, dass man erkennen kann, von welchem (von gedachten mehreren) Android-Gerät(en) eine Sprachanweisung kam, um dann dahin auch die Antwort schicken zu können (oder Kontext-Abhängigkeiten sauber aufzulösen, Berechtigungen zu prüfen, ..., you name it).
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Prof. Dr. Peter Henning am 12 November 2025, 09:33:37
Als Entwickler und Maintainer des Moduls Babble hänge ich mich hier mal rein.

LG

pah

P.S.: Zur Eingabe in Babble nutze ich in der Regel wandhängende Tablets, die als AMAD-Device mit FHEM zusammenarbeiten.
An Babble habe ich, natürlich, einen rivescript-Chatbot angehängt, so dass das Ding immer ein Ergebnis liefert.
Schaltbefehle in Babble gehen bei mir, da ich ein verteiltes FHEM-System habe, auch an andere Maschinen. Und deren generische Devices hole ich mit einer kleinen Babble-Erweiterung immer automatisch ab.

Zur Sprachausgabe nutze ich Amazon Polly. Neben der Möglichkeit, beliebige Ausgaben über Amazon abzuholen (natürlich mit lokalem Cache), verwende ich ca. 200 vordefinierte Texte (etwa: "Die Haustür ist offen").
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 12 November 2025, 13:59:48
## Mit "pah" kann ich nun nichts anfangen!

Ich wollte ein wenig über meine aktuelle Situation mit dem Fully Kiosk Browser sprechen und wie ich wieder
zu einer funktionierenden WebView-Funktion zurückgekommen bin, ohne meine fhem.cfg neu aufsetzen zu müssen.
Für alle, die wie ich die Sprachfunktion auf neuen Handys nutzen möchten, habe ich die FHEMVoiceClient App vorgestellt.

Die App startet mit den bereits eingegebenen Einstellungen, sodass man nicht alles neu eingeben muss – einfach ,,Speichern und Starten".
Ich betreibe drei Raspberry Pis, jeder mit einer eigenen IP-Adresse. So kann ich beim Start problemlos auf meine Systeme zugreifen.

Da ich es nicht mag, Ports in meiner FritzBox freizugeben, nutze ich ,,WireGuard", was mir den Zugriff über IP ermöglicht. Durch dieses VPN kann ich ohne Probleme auf meine Hardware im Homeoffice zugreifen. Ich denke, dass ich die Sprachfunktion hauptsächlich zu Hause benutze.

Ich habe angekündigt, das Projekt frei zu geben. Änderungen an der FHEMVoiceClient App sind jedem selbst
überlassen, und derzeit erfüllt diese App meine Ansprüche.

Für die Benutzeroberfläche habe ich lediglich die FHEM Tablet UI V2 aufgerufen, da dort die Meldung ,,Connection lost, trying a reconnect..." nicht sichtbar ist. Mir ist jedoch aufgefallen, dass dies auch bei der Nutzung der FHEM GUI der Fall war. Ich werde das weiter untersuchen. Die Sprachbefehle und Rückmeldungen aus FHEM funktionieren aber wie erwartet. Wenn man die von mir beschriebenen Codeschnipsel in der fhem.cfg einfügt, sollte das auch ohne Änderungen an einer pm-Datei funktionieren. Die 99_myVoiceControl.pm habe ich erstellt, um die Notifications zu reduzieren; sie ist jedoch nicht zwingend erforderlich.

Ich halte euch auf dem Laufenden, sobald das Projekt auf GitHub verfügbar ist. Macht dann das Beste daraus!
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Prof. Dr. Peter Henning am 12 November 2025, 18:09:40
Zitat von: mediastudio am 12 November 2025, 13:59:48## Mit "pah" kann ich nun nichts anfangen!

Was soll das denn heißen?

pah
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 12 November 2025, 20:12:12
Zitat von: Prof. Dr. Peter Henning am 12 November 2025, 18:09:40
Zitat von: mediastudio am 12 November 2025, 13:59:48## Mit "pah" kann ich nun nichts anfangen!

Was soll das denn heißen?

pah
Vermutlich konnte der TE deine Paraphe nicht als solche deuten ;) .


Der "Missing Link" scheint https://wiki.fhem.de/wiki/WebViewControl zu sein.

Mal schauen, wann ich dazu komme, das mal zu aktivieren.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 12 November 2025, 20:38:17
Hallo Herr Prof. Dr. Peter Henning,

ich hoffe, es geht Ihnen gut. Ich wollte mich kurz melden, um auf meine letzte Nachricht einzugehen.
In meiner Antwort habe ich ,,LG / pah" verwendet, wobei ,,LG" für ,,liebe Grüße" steht. Das ,,pah" war
mir in diesem Kontext nicht so geläufig, und ich verstehe, dass dies möglicherweise zu Verwirrung geführt hat.

Ich entschuldige mich, falls ich dadurch einen falschen Eindruck hinterlassen habe. Es war nicht meine
Absicht, Unklarheiten zu schaffen. Ich schätze Ihre Rückmeldung sehr und möchte sicherstellen,
dass wir uns klar verständigen können.

Vielen Dank für Ihr Verständnis!

Herzliche Grüße,
Wilfried Fröse
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 12 November 2025, 20:49:18
Hallo zusammen,

ich freue mich, euch mitteilen zu können, das ich einige wichtige Verbesserungen eingebracht
habe. An der Android-Statusleiste habe ich noch nichts geändert, bleibt für später. Die App
läuft jetzt stabil, ohne die vorherige Fehlermeldung ,,Connection lost, trying a reconnect...".
Das ist mir zwar etwas spät aufgefallen, aber das Testen ist ja gerade der Sinn der Sache.
Werte werden jetzt wie gewohnt aktualisiert.

Das ZIP-Paket habe ich auf meinem Server geladen. Ihr könnt es ab sofort wie gewohnt herunterladen.
Der letzte QR-Code enthält zudem die neueste Version der flex.js. Ich habe diese Datei ebenfalls
unter FHEM-flex getestet, und sie funktioniert einwandfrei bei mir.

Vielen Dank für eure Unterstützung und viel Spaß beim Testen der neuen Version!

Beste Grüße!
Wilfried Fröse

https://pgsys.de
Https://wf-consulting.eu

Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 12 November 2025, 21:05:42
Könntest du eventuell die aktuelle App gesondert zum Download anbieten?

Das auf dem Handy aus einem ZIP zu holen ist für mich ziemlich umständlich.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Prof. Dr. Peter Henning am 12 November 2025, 21:17:47
Ich würde es auch vorziehen, die App "einzeln" zu bekommen. Es ist mir noch nicht ganz klar, welche Funktionen anderer Anwendungen dadurch ersetzt werden sollen. AMAD und Fully funktionieren zusammen doch ganz brauchbar - das alte WebView habe ich schon lange aussortiert.

Beim Thema TTS ist noch zu sagen, dass ich dafür auf den Tablets immer noch ein wirklich uraltes Sprachmodell verwende - bevor Amazon das aufgekauft und in "Polly" umbenannt hat. Mit anderen Worten: Es ist immer dieselbe Stimme, egal ob ich Amazon verwende oder die TTS-Funktion eines meiner Tablets benutze.

LG

pah

Zitat von: mediastudio am 12 November 2025, 20:38:17Das ,,pah"
sind einfach meine Initialen
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 12 November 2025, 21:24:36
AMAD benötigt afaik die App Automagic. Die gibt es aber nicht mehr im Play Store, und schon auf meinem vor-vor-Handy war die damals noch anderswo zu bekommende App nur noch eingeschränkt lauffähig.
Ist m.E. ein Auslaufmodell...
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 12 November 2025, 22:32:10
Hallo,
die App liegt auf dem Server als FHEMVoiceClient.apk.
Wenn die datei runtergeladen wird kann sie so als zip erscheinen FHEMVoiceClient.apk.zip.
Einfach die Datei umbenennen und .zip entfernen.
Hier ist ein QR-Code für die App FHEMVoiceClient.apk
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 13 November 2025, 08:07:39
Danke, das mit dem timeout ist jetzt weg.

Kannst du bitte erklären, wie die App bzgl. Sprachein- und -ausgaben mit FHEM kommuniziert?

Kann es sein, dass für die Sprachausgabe jsonlist2 des Geräts "androidTablet" abgefragt wird, und daraus (eigentlich) dann das Reading "lastTTS" ausgewertet werden sollte?

Wie wird das Event erzeugt, das mit dem/den notify mit der (teil-) regex ".*voiceRecognitionLastResult.*" matcht? (OT: Wenn sich das auf den dummy bezieht, wäre die Syntax "sauberer", wenn man mit "voiceRecognitionLastResult:.*" für ein notifyDev sorgen würde).

Generell: Die Gerätenamen etc. hart zu vercoden ist m.E. nicht zielführend, das sollte konfigurierbar sein und jeweils über ein einziges Device pro Android-Gerät laufen.

Die einmal eingegebene Konfiguration in der App immer wieder zu bestätigen, ist für meinen usecase (eine Anlaufstelle auf ihrem Handy für meine Frau) "unschön", zumal das Passwort sichtbar gemacht werden kann (das ist m.E. ein nogo für ein Besuchern zugängliches "Wohnzimmer-Tablet" oä.)

Bei mir übrigens immer das (anscheinend nicht genutzte?) hotword vergessen.

Jedenfalls kurz mein Zwischenstand zum Testen mit WebViewControl:
Das scheint nichts gebracht zu haben (habe auch die js-und css-Dateien kopiert wie im Wiki angegeben), der einzige Effekt, den ich beim Testen hatte war, dass nach einem update vor dem Neustart im Log ein csrf-Token-Error sichtbar wurde im Zusammenhang mit der Anfrage der jsonlist2 für "androidTablet"....

Das longpoll-Attribut hatte ich auch (sehr kurz) umgestellt auf "1", das hat aber bzgl. der erwarteten Events nichts gebracht, daher ist das wieder auf "websocket".

Wäre es ein großer Aufwand, den (nicht die) Gerätenamen zu dynamisieren bzw. wieder sowas wie eine ID einzuführen? Wenn es sein muss, renoviere ich dafür die 95_WebViewControl.pm, damit man die devspec für die Abfrage über den TYPE machen kann und dann in der App schauen, ob die DEF zum Handy paßt?

Bitte melden, falls das nicht nachvollziehbar ist ::) .

OT: den Zweck der links in https://forum.fhem.de/index.php?msg=1351659 verstehe ich nicht. Vielleicht ein Versehen? Um Missverständnisse bzgl. gewerblichem Nutzer zu vermeiden, wäre es m.E. sinnvoll, diese zu entfernen.
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Prof. Dr. Peter Henning am 13 November 2025, 10:18:54
Zitat von: Beta-User am 12 November 2025, 21:24:36AMAD benötigt afaik die App Automagic.
Ja, ist aber immer noch zu bekommen und läuft bei mir problemlos.

LG

pah
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 13 November 2025, 11:55:49
Zitat von: Prof. Dr. Peter Henning am 13 November 2025, 10:18:54
Zitat von: Beta-User am 12 November 2025, 21:24:36AMAD benötigt afaik die App Automagic.
Ja, ist aber immer noch zu bekommen und läuft bei mir problemlos.
"Noch". Dachte mir schon, dass man das irgendwie noch ans Laufen bekommt, aber gab es da nicht schon unter Andoid 10 (oder 11?) irgendein Thema mit dem Overlay?

Egal. Wir diskutieren grade, ob es noch lebt oder schon tot ist. Automagic wird jedenfalls afaik nicht wieder lebendig, von daher stellt sich doch schon länger die Frage, wie wir es ersetzen können.

Allerdings ist die dahinter liegende Frage valide, ob man nicht (auch) diese App als drop-in-replacement für Automagic hinsichtlich der Schnittstelle zu FHEM (AMADCommBridge (https://commandref.fhem.de/#AMADCommBridge)) dienen könnte.
Wobei ich beim Blick in die commandref grade gesehen habe, dass es da noch Tasker gäbe; mal sehen...

@mediastudio
Wie sind denn deine Pläne hinsichtlich der Lizensierung des Codes? Auch GPL?
Falls du selbst nicht in diese Richtung entwickeln magst, findet sich vielleicht jemand, der in diese Richtung mitwirken würde, und es wäre auch nicht die erste App, die über den Verein finanziert den Weg in den Appstore gefunden hätte...
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 13 November 2025, 12:18:22
Hallo zusammen,

hier ist ein Beispiel, wie ihr den FHEMVoiceClient testen könnt.
Es ist wichtig, dass die beigefügten Skripte in der FHEM.cfg übernommen werden,
damit alles reibungslos funktioniert.

Bitte beachtet: Solltet ihr weitere Sprachmodule eingebunden haben, kann ich leider
keine Garantie für die Funktionalität des FHEMVoiceClient übernehmen. Ich empfehle,
lediglich das zu übernehmen, was ich bereits getestet habe. In diesem Fall sollte es auch bei euch funktionieren.


##########################################
## Wichtig!! in der fhem.cfg hinzufügen ##
##########################################

#################################
# TTS Text2Speech
#################################
define MyTTS Text2Speech hw=0.0
attr MyTTS TTS_UseMP3Wrap 1
attr MyTTS room Text2Speech


#######################################################################
##  im Webinterface unter Android zwei Readings:                     ##
##                                                                   ##
##  lastTTS → wird vom Handy gelesen und gesprochen                  ##
##  debugTTS → dient nur der Kontrolle, was wirklich gesendet wurde  ##
#######################################################################

define voiceRecognitionLastResult dummy
attr voiceRecognitionLastResult room Android
attr voiceRecognitionLastResult setList textField


define androidTablet dummy
attr androidTablet room Android
attr androidTablet setList ttsSay:textField
attr androidTablet webCmd ttsSay


define androidTablet_tts notify androidTablet:ttsSay.* { \
  my @parts = ();; \
  for (my $i = 1;; $i < 10;; $i++) { ;;\
    my $var = "\$EVTPART$i";; \
    no strict 'refs';; \
    push @parts, eval $var if defined(eval $var) && eval($var) ne '';; \
  };; \
  my $text = join(' ', @parts);; \
  if ($text) { ;;\
  fhem("setreading androidTablet lastTTS $text");; \
  fhem("setreading androidTablet debugTTS $text");; \
      Log3('androidTablet', 3, "androidTablet_tts -> $text");; \
  } else { ;;\
      Log3('androidTablet', 3, "androidTablet_tts -> kein Text erkannt");; \
  } \
}




Das sollte in die fhem.cfg

Hier ist ein Beispiel wie man das testen kann.


###################################################################################################
####  So sind die Befehle mit Sprache EIN und Ausgabe aufgebaut, das ist FHEM Standart gewesen  ###
###################################################################################################
## Der Testschalter wird im Room Testschalter angelegt.
## Im room Android kann man sehen was als Sprache von der App FHEMVoiceClient an Fhem gesendet wurde.
##
## Sprache empfangen: "voiceRecognitionLastResult" testschalter Licht aus
## Fhem sendet zurüch an FHEMVoiceClient: AttsSay Der Test wurde ausgeschaltet
##
## Wichtig die Räume oder Aktoren so schreiben wie sie von "voiceRecognitionLastResult" erkannt werden.
##
## Hier ein Testschalter, Sprachausgabe bei Betätigung oder über App Spracheingabe
##
## .*(Testschalter|testschalter).* hier wird der Raum benannt,
## wenn "Testschalter Licht ein" oder "Testschalter Licht an"
## erkannt wird, schaltet der "Testschalter" und
## set androidTablet ttsSay Der Test wurde eingeschaltet , hier wird die Sprache ausgegeben.


######################
### Test Schalter ####
######################
define Testschalter dummy
attr Testschalter alias Test Schalter
attr Testschalter devStateIcon on:power.on off:power.off
attr Testschalter group Testschalter
attr Testschalter icon lampe_1_blau_40.png
attr Testschalter room Testschalter
attr Testschalter setList off on

define Testschalter_1 notify Testschalter:on  set androidTablet ttsSay Test Eingeschaltet
define Testschalter_2 notify Testschalter:off  set androidTablet ttsSay Test Ausgeschaltet

### Sprachbefehl für Test Schalter
define speechRecognizer_Testschalter_ein notify .*voiceRecognitionLastResult.*(Testschalter|testschalter).*Licht.*(ein|an).* set Testschalter on;; set androidTablet ttsSay Der Test wurde eingeschaltet
define speechRecognizer_Testschalter_aus notify .*voiceRecognitionLastResult.*(Testschalter|testschalter).*Licht.*aus.* set Testschalter off;; set androidTablet ttsSay  Der Test wurde ausgeschaltet



Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 13 November 2025, 12:36:42
Betreff: Information zu "Hotword" Variable

Hallo,

ich möchte dich kurz über die Variable "Hotword" informieren.
Ich habe diese Funktion zwar vorgesehen, jedoch noch nicht freigegeben,
da es damit noch einige Probleme gibt. Daher ist dieses Feld derzeit
ohne Funktion und muss nicht weiter beachtet werden.

Viele Grüße,
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 13 November 2025, 12:41:12
Zitat von: mediastudio am 13 November 2025, 12:18:22Ich empfehle,
lediglich das zu übernehmen, was ich bereits getestet habe. In diesem Fall sollte es auch bei euch funktionieren.
Das "MyTTS"-Device wird in den von dir gezeigten cfg-Auszügen gar nicht genutzt ;) .

Wie dem auch sei: nach meinem Verständnis müßte nach einer Spracheingabe der dummy "voiceRecognitionLastResult" irgendwelche Infos in Readings (und sei es nur state) enthalten, in denen steht, was gesprochen wurde. Oder es müßte zumindest nach einer Spracheingabe irgendein Event mit dem Textteil "voiceRecognitionLastResult" im Event-Monitor zu sehen sein.

Beides ist bei mir nicht der Fall.

Ergo:
Kannst du bitte checken, ob du bei einer Spracheingabe was dazu passendes im Event-Monitor sehen kannst und/oder wie der dummy danach aussieht?
Nett wäre, wenn du hier ein per "copy for forum" erstelltes list davon (es gibt in der Detailansicht jedes Devices unten einen entsprechenden "Knopf") (und einem der Testschalter_*-notify nach "Benutzung" sowie dem "androidTablet"-Device) hier einstellen könntest. An den cfg-Auszügen sieht man keine Reading-Werte oder Zeitstempel...   
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 14 November 2025, 07:20:40
OK, bin einen halben Schritt weiter: Das Problem scheint tatsächlich csrf zu sein. Setzt man csrfToken auf "none", erfolgt sowohl die Sprachausgabe dessen, was im Reading "lastTTS" des Devices "androidTablet" steht (das war bei meinem Testen grade vom TYPE webViewControl...), und es wird nach einer Spracheingabe  auch voiceRecognitionLastResult gefüllt:
define voiceRecognitionLastResult dummy
attr voiceRecognitionLastResult room Steuerung->Interfaces
attr voiceRecognitionLastResult setList textField
#   FUUID      6913ae84-f33f-d171-380a-6594cec92cb66379
#   NAME       voiceRecognitionLastResult
#   NR         706
#   STATE      das ist ein Test
#   TYPE       dummy
#   READINGS:
#     2025-11-14 06:50:08   state           das ist ein Test
#
setstate voiceRecognitionLastResult das ist ein Test
setstate voiceRecognitionLastResult 2025-11-14 06:50:08 state das ist ein Test


Soweit, so gut.

@mediastudio:
Alle Sicherheitsmechanismen auszuschalten ist imo keine Option, der pauschale Verweis, dass man sich (ggf. via wireguard) im eigenen Netz befindet, ist m.E. nicht zielführend. Wie gehen wir mit dem csrf-Thema um?


Zum Vergleich, wie das bei AMAD läuft - da werden bei empfangener Spracheingabe zwei Readings an der Bridge geschrieben, sollte eigentlich selbsterklärend sein:
define AMADBridge AMADCommBridge
[...]
setstate AMADBridge 2022-08-04 23:49:13 receiveVoiceCommand schalte das licht am esstisch aus
setstate AMADBridge 2022-08-04 23:49:13 receiveVoiceDevice TabletWohnzimmer
setstate AMADBridge 2025-11-14 06:51:10 state opened

"TabletWohnzimmer" war/ist ein AMADDevice (das aber schon länger nicht mehr funktional ist, wie man am Zeitstempel erkennen kann...)

OT: Der schnelle (und bisher erfolglose) Versuch, das AMADDevice via Tasker wiederzubeleben, ist hier zu finden: https://forum.fhem.de/index.php?topic=143045.0
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 14 November 2025, 07:46:04
Betreff: Update zur FHEMVoiceClient App

Hallo FHEM USER,

ich möchte euch darüber informieren, dass mir bewusst ist, dass für den universellen Gebrauch der
FHEMVoiceClient App eine Eingabe für HTTPS erforderlich ist. Ich plane, dieses Thema in den nächsten
Tagen anzugehen und bin zuversichtlich, dass dies umsetzbar sein sollte.

In den Diskussionen höre ich oft, wie gut andere vorhandene Apps verschiedene Funktionen erfüllen.
Daher möchte ich noch einmal klarstellen, was meine Vision für die FHEMVoiceClient App ist.
Ursprünglich wollte ich die Funktionalitäten realisieren, die vor Jahren mit der in FHEM integrierten
WebView App möglich waren, ohne dass zusätzliche Apps eingebunden werden müssen.
So bleibt es jedem Nutzer selbst überlassen, welche Lösungen er einsetzen möchte.

Sobald die FHEMVoiceClient App mit HTTPS funktioniert, werde ich sie zum Test bereitstellen.

Vielen Dank für euer Verständnis und eure Geduld!

Mit besten Grüßen,
Wilfried Fröse
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 14 November 2025, 12:42:33
Danke für die Info.

Vermutlich werden mehr User über das csrf-Problem stolpern wie über HTTPS, aber letzteres ist schon mal ein guter Anfang  :) .
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 14 November 2025, 17:16:12
Hallo zusammen,

ich möchte gerne meine Erfahrungen und Entwicklungen im Bereich FHEM mit euch teilen,
insbesondere im Hinblick auf die Sprachsteuerung. Vor 14 Jahren habe ich mit FHEM begonnen
und war begeistert von der Möglichkeit, Spracheingaben über WebView zu integrieren.
Die Herausforderung, auch Alexa zu integrieren, stellte sich zwar als kompliziert
heraus – die Lizenzrechtsproblematik kam schnell auf – aber die investierte Zeit in das
Projekt war für mich sehr wertvoll.

Die ursprüngliche Implementierung, bei der ein eigenes Modul zur Emulation von Alexa in
FHEM verwendet wurde, hat mich sehr gefreut. Ähnlich war es mit der Spracheingabe über
WebView: Ich hatte tausende von Codezeilen in meiner fhem.cfg, aber die ständigen Aktualisierungen
der Android-Versionen machten vieles komplizierter und weniger unterhaltsam.

Im Laufe der Zeit wuchs meine fhem.cfg, als hätte ich einen Bestseller mit Fortsetzung.
Ein weiterer interessanter Aspekt war die Einführung von `setuuid`. Unleserlich verwirrend,
ich habe alle Zeilen mit ,setuuid'  gelöscht, ok ich hatte kein Problem mit und heute auch
nicht nachdem ich die Zeilen alle gelöscht habe, es ist einfach zu gewerkstelligen und
die fhem.cfg ist schlanker.

Nach all den Jahren bin ich stolz darauf, eine stabile Smart-Home-Installation mit FHEM aufgebaut
zu haben, die auch heute noch tadellos funktioniert. Es ist immer wieder ein tolles Gefühl, wenn
ich mein Handy nehme und den Spruch ,,Sesam öffne dich" sage und sich dann tatsächlich das Garagentor öffnet.
Die überraschten Gesichter Fremder sind unbezahlbar!

Nun zu meiner aktuellen Botschaft: Ich habe meine fhem.cfg aufgeräumt, insbesondere in Bezug auf Sprachbefehle
mit `voiceRecognitionLastResult`. Dabei ist eine neue Datei entstanden: 99_myVoiceControl.pm.
Dieses Modul ermöglicht es, fast alle Sprachbefehle, die von der FHEMVoiceClient-App gesendet werden,
auszuführen und sogar rückwirkend zu beantworten.

Die 99_myVoiceControl.pm unterstützt Lichtsteuerungen und Dimmer, auch die Anpassung von Helligkeit in
mehreren Räumen, inklusive Logging. Das bedeutet, dass ich nicht nur einzelne Befehle geben kann, sondern
mehrere gleichzeitig. Zum Beispiel kann ich einfach sagen: ,,Wandlampen Küche Flur Licht an", und alle
entsprechenden Befehle werden reibungslos ausgeführt – das gilt natürlich auch fürs Ausschalten.

Ich denke, dass dieses Modul für viele andere Anwender von Interesse sein könnte. Schaut euch die Struktur
der 99_myVoiceControl.pm an; es ist problemlos möglich, eigene spezielle Sprachbefehle einzufügen,
wie zum Beispiel # Mapping von Räumen zu Geräten. Darüber hinaus plane ich, eine Tabelle zu erstellen,
in der man die Sprachbefehle notieren kann, die dann an die 99_myVoiceControl.pm übergeben werden.

Wer Lust hat, kann dieses Modul gerne testen. Ich bin absolut begeistert davon,
denn so gut und schnell wie mit meiner FHEMVoiceClient-App hat Sprachsteuerung noch nie funktioniert.

Ich wünsche euch viel Spaß beim Ausprobieren!

99_myVoiceControl.pm

###############################################################################
# 99_myVoiceControl.pm – Erweiterte Sprachsteuerung für FHEM
# unterstützt Licht & Dimmer (auch heller/dunkler) + mehrere Räume + Logging
###############################################################################
package main;
use strict;
use warnings;
use utf8;
use Encode qw(decode);

sub myVoiceControl_Initialize { }

###############################################################################
# Hilfsfunktionen
###############################################################################

# Aktuellen Prozentwert robust ermitteln
sub myVoiceControl_get_current_pct {
  my ($dev) = @_;
  return 0 unless $dev && defined $defs{$dev};

  my $pct = ReadingsVal($dev, "pct", "");
  return int($pct) if $pct =~ /^\d{1,3}$/;

  $pct = ReadingsVal($dev, "lastPct", "");
  return int($pct) if $pct =~ /^\d{1,3}$/;

  foreach my $r ("dim", "level", "percent", "percentage") {
    $pct = ReadingsVal($dev, $r, "");
    return int($pct) if $pct =~ /^\d{1,3}$/;
  }

  my $state = ReadingsVal($dev, "state", "");
  if ($state =~ /(\d{1,3})/) {
    return int($1);
  } elsif ($state =~ /\bon\b/i) {
    return 100;
  } elsif ($state =~ /\boff\b/i) {
    return 0;
  }

  return 0;
}

# Dimmer setzen + eigenes Reading schreiben
sub myVoiceControl_set_dimmer {
  my ($dev, $value) = @_;
  return unless $dev && defined $defs{$dev};

  $value = 0 if $value < 0;
  $value = 100 if $value > 100;
  $value = int($value);

  fhem("set $dev dim $value");
  readingsSingleUpdate($defs{$dev}, "lastPct", $value, 1);
  Log 1, "myVoiceControl_set_dimmer: $dev -> $value%";
}

###############################################################################
# Hauptfunktion
###############################################################################
sub myVoiceControl {
  my ($cmd) = @_;
  return unless $cmd;

  $cmd = decode("utf8", $cmd) unless utf8::is_utf8($cmd);
  $cmd = lc($cmd);
  $cmd =~ s/ä/ae/g; $cmd =~ s/ö/oe/g; $cmd =~ s/ü/ue/g; $cmd =~ s/ß/ss/g;

  Log 1, "Sprachbefehl empfangen: $cmd";

  # Mapping Räume → Geräte
  my %devices = (
    'kueche'          => ['Deckenstrahler_Actor', 'light'],
    'flur'            => ['Flur_Esszimmer_Actor', 'light'],
    'tischlampe'      => ['Tischleuchte_Licht_Actor', 'light'],
    'tischleuchte'    => ['Tischleuchte_Licht_Actor', 'light'],
    'schlafzimmer'    => ['Schlafzimmer_Actor', 'light'],
    'schrankbeleuchtung' => ['Schrankbeleuchtung_Actor', 'light'],
    'wandlampe'       => ['Wandlampen_Actor', 'light'],
    'wandlampen'      => ['Wandlampen_Actor', 'light'],
    'gaeste wc'       => ['Gaeste_WC_Actor', 'light'],
    'badezimmer'      => ['Badezimmer_Actor', 'light'],
    'hauswirtschaftsraum' => ['HWR_Licht_Actor', 'light'],
    'gaestezimmer'    => ['Gaestezimmer_Actor', 'light'],
    'eingang'         => ['Flur_Eingang_Actor', 'light'],
    'schlummerlicht'  => ['SchlummerlichtDimmer', 'dimmer'],
    'multimedia wand' => ['Multimedia_Actor', 'light'],
    'buero'           => ['Buero_Dimmer', 'dimmer'],
    'wohnzimmer'      => ['Wohnzimmer_Dimmer', 'dimmer'],
    'fernsehwand'     => ['Multimedia_Dimmer', 'dimmer'],
    'garage'          => ['Garage_Sonoff_Licht', 'light'],
  );

  my @rooms_found;
  foreach my $room (keys %devices) {
    push @rooms_found, $room if $cmd =~ /\b$room\b/;
  }

  # keine Räume gefunden?
  if (!@rooms_found) {
    fhem("set androidTablet ttsSay Ich habe keinen Raum erkannt");
    Log 1, "Kein Raum erkannt: $cmd";
    return;
  }

  # Aktion ermitteln
  my $action = "";
  my $percent;

  if ($cmd =~ /\b(aus|off|ausschalten)\b/) {
    $action = "off";
  } elsif ($cmd =~ /\b(ein|an|einschalten|on)\b/) {
    $action = "on";
  } elsif ($cmd =~ /\b(heller|hoeher|höher|mehr|rauf)\b/) {
    $action = "brighter";
  } elsif ($cmd =~ /\b(dunkler|niedriger|weniger|runter)\b/) {
    $action = "darker";
  } elsif ($cmd =~ /(\d{1,3})/) {
    $percent = $1; $action = "dim";
  }

  my @done;
  foreach my $room (@rooms_found) {
    my ($dev, $type) = @{$devices{$room}};
    next unless $dev;

    if ($type eq 'light') {
      if ($action eq 'on') {
        fhem("set $dev on");
        push @done, ucfirst($room) . " Licht an";
      } elsif ($action eq 'off') {
        fhem("set $dev off");
        push @done, ucfirst($room) . " Licht aus";
      }
    }

    if ($type eq 'dimmer') {
      my $current = myVoiceControl_get_current_pct($dev);
      my $newval = $current;

      if ($action eq 'on') {
        $newval = 100;
      } elsif ($action eq 'off') {
        $newval = 0;
      } elsif ($action eq 'brighter') {
        $newval = $current + 10;
      } elsif ($action eq 'darker') {
        $newval = $current - 10;
      } elsif ($action eq 'dim' && defined $percent) {
        $newval = $percent;
      }

      $newval = 0   if $newval < 0;
      $newval = 100 if $newval > 100;

      myVoiceControl_set_dimmer($dev, $newval);
      push @done, ucfirst($room) . " ($newval%)";
    }
  }

  # Rückmeldung / Logging
  if (@done) {
    my $msg = join(", ", @done);
    fhem("set androidTablet ttsSay $msg");
    Log 1, "Ausgeführt: $msg";
    fhem("setreading Voice_LastCommand state $cmd");
    fhem("setreading Voice_LastCommand result $msg");
  } else {
    fhem("set androidTablet ttsSay Ich habe keine gültige Aktion erkannt");
    Log 1, "Keine gültige Aktion: $cmd";
  }
}

1;
###############################################################################
# Ende
###############################################################################


Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 14 November 2025, 17:17:53
OK hier nich die Zeilen für die fhem.cfg

#########################################
###  Licht Modul 99_myVoiceControl.pm ###
#########################################
define VoiceRecognitionNotify notify voiceRecognitionLastResult:.* { myVoiceControl(ReadingsVal("voiceRecognitionLastResult","state","")) }
attr VoiceRecognitionNotify room Spracherkennung
attr VoiceRecognitionNotify alias Sprachsteuerung



Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: mediastudio am 14 November 2025, 17:19:38
Zitat von: mediastudio am 14 November 2025, 17:17:53OK hier noch die Zeilen für die fhem.cfg

#########################################
###  Licht Modul 99_myVoiceControl.pm ###
#########################################
define VoiceRecognitionNotify notify voiceRecognitionLastResult:.* { myVoiceControl(ReadingsVal("voiceRecognitionLastResult","state","")) }
attr VoiceRecognitionNotify room Spracherkennung
attr VoiceRecognitionNotify alias Sprachsteuerung




Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Prof. Dr. Peter Henning am 16 November 2025, 10:54:23
Gut gelöst, aber für meinen Fall etwas unterkomplex. Ich habe in fast jedem Raum eine Vielzahl von Aktoren.

Es ist allgemein nicht Stand der Technik, aus dem Raumnamen auf den Intent (also die "Absicht" zu schließen). Diese Dinge müssen getrennt voneinander ausgewertet werden.

LG

pah
Titel: Aw: NEUE Betreff: Text-to-Speech App
Beitrag von: Beta-User am 19 November 2025, 07:31:05
Zitat von: mediastudio am 14 November 2025, 17:19:38define VoiceRecognitionNotify notify voiceRecognitionLastResult:.* { myVoiceControl(ReadingsVal("voiceRecognitionLastResult","state","")) }
Danke für's Aufgreifen des NOTIFYDEF-Themas :) .

Meine Wunschvorstellung für dein notify sähe in etwa so aus:
define VoiceRecognitionNotify notify Handy_.+:voiceRecognitionLastResult:.* { myVoiceControl($NAME) }oder (zwecks einheitlicher Syntax mit AMAD.*) noch lieber:
define VoiceRecognitionNotify notify Handy_.+:receiveVoiceCommand:.* { myVoiceControl($NAME) }
Aus welchem Reading der Text entnommen werden soll, braucht nicht übergeben zu werden, das ist in deinem jetzigen Code genauso statisch wie der eine mögliche Device-Name.
Mir wäre es wichtig, dass man mehrere unterschiedliche Devices in FHEM haben könnte, die für Sprachein- und -ausgaben jeweils in der App angegeben werden könnten (also pro Handy z.B. ein dummy).

Die App sollte zudem nicht pollen (das wäre meine Interpretation der jsonlist2-Abfrage), sondern den Event-stream auswerten, um dann insbesondere auch ohne Zeitverzug die Spracheingabeoption von FHEM aus aktivieren zu können, z.B. für Rückfragen wie im folgenden Dialog:
(ich) "Mach deutlich lauter"
(Handy) "soll das Radio im Wohnzimmer oder in der Küche lauter gemacht werden?"
(Anm: Sowas kann bei RHASSPY vorkommen, wenn grade beide Audio-Geräte angeschaltet sind und unklar ist, in welchem Raum sich der Sprechende befindet...)

Oder für sowas:
(ich) "Schalte den Fernseher aus"
(Handy) "soll ich wirklich den Fernseher ausschalten?"
(ich) "ja, mach!" (oder "ja bitte")
(Handy) "wird erledigt" (oder "okay", "aber gerne doch", "Aye, Sir!" usw.)