AWS Polly Modul (TTS)

Hi,

Nein.
Das Modul ruft nur, wenn ein Text in MP3 umgewandelt werden soll.

Könnte das was mit Echo/Alexa zu tun haben?
Hast Du so etwas?

Gruß,
Thorsten

Nach einigem Hin un Her läuft es nun auch bei mir. Kann mir jedoch jemand sagen, wie ich die Audioausgabe über die lokalen Lautsprecher realisieren kann?
Hintergrund: wenn ich auf Abwesenheit drücken, dann zeigt mit ein WFC_SendPopup alle noch offenen Fenster an. Eine Audioausgabe hierzu wäre toll! Mit WFC_PushNotification geht das aber in meinem Fall nicht …

sorry, nicht richtig gelesen. gelöscht.

Versuchs mal mit

WFC_AudioNotification($WebFront, 'Meldung!', $Mediafile);

wobei [ul]
[li]$WebFront - die ID des Webfronts ist in dem die Meldung ausgegeben werden soll und
[/li][li]$MediaFile - die ID der mp3 Datei die abgespielt werden soll
[/li][li]
[/li][/ul]

Aber was anderes, seit einigen Tagen kommt es mir vor als würde das Erzeugen der mp3 Datei sehr lange dauern. Ist das nur mir aufgefallen oder hat das Problem noch jemand beobachtet?

Danke für den Tipp … ich versuche es gleich heute Abend mal mit

WFC_AudioNotification($WebFront, 'Meldung!', $Mediafile);

Meines Wissens nach legt das Modul die Dateien jedoch in einem hash.mp3 Format ab. Wie komme ich an den Dateinamen, wenn er „on-the-fly“ erzeugt wird?

Ich mache das so:

		$polly = 35497 /*[I/O Instanzen\Polly]*/;
		$WebFront = 18001 /*[WebFront]*/;
		$Mediafile = 16259 /*[Meldung.mp3]*/;

		$Meldung = "Hier die Meldung rein";

	
	    $mp3=POLLY_getMP3($polly, $Meldung); 
		file_put_contents($filename=IPS_GetKernelDir()."/media/Meldung.mp3", $mp3);

		WFC_AudioNotification($WebFront, 'Meldung!', $Mediafile);



Wobei das Objekt $Mediafile auf die Datei die unter IPS_GetKernelDir()."/media/Meldung.mp3" abgelegt ist. Ich nutze also immer die gleiche Datei, die jedes mal überschrieben wird.

Das klappt bei mir nicht.

Warning: Parameter for MediaID is not inside of the specified bounds (0…65535) in C:\IP-Symcon\scripts\46318.ips.php on line 40

<?

if ($IPS_SENDER == "WebFront")
{
   SetValue($IPS_VARIABLE, $IPS_VALUE);
}

$polly = 56831 /*[TTS\Polly]*/;
$WebFront = 48959 /*[WebFront]*/;
$Mediafile = 120445 /*[Fenstermeldung.mp3]*/;
$Anzahl = GetValueInteger(29756 /*[Sonstiges\Fensterstatus\FENSTER OFFEN]*/ );
$Fensterliste = GetValueString(42377 /*[Sonstiges\Fensterstatus\FENSTER LISTE]*/ );

if ($Anzahl > 0)
{
$Anzahl_Ausgabe = "Es sind noch $Anzahl Fenster offen!";
$Fensterliste_Text = "Betroffen sind die Räume $Fensterliste.";
}
else
{
$Anzahl_Ausgabe = "$Fensterliste";
$Fensterliste_Text = "";
}

//echo $Anzahl_Ausgabe;
//echo $Fensterliste_Text;


// Alle NICHT DA
if (GetValueBoolean(54342 /*[EG\Start_links\Anwesenheiten\ALLE]*/ ) == false)
{
SetValue (44053 /*[EG\Start_links\Anwesenheiten\a]*/ , false);	// a NICHT DA
SetValue (52466 /*[EG\Start_links\Anwesenheiten\b]*/ , false);	// b NICHT DA
SetValue (40446 /*[EG\Start_links\Anwesenheiten\c]*/ , false);	// c NICHT DA
SetValue (36113 /*[EG\Start_links\Anwesenheiten\d]*/ , false);	// d NICHT DA
WFC_SendPopup(48959 /*[WebFront]*/ , "WARNUNG", "<font size=6>$Anzahl_Ausgabe<br><font size=4>$Fensterliste_Text</font>");

$mp3=POLLY_getMP3($polly, $Fensterliste_Text); 
file_put_contents($filename=IPS_GetKernelDir()."/media/Fenstermeldung.mp3", $mp3);
WFC_AudioNotification($WebFront, 'Meldung!', $Mediafile); 
}

// Alle DA
if (GetValueBoolean(54342 /*[EG\Start_links\Anwesenheiten\ALLE]*/ ) == true)
{
SetValue (44053 /*[EG\Start_links\Anwesenheiten\a]*/ , true);	// a DA
SetValue (52466 /*[EG\Start_links\Anwesenheiten\b]*/ , true);	// b DA
SetValue (40446 /*[EG\Start_links\Anwesenheiten\c]*/ , true);	// c DA
SetValue (36113 /*[EG\Start_links\Anwesenheiten\d]*/ , true);	// d DA
}

?>

Ich habe es hinbekommen … plötzlich lief es einfach so.

<?

if ($IPS_SENDER == "WebFront")
{
   SetValue($IPS_VARIABLE, $IPS_VALUE);
}

$polly = 56831 /*[TTS\Polly]*/;
$WebFront = 48959 /*[WebFront]*/;
$Mediafile1 = 11457 /*[Fensteranzahl.mp3]*/;
$Mediafile2 = 21112 /*[Fensterliste.mp3]*/;
$Anzahl = GetValueInteger(29756 /*[Sonstiges\Fensterstatus\FENSTER OFFEN]*/ );
$Fensterliste = GetValueString(42377 /*[Sonstiges\Fensterstatus\FENSTER LISTE]*/ );

if ($Anzahl > 0)
{
$Anzahl_Ausgabe = "Es sind noch $Anzahl Fenster offen!";
$Fensterliste_Text = "Betroffen sind die Räume $Fensterliste.";
}
else
{
$Anzahl_Ausgabe = "$Fensterliste";
$Fensterliste_Text = "";
}

//echo $Anzahl_Ausgabe;
//echo $Fensterliste_Text;


// Alle NICHT DA
if (GetValueBoolean(54342 /*[EG\Start_links\Anwesenheiten\ALLE]*/ ) == false)
{
SetValue (44053 /*[EG\Start_links\Anwesenheiten\a]*/ , false);	// a NICHT DA
SetValue (52466 /*[EG\Start_links\Anwesenheiten\b]*/ , false);	// b NICHT DA
SetValue (40446 /*[EG\Start_links\Anwesenheiten\c]*/ , false);	// c NICHT DA
SetValue (36113 /*[EG\Start_links\Anwesenheiten\d]*/ , false);	// d NICHT DA
WFC_SendPopup($WebFront , "WARNUNG", "<font size=6>$Anzahl_Ausgabe<br><font size=4>$Fensterliste_Text</font>");

$mp3_1=POLLY_getMP3($polly, $Anzahl_Ausgabe); 
file_put_contents($filename=IPS_GetKernelDir()."/media/Fensteranzahl.mp3", $mp3_1);
$mp3_2=POLLY_getMP3($polly, $Fensterliste_Text); 
file_put_contents($filename=IPS_GetKernelDir()."/media/Fensterliste.mp3", $mp3_2);
WFC_AudioNotification($WebFront, "WARNUNG", $Mediafile1);
sleep (3);
WFC_AudioNotification($WebFront, "WARNUNG", $Mediafile2); 
}

// Alle DA
if (GetValueBoolean(54342 /*[EG\Start_links\Anwesenheiten\ALLE]*/ ) == true)
{
SetValue (44053 /*[EG\Start_links\Anwesenheiten\a]*/ , true);	// a DA
SetValue (52466 /*[EG\Start_links\Anwesenheiten\b]*/ , true);	// b DA
SetValue (40446 /*[EG\Start_links\Anwesenheiten\c]*/ , true);	// c DA
SetValue (36113 /*[EG\Start_links\Anwesenheiten\d]*/ , true);	// d DA
}

?>

Kann ich irgendwie diesen Teil „verbessern“?:

$mp3_1=POLLY_getMP3($polly, $Anzahl_Ausgabe); 
file_put_contents($filename=IPS_GetKernelDir()."/media/Fensteranzahl.mp3", $mp3_1);
$mp3_2=POLLY_getMP3($polly, $Fensterliste_Text); 
file_put_contents($filename=IPS_GetKernelDir()."/media/Fensterliste.mp3", $mp3_2);
WFC_AudioNotification($WebFront, "WARNUNG", $Mediafile1);
sleep (3);
WFC_AudioNotification($WebFront, "WARNUNG", $Mediafile2);

Anstatt des sleep kann ich doch sicher die zweite Datei NACH der ersten abspielen lassen, oder? Array?
Wenn ich das sleep weg lassen, dann spielt mein WF beide Dateien gleichzeitig ab.

Warum machst Du das nicht alle sin einem? Ich hab das für geöffnete und gekippte Fenster so gelöst:

if ($Offen == 0)
		{
			if ($Gekippt == 1)
				$Meldung = "Es ist noch ein Fenster gekippt.";
			Else If ($Gekippt > 1)
				$Meldung = "Es sind noch ".$Gekippt." Fenster gekippt.";
		}
		Else
		{
			if ($Offen == 1)
				$Meldung = "Es ist noch ein Fenster offen";
			Else If ($Offen > 1)
				$Meldung = "Es sind noch ".$Offen." Fenster offen";
		
			if ($Gekippt == 1)
				$Meldung = $Meldung." und eines gekippt.";
			Else If ($Gekippt > 1)
				$Meldung = $Meldung." und ".$Gekippt." sind gekippt.";
			Else
				$Meldung = $Meldung.".";
		}

Weil ich bei mir nicht alle Fenster in „gekippt“ und „geöffnet“ unterscheiden kann, sind alle meine Fenster „geöffnet“.
In meinem Script unterteile ich das Zählen vom Aufzählen. Erst zählt es die Anzahl der offenen Fenster, dann nennt es die einzelnen Fenster. Und DAS möchte ich bei Audio ausgeben. Sind zwei einzelne .mp3 Files die aber aufeinander folgend abgespielt werden sollen.

Was spricht denn dagegen die Sätze die gebildet werden in einer Textvariable abzulegen? Ob du zwei mp3 Dateien erzeugt oder in zwei Skripten eine Variablen füllt und dann an Polly schickst ist doch egal.

Gesendet von meinem SGP712 mit Tapatalk

Ich habe es nun endlich tadellos am Laufen! Danke @mws

Ein Tipp von mir: Wenn man zwei Strings verbindet, die man dann wiederum an Polly zur Bearbeitung weiterleitet, dann klingt die Audioausgabe sehr gehetzt. Die beiden Sätze werden nicht natürlich wiedergegeben. Das ist zumindest der Fall wenn die Sätze mit einem „.“ enden. Wenn man das „.“ durch ein „!“ ersetzt, dann klingt es wieder sehr natürlich.
Frei nach dem Motto: wieder was gelernt. :smiley:

Guten Morgen!

Ich sitze nun schon seit Stunden und bekomme einfach das Modul nicht zum laufen:

Fehlermeldung:
Fatal error: Uncaught exception ‚Exception‘ with message ‚Response from Ivona is no mp3: {„message“:„The security token included in the request is invalid.“}‘ in C:\IP-Symcon\modules\AWSPolly\Polly\polly.php:105
Stack trace:
#0 C:\IP-Symcon\modules\AWSPolly\Polly\module.php(65): POLLY_TTS->get_mp3(‚Gehtdasso?‘)
#1 C:\IP-Symcon\scripts__generated.inc.php(793): Polly->getMP3(‚Gehtdasso?‘)
#2 C:\IP-Symcon\scripts\39623.ips.php(3): POLLY_getMP3(40497, ‚Gehtdasso?‘)
#3 {main}
thrown in C:\IP-Symcon\modules\AWSPolly\Polly\polly.php on line 105

Bitte habt erbarmen…
Ich gehe jetzs ins Bett, Gute Nacht

Auch hier gebe ich mir nach viel Ausprobieren die Antwort. Es war ein Problem mit dem Service von AWS Polly.
Nach dem Chat und einem Telefonat mit einem netten Herrn aus den USA klappt es jetzt einwandfrei.
Das File wird gespeichert…

Jetzzt muss ich nur noch Anwendungsbeispiele suchen.

Vielen Dank für Eure Ideen :slight_smile:

lg

Polly kann nun Atmen :wink:

https://ufile.io/52pbb

Wird immer natürlicher.

Kann ich in dem Modul eigentlich mit SSML-Tags arbeiten oder müsste das erst mit eingelegt werden?

„Atmet“ Polly von sich aus, oder muss man das mit Parametern initiieren?

Ne, muss über Tags mitgegeben werden, siehe Doku:
https://docs.aws.amazon.com/polly/latest/dg/supported-ssml.html#breath-tag

Klingt super! Leider scheitere ich bei dem Versuch „das Atmen“ mitzugeben.
Hast Du mal ein kleines Beispiel, wie ich das am einfachsten mitgeben kann?

Friendly reminder. [emoji4]

Gesendet von meinem ONEPLUS A3003 mit Tapatalk

:):slight_smile: Vielen Dank