Sprachausgabe (z.B Müllabfuhrtermine) per TTS auf Google Home oder Sonos ?

Vielleicht helfen dir meine Hilfsfunktionen, die auf Polly und Sonos ausgelegt sind etwas weiter.

<?php
declare(strict_types=1);

define('IPS_SERVER_NAME', '192.168.178.86');
define('ID_POLLY_INSTANCE', 27789);
define('SOUND_DIR', IPS_GetKernelDir() . 'webfront' . DIRECTORY_SEPARATOR . 'user' . DIRECTORY_SEPARATOR . 'sounds');
define('SOUND_URL', 'http://' . IPS_SERVER_NAME . ':3777/user/sounds');


// ---- ab hier nichts mehr ändern ----

// Hilfsfunktionen zum Erzeugen von TTS Dateien und zum Abspielen der Dateien auf Sonos
// 
// Version: 1.0 16.4.2020
// Autor:   bumaas
//
// Die Datei wird in ein Skript eingebunden mit
//  require_once IPS_GetScriptFile(12345);

//-------------------------------------------------------------------------------------
// Funktion zum Erzeugen beliebig vieler Sounddateien
// Beispiel:
//      $FilesToPlay = createTTSFiles(['Dies ist ein Test', 'Der Test hat gut geklappt']);
//-------------------------------------------------------------------------------------

function createTTSFiles(array $arrText): array
{
    $arrFilesToPlay = [];

    if (!@mkdir(SOUND_DIR) && !is_dir(SOUND_DIR)) {
        return [];
    }

    foreach ($arrText as $Text) {
        //Dateinamen erzeugen
        $Filename_base = replace_chars($Text);

        //Symcon Polly Instance erzeugt mp3 Dateien
        $Filename = $Filename_base . '.mp3';

        if (!file_exists($Filename)) {
            try {
                $tmpfile = TTSAWSPOLLY_GenerateFile(ID_POLLY_INSTANCE, $Text);
                if (@rename($tmpfile, SOUND_DIR . '/' . $Filename)) {
                    $arrFilesToPlay[] = SOUND_URL . '/' . $Filename;
                } else {
                    trigger_error(sprintf('Die Sprachdatei "%s" konnte nicht nach "%s" verschoben werden.', $tmpfile, SOUND_DIR . '/' . $Filename));
                }
            } catch (Exception $e) {
                trigger_error(
                    sprintf('Die Erzeugung der Sprachdatei %s klappte nicht (%s)', SOUND_DIR . DIRECTORY_SEPARATOR . $Filename, $e->getMessage())
                );
            }
        } else {
            $arrFilesToPlay[] = SOUND_URL . '/' . $Filename;
        }
    }
    return $arrFilesToPlay;
}


//-------------------------------------------------------------------------------------
// Funktion zum Abspielen beliebig vieler Sounddateien auf beliebig vielen Sonos Geräten
// Beispiel:
//      playOnSonos([['Id' => 47111, 'Volume' => 10],
//                   ['Id' => 47888, 'Volume' => '+5']],
//                   $FilesToPlay);
//-------------------------------------------------------------------------------------

function playOnSonos(array $SonosDevices, $arrFiles)
{
    if (count($arrFiles) === 0) {
        trigger_error(sprintf('Devices: : %s. Es fehlen die Files...', json_encode($SonosDevices)));
        return;
    }

    if (IPS_SemaphoreEnter(__FUNCTION__, 20 * 1000)) {

        $idMaster     = $SonosDevices[0]['Id'];
        $volumeMaster = $SonosDevices[0]['Volume'];
        unset($SonosDevices[0]);

        $Clients = [];
        foreach ($SonosDevices as $SonosDevice) {
            $idClient           = $SonosDevice['Id'];
            $volumeClient       = $SonosDevice['Volume'];
            $Clients[$idClient] = ['volume' => $volumeClient];
        }

        set_time_limit(60);

        try {
            if (count($Clients) > 0) {
                SNS_PlayFilesGrouping($idMaster, json_encode($Clients), json_encode($arrFiles), $volumeMaster);
            } else {
                SNS_PlayFiles($idMaster, json_encode($arrFiles), $volumeMaster);
            }
        } catch (Exception $e) {
            trigger_error(
                sprintf(
                    'Das Abspielen der Dateien %s auf Master %s und Clients %s klappte nicht (%s)',
                    json_encode($arrFiles),
                    $idMaster,
                    json_encode($Clients),
                    $e->getMessage()
                )
            );
        }

        //Semaphore wieder freigeben
        IPS_SemaphoreLeave(__FUNCTION__);
    }
}


//-----------------------------------------------
// siehe hier: https://stackoverflow.com/questions/10444885/php-replace-foreign-characters-in-a-string
function replace_chars(string $fileSyntax): string
{
    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')
        )
    );
}

Hallo Zusammen,
hat jemand vielleicht eine kleine „Anleitung“ wie ich alles entsprechend einstellen muss?
Sorry für die doofe (Laien) Frage!

Sprachausgabe über HomeMini sicherlich nicht möglich oder?

Habe Text to Speech AWS Polly installiert und eingerichtet, scheitere am Punkt 8:

8. PHP-Befehlsreferenz
string TTSAWSPOLLY_GenerateData(integer $InstanzID, String $Text); Fragt über AWS den Text an und liefert die Sprachdaten Base64-kodiert in der Rückgabe zurück. `echo TTSAWSPOLLY_GenerateData(12345, "Dies ist ein Test");``

string TTSAWSPOLLY_GenerateFile(integer $InstanzID, String $Text); Fragt über AWS den Text an und liefert den Dateinamen zu den Sprachdaten zurück. `echo TTSAWSPOLLY_GenerateFile(12345, "Dies ist ein Test");``

Bin leider nur leider. Wie bekomme ich eine Sprachausgabe hin?