import requests
import datetime
# Configuration de Home Assistant
API_URL = 'http://192.168.1.xx:XXXX/api/' # Remplacez par l'URL de votre instance Home Assistant
TOKEN = 'xxxxxx' #Remplacez par votre token Home Assistant
OPENAI_API_KEY = 'sk-proj-xxxx' #Remplacez par votre API OpenAI
def generate_response(prompt):
url = 'https://api.openai.com/v1/chat/completions'
headers = {
'Authorization': f'Bearer {OPENAI_API_KEY}',
'Content-Type': 'application/json'
}
data = {
'model': 'gpt-3.5-turbo',
'messages': [
{'role': 'system', 'content': "Vous êtes un assistant avancé de ma maison connectée, spécialisé dans l'interaction avec les enfants. Vous avez une personnalité joyeuse et engageante, capable de rendre les informations amusantes et captivantes pour mes deux jeunes enfants, âgés de 5 ans et 9 ans."},
{'role': 'user', 'content': prompt}
]
}
response = requests.post(url, headers=headers, json=data)
return response.json()
def get_home_assistant_data(sensor_url):
response = requests.get(sensor_url, headers={'Authorization': f'Bearer {TOKEN}'})
return response.json()
def update_home_assistant_sensor(entity_id, response):
url = f'{API_URL}states/{entity_id}'
headers = {
'Authorization': f'Bearer {TOKEN}',
'Content-Type': 'application/json'
}
data = {
'state': 'ok', # Optionnel : vous pouvez définir un état significatif ici
'attributes': {
'last_response': response # Enregistre la réponse dans les attributs
}
}
response = requests.post(url, headers=headers, json=data)
return response.json()
def main():
# URL pour obtenir l'état des capteurs
weather_sensor_url = f'{API_URL}states/weather.villeneuve_la_garenne'
anniversary_sensor_url = f'{API_URL}states/calendar.anniversaires'
naely_sensor_url = f'{API_URL}states/calendar.naely'
naely_2_sensor_url = f'{API_URL}states/calendar.naely_2'
tao_sensor_url = f'{API_URL}states/calendar.tao'
tao_2_sensor_url = f'{API_URL}states/calendar.tao_2'
# Obtenir les données de la météo
weather_data = get_home_assistant_data(weather_sensor_url)
print("Données Météo:", weather_data) # Afficher les données de la météo
# Obtenir les informations sur les anniversaires et les capteurs de Naely et Tao
anniversary_data = get_home_assistant_data(anniversary_sensor_url)
print("Données Anniversaire:", anniversary_data) # Afficher les données d'anniversaire
naely_data = get_home_assistant_data(naely_sensor_url)
print("Données Naely:", naely_data) # Afficher les données de Naely
naely_2_data = get_home_assistant_data(naely_2_sensor_url)
print("Données Naely 2:", naely_2_data) # Afficher les données de Naely 2
tao_data = get_home_assistant_data(tao_sensor_url)
print("Données Tao:", tao_data) # Afficher les données de Tao
tao_2_data = get_home_assistant_data(tao_2_sensor_url)
print("Données Tao 2:", tao_2_data) # Afficher les données de Tao 2
# Récupérer la date du jour
today_date = datetime.datetime.now().strftime("%Y-%m-%d")
weather_attributes = weather_data['attributes'] if 'attributes' in weather_data else {}
# Construire le prompt
prompt = (
"Votre tâche est de décrire la météo du jour de manière ludique et de donner des conseils pour bien s'habiller en fonction de la météo, "
"leur donner la date du jour complète en utilisant des analogies et des histoires qui plairont à mes enfants qui se préparent pour l'école. "
"Voici les détails que vous devez prendre en compte : la date du jour, conditions météorologiques, la température, le vent. "
"Vous leur direz le programme de la journée. Un décompte avant les prochaines vacances peut leur faire plaisir."
"Vous pouvez leur raconter une anecdote educative."
f"Aujourd'hui, nous sommes le {today_date}. "
)
# Récupérer les informations d'anniversaire
if 'attributes' in anniversary_data:
anniversary_message = anniversary_data['attributes'].get('message', 'Aucun message d\'anniversaire prévu.')
anniversary_start_time = anniversary_data['attributes'].get('start_time', 'Pas de temps défini.')
anniversary_end_time = anniversary_data['attributes'].get('end_time', 'Pas de temps défini.')
prompt += f"Anniversaire: {anniversary_message}, Commence à {anniversary_start_time}, Fin à {anniversary_end_time}\n"
# Ajoutez les informations pour Naely
if 'attributes' in naely_data:
naely_message = naely_data['attributes'].get('message', 'Aucun message prévu.')
naely_start_time = naely_data['attributes'].get('start_time', 'Pas de temps défini.')
naely_end_time = naely_data['attributes'].get('end_time', 'Pas de temps défini.')
prompt += f"Activité Naely: {naely_message}, Commence à {naely_start_time}, Fin à {naely_end_time}\n"
# Ajoutez les informations pour Naely 2
if 'attributes' in naely_2_data:
naely_2_message = naely_2_data['attributes'].get('message', 'Aucun message prévu.')
naely_2_start_time = naely_2_data['attributes'].get('start_time', 'Pas de temps défini.')
naely_2_end_time = naely_2_data['attributes'].get('end_time', 'Pas de temps défini.')
prompt += f"Activité Naely 2: {naely_2_message}, Commence à {naely_2_start_time}, Fin à {naely_2_end_time}\n"
# Ajoutez les informations pour Tao
if 'attributes' in tao_data:
tao_message = tao_data['attributes'].get('message', 'Aucun message prévu.')
tao_start_time = tao_data['attributes'].get('start_time', 'Pas de temps défini.')
tao_end_time = tao_data['attributes'].get('end_time', 'Pas de temps défini.')
prompt += f"Activité Tao: {tao_message}, Commence à {tao_start_time}, Fin à {tao_end_time}\n"
# Ajoutez les informations pour Tao 2
if 'attributes' in tao_2_data:
tao_2_message = tao_2_data['attributes'].get('message', 'Aucun message prévu.')
tao_2_start_time = tao_2_data['attributes'].get('start_time', 'Pas de temps défini.')
tao_2_end_time = tao_2_data['attributes'].get('end_time', 'Pas de temps défini.')
prompt += f"Activité Tao 2: {tao_2_message}, Commence à {tao_2_start_time}, Fin à {tao_2_end_time}\n"
# Afficher le prompt final avant d'envoyer à ChatGPT
print("Prompt envoyé à ChatGPT :")
print(prompt)
# Ajouter l'instruction pour générer une réponse
response = generate_response(prompt)
if 'choices' in response and len(response['choices']) > 0:
chatgpt_response = response['choices'][0]['message']['content']
# Mettre à jour le sensor dans Home Assistant avec la réponse de ChatGPT
update_home_assistant_sensor('sensor.chatgpt_response', chatgpt_response)
# Afficher la réponse de ChatGPT
print("Réponse de ChatGPT :", chatgpt_response)
else:
print("Erreur dans la réponse :", response)
if __name__ == '__main__':
main()
Ce script prend en compte la météo, les calendrier des activiteés de mes enfants et génère un message pour mes enfants le matin.