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 :
Bonjour,
avec l’arrivée de l’IA, ce scénario est changé
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
Sinon tu utilises le plugin plugin-ttscast , l’ia gemini est maintenant intégrée dedans pour diffuser sur des enceintes compatibles google home , en demandant à Gemini par exemple la météo, la reformulation d’une notification, et cela fonctionne plutôt bien