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