Déclencher une notification via une date récupéré via un flux json

Mon problème

Bonjour,

Je suis nouveau avec HA et je cherche votre aide pour trouver une meilleur solution optimisée. je m’explique :

J’ai un fichier csv dans lequel j’ai X dates journalière sous forme Y-m-d h:m:s, je souhaite être notifier par HA (Mobile, telegram ou autre chose pas encore décidé) dés que le timestamp de HA est égal à une des dates du fichier csv de la journée.

Exemple csv :

date;date1;date2;date3
02/02/2021; 02/02/2022 12:56:19; 02/02/2022 13:55:19; 02/02/2022 18:55:19

Par exemple: si l’heure dans HA est : 02/02/2022 13:55:19 ou 02/02/2022 18:55:19 ou 02/02/2022 12:56:19 je souhaite déclencher une notif.

Pour traiter cette demande, j’ai plusieurs méthodes mais je sais pas laquelle est meilleur et surtout peut être il existe d’autres solutions plus intéressantes d’où mon post.

Les solutions que je vois pour traiter ça :

1 - Soit je développe une appli externe à HA et qui via un cron envoi en RESTful notification, l’avantage de cette solution HA sera juste notifie pour déclencher une action.

2 - Soit via une appli externe à HA exposer le flux csv en json et lancer un cron qui se lance chaque minute dans HA qui vérifier si le temps de HA est égal à une de mes dates et si c’est le cas déclencher une notifications, l’inconvénient de cette solution je dois tourner le cron dans HA chaque minutes et je trouve ça pas top.

Vous avez d’autres solutions ou un avis sur le sujet.

Merci de votre retour

Ma configuration


System Health

version core-2021.12.10
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.7
os_name Linux
os_version 5.10.91
arch x86_64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 5000
Installed Version 1.21.0
Stage running
Available Repositories 966
Downloaded Repositories 6
AccuWeather
can_reach_server ok
remaining_requests 41
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 7.2
update_channel stable
supervisor_version supervisor-2022.01.1
docker_version 20.10.9
disk_total 30.8 GB
disk_used 5.8 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons Samba share (9.5.1), SSH & Web Terminal (10.0.2), Studio Code Server (4.1.0), Home Assistant Google Drive Backup (0.105.2), Node-RED (10.4.0), Terminal & SSH (9.3.0), Mosquitto broker (6.0.1)
Lovelace
dashboards 1
resources 3
views 9
mode storage
___

Perso, je ferai ça avec Nodered + cron plus (node-red-contrib-cron-plus (node) - Node-RED)
Tu lis le CSV dans nodered avec le contenu de ce que tu as lu tu paramètres les exécutions programmées grâce a cron plus.

Afin de pouvoir t’aider au mieux, il faudrait que je sache la manière dont est récupéré ce fichier et si celui-ci est déposé sur le serveur HA.

Si le fichier est présent sur le serveur, tu peux appeler un script python next_trigger.py qui te retourne la prochaine date :

import csv
from datetime import datetime

next_date = []
with open('file.csv') as csv_file:
    csv_reader = csv.DictReader(csv_file,delimiter=';')
    for row in csv_reader:
        for key in ['date1', 'date2', 'date3']:
            if datetime. strptime(row[key], '%Y-%m-%d %H:%M:%S') > datetime.now():
                next_date.append(row[key])

print(next_date[0])

Tu créés un sensor qui va exécuter ce script python (par défaut toutes les 60s) :

sensor:
  - platform: command_line
    name: next trigger
    command: "python3 next_trigger.py"

Tu créés un input_datetime nommé next_trigger dans ton fichier de qui va te permettre de déclencher une automatisation :

input_datetime:
  next_trigger:
    has_date: true
    has_time: true

Puis tu créés ton automatisation :

automation:
  alias: Notify on next trigger sensor
  description: ''
  trigger:
    - platform: state
      entity_id: sensor.next_trigger
      id: state
    - platform: time
      at: input_datetime.next_trigger
      id: time
  action:
    - choose:
        - conditions:
            - condition: trigger
              id: state
          sequence:
            - service: input_datetime.set_datetime
              target:
                entity_id: input_datetime.next_trigger
              data:
                datetime: '{{ states(''sensor.next_trigger'') }}'
        - conditions:
            - condition: trigger
              id: time
          sequence:
            - service: notify.huawei_5g_router
              data:
                target:
                  - '06xxxxxxxx'
                message: '{{ now() }}'
  mode: single

Ce n’est peut-être pas la meilleure des solutions, mais cela fonctionne juste avec un script et HA. :slightly_smiling_face:

Merci @titi de votre réponse. Je le savais pas que je pouvais récupérer des données via un script c’est top merci.

Je vais essayer de répondre à vos questions pour répondre mieux à mon besoin. pour information le format de mon fichier CSV est le suivant :

date;hour1;hour2;hour3;hour4;hour5
12_02;05:33;13:13;16:16;18:30;20:00
13_02;06:33;14:13;17:16;19:30;21:00
14_02;07:33;15:13;18:16;20:30;22:00

Mon csv contient les données d’une année complète et je peux le déposer chaque an dans le serveur HA pas de soucis sur ce point.

Pour le format je peux le changer en json si c’est plus simple d l’intégrer dans HA

Mon but est d’avoir 05 sensor dans HA (hour1, hour2, hour3, hour4, hour5) sous format hh:mm exemple 18:30, et après je peux déclencher des notifications si l’heure system est égale à l’un des sonsors (hour1, hour2, hour3, hour4, hour5).

Merci de votre retour.