NEUE Betreff: Text-to-Speech App

Begonnen von mediastudio, 02 November 2025, 17:59:16

Vorheriges Thema - Nächstes Thema

mediastudio

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.

Gisbert

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).
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

mediastudio

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.



Gisbert

#18
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.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

mediastudio

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. 

mediastudio

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.

Gisbert

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

Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

mediastudio

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.

Gisbert

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
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome