[Modul] Text to Speech (AWS Polly)

Du könntest es theoretisch in den WebFront User Ordner kopieren. Dieser ist dann entsprechend erreichbar. Coole wäre es auch das Polly Modul über einen WebHook zu erweitern, womit man z.B. on-the-fly Texte generieren kann und an das Sonos Modul weiterleiten könnte. Da habe ich nur aktuell keine Zeit für.

paresy

Bei dem Thema Polly, Sprachdurchsage, mp3, … schwirren bei mir immer noch viele Fragezeichen bei mir rum. Das Thema ist durchaus Interessant aber hängt für mich leider immer noch in einer grauen Wolke. :confused:
Ich befürchte das du mit deinen Schlagwörtern den User @michelsaarn , der sich dieses Jahr hier angemeldet hat, überforderst und weitere Fragezeichen erzeugst. Bei mir hast du zumindestens mit WebHook ein weiteres erzeugt.

Vielen Dank für die Hinweise und das Verständnis. Ich werde dann mal versuchen im Sonos-Thread die Lösung zu finden. Der ist mittlerweile auch sehr umfangreich geworden.

@Brainpurge Dein Skript läuft aber auf einem WIN-Server oder? Nicht auf einer Symbox?

Danke im Voraus.

Docker aus einem SynNas

Hallo,
habe nach langer Zeit mal wieder versucht Polly zum laufen zu bringen. Ich wollte einen neuen Benutzer bei Amazon IAEM anlegen bekomme aber keinen Secret Key!! Mit den im Forum abgebildeten Hardkopien komme ich nicht weiter da sich wohl einiges geändert hat. Kann / mag mir einer mal behilflich sein und mir unter die Arme greifen??

Kannst du mal ein Bild machen wo du genau was erstellt hat? Beim Erstellen des Nutzers kannst du eigentlich direkt den SecretKey abgreifen.

paresy

Hallo Michael,
beim erstellen der Bilder bin ich über Seiten gestolpert die bisher nicht veröffentlicht waren. Ich habe einfach mal geraten und wohl die richtigen Antworten angeklickt. Es hat laut beigefügtem Ausdruck nun geklappt.
Vielen Dank für die Nachfrage.

Wenn ihr wollt, könnt ihr den Ausdruck auch veröffenlichen.

Alfred

Michael Maroszek via IP-Symcon Community office@symcon.de hat am 12.03.2023 21:49 CET geschrieben:

paresy (Profil - paresy - IP-Symcon Community) Administrator
12. März
Kannst du mal ein Bild machen wo du genau was erstellt hat? Beim Erstellen des Nutzers kannst du eigentlich direkt den SecretKey abgreifen.
paresy

Rufe das Thema auf ([Modul] Text to Speech (AWS Polly) - #52 von paresy) oder antworte auf diese E-Mail, um zu antworten.
Um diese E-Mails abzubestellen, klicke hier (IP-Symcon Community).

… Adresse gekürzt …

WRA0058.pdf (641 KB)

Hallo zusammen, ich habe soeben das „Text to speech (AWS Polly)“ Modul aus dem Store installiert. Wenn ich nun auf die erstellte Instanz zugreifen möchte bekomme ich sofort eine Fehlermeldung in rot die wie folgt aussieht:

Konnte Konfigurationsform nicht laden
Fatal error: Uncaught TypeError: method_exists(): Argument #1 ($object_or_class) must be of type object|string, array given in /mnt/data/symcon/modules/.store/de.symcon.ttsawspolly/libs/vendor/guzzlehttp/promises/src/RejectedPromise.php:16
Stack trace:
#0 /mnt/data/symcon/modules/.store/de.symcon.ttsawspolly/libs/vendor/guzzlehttp/promises/src/RejectedPromise.php(16): method_exists(Array, ‚then‘)
#1 /mnt/data/symcon/modules/.store/de.symcon.ttsawspolly/libs/vendor/aws/aws-sdk-php/src/Handler/GuzzleV6/GuzzleHandler.php(56): GuzzleHttp\Promise\RejectedPromise->__construct(Array)
#2 /mnt/data/symcon/modules/.store/de.symcon.ttsawspolly/libs/vendor/guzzlehttp/promises/src/Promise.php(203): Aws\Handler\GuzzleV6\GuzzleHandler::Aws\Handler\GuzzleV6{closure}(Object(GuzzleHttp\Exception\ClientException))
#3 /mnt/data/symcon/modules/.store/de.symcon.ttsawspolly/libs/vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\Promise\Promise::callHandler(2, Object(GuzzleHttp\Exception\ClientException), Array)
#4 /mnt/data/symcon/modules/.store/de.symcon.ttsawspolly/libs/vendor/guzzlehttp/promises/src/TaskQueue.php(47): …

Die Meldung ist noch um einiges länger…
Kann mir jemand sagen woran das liegen könnte oder was ich falsch mache ?

Scheint ein 7.0 Problem zu sein. Schaue ich mir an.

paresy

ok super, besten Dank :blush:

Hallo Paresy,

kurz zur Info. Hab beim Benachrichtigungsmodul genau das selbe Problem.

beim installieren der Module hat sich die jeweilige Instanz noch geöffnet. Beim speichern kam dann die Fehlermeldung. Möchte ich sie jetzt über den Objektbaum öffnen bekomme ich gleich die Fehlermeldung.

Im Store gibt es jetzt die Beta 1.3. Damit sollte es wieder gehen.

paresy

Alles klar, besten Dank :slightly_smiling_face:

Hallo,

hat sich mit IPS 7.0 irgendetwas am Pfad gewechselt?

Das Modul erstellt mit meine wav-Datei nicht mehr mit dem Zitat des Tages aus em Almanach-Modul.

Warning: rename(/tmp/awspolly_10007/Marlene__29ac6d3ec6f062b4aa608d9c33249bce.wav,/var/lib/symcon/webfront/user/polly/bdquospielen_ist_eine_tatigkeit_die_man_gar_nicht_ernst_genug_nehmen_kannldquo_-_jacques-yves_cousteau.wav): Datei oder Verzeichnis nicht gefunden in /var/lib/symcon/scripts/58304.ips.php on line 15

Weißt da jemand etwas? Geändert habe ich bis auf das Update auf IPS 7 nichts.

<?php

declare(strict_types=1);
$text = getValue(57090);  
$mp3Filename = replace_chars($text) . '.wav';

$URL1 = 'http://192.168.178.140:3777/user/polly/';
$URLVariable = $URL1 . $mp3Filename ;
RequestAction(12492, $URL1 . $mp3Filename);

$file     = TTSAWSPOLLY_GenerateFile(10007, $text);
$filename = IPS_GetKernelDir() . 'webfront' . DIRECTORY_SEPARATOR . 'user' . DIRECTORY_SEPARATOR . 'polly' . DIRECTORY_SEPARATOR . $mp3Filename;

rename($file, $filename);

//echo sprintf('File: %s, FileName: %s', $file, 'http://192.168.178.140:3777/user/polly/' . $mp3Filename);

//-----------------------------------------------

// siehe hier: https://stackoverflow.com/questions/10444885/php-replace-foreign-characters-in-a-string
function replace_chars($fileSyntax)
{
    return strtolower(
        preg_replace(
            [
                '/&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);/i',
                "/[^a-zA-Z0-9\s-]/i",
                "/\s+/"
            ],
            [
                '$1', // remove foreign character accents
                '', // remove anything that's not alphanumeric, hyphen or a space
                '_' // replace space with underscore 
            ],
            htmlentities($fileSyntax, ENT_QUOTES, 'UTF-8')
        )
    );
}



Ja, schau mal im changelog. Der User Pfad ist jetzt auf Top Level und nickt mehr im WebFront Ordner.

paresy

1 „Gefällt mir“

Genau das war es.

Mal eine Frage zum Script:

Weiß einer wie ich am besten im /user/polly die Wav-Dateien, welcher älter als 2 Monate sind löschen kann?

Durch alle Dateien durchgehen und dann mit PHP: filemtime - Manual überprüfen wäre mein Vorschlag.

paresy

Hmm, da fehlt mir wirklich die Ahnung, dass als Script zu schreiben :upside_down_face:

Hi,

Du kannst Dir mal mein altes AWS Polly Modul anschauen: https://github.com/tkugelberg/AWSPolly/blob/master/Polly/module.php
Da gab es die Funktionalität zu löschen, in Zeile 29. Ich habe es mal etwas angepasst, da man die Properties aus dem Modul ja nicht braucht… Es wird alles gelöscht, was älter als 60 Minuten ist und die Endung „.mp3“ hat. Zumindest denke ich das :wink:

<?
$path = '/my/path/where/files/are/stored';
$minutes = 60;

if ($handle = opendir($path)) {
  while (false !== ($file = readdir($handle))) {
    if ((time()-fileatime($path."/".$file)) > $minutes*60) {
      if (preg_match("/\.mp3$/i", $file)) {
        unlink($path."/".$file);
      }
    }
  }
}

?>

Kann man aber auch schöner machen, indem man den relevant Zeitstempel nur ein Mal berechnet…

Gruß,
Thorsten