Alexa TTS mit dynamischen Inhalten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
domjo75
Beiträge: 159
Registriert: 22. Jan 2019 11:10
Answers: 0

Alexa TTS mit dynamischen Inhalten

Beitrag von domjo75 »

Hallo,
nachdem ich nun meine Alexa endlich erfolgreich verbunden habe und TTS funktioniert, möchte ich das mit Werten meiner ITEM füllen.

Es soll also ein Standardtext kommen mit < die aktuelle Uhrzeit>.... danach irgendwann <Temperatur im Garten>... und was mir noch so einfällt.

die Rule um Alexa zum sprechen zu bringen sieht naggisch so aus. Wie bekomme ich da jetzt Variablen in den Text?

Code: Alles auswählen

rule "welcome"

when
	Item Door_Sensor changed to CLOSED
then
	sendCommand(AmazonEchoBadezimmer_Sprich, "<speak>Guten Morgen. Es ist UHRZEIT und ich hoffe, Ihr habt gut geschlafen. Die Außentemperatur beträgt aktuell TEMPARATUR</speak>")	
end
Kann mir jemand auf die Sprünge helfen ?

domjo75
Beiträge: 159
Registriert: 22. Jan 2019 11:10
Answers: 0

Re: Alexa TTS mit dynamischen Inhalten

Beitrag von domjo75 »

Falls es jemanden interessiert. Ich habe das jetzt so gelöst:

Code: Alles auswählen

rule "Alexa Family Report"

when
	Item Alexa_Family_Report_Trigger changed to ON
then

	val String currentTime = String::format( "%1$tH:%1$tm", now )
	val rainNOW = (weather_forecast_Regen_now.state as Number).floatValue
	val rain6h = (weather_forecast_Regen_6h.state as Number).floatValue
	val snowNOW = (weather_forecast_Schnee_now.state as Number).floatValue

	val String nextBirth = Ephemeris.getNextBankHoliday('/etc/openhab/services/anniversaries.xml')
	val long untBirth = Ephemeris.getDaysUntil(nextBirth, '/etc/openhab/services/anniversaries.xml')

    logInfo("Alexa", "{} Uhr rainNow={} Rain6h={} snowNOW={}", currentTime, rainNOW, rain6h, snowNOW)
	if (untBirth >= 2) {logInfo("Nächster Ereigniss", "In " + untBirth + " Tagen ist " + nextBirth)}
	if (untBirth == 1) {logInfo("Nächster Ereigniss", "Morgen ist " + nextBirth)}
	
	var aText = "<speak>"
	aText += "Guten Morgen Familie! "
	aText += "Es ist " + currentTime + " Uhr und ich hoffe, Ihr habt gut geschlafen. "
	aText += "Die Außentemperatur beträgt aktuell " + Out_THSensor_Temp.state + " ."
	aText += "Das Wetter ist gerade " + weather_forecast_Wetterlage_now.state + " und es wird eine gefühlte Höchsttemperatur von " + weather_forecast_Gefuehlte_Temperatur_6h.state + " erwartet. "
	
	if (rainNOW == 0.0) {aText += "Im Moment regnet es nicht. "}
	if (rainNOW >= 0.1 && weather_forecast_Regen_now.state <= 1.0) {aText += "Im Moment regnet es ein bisschen. "}
	if (rainNOW >= 1.1 ) {aText += "Im Moment regnet es stark. "}

	if (rain6h <= 0.7) {aText += "Voraussichtlich werdet Ihr heute keinen Regenschirm benötigen. "}
	if (rain6h >= 0.8 ) {aText += "Sicherheitshalber solltet Ihr heute Euren Regenschirm nicht vergessen. "}

	aText += "Ich wünsche Euch einen schönen Tag! "

	aText += "<amazon:effect name='whispered'>"
	if (untBirth >= 2) {aText += "Übrigens, in " + untBirth + " Tagen ist " + nextBirth "."}
	if (untBirth == 1) {aText += "Übrigens, morgen ist " + nextBirth "."}
	aText += "</amazon:effect>"

	aText += "</speak>"

	sendCommand(AmazonEchoWohnzimmer_Sprich, aText)
	Alexa_Family_Report_Trigger.postUpdate(OFF)
end
Der Trigger wird durch das Alexa-Kommando auf ON gesetzt und Alexa fängt an uns die Welt zu erklären.

Antworten