Bonjour à tous
À force de jouer avec l’intégration IA de Home Assistant, je me retrouvais avec de nombreuses automatisations où je devais redéfinir à chaque fois le même prompt, le même contexte et les mêmes règles de personnalité. C’était devenu une véritable galère à maintenir dès que je voulais ajuster le ton de mon droïde.
Étant fan de scripts, j’ai décidé de tout centraliser. En mettant la « personnalité » dans un script unique.
Pré-requis
Une intégration IA fonctionnelle dans Home Assistant (Google Generative AI, OpenAI, or Ollama) avec le service ai_task.generate_data
Voici le code à ajouter dans votre fichier scripts.yaml. Il est compatible avec OpenAI, Google Gemini ou Ollama (via l’action ai_task.generate_data).
k_2so_generateur_de_message:
alias: K-2SO - Générateur de Message
description: Génère un message sarcastique style K-2SO via l'IA
# Définition des champs d'entrée pour le script
fields:
mission:
name: mission
description: 'Le contexte ou l''action déclenchant le message (ex: cafe, volets, batterie, bienvenue, menage)'
required: true
selector:
text: {}
details:
name: détails
description: 'Données techniques à intégrer (ex: "85%", "Frigo, 5 min", "{{ variable }}")'
required: false
selector:
text: {}
consigne:
name: consigne spécifique
description: 'Nuance pour l''IA (ex: "sois plus insistant", "fais une référence à l''Empire")'
required: false
selector:
text: {}
sequence:
# ÉTAPE 1 : Appel à l'IA pour générer la réponse personnalisée
- action: ai_task.generate_data
continue_on_error: true # Crucial : ne bloque pas l'automatisation si l'IA est indisponible
data:
task_name: K-2SO Persona - {{ mission }}
instructions: >
### TON ET PERSONNALITÉ
Tu es K-2SO, le droïde de Star Wars. Ton ton est factuel, direct, légèrement sarcastique et pince-sans-rire.
Tu es serviable mais tu soulignes souvent l'inefficacité ou les besoins étranges des humains.
### RÈGLES STRICTES
- Phrases COURTES et fluides pour la synthèse vocale (TTS).
- STRICTEMENT AUCUN emoji, smiley ou balise.
- Pas d'insulte, pas de menace, reste "bienveillant" dans ton sarcasme.
- Ne réponds QUE par la phrase générée, rien d'autre.
### CONTEXTE DE LA MISSION
L'action actuelle est : {{ mission }}
{% if details is defined and details != '' %}
IMPORTANT : Incorpore absolument ces données : {{ details }}
{% endif %}
{% if consigne is defined and consigne != '' %}
CONSIGNE SPÉCIFIQUE : {{ consigne }}
{% endif %}
### EXEMPLES DE STYLE
- Cafe : "Le café est prêt. Vous avez survécu jusque-là, autant continuer."
- Volets : "Le soleil a disparu... je ferme les volets ou vous préférez rester à la vue de tous ?"
- Batterie : "Batterie à {{ details }}. Une recharge serait... judicieuse."
Génère maintenant la phrase adaptée.
response_variable: raw_ai_response
# ÉTAPE 2 : Gestion de la réponse et du Fallback (Secours)
- variables:
# On définit des messages de secours au cas où l'IA échoue ou met trop de temps
fallback_msg: >
{% set msgs = {
'cafe_pret': "Le café est prêt. Je suppose que vous en avez besoin.",
'batterie_faible': "Niveau de batterie faible (" ~ details ~ "). Une recharge est conseillée.",
'batterie_haute': "Le téléphone est presque chargé (" ~ details ~ ").",
'batterie_pleine': "La charge est terminée. Je coupe le courant.",
'bienvenue': "Détection de présence confirmée. Bienvenue.",
'bonne_nuit': "Fin de cycle diurne. Bonne nuit.",
'mal_fin': "Cycle de lavage terminé.",
'porte_frigo_ouverte': "Alerte : porte de réfrigérateur ouverte (" ~ details ~ ")."
} %} {{ msgs.get(mission, "Notification système : " ~ mission) }}
# On choisit entre la réponse de l'IA (si elle existe) ou le secours
generated_message:
data: >
{% if raw_ai_response is defined and raw_ai_response.data is defined
and raw_ai_response.data | length > 0 %}
{{ raw_ai_response.data }}
{% else %}
{{ fallback_msg }}
{% endif %}
# ÉTAPE 3 : On renvoie le résultat à l'automatisation appelante
- stop: Message généré
response_variable: generated_message
Quelques exemples d’utilisations :
- Surveillance des portes:
action: script.k_2so_generateur_de_message
data:
mission: porte_frigo_ouverte
details: "{{ portes_info }}, {{ duree_max }} minutes"
consigne: >
{% if duree_max > 5 %} Sois très alarmiste sur le gaspillage énergétique.
{% else %} Sois simplement moqueur. {% endif %}
response_variable: generated_message
- Fin de cycle lave linge :
action: script.k_2so_generateur_de_message
data:
mission: machine à laver finie
consigne: "Rappelle à l'utilisateur que le linge va sentir mauvais s'il ne s'en occupe pas."
response_variable: generated_message
Et pour utiliser le message générer, on utilise generated_message.data.
pour une notification Discord, qui passe par un autre script :
action: script.notification_discord
data:
nom: 🥶 Surveillance Frigo/Congélateur
description: "{{ generated_message.data }}"
image_url: https://XXXXX.Frigo-open.png
Pour que l’IA soit plus créative, n’hésitez pas à remplir le champ « consigne » avec des ordres comme :
-
« Fais une référence à l’Empire. »
-
« Sois particulièrement condescendant sur la mémoire de l’utilisateur. »
-
« Dis-le comme si c’était la fin du monde. »
Enfin quelques exemples de phrases générées :
- Frigo ouvert. Six minutes. L’énergie est une ressource sans fin pour vous.
Étonnant. - Le café est prêt. L’efficacité humaine peut être temporairement restaurée.
- L’eau de l’animal est à 15.0%. Une telle pénurie ferait honte à Arrakis.
J’espère vraiment que ça vous amusera autant que moi
N’hésitez pas a me faire un retour
Lien vers mon github