Migration du service de notification file

Bonjour,

Une fois de plus, je vais faire appel au puis de savoir sans fond des membres de ce forum :-).
Depuis la dernière mise à jour, j’ai le message :

Migrer l'ancien service de notification File pour le domaine `file`
Le(s) service(s) notify File sont migrés. Une nouvelle entité notify est désormais disponible pour remplacer chaque service notify existant.

Mettez à jour toutes les automatisations pour utiliser le nouveau service notify.send_message exposé avec cette nouvelle entité. Une fois cela fait, résolvez ce problème et redémarrez Home Assistant.

Ainsi que "La configuration YAML pour File sera bientôt supprimée.
Je comprends qu’il faut que je mette à jour mes « notify ». Je m’en sers en particulier, suivant le super exemple de @roumano , pour le suivi de la consommation de mes appareils, en envoyant ces éléments dans un fichier csv.

Je vois bien une intégration « File » qui me semble être nouvelle. Néanmois, elle est en échec car a priori elle n’arrive pas à accéder au fichier en question:
image

En creusant, il faudrait certainement que je donne accès à ce fichier (même si ça fonctionnait très bien jusqu’à aujourd’hui). Je précise que ce fichier est sur mon NAS, dans le folder « /volume1/docker/homeassistant/Consommations.csv »
Comment donner accès à ce fichier? Dois-je rajouter: « allowlist_external_dirs » dans mon configuration.yaml? Dans ce cas, avec quelle syntaxe et quel url?

J’avoue que c’est encore une mise à jour qui « casse » quelque chose qui fonctionnait très bien par le passé. Ca devient pénible.
Merci d’avance pour votre aide

Hello,

Je connais pas les notifications File mais y’a la doc:

ça indique:

Make sure that the file you want to use is added to the allowlist_external_dirs.
The file will be created if it doesn’t exist, but make sure the folder exists.
Add the path of your configuration folder (for example, /config/file_notifications) to save the file there.

Donc il créer dans /config un dossier file_notifications (ou le nom que tu veux) et ensuite ajouter dans ton configuration.yaml:

allowlist_external_dirs:
  - "/config/file_notifications"

Et mettre ton fichier Consommations.csv dans ce dossier.

Je ne sais pas si c’est recommendé de mettre le « /config/ » directement, il vaut mieux un sous dossier.

Il faut toujours lire les ‹ breaking changes › avant de faire une update:

Le but c’est d’améliorer et sécuriser Home Assistant, donc parfois ça veut aussi dire devoir modifier sa configuration :slight_smile: C’est ennuyant mais au prix où on paye Home Assistant je pense qu’on peut se permettre d’accepter ça :wink:

1 « J'aime »

Merci @Cloom d’essayer de m’aider.
J’ai une erreur liée à allowlist_external_dirs.
Voici l’extrait de mon configuration YAML:

tts:
  - platform: google_translate

allowlist_external_dirs:
  - "/config/notification_files/"

et voici l’erreur dans les journaux:

Enregistreur: homeassistant.setup
Source: setup.py:269
S'est produit pour la première fois: 13:51:12 (1 occurrences)
Dernier enregistrement: 13:51:12

Setup failed for 'allowlist_external_dirs': Integration not found.

Je précise que j’ai bien créé ce folder, que

Je me réponds à moi même car ça peut servir à d’autres:

  • j’ai maintenatg réussi à intégrer le allowlist_external_dirs. J’avais oublié de mettre le homeassistant devant.
    Du coup, la bonne syntaxe dans le configuration YAML est la suivante:
homeassistant:
  allowlist_external_dirs:
    - "/config/notification_files"

1 « J'aime »

Reste plus qu’à trouver comment changer mes notifications dans mes automatisations poru pointer vers le nouveau service.
Le message de HA est le suivant:

Migrer l'ancien service de notification File pour le domaine `file`
Le(s) service(s) notify File sont migrés. Une nouvelle entité notify est désormais disponible pour remplacer chaque service notify existant.

Mettez à jour toutes les automatisations pour utiliser le nouveau service notify.send_message exposé avec cette nouvelle entité. Une fois cela fait, résolvez ce problème et redémarrez Home Assistant.

Je n’ai pas trouvé la doc correspondant ni d’exemple.
Dans mes automatisations, j’ai ça aujourd’hui:

    service: notify.consommations
    data:
      message: '{{ now().strftime("%d/%m/%Y") }} ; Lave linge ; {{ ((state_attr(''automation.lave_linge_start'',''last_triggered''))
        | as_local).strftime("%Hh%M") }} - {{ now().strftime("%Hh%M") }} ;  {{ (((state_attr(''automation.lave_linge_fin_2'',''last_triggered''))
        - (state_attr(''automation.lave_linge_start'',''last_triggered''))).seconds
        / 3600 )| int }}h{{((((state_attr(''automation.lave_linge_fin_2'',''last_triggered''))
        - (state_attr(''automation.lave_linge_start'',''last_triggered''))).seconds
        % 3600 )/60 )| round }}m ; {{ states(''sensor.lave_linge_power_cycle_2'')
        }}kWh ; {{ ((states(''sensor.lave_linge_power_cycle_2'') | float(default=0)
        * float(states(''input_number.prix_du_kwh_d_electricite''))))  | round(2)
        }} EUR'

Pas clair ce que je dois mettre exactement poru remplacer la ligne service: notify.consommations.

D’après Notify.send_message in 2024.6 - #8 by Mariusthvdb - Configuration - Home Assistant Community ça devrait être:

  service: notify.send_message
    target:
      entity_id: notify.consommations
    data:
      message: '{{ now().strftime("%d/%m/%Y") }} ; Lave linge ; {{ ((state_attr(''automation.lave_linge_start'',''last_triggered''))
        | as_local).strftime("%Hh%M") }} - {{ now().strftime("%Hh%M") }} ;  {{ (((state_attr(''automation.lave_linge_fin_2'',''last_triggered''))
        - (state_attr(''automation.lave_linge_start'',''last_triggered''))).seconds
        / 3600 )| int }}h{{((((state_attr(''automation.lave_linge_fin_2'',''last_triggered''))
        - (state_attr(''automation.lave_linge_start'',''last_triggered''))).seconds
        % 3600 )/60 )| round }}m ; {{ states(''sensor.lave_linge_power_cycle_2'')
        }}kWh ; {{ ((states(''sensor.lave_linge_power_cycle_2'') | float(default=0)
        * float(states(''input_number.prix_du_kwh_d_electricite''))))  | round(2)
        }} EUR'

J’ai fait pareil ( mais pas encore tester ) :

--- a/automations.yaml
+++ b/automations.yaml

-  - service: notify.lave_vaisselle
+  - service: notify.send_message
+    target:
+      entity_id: notify.lave_vaisselle

et en y reflechissent, ca a du sens de faire comme ca, …

Merci @Cloom , je vais tester et reviendrai confirmer.
Ca rale pas mal sur le thread du forum anglophone que tu as partagé. Il est vrai que c’est assez mal foutu et très mal documenté.

  • L’intégration File crée une entité. Il faut aller éditer cette entité une fois créée pour lui donner un nom.
  • Une fois l’entité créée, il n’y a pas moyen de modifier. Il faut supprimer et re-créer
  • la doc est particulièrement légère et ne comporte aucun exemple pour avoir une idée de la syntaxe.
    Heureusement que le forum est là!

Bonjour,
J’avais une erreur d’automatisation ce matin après un cycle de lave-vaisselle.
Je me suis rendu compte que je n’avais pas redémarré, et qu’il faisait une erreur sur l’appel de l’ancien service notify.
Néanmoins, avec le nouveau code dans l’automatisation, HA fait une erreur et refuse de redémarrer.

Ce code n’est pas accepté:

  - continue_on_error: true
    service: notify.send_message
      target:
        entity_id: notify.consommations
      data:
        message: '{{ now().strftime("%d/%m/%Y") }} ; Lave-vaisselle ; {{ ((state_attr(''automation.lave_vaisselle_start'',''last_triggered''))
          | as_local).strftime("%Hh%M") }} - {{ now().strftime("%Hh%M") }} ;  {{ (((state_attr(''automation.lave_vaisselle_fin_notification'',''last_triggered''))
          - (state_attr(''automation.lave_vaisselle_start'',''last_triggered''))).seconds
          / 3600 )| int }}h{{((((state_attr(''automation.lave_vaisselle_fin_notification'',''last_triggered''))
          - (state_attr(''automation.lave_vaisselle_start'',''last_triggered''))).seconds
          % 3600 )/60 )| round }}min ; {{ states(''sensor.lave_vaisselle_power_cycle_bis'')
          }}kWh ; {{ ((states(''sensor.lave_vaisselle_power_cycle_bis'') | float(default=0)
          *  float(states(''input_number.prix_du_kwh_d_electricite''))))  | round(2)
          }} EUR'

@roumano , si ça fonctionne chez toi, peux-tu partager la syntaxe de ton code STP?
[Edit] le code partagé ici ne fonctionne pas car il y a une erreur d’indentation. Voir plus bas dans les discussions pour le code qui fonctionne :slight_smile:

Quelle est l’erreur? Tu peux voir dans les logs.

Tu dois aussi pouvoir tester via les outils de développement, appeler ton service pour être sur de ta syntaxe.

Choisis ton entity et essaye avec juste « test » et ensuite avec ton template:

J’ai migre ma configuration mais cela ne fonctionne pas mais sans erreur :

J’ai ce code :

  - service: notify.send_message
    target:
      entity_id: notify.lave_vaisselle
    data:
      message: >
        ...
       ....

Dans l’historitque de l’automatisation, je vois pas de result :

Exécuté : 26 juin 2024 à 12:48:18
Résultat :

params:
  domain: notify
  service: send_message
  service_data:
    message: 2024-06-26 12:48:18;26/06/2024;10h11;12h34;2h23m;1041;0.17€;auto
    entity_id:
      - notify.lave_vaisselle
  target:
    entity_id:
      - notify.lave_vaisselle
running_script: false

Je comprend pas pourquoi ca fonctionne pas l’ecriture dans le fichier , …

Bonjour,
Alors de mon côté, ça a fonctionné, avec une inscription dans un fichier. Néanmoins, j’avais un fichier csv, et j’ai maintenant un fichier txt, moins pratique pour l’exploitation.
J’ai essayé une deuxième option et j’attends la fin d’un cycle pour voir si ça fonctionne mieux.
@roumano, ci-dessous le code (mon erreur précedente était due à un problème d’indentation):

  - continue_on_error: true
    service: notify.send_message
    target:
      entity_id: notify.consommations
    data:
      message: '{{ now().strftime("%d/%m/%Y") }} ; Lave-vaisselle ; {{ ((state_attr(''automation.lave_vaisselle_start'',''last_triggered''))
        | as_local).strftime("%Hh%M") }} - {{ now().strftime("%Hh%M") }} ;  {{ (((state_attr(''automation.lave_vaisselle_fin_notification'',''last_triggered''))
        - (state_attr(''automation.lave_vaisselle_start'',''last_triggered''))).seconds
        / 3600 )| int }}h{{((((state_attr(''automation.lave_vaisselle_fin_notification'',''last_triggered''))
        - (state_attr(''automation.lave_vaisselle_start'',''last_triggered''))).seconds
        % 3600 )/60 )| round }}min ; {{ states(''sensor.lave_vaisselle_power_cycle_bis'')
        }}kWh ; {{ ((states(''sensor.lave_vaisselle_power_cycle_bis'') | float(default=0)
        *  float(states(''input_number.prix_du_kwh_d_electricite''))))  | round(2)
        }} EUR'

On intégration « File »:


Et le détail de l’entité:

J’ai trouver le souci, si le fichier est en dehors de home assistant, il est obligatoire de mettre dans le repertoire dans allowlist_external_dirs: , …

En effet, je l’ai fait.

homeassistant:
  allowlist_external_dirs:
    - "/config/notification_files"

Un nouveau cycle vient de se terminer, ce qui me permet de confirmer que cela fonctionne.
J’ai créé une nouvelle intégration « File » en donnant le chemin : « /config/notification_files/consommations.csv ».
Le fichier que j’obtiens est bien au bon format (le fichier est créé dans le répertoire s’il n’éxiste pas lors du premier notify.

1 « J'aime »

Bonjour à la communauté,

J’utilise HA depuis quelques mois seulement uniquement pour faire de l’acquisition d’index de compteurs d’énergie et de quelques températures via des modules ESP32. Pour l’enregistrement des données je ne voulais pas me lancer dans des solutions telles MariaDB ou Grafana. J’ai préféré de simples enregistrements dans des fichiers .csv.

Je me suis beaucoup inspiré de https://youtu.be/VWPU95ISnO0 pour l’écriture de mes fichiers .yaml. Tout ceci a bien fonctionné jusqu’à la mise à jour 2024.4.8 de HA.

Je crois avoir beaucoup lu et recherché comment corriger mes notify.notifier en notify.send_message. Mais la documentation HA ne m’a pas beaucoup aidé et je n’ai pas trouvé de solution simple en parcourant les forums. Ce forum est pourtant celui qui m’a permis le plus de progrès. Merci à vous tous, contributeurs. Mais malheureusement je n’ai pas su aboutir…

Ce matin j’ai donc décidé de revenir à la version 2024.4.4 de HA et à mes anciens scripts .yaml qui fonctionnent parfaitement. Je ferai évoluer quand j’y verrai plus clair et que ce sera nécessaire

Le nouveau code ressemble a ça :

  - target:
      entity_id: notify.lave_vaisselle
    data:
      message: '{%- set time = ((state_attr(''automation.lave_vaisselle_fin'',''last_triggered''))
        - (state_attr(''automation.lave_vaisselle_start'',''last_triggered''))).seconds
        -%} {%- set minutes = ((time % 3600) / 60) | round | int -%} {%- set hours
        = ((time % 86400) / 3600) | int -%}{# si > 5h30 : Souci#}{%- if time > 19800
        -%} blablabla
    action: notify.send_message

Bonjour et merci de votre réponse,
Je pense avoir bien suivi les exemples et conseils présentés ci-avant. Même si je n’ai pas conservé trace de toutes mes tentatives, mon dernier script devait être qq chose comme ceci
{A04A04A3-E48F-4909-B610-D7015D168E9C}
et au derniers essais HA me renvoyait cette réponse :
{05AF25A3-CF3E-404B-8896-BE4D73824E6B}

C’est pourquoi j’ai baissé les bras en attendant de mieux comprendre ce que je fais…

Le contenu de la ligne 6 devrait etre sur la ligne 5 , …

Et c’est soit

message: '{{ ... }}'

soit

 message: >
    {{ ... }}

mais pas un fix des 2 ,…

Je te conseil de :

  • d’abord de tester ton message: via outil de dev / modeles
  • le tester sur outil de dev / actions
  • utiliser ce code dans l’automatisation mais via edition via l’interface graphique, ca evite des erreurs d’intentations et autre type de typo