VoiceButton für Fhemweb

Begonnen von schwatter, 14 März 2026, 17:25:25

Vorheriges Thema - Nächstes Thema

schwatter

Tag,

hier eine kleine JS Sammlung für Voicecontrol.

##########################################
# 1. VoiceButton
##########################################

# Zweck:
Der Button setzt beim Berühren einen Dummy auf 'on'
und beim Loslassen sofort wieder auf 'off'.
Geeignet, um ein Mikrofon-Device aufzuwecken.

# Schritt 1: Datei kopieren
voicebutton.js nach /opt/fhem/www/voicecontrol kopieren

# Schritt 2: JavaScript einbinden
attr WEBphone JavaScripts voicecontrol/voicebutton.js
# Schritt 3: Dummy-Modul erstellen
define VoiceButton dummy
attr VoiceButton readingList state
attr VoiceButton room Test
attr VoiceButton setList state

setstate VoiceButton off
setstate VoiceButton 2026-03-14 17:24:00 state off

# Schritt 4: FHEM neu starten
Änderungen speichern und FHEM neustarten

##########################################
# 2. VoiceControl (Speech-to-Text)
##########################################

# Zweck:
Wandelt Sprache in Text um und schreibt den Text in den Dummy VoiceControl(state).

# Schritt 1: Dateien kopieren
voicecontrol.js nach /opt/fhem/www/voicecontrol kopieren

# Schritt 2: JavaScript einbinden
attr WEBphone JavaScripts voicecontrol/voicecontrol.js
# Schritt 3: Dummy-Modul erstellen
define VoiceControl dummy
attr VoiceControl readingList state
attr VoiceControl room Test
attr VoiceControl setList state

setstate VoiceControl off
setstate VoiceControl 2026-03-14 17:24:00 state off

# Schritt 4: Beispiel notify
defmod n_VoiceControl_Licht notify VoiceControl:Esszimmer.Licht.(an|aus) {\
if ($EVENT eq "Esszimmer Licht an")\
       { fhem 'set Lampe01_Ez on' }\
if ($EVENT eq "Esszimmer Licht aus")\
       { fhem 'set Lampe01_Ez off' }\
}

setstate n_VoiceControl_Licht 2026-03-14 22:10:27
setstate n_VoiceControl_Licht 2026-03-14 22:09:38 state active
setstate n_VoiceControl_Licht 2026-03-14 22:10:27 triggeredByDev VoiceControl
setstate n_VoiceControl_Licht 2026-03-14 22:10:27 triggeredByEvent Esszimmer Licht an

# Schritt 5: FHEM neu starten
Änderungen speichern und FHEM neustarten

# Hinweis für HTTP-Server ohne HTTPS:
In Chrome muss die Flag aktiviert werden: chrome://flags/#unsafely-treat-insecure-origin-as-secure
und die eigene Serveradresse hinzufügen, z.B.: http://192.168.178.50:8083
Für die Spracheingabe den Button dücken und halten.


Gruß schwatter

schwatter

Aso, ich hatte auch mit webkitSpeechRecognition gespielt. Aber mein Chrome lässt mich nicht das Mikro
unter http freischalten. Da ist wohl https erforderlich  :( Oder irre ich mich?

Gruß schwatter

Dr. Boris Neubert

Zitat von: schwatter am 14 März 2026, 17:25:25defmod VoiceControl dummy
attr VoiceControl readingList state
attr VoiceControl room Test
attr VoiceControl setList state

setstate VoiceControl off
setstate VoiceControl 2026-03-14 17:24:00 state off

Wie ist denn das Widget mit dem Dummy verknüpft? Braucht man da nicht noch ein widgetOverride?
FHEM-Developer seit 2007, Mitgründer und Förder-Mitglied des FHEM e.V.
Bitte keine unaufgeforderten privaten Nachrichten!

schwatter

Das ist in dem JS voicebutton.js fest drinne

    function voiceOn() {
      console.log("Voice ON");
      FW_cmd('/fhem?cmd=set VoiceControl state on&XHR=1');
    }

    function voiceOff() {
      console.log("Voice OFF");
      FW_cmd('/fhem?cmd=set VoiceControl state off&XHR=1');
    }

Gruß schwatter

schwatter

Oh,

ok ich bin etwas weiter. Wer wie ich noch http benutzt kann in Chrome z.B
chrome://flags/#unsafely-treat-insecure-origin-as-secure aktivieren und in dem Feld
darunter den Link zu Fhem eintragen: http://192.168.1.76:8084
Jetzt habe ich zugriff auf das Mikro, bzw es ist freigeschaltet. Ich schaue mal.

Gruß schwatter

schwatter

Super,

jetzt funktioniert es. Am Laptop spinnt das Mikro. Konnte auf dem Handy gerade erfolgreich in den
state vom Dummy VoiceControl VoicetoText übertragen. Dazu beim sprechen den Button halten.
Update im ersten Post.

Gruß schwatter

rudolfkoenig

Ich habe f18.js mit STT erweitert.

Im Select-Style/f18 Menu gibt es einw STT Option, was das Micro oben einschaltet.

Beim Druecken auf das Micro kommt ein Dialog, da kann man was sagen, und das Ergebnis zu FHEM schicken.
In FHEM wird im dazugehoerigen FHEMWEB ein STT Reading gesetzt bzw. ein Event ausgeloest.
Die Sprache (DE oder EN) haengt vom "attr global language" ab, Voreinstellung ist EN.
Ich habe es mit Chromium, deutsch und englisch getestet. Es funktioniert auch ohne https.

schwatter

#7
Funktioniert!  :)

Aber bei mir mit http auf Chrome Android auch erst nachdem ich Insecure... aktiviert habe.
Vorher wird das Micro nicht aktiviert.

Edit:
Und bei mir werden relativ schnell doppelte/dreifache Wörter aufgenommen.
setstate WEBphone 2026-03-14 21:59:52 STT EsszimmerEsszimmerEsszimmerEsszimmer Licht Licht aus
Gruß schwatter

schwatter

Update im ersten Post.
Beispiel notify für den Voicebutton hinzugefügt.

Gruß schwatter