Notification entitées indisponibles

Bonjour

J’aimerai être notifié quand des entités passe à l’état « unavailable ». Pas seulement pour quelques entités mais pour toutes entités de domaine « sensor » et « binary_sensor » pour une ou deux integrations en particulier MQTT/esphome.
Je vois pas trop comment faire dans ha de manière simple;

Pour l’instant je pense utililser l’API home-asssitant en faisant une requête de ce type:

http://localhost:8123/api/states

Et en manipulant le json fourni pour retrouver l’état des entités:

{
  "entity_id": "sensor.temperature_weatherino",
  "state": "unavailable",
  "attributes": {
    "unit_of_measurement": "°C",
    "device_class": "temperature",
    "friendly_name": "Température weatherino"
  },
  "last_changed": "2023-01-24T17:23:00.066669+00:00",
  "last_updated": "2023-01-24T17:23:00.066669+00:00",
  "context": {
    "id": "01GQJCVWB2599Q7PVKYHA18EES",
    "parent_id": null,
    "user_id": null
  }
}

en utilisant les clés « state » et « last_updated » pour déterminer si il faut notifier ou pas.

Quelqu’un s’est il déjà poser ce problème ?

Ma configuration

System Information

version core-2023.1.6
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.7
os_name Linux
os_version 5.15.80
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4916
Installed Version 1.28.4
Stage running
Available Repositories 1200
Downloaded Repositories 13
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 9.4
update_channel stable
supervisor_version supervisor-2023.01.1
agent_version 1.4.1
docker_version 20.10.19
disk_total 30.8 GB
disk_used 16.7 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.6.1), MariaDB (2.5.1), File editor (5.5.0), ESPHome (2022.12.8), Samba share (10.0.0), AppDaemon (0.11.0), phpMyAdmin (0.8.3), Uptime Kuma (0.5.2)
Dashboards
dashboards 6
resources 9
views 21
mode storage
Recorder
oldest_recorder_run 23 novembre 2022 à 19:19
current_recorder_run 21 janvier 2023 à 18:40
estimated_db_size 4444.47 MiB
database_engine mysql
database_version 10.6.8

Salut,

tu ne devrais pas avoir besoin de passer par l’Api pour ça.

Cet exemple de script te liste tous tes sensors qui sont unavailable depuis plus de 5min.
Pas forcément le plus compact, mais ça te permet de faire ce que tu veux dans la boucle.
Tu peux essayer dans les outils de dev>modèles

{% for my_sensor in states.sensor -%}
  {% if (is_state (my_sensor.entity_id, "unavailable")) and (my_sensor.last_changed < (now() - timedelta( minutes = 5))) %}
      {{ my_sensor.entity_id }}
  {%- endif %}
{%- endfor %}

T’as d’autres façons de faire pour diverses utilisations.
Un autre exemple, mais qui ne regarde pas la date:
{{ states.sensor | selectattr('state', 'in', ['unavailable']) | map(attribute='entity_id') | list | join('\n') }}

Nickel,

Merci, je en connaissais pas assez cette possibilité de scripter comme cela.

Bonjour,

Je ne maitrise pas l’utilisation des modèles lais où faut renseigner ce code pour qu’il fonctionne ?

Cordialement

Bonjour,

Pour mon utilisation, je l’ai mis dans un script qui est appelé régulièrement par une automatisation:

Salut,

Une expression comme ça peut être utilisée plus ou moins partout, a condition que son contenu est compatible.
Donc tu peux créer un nouveau sensor type template et y coller a peu près n’importe quoi comme valeur d’état… mais bon dans l’example ici on a une liste d’entités alors c’est pas forcément compatible avec un sensor si tu le déclare comme étant un chiffre.

Une autre utilisation de cette list peut être sur le dash board, dans une carte de type markdown.

Exemple de markdown:

Salut, j’ai aussi fait une carte markdown, mais qui tient compte du cas où il n’y a pas d’entité indispo, en visu ça donne ça:
image
Ou ça:
image
Et le code:

Code
type: markdown
content: >-
  {% set ue_list = states.sensor
    |selectattr('state', 'in', ['unavailable'])
    |map(attribute='entity_id')
    |list %}
  {% set ue_count = ue_list |length %}
  {% set ue_joined = ue_list |join('\n') %}
  {% if ue_count == 0 %}
    <ha-alert alert-type="success">Il n'y a aucune entité **indisponible**</ha-alert>
  {% else %}
    <ha-alert alert-type="warning">Liste des entités **indisponibles**:</ha-alert>
    {{ ue_joined }}
  {% endif %}

Au besoin les attributs suivants permettent de:
|reject('search','YOUR_STRING') = supprimer du modèle les résultats comprenant telle valeur
|rejectattr('entity_id', 'in', ['YOUR_ENTITY_ID_1','YOUR_ENTITY_ID_2','etc....']) = supprimer du modèle les entités définies