[Retex] Salutations vocale du matin

Bonjour,
j’ai une enceinte qui parle le matin, (en sortant du mode nuit).
Je voulais partager un script qui me convient et marche bien.
Le principe en mode non connecté, même si cela doit pouvoir marcher avec des assistants vocaux, est d’avoir 2 fichiers :

  • bonjour.txt qui fera la salutation
  • cava.txt qui demandera comment ca va ;p

vous pouvez mettre autant de mot dans l’un et l’autre et cela est choisi au hasard avec cron

Voici, par exemple ce que j’ai dans les fichiers :
bonjour.txt :
yoooo
bonjour
salut
weche
yo
hey
hello
hola

cava.txt :
bien ou bien ?
ça gaz ?
ça va ?
bien dormi ?
pas trop dur ?
belle journée !

J’utilise donc 2 scripts qui choisissent au hasard une ligne dans chaque fichier :

sort -R /var/www/html/plugins/script/data/bonjour.txt |head -n 1
sort -R /var/www/html/plugins/script/data/cava.txt |head -n 1

Et le scénario lance la commande bonjour et cava, exemple :

« weche, pas trop dur ? »

Voilà chacun ses phrases, moi je rajoute les conditions météo ensuite

1 « J'aime »

Bonjour,

Une différente approche, je fais comme cela
[Bienvenue|Bonsoir|Bonjour|Salut|Salamalekum|Hello]

directement dans le scénario ? ou tu parles des interactions vu la syntaxe

C’est le soir au couché, suivi après une tempo de « Alors heureuse ? »

3 « J'aime »

Bonjour,
avec l’arrivée de l’IA, ce scénario est changé :slight_smile:
Principe : API gemini gratuite, plugin elevenlabs, quelques datas de la maison et l’IA génère une phrase pour le matin

Dans un scénario j’ai ce bloc code qui génère la phrase :

// --- CONFIGURATION PERSONNELLE ---
// Remplacez les valeurs ci-dessous par les vôtres.

// 1. Clé API Google Gemini
// Collez ici la clé API que vous avez obtenue depuis Google AI Studio.
$gemini_api_key = 'Ma clé API gemini';

// 2. Commandes Jeedom pour la météo

$cmd_condition = cmd::byString('#[Aucun][Maison][Météo du Jour - Aujourdhui - Description]#');
$cmd_temp_max = cmd::byString('#[Aucun][Maison][Météo du Jour - Aujourdhui - Température Maximum]#');

// 3. Flux RSS pour les actualités
$feeds = [
    'https://www.numerama.com/feed/',
    'https://www.linternaute.com/hightech/rss/' // Exemple Tech
];

// --- FIN DE LA CONFIGURATION ---


// --- Logique du script ---

// 1. Récupération des données brutes
$weather_condition = $cmd_condition->execCmd();
$weather_temp_max = $cmd_temp_max->execCmd();
$news_headline = '';

try {
    $random_feed_url = $feeds[array_rand($feeds)];
    $rss = simplexml_load_file($random_feed_url);
    if ($rss && isset($rss->channel->item[0]->title)) {
        $news_headline = (string)$rss->channel->item[0]->title;
    }
} catch (Exception $e) {
    $scenario->setLog('Erreur RSS : ' . $e->getMessage());
    // On continue même si les actus ne chargent pas
}

// 2. Création du "Prompt" pour l'IA
// C'est l'instruction que vous donnez à l'IA. Vous pouvez la modifier pour changer sa personnalité !
$prompt = "Tu es un assistant domotique bienveillant, un peu spirituel et amical. Rédige une phrase de bonjour unique et naturelle pour ce matin.
La phrase doit être courte, directement prononçable et chaleureuse. Fait des petites pauses pour la compréhension. Le tutoiement est obligatoire.

Voici les informations du jour :
- Météo : Le temps sera '{$weather_condition}' avec une température maximale de {$weather_temp_max} degrés.
- Une actualité (facultatif, à intégrer subtilement si c'est pertinent) : '{$news_headline}'.

À partir de ces éléments, crée une phrase de salutation qui inclut :
1. Une salutation décalée.
2. Un commentaire sur la météo avec un conseil vestimentaire ou pratique.
3. Une actualité synthétique
4. Une phrase bienveillante ou une pensée positive pour bien commencer la journée.
Ne sois pas robotique. Varie ton style chaque jour.";


// 3. Appel à l'API Gemini


$api_url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=' . $gemini_api_key;
$data_json = json_encode([
    'contents' => [
        [
            'parts' => [['text' => $prompt]]
        ]
    ]
]);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    // Si cURL lui-même a échoué (problème réseau, SSL, etc.)
    $curl_error = curl_error($ch);
    $scenario->setLog("Erreur cURL lors de l'appel API : " . $curl_error);
    $response_data = null;
} else {
    // Si l'appel a réussi, on décode la réponse
    $response_data = json_decode($response, true);
}
curl_close($ch);

// 4. Extraction de la réponse et stockage
$generated_text = "Je n'ai pas trouvé l'inspiration ce matin, mais je te souhaite tout de même une excellente journée.";
if (isset($response_data['candidates'][0]['content']['parts'][0]['text'])) {
    $generated_text = $response_data['candidates'][0]['content']['parts'][0]['text'];
} else {
    $scenario->setLog("Erreur de réponse de l'API Gemini : " . $response);
}

// On stocke la phrase générée par l'IA dans une variable Jeedom
$scenario->setData('phrase_ia_du_matin', $generated_text);

Il suffit de mettre les commandes infos et la clé API google ai studio
et ensuite dans le scénario envoyer cela à l’excellent plugin elevenlabs

Salut,

Sinon tu utilises le plugin plugin-ttscast , l’ia gemini est maintenant intégrée dedans pour diffuser sur des enceintes compatibles google home :yum::grimacing:, en demandant à Gemini par exemple la météo, la reformulation d’une notification, et cela fonctionne plutôt bien :wink:

TiTidom.

1 « J'aime »

Salut et merci,
j’ai pas de Google home, je l’envoi en ssh sur un ordi.

1 « J'aime »