Appeler des variables, helpers et entrées dans des scripts / automations

Mon problème

Bonjour à tous,

Je suis actuellement en train de paramétrer certaines actions (notifications et shutdown HA) en fonction de l’état de mon onduleur.

J’ai bien réussi à envoyer une notification dès que mon UPS arrive à 25% de charge mais je voudrais maintenant rendre ce % paramétrable. J’ai donc créé une entrée paramétrable (« helper » en anglais) affichée sur mon dashboard dédié à mon UPS, j’ai ensuite simplement remplacé mon 25% dans mon automation précédente (qui était fonctionnelle).

Mon déclencheur est donc de la forme :

platform: state
entity_id: sensor.ups_battery_charge
to: input_number.notification_battery_load # entrée créée pour ce besoin

Mais cela ne semble pas fonctionner. Comment faire donc pour utiliser une entrée (helper)dans une automation ?

*Idéalement je souhaiterais également pouvoir y appliquer des opérations mathématiques (+1, (1+50%), etc.).

Est-il par ailleurs possible de définir ce helper en utilisant lui même un autre helper et/ou une entité (pour par exemple définir le min/max) ?

Merci d’avance pour votre aide.

Ma configuration


System Health

version core-2022.4.6
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.9
os_name Linux
os_version 5.10.103-v7l
arch armv7l
timezone Europe/Paris
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.6
update_channel stable
supervisor_version supervisor-2022.04.0
docker_version 20.10.9
disk_total 56.6 GB
disk_used 3.5 GB
healthy true
supported true
board rpi4
supervisor_api ok
version_api ok
installed_addons SSH & Web Terminal (10.1.1), Samba share (9.5.1), File editor (5.3.3)
Dashboards
dashboards 1
resources 0
views 2
mode storage
___

Très rapidement, par encore complétement réveillé et vu ton cas d’usage.

Je partirai soit sur un trigger template :

trigger:
  - platform: template
    value_template: "{% if states('sensor.ups_battery_charge') <= states('input_number.notification_battery_load') %}true{% endif %}"

Ou garder le trigger state et ajouter une condition :

trigger
  -platform: state
    entity_id: sensor.ups_battery_charge
condition: |
  {{ states('sensor.ups_battery_charge') <= states('input_number.notification_battery_load') }}

Voilà 2 pistes à creuser pour toi :wink:

salut

pour moi un trigger state donc avec un to: s’emploie avec des booléens ou des listes et devient vrai lorsque le booléen ou la liste devient ce qui est spécifié derrière le to:

Dans ton cas, je pense que ce serait plutôt un trigger sur numeric_state avec une condition above: ou under:
Voir l’exemple ici:

automation:
  trigger:
    - platform: numeric_state
      entity_id: sensor.outside_temperature
      # Other entity ids can be specified for above and/or below thresholds
      above: sensor.inside_temperature

Merci, je regarde ça dès que j’ai un peu de temps.

Merci @Herbs et @Haz,

La méthode numeric_state fonctionne. J’ai donc :

platform: numeric_state
entity_id: sensor.ups_battery_charge
below: input_number.home_assistant_shutdown_battery_load

Comment ajouter une opération mathématique du style « ajouter 10 ». Dois-je faire quelque chose du style de

platform: numeric_state
entity_id: sensor.ups_battery_charge
below: states(input_number.home_assistant_shutdown_battery_load)+10

?

J’utilise ensuite une carte pour paramétrer (avec un petit slider) la valeur de l’entrée input_number.home_assistant_shutdown_battery_load. Par défaut la valeur peut être sélectionnée entre 0 et 100 mais comment faire pour définir la borne minimum de cette entrée comme égale à la valeur d’une entité d’une autre carte (par exemple sensor.ups_low_battery_setpoint) ?

Merci d’avance pour votre aide,

C’est dans le lien que j’ai mis précédemment.
Il faut créer une valeur via un template et c’est cette variable qui sera comparée au seuil.

automation:
  trigger:
    - platform: numeric_state
      entity_id: climate.kitchen
      value_template: "{{ state.attributes.current_temperature - state.attributes.temperature_set_point }}"
      above: 3

sinon pourquoi ne pas essayer…
Par exemple (je ne sais pas si cela fonctionne, mais c’est donné pour les heures dans le lien):

platform: numeric_state
entity_id: sensor.ups_battery_charge
below: "{{ states('input_number.home_assistant_shutdown_battery_load') + 10 | int }}"

Bonjour @Haz et @Herbs,

Je reviens très très tardivement sur ce sujet (mea culpa) mais j’ai essayé de jouer avec les template.

Mon but est d’avoir, in fine, une carte avec un slider qui permet de choisir la valeur d’une entité entre « m » et 100%.
Avec « m » la valeur d’une autre entité.

Je fais donc des petits test simples pour voir si je peux créer une entrée définie comme la valeur de l’entité sensor.ups_low_battery_setpoint à laquelle je souhaite ensuite ajouter 10.

Fichier configuration.yaml

sensor: !include_dir_merge_list custom_sensors/sensors/

Explorateur windows

Fichier power_shutdown.yaml

# Battery level to trigger devices shutdown
- platform: template
  sensors:
  test_sensor:
    friendly_name: "objet de test"
    value_template: {{states('sensor.ups_low_battery_setpoint')|int + 10}}
    icon_template: mdi:home
    unit_of_measurement: "%"

Problème de configuration

Mon check de configuration indique ensuite :

Error loading /config/configuration.yaml: invalid key: "OrderedDict([("states('sensor.ups_low_battery_setpoint')|int + 10", None)])"
  in "/config/custom_sensors/sensors/virtual_sensors/power_shutdown.yaml", line 6, column 0

J’ai l’impression que le problème vient du fait que je fais un !include sur des listes ? Comment faire dans ce cas car, sauf erreur de ma part, je ne peux pas avoir deux sensor dans mon fichier configuration.yaml et j’ai pourtant besoin des appels de type !include_dir_merge_list qui fonctionnent bien pour mes autres sensors.

@Pulpy-Luke je me permets de te tagguer car tu m’as déjà aidé aujourd’hui sur d’autres sujets

Déjà je corrigerai l’indentation, comme ça et j’ajouterai des double quote sur la template :

# Battery level to trigger devices shutdown
- platform: template
  sensors:
    test_sensor:
      friendly_name: "objet de test"
      value_template: "{{states('sensor.ups_low_battery_setpoint')|int + 10}}"
      icon_template: mdi:home
      unit_of_measurement: "%"
1 « J'aime »

Merci @Herb,

J’avais changé moi même l’indentation par contre je ne savais pas qu’il fallait des doubles quote: bref grâce à toi je viens de passer le configuration check !

@Herbs,

Je souhaiterais maintenant que la valeur mon paramètre « objet de test » soit définie par l’utilisateur (avec un slider) entre states('sensor.ups_low_battery_setpoint') et 100%.

Une idée ?

Le premier truc qui vient à l’idée c’est un « input number » mais j’ai bien l’impression que l’on ne peut pas définir min/max via template.

La deuxième chose, « sensor.ups_low_battery_setpoint » vis à vis de nut c’est bien le niveau à partir duquel l’onduleur sera considéré en « lowbatt » et qui déclenchera « X » action ?

Je pense que la réponse à ma question est oui, et qu’au final on ne joue pas souvent avec ce paramètre.

Bref si ton onduleur passe en « lowbatt » à 20% de batterie, tu pourrais créer l’input number directement avec la valeur mini 20 et le max 100 ?

Et au final tu te sers de cet input que tu compares au niveau réel de batterie pour tes automations.

Ton hypothèse est la bonne.

En effet on touche peu à ce paramètre mais je voulais mettre à la main de l’utilisateur un paramètre variable de déclenchement du shutdown et/ou de notification tout en imposant le lowbatt en minimum : a ce niveau mon NAS s’éteind et le reverse proxy d’accès à Home Assistant avec.

Mais en effet ça ne semble pas faisable facilement …

Merci pour ton aide,