shortc-button

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:

Ü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.

--[[
%% properties
%% events
%% globals
--]]
 
 
 
            -- Bitte Trage bei webserver die URL zu deine alexa.php an und lege zwei Globale Variablen an
            -- tts_alexa_device & tts_alexa_text
            local webserver = 'http://192.168.178.39/alexa_tts/alexa.php';
 
 
 
            local encodeText = function(url)
                return url:gsub(" ", "+")
            end
 
 
            if (fibaro:getGlobal('tts_alexa_device') ~= nil) then
                fibaro:debug('Benötigte Variablen sind angelegt ');
                error_var = 0;
            else
                fibaro:debug('Benötigte Variable NICHT erkannt. Bitte lege diese Globalen Variablen an: tts_alexa_device & tts_alexa_text');
                error_var = 1;
            end
 
 
 
 
        if(error_var == 0)
        then
            fibaro:debug('Script wird gestartet!')
            local text = fibaro:getGlobal('tts_alexa_text');
            local device = fibaro:getGlobal('tts_alexa_device');
 
            local httpClient = net.HTTPClient();
            httpClient:request(''..webserver..'?device_name='..device..'&text_tts='..encodeText(text)..'',
 
            {
            success = function(response)
              local result = response.data;
              if response.status == 200 then
                fibaro:debug('Alles okay Api wurde aufgerufen. Es wurde folgender Text ausgegeben: '..text..'');
               
              else
                fibaro:debug('Es ist ein Fehler aufgetreten: HTTP Fehler: '..response.status..'')
              end
            end,
   
            error = function(err)
                fibaro:debug('[ERROR] ' .. err)
            end
 
            });
 
        end

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:

 fibaro:setGlobal('tts_alexa_device', 'schlafzimmer');
   fibaro:setGlobal('tts_alexa_text', 'Die Waschmaschine ist fertig!');

       fibaro:startScene(117);

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.

--[[
%% properties
%% events
%% globals
tts_alexa_ansage
--]]
 
 
 
            if(fibaro:getGlobal('tts_alexa_ansage') == '0')
            then
                fibaro:debug('Wert wurde auf 0 gesetzt nichts machen!')
            else
 
                fibaro:debug('start');
                local encodeTemp = function(temp)
                    return temp:gsub("%.", ",")
                end
   
                local temp = fibaro:getValue(88,'value');
                local rolladen_status_int = tonumber(fibaro:getValue(62,'value'));
                local fenster_status_int = tonumber(fibaro:getValue(415,'value'));
       
               
   
                if(rolladen_status_int <= 90)
                then
                    rolladen_status = 'geöffnet';
                else
                    rolladen_status = 'geschlossen';
                end
   
                if(fenster_status_int == 0)
                then
                    fenster_status = 'geschlossen';
                else
                    fenster_status = 'geöffnet';
                end
   
       
                local text = 'Im Wohnzimmer sind es aktuell '..encodeTemp(temp)..' Grad Celsius. Die Rolladen sind '..rolladen_status..' und das Fenster ist '..fenster_status..'';
   
                fibaro:setGlobal('tts_alexa_device', 'schlafzimmer');
                fibaro:setGlobal('tts_alexa_text', text);
                fibaro:startScene(117);
                fibaro:setGlobal('tts_alexa_ansage', 0);
 
                fibaro:debug('ende');
            end

Info

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

Neben 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.

Die mobile Version verlassen