AllgemeinFibaro TutorialsTutorials

Alexa Text-to-Speech (TTS) über Fibaro Zentrale nutzen

Hier erfährst Du, wie Du Text-to-Speech via Alexa über Dein Fibaro Home Center ansprechen kannst. Damit lassen sich Sprachausgaben über Alexa für das eigene Smart Home realisieren.

In unserem letzten Tutorial haben wir Dir gezeigt, wie Du Amazon Echo-Geräte über Text-to-Speech (TTS) nutzen kannst. Heute soll es darum gehen, wie Du das dazugehörige Skript über Dein Fibaro Home Center ansprechen kannst. Das PHP-Skript, welches auf Deinem PHP-Webserver liegt, sieht wie folgt aus:

Überblick Echo-Geräte

Über das Aufrufen der HTTP-Request URL im Browser mit dem vorgegebenen Text, wird ebendieser von Alexa wiedergegeben.

Hilfsszene

Wie Du die Sprachausgaben auch in Deinem Fibaro Home Center nutzen kannst, zeigen wir Dir in diesem Beitrag. Dafür habe ich bereits eine LUA-Hilfsszene mit dem Namen „TTS Alexa“ angelegt.

Für diese Szene müssen zudem zwei globale Variablen angelegt werden. Dafür einfach auf „Steuerungen“ klicken und danach über „Variablensteuerungen“ die beiden Variablen hinzufügen. Anschließend ist die Konfiguration dieses Skriptes schon abgeschlossen und Du kannst die Text-to-Speech Funktion über Fibaro nutzen. Außerdem musst Du die Variable Deines Webservers anpassen. Dafür musst Du die URL zu Deiner „alexa.php“ eintragen.

Nun kannst Du erste Text-to-Speech-Ausgaben vornehmen. Dafür habe ich zwei verschiedene Szenen vorbereitet: Eine einfache, die zum Beispiel angibt, dass die Waschmachine fertig ist sowie eine komplexere für eine Statusansage.

Einfache Text-to-Speech (TTS) Szene

Für die Basisszene benötigst Du folgenden Code:

Hier musst Du die ID Deiner Szene eingeben. In unserem Fall ist dies „117“.

Wenn Du die Szene speicherst und auf „Start“ drückst, wird der Amazon Echo den Text ausgeben. Die Hilfsszene wird Dir zudem angeben, dass der Wunschtext ausgegeben wurde.

Den oben stehenden Code könntest Du auch in andere Szenen einfügen, bei denen Du Alexa ansprechen möchtest. Dafür müsstet Du nur die entsprechenden Werte anpassen.

Dynamische Ansage über Alexa

Eine komplexere Szene kann man über eine dynamische Ansage mit Alexa via Text-to-Speech realisieren. In unserem Fall geht es um den Status des Wohnzimmers, also eine Ansage darüber, ob beispielsweise die Rollladen geschlossen sind oder das Fenster geöffnet ist und wie die Temperatur im Raum ist.

Info

Weitere Erklärungen zu den einzelnen Skripten findest Du im Video!

grafische Szene für TTSNeben der LUA-Szene benötigst Du auch eine grafische Szene. Wie Du diese genau anlegst, findest Du oben im Video erklärt sowie hier detailliert in einem dazu passenden Tutorial gezeigt.

Anschließend kannst Du alles speichern und über die Amazon-Alexa-Seite –> Smart Home –> Szenen die entsprechende Szene suchen. Danach kannst Du an Alexa den Sprachbefehl für die Statusansage erteilen. Amazons Sprachassistentin wird Dir dann die Statusmitteilung für den Status des Raumes – in unserem Fall dem Wohnzimmer – ausgeben. Natürlich könntest Du diese Szene noch erweitern mit zusätzlichen Werten, die Du ebenfalls in der Statusmitteilung enthalten haben möchtest.

Schlagwörter
Mehr anzeigen

Nico Bode

Mein Name ist Nico. Ich bin Geschäftsführer einer kleinen Firma für Marketing Dienstleistungen. Ich freue mich, Euch die Smart Home Welt näherzubringen und gemeinsam mit Euch zu lernen.
Ähnliche Artikel
Wir freuen uns über jeden Kommentar. Solltest du eine Frage haben schreibe gerne in den Kommentaren, für größere Fragen würden wir uns freuen wenn du dich in unserem Smart Home Forum anmelden würdest. Dort können wir & die Smart Home Community dir deutlich besser und schneller helfen.

12 thoughts on “Alexa Text-to-Speech (TTS) über Fibaro Zentrale nutzen”

  1. Hallo Nico,
    sehr schönes und hilfreiches Tutorial. Ich habe auch soweit alles verstanden.
    Allerdings stellen sich mir noch folgende Fragen:
    Gibt es eine Möglichkeit immer den Dot antworten zu lassen der gerade meinen Sprachbefehl entgegen nimmt?
    Gibt es eine Möglichkeit an mehrere Dot´s die Sparachausgabe zu senden?
    Ist Dir bekannt ob das auch mit einem Sonos One funktioniert? Also Third Part Hardware?

    D A N K E

    Gruß
    Markus

    1. Hallo,

      vielen dank für deinen Kommentar um auf deine Fragen zu antworten:

      1. Gibt es eine Möglichkeit immer den Dot antworten zu lassen der gerade meinen Sprachbefehl entgegen nimmt?
      Aktuell leider nicht ich hatte mich aber heute morgen schon das selbe gefragt und mal geschaut technisch könnte man das sogar umsetzen über das Script. Man könnte über den Verlauf auf amazon.alexa den letzten befehlt lesen und dann da die Ausgabe machen lassen. Ich wollte mir das kommende Woche mal anschauen.

      2. Gibt es eine Möglichkeit an mehrere Dot´s die Sparachausgabe zu senden?
      nicht über einen Befehl das Alexa keine TTS befehle annimmt wenn man eine Multiroom gruppe anspricht. Aber du kannst den Befehl einfach zweimal rausschicken um bei meinem Lua beispiel zu bleiben:

      — Sende zu gerät ein
      fibaro:setGlobal(‚tts_alexa_device‘, ’schlafzimmer‘);
      fibaro:setGlobal(‚tts_alexa_text‘, text);
      fibaro:startScene(117);
      – Mache 2 Sekunden Pause
      fibaro:sleep(2000);
      fibaro:setGlobal(‚tts_alexa_device‘, ‚wohnzimmer‘);
      fibaro:setGlobal(‚tts_alexa_text‘, text);
      fibaro:startScene(117);

      3. Ist Dir bekannt ob das auch mit einem Sonos One funktioniert? Also Third Part Hardware?
      Aufjedenfall geht das – ich habe aber selbst kein Sonos im Einsatz sondern Bose Soundtouch dazu hatte ich auch schonmal ein Tutorial gemacht wie man TTS darüber nutzt.
      https://www.intelligentes-haus.de/2018/05/16/bose-soundtouch-mit-smart-home-ansprechen-beispiel-fibaro/

      Leider kann ich das nicht für Sonos entwickeln da ich die Geräte nicht habe -> und sowas ohne Gerät zu Entwicklen ist quasi nicht möglich.

    1. Hallo,
      wie oben geschrieben wird es nicht möglich sein über eine anfrage mehrere geräte gleichzeitig anzusprechen. Da Amazon keine möglichkeit bietet Multiroom Gruppen anzusprechen. Du kannst aber wie oben geschrieben zwei HTTP Aufrufe direkt hintereinander machen und dann werden die auch auf beiden Geräte ausgegeben.

      1. Hallo Nico,

        wie wäre es wenn Du für die Geräte ein Array anlegst und das Ergebnis dann in die Variable „tts_alexa_device“ schreibst. Den befehl zu doppeln geht zwar, nimmt man aber einen sich ändernden Status spricht die vierte Alexa erst wenn das Ereignis schon längst vorbei ist.
        Gruß
        Aleksanadar

        1. Hallo,

          wie oben geschrieben habe ich schon mit einer V2 angefangen – dauert aber nochwas. Das Problem bleibt aber das selbe -> Man kann nicht mehrere Geräte gleichzeitig ansprechen und wenn man Sie ohne kurze Pause anspricht – egal ob du jetzt über Lua – oder ich dann über PHP dann verschluckt Amazon die Befehle. Das heißt auch ich mache eine Pause von ca. 0,5 Sekunden wenn man im neuen Script mehrere Geräte anspricht.

          Ich habe das bei mir übrigens ganz gut in den Griff bekommen indem ich eine „Szene“ bei mir gebaut habe die das immer ein wenig aussteuert -> Wenn in der Küche keine Bewegung seit x Minuten da auch keine Sprachausgabe sondern nur in den Räumen wo auch jemand ist.

  2. Hallo Nico. Danke für die Scripte. Frage : Wäre es möglich es so zu erweitern das mehrere Fenster oder Türen in einem abgefragt werden ? Den Zustand abzufragen bekomme ich hin, nur irgendwie weis ich nicht wie der Code aussehen muss das Alexa dann alle geöffneten Fenster in einem aufzählt . Sprich : zb. : Folgende Fenster sind noch geöffnet : Badezimmer ,Wohnzimmer ,Haustür und Kinderzimmer… Klar kann ich deinem Script jeweils neue Blöcke für Fenster usw. zufügen, aber dann sagt sie ja Haustür ist geöffnet und Wohnzimmer ist geöffnet und Terassentür ist geöffnet usw. Das ist etwas nervig… Ich weis nicht wie ich Alexa dazu bringe aufzuzählen… Habe ein ähnliches Script am HC laufen wo er alle Devices überprüft und dann eine Pop Nachricht aufklappt wo dann alle geöffneten Fenster aufgelistet werden… Ich hoffe man versteht was ich meine 🙂 Gruß

    1. Hallo,

      das geht natürlich: Ich habe bei einem anderen Projekt was sehr ähnliches gemacht und habe das gerade mal umgebaut:

      Bei device_ids_zone_1 musst du deine Fenster IDs der Sensoren eintragen

      –[[
      %% autostart
      %% properties
      %% weather
      %% events
      %% globals

      –]]

      local startSource = fibaro:getSourceTrigger();

      local device_ids_zone_1 = {39,415,387,708,39,48,51,124,127,133,136,139,419,466};

      local txt_message = ‚ Folgende Fenster sind geöffnet:‘;

      for i, device_id in pairs( device_ids_zone_1 ) do
      if(tonumber(fibaro:getValue(device_id,’value‘)) == 0)
      then
      –fibaro:debug(„Fenster Sensor: „..device_id..“ Name: “ .. fibaro:getName(device_id)..“ im Raum „..fibaro:getRoomName( fibaro:getRoomID(device_id) )..“ ist geschlossen“)
      else

      –fibaro:debug(„Fenster Sensor: „..device_id..“ Name: “ .. fibaro:getName(device_id)..“ im Raum „..fibaro:getRoomName( fibaro:getRoomID(device_id) )..“ ist geöffnet!“);

      txt_include = “.. fibaro:getName(device_id)..‘ ‚..fibaro:getRoomName( fibaro:getRoomID(device_id) )..‘,‘;

      txt_message = “..txt_message..‘ ‚..txt_include..“;

      end
      end

      fibaro:debug(txt_message);

        1. Hmm. So ganz bekomme ich den Code nicht ans laufen… Irgendwas scheint beim kopieren durcheinander zu kommen. zwei drei Sachen habe ich ändern können, nur bei den “ gibt er immer eine Fehlermeldung.

Schreibe einen Kommentar Alexa Text-to-Speech (TTS) über Fibaro Zentrale nutzen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.