NEUE Betreff: Text-to-Speech App

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

Vorheriges Thema - Nächstes Thema

mediastudio

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.


Beta-User

Server: HP-elitedesk@Debian 12, 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

mediastudio

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.