Récupération de Mails, SMS, WhatsApp, Appels, etc etc... contournement par notifications

Mon problème

Bonjour,
Aujourd’hui, grâce à l’application mobile home assistant, je me suis rendu compte que certaines informations pouvaient être extraites d’un téléphone Android (pas sur iPhone apparemment).
Dans mon exemple, j’utilise le sensor : sensor.telephone_jh_active_notification_count
En allant chercher les attributs d’état, voici la liste qui sort :

Attributs d'état

`

android.appInfo_io.homeassistant.companion.android_-561227077: ApplicationInfo{240984e io.homeassistant.companion.android}
android.appInfo_tunein.player_2131428862: ApplicationInfo{e3ccd6f tunein.player}
android.bigText_io.homeassistant.companion.android_-561227077: *mon adresse en clair*, France (~12.407m)
android.compactActions_tunein.player_2131428862:
  - 2
  - 3
android.infoText_io.homeassistant.companion.android_-561227077: "null"
android.infoText_tunein.player_2131428862: "null"
android.largeIcon_io.homeassistant.companion.android_-561227077: "null"
android.largeIcon_tunein.player_2131428862: Icon(typ=BITMAP size=168x168)
android.mediaSession_tunein.player_2131428862: android.media.session.MediaSession$Token@4ada0bd
android.progressIndeterminate_io.homeassistant.companion.android_-561227077: false
android.progressIndeterminate_tunein.player_2131428862: false
android.progressMax_io.homeassistant.companion.android_-561227077: 0
android.progressMax_tunein.player_2131428862: 0
android.progress_io.homeassistant.companion.android_-561227077: 0
android.progress_tunein.player_2131428862: 0
android.reduced.images_io.homeassistant.companion.android_-561227077: true
android.reduced.images_tunein.player_2131428862: true
android.remoteInputHistory_io.homeassistant.companion.android_-561227077: "null"
android.remoteInputHistory_tunein.player_2131428862: "null"
android.showChronometer_io.homeassistant.companion.android_-561227077: false
android.showChronometer_tunein.player_2131428862: false
android.showWhen_io.homeassistant.companion.android_-561227077: true
android.showWhen_tunein.player_2131428862: false
android.subText_io.homeassistant.companion.android_-561227077: "null"
android.subText_tunein.player_2131428862: "null"
android.template_io.homeassistant.companion.android_-561227077: android.app.Notification$BigTextStyle
android.template_tunein.player_2131428862: android.app.Notification$MediaStyle
android.text_io.homeassistant.companion.android_-561227077: *mon adresse en clair*, France (~12.407m)
android.text_tunein.player_2131428862: Le Son Pop-Rock
android.title_io.homeassistant.companion.android_-561227077: Mode haute précision (GPS) activé
android.title_tunein.player_2131428862: RTL2
androidx.core.app.extra.COMPAT_TEMPLATE_io.homeassistant.companion.android_-561227077: androidx.core.app.NotificationCompat$BigTextStyle
io.homeassistant.companion.android_-561227077_category: service
io.homeassistant.companion.android_-561227077_channel_id: High accuracy location
io.homeassistant.companion.android_-561227077_group_id: "null"
io.homeassistant.companion.android_-561227077_is_clearable: false
io.homeassistant.companion.android_-561227077_is_ongoing: true
io.homeassistant.companion.android_-561227077_post_time: 1702297827957
tunein.player_2131428862_category: transport
tunein.player_2131428862_channel_id: tunein.player
tunein.player_2131428862_group_id: "null"
tunein.player_2131428862_is_clearable: true
tunein.player_2131428862_is_ongoing: false
tunein.player_2131428862_post_time: 1702279809784
unit_of_measurement: notifications
icon: mdi:bell-ring
friendly_name: Téléphone JH Active notification count
android.appInfo_com.google.android.apps.messaging_2: ApplicationInfo{d118677 com.google.android.apps.messaging}
android.conversationUnreadMessageCount_com.google.android.apps.messaging_2: 0
android.hiddenConversationTitle_com.google.android.apps.messaging_2: "null"
android.infoText_com.google.android.apps.messaging_2: "null"
android.isGroupConversation_com.google.android.apps.messaging_2: false
android.largeIcon_com.google.android.apps.messaging_2: "null"
android.messages_com.google.android.apps.messaging_2:
  - "{extras={}, text=test 33, time=1702297815593}"
  - >-
    {extras={}, sender_person=android.app.Person@ff2ff0fc, sender=Julien
    H., text=test 33, time=1702297814800}
android.messagingStyleUser_com.google.android.apps.messaging_2: >-
  {key=null, uri=null, icon={string1=null, obj=android.graphics.Bitmap@3dd34d,
  int1=0, int2=0, type=1}, name=Vous, isBot=false, isImportant=false}
android.messagingUser_com.google.android.apps.messaging_2: android.app.Person@4cdcc60c
android.people.list_com.google.android.apps.messaging_2:
  - android.app.Person@59aa158e
android.progressIndeterminate_com.google.android.apps.messaging_2: false
android.progressMax_com.google.android.apps.messaging_2: 0
android.progress_com.google.android.apps.messaging_2: 0
android.reduced.images_com.google.android.apps.messaging_2: true
android.remoteInputHistory_com.google.android.apps.messaging_2: "null"
android.selfDisplayName_com.google.android.apps.messaging_2: Vous
android.showChronometer_com.google.android.apps.messaging_2: false
android.showWhen_com.google.android.apps.messaging_2: true
android.subText_com.google.android.apps.messaging_2: "null"
android.support.v4.app.extra.COMPAT_TEMPLATE_com.google.android.apps.messaging_2: androidx.core.app.NotificationCompat$MessagingStyle
android.template_com.google.android.apps.messaging_2: android.app.Notification$MessagingStyle
android.text_com.google.android.apps.messaging_2: test 33
android.title_com.google.android.apps.messaging_2: Julien H.
android.wearable.EXTENSIONS_com.google.android.apps.messaging_2: >-
  {actions=[android.app.Notification$Action@f0e1313,
  android.app.Notification$Action@6801950,
  android.app.Notification$Action@215749]}
com.google.android.apps.messaging_2_category: msg
com.google.android.apps.messaging_2_channel_id: bugle_default_channel
com.google.android.apps.messaging_2_group_id: com.google.android.apps.messaging:incoming_message_group_key
com.google.android.apps.messaging_2_is_clearable: true
com.google.android.apps.messaging_2_is_ongoing: false
com.google.android.apps.messaging_2_post_time: 1702297816015
extra_im_notification_conversation_id_com.google.android.apps.messaging_2: "130"
extra_im_notification_earliest_timestamp_com.google.android.apps.messaging_2: 1702297814800
extra_im_notification_latest_timestamp_com.google.android.apps.messaging_2: 1702297814800
extra_im_notification_message_ids_com.google.android.apps.messaging_2:
  - "20640"
  - "20641"

`

On peut remarquer que toutes mes notifications ainsi que les détails s’affichent ici.

En partant de ce constat, j’ai isolé tout ce qui contient « messaging_2 »

Partie notification SMS par "messaging_2"
android.appInfo_com.google.android.apps.messaging_2: ApplicationInfo{d118677 com.google.android.apps.messaging}
android.conversationUnreadMessageCount_com.google.android.apps.messaging_2: 0
android.hiddenConversationTitle_com.google.android.apps.messaging_2: "null"
android.infoText_com.google.android.apps.messaging_2: "null"
android.isGroupConversation_com.google.android.apps.messaging_2: false
android.largeIcon_com.google.android.apps.messaging_2: "null"
android.messages_com.google.android.apps.messaging_2:
  - "{extras={}, text=test 33, time=1702297815593}"
  - >-
    {extras={}, sender_person=android.app.Person@ff2ff0fc, sender=Julien
    H., text=test 33, time=1702297814800}
android.messagingStyleUser_com.google.android.apps.messaging_2: >-
  {key=null, uri=null, icon={string1=null, obj=android.graphics.Bitmap@3dd34d,
  int1=0, int2=0, type=1}, name=Vous, isBot=false, isImportant=false}
android.messagingUser_com.google.android.apps.messaging_2: android.app.Person@4cdcc60c
android.people.list_com.google.android.apps.messaging_2:
  - android.app.Person@59aa158e
android.progressIndeterminate_com.google.android.apps.messaging_2: false
android.progressMax_com.google.android.apps.messaging_2: 0
android.progress_com.google.android.apps.messaging_2: 0
android.reduced.images_com.google.android.apps.messaging_2: true
android.remoteInputHistory_com.google.android.apps.messaging_2: "null"
android.selfDisplayName_com.google.android.apps.messaging_2: Vous
android.showChronometer_com.google.android.apps.messaging_2: false
android.showWhen_com.google.android.apps.messaging_2: true
android.subText_com.google.android.apps.messaging_2: "null"
android.support.v4.app.extra.COMPAT_TEMPLATE_com.google.android.apps.messaging_2: androidx.core.app.NotificationCompat$MessagingStyle
android.template_com.google.android.apps.messaging_2: android.app.Notification$MessagingStyle
android.text_com.google.android.apps.messaging_2: test 33
android.title_com.google.android.apps.messaging_2: Julien H.
android.wearable.EXTENSIONS_com.google.android.apps.messaging_2: >-
  {actions=[android.app.Notification$Action@f0e1313,
  android.app.Notification$Action@6801950,
  android.app.Notification$Action@215749]}
com.google.android.apps.messaging_2_category: msg
com.google.android.apps.messaging_2_channel_id: bugle_default_channel
com.google.android.apps.messaging_2_group_id: com.google.android.apps.messaging:incoming_message_group_key
com.google.android.apps.messaging_2_is_clearable: true
com.google.android.apps.messaging_2_is_ongoing: false
com.google.android.apps.messaging_2_post_time: 1702297816015
extra_im_notification_conversation_id_com.google.android.apps.messaging_2: "130"
extra_im_notification_earliest_timestamp_com.google.android.apps.messaging_2: 1702297814800
extra_im_notification_latest_timestamp_com.google.android.apps.messaging_2: 1702297814800
extra_im_notification_message_ids_com.google.android.apps.messaging_2:
  - "20640"
  - "20641"`

On peut se rendre que nous avons tout un tas d’informations :

Résumé
  • Expéditeur (Sender): Julien H.
  • Message: test 33
  • Date et heure: Le timestamp associé à la notification est 1702297814800
  • Style de messagerie (Messaging Style): Il s’agit d’une notification de style de messagerie, utilisant la classe android.app.Notification.MessagingStyle, ce qui indique une conversation de type messagerie.
  • Destinataire : Le destinataire de la notification est identifié comme « Vous ».
  • Groupe de personnes (People): Il y a une liste de personnes associées à la conversation, et dans ce cas, une seule personne est répertoriée : Julien H. Ce qui est logique, puisque je me suis envoyé un message à moi-même et je n’avais aucun autre sms dans mes notifications.
  • Canal de notification (Notification Channel): Le canal de notification est défini comme « bugle_default_channel ».
  • ID de groupe de conversation (Conversation Group ID): L’ID du groupe de conversation est « com.google.android.apps.messaging:incoming_message_group_key ».
  • ID de conversation (Conversation ID): L’ID de la conversation est « 130 ».
  • ID de message (Message IDs): Il y a deux ID de message associés à cette notification : « 20640 » et « 20641 ».
  • Réduction des images (Reduced Images): Les images réduites sont activées pour cette notification.
  • D’autres détails (Wearable Extensions, Actions, etc.) : Il y a des extensions pour les montres connectées, des actions spécifiques, etc.

Pour commencer par faire simple, j’ai essayé d’extraire les informations qui m’intéressent afin de les placer dans une automatisation qui m’informe par telegram lors de l’affichage d’une notification sur mon téléphone concernant un SMS entrant.

J’ai commencé par me faire un script :

Script
sms_jh_notification_script:
  sequence:
    - service: notify.telegram_maison
      data_template:
        message: >
          Julien vient de recevoir un SMS (script)

          De : {{ state_attr('sensor.telephone_jh_active_notification_count', 'android.title_com.google.android.apps.messaging_2')}}

          Le : {{ (state_attr('sensor.telephone_jh_active_notification_count', 'com.google.android.apps.messaging_2_post_time') / 1000) | timestamp_custom('%d/%m/%Y à %H:%M:%S') }}

          Message : {{ state_attr('sensor.telephone_jh_active_notification_count', 'android.text_com.google.android.apps.messaging_2') }}

Puis une automatisation :

Automatisation
alias: Test SMS JH ++messages V2
description: Notification SMS JH
trigger:
  - platform: state
    entity_id: sensor.telephone_jh_active_notification_count
condition:
  - condition: template
    value_template: >
      {{

      trigger.from_state.attributes['android.messages_com.google.android.apps.messaging_2']

      !=

      trigger.to_state.attributes['android.messages_com.google.android.apps.messaging_2']

      }}
action:
  - service: script.turn_on
    target:
      entity_id: script.sms_jh_notification_script
    data: {}

`

Le résultat sur Telegram :


On voit que la notif est simple, mais que toutes les informations sont bien présentes.

Mais cette partie là n’est en fait que le début des problèmes.
Rappelez vous que ces informations viennent seulement de l’affichage des notification. Et le soucis, est que si je n’efface pas la notification de mon téléphone, je reçois la notif telegram en boucle.
D’où le

condition:
  - condition: template
    value_template: >
      {{

      trigger.from_state.attributes['android.messages_com.google.android.apps.messaging_2']

      !=

      trigger.to_state.attributes['android.messages_com.google.android.apps.messaging_2']

      }}

recommandé par chat GPT, mais qui évidement, ne fonctionne pas.

C’est là que je viens vous demander de l’aide.
Mes compétence sont trop limitées pour pouvoir étudier et essayer des façons de faire différentes.

L’avantage, c’est qu’en partant du principe que l’on peut contourner les notifications, on peut afficher sur nos systèmes non pas seulement les SMS, mais également, mails, WhatsApp, Snapchat, appel reçu, manqué, etc, etc…

Merci à vous de m’avoir lu.

Ma configuration


System Information

version core-2023.12.1
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.6
os_name Linux
os_version 6.1.63-haos
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 5000
Installed Version 1.33.0
Stage running
Available Repositories 1364
Downloaded Repositories 71
AccuWeather
can_reach_server ok
remaining_requests 23
Home Assistant Cloud
logged_in true
subscription_expiration 30 décembre 2023 à 01:00
relayer_connected true
relayer_region eu-central-1
remote_enabled true
remote_connected true
alexa_enabled false
google_enabled true
remote_server eu-central-1-8.ui.nabu.casa
certificate_status ready
instance_id 48f989b30efa4b67b2d220f6d4737050
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 11.2
update_channel stable
supervisor_version supervisor-2023.11.6
agent_version 1.6.0
docker_version 24.0.7
disk_total 219.4 GB
disk_used 17.2 GB
healthy true
supported true
board generic-x86-64
supervisor_api ok
version_api ok
installed_addons File editor (5.7.0), Duck DNS (1.15.0), Samba share (12.2.0), Home Assistant Google Drive Backup (0.112.1), Spotify Connect (0.12.6), FTP (4.7.3), Mosquitto broker (6.4.0), Zigbee2MQTT (1.34.0-1), Xiaomi Mi Scale (0.3.6), Frigate (Full Access) (0.12.1), Studio Code Server (5.14.2)
Dashboards
dashboards 13
resources 45
views 85
mode storage
Recorder
oldest_recorder_run 4 décembre 2023 à 03:12
current_recorder_run 10 décembre 2023 à 23:44
estimated_db_size 780.84 MiB
database_engine sqlite
database_version 3.41.2
Spotify
api_endpoint_reachable ok
Xiaomi Miot Auto
component_version 0.7.13
can_reach_server ok
can_reach_spec ok
logged_accounts 1
total_devices 14

Salut,

La solution c’est aussi la cause du problème, tant que la notification n’est pas effacée par l’utilisateur, il n’y a pas vraiment moyen d’éviter facilement la ‹ boucle ›.
Par ailleurs, je ne sais pas si c’est une bonne pratique de compiler toutes infos des utilisateurs.

Perso si c’est mon téléphone, je n’ai pas forcément envie d’afficher tout ça sur le Dashboard familial. Si ces notifs sont pour moi, j’ai pas besoin de les avoir en plus sur HA.
De plus, je ne suis pas certain que ma femme soit favorable à l’exposition des ses activités non plus.
As-tu un cas d’usage en tête de la récup des notif ?

1 « J'aime »

Merci pour ta réponse. Effectivement, j’ai bien peur que cette boucle de notification soit inévitable.

Mon cas d’usage par exemple est que j’ai une profession qui ne me permet pas d’avoir mon téléphone personnel avec moi, ce qui me vaut régulièrement de louper des informations parfois importantes. Je possède en revanche un téléphone professionnel sur lequel j’ai la possibilité d’installer quelques applications. Cela me permettrait donc en faite de simuler la présence de mon téléphone personnel, mais par l’intermédiaire de HA.

Concernant la « confidentialité », je suis d’accord avec toi. Ce n’est pas le genre de choses que l’on pense à exposer sur le Dashboard familial. Ma femme au pire des cas, ne dirait trop rien si c’était le cas, je n’en ai pas :sweat_smile:

Si tu écoutes les notifications sur ton smartphone perso et que tu les compiles et les envoies sur ton tel pro, ça ne devrait pas boucler non?

Tu n’es pas obligé de mettre ça sur un dashboard, tu peux te contenter d’une notification.

Et si tu mets ça sur un dashboard, il me semble que tu peux utiliser browser_mod pour identifier ton smartphone pro et ne rendre ces pages visibles que depuis ce device.

Maintenant ça signifie que tu es capable d’installer l’appli HA compagnon sur ton smartphone pro, et ça c’est pas forcément gagné…

En complément des infos de BBE, tu peux peut-être t’en sortir en faisant un input_text qui contient toutes les notifications…
Le contenu global ne change que quand une nouvelle notification est là (ou qu’une disparait) et tu peux te servir de ce changement d’état comme trigger.

Merci pour ton retour. Je ne suis pas sûr de comprendre ce que tu veux dire par là

Merci,
Je vais regarder les input_text. Je n’ai pas encore eu l’occasion de me servir de ça. Je vais voir ce que j’arrive à comprendre

https://www.home-assistant.io/integrations/input_text/

J’ai compris que tu as deux téléphones. Le problème que tu décrit (boucle) ne se produit que si tu écoutes les notifications et envoies une notification (avec le contenu de la notification affichée) sur le même téléphone, là ça boucle.
Puisque tu viens ajouter une nouvelle notif, qui va engendrer une notif, qui va engendrer une noti, qui…

Si tu écoutes les notif de ton tel perso et envoies une notif (avec le contenu des notif de ton tel perso) sur ton tel pro, il n’y a pas de raison que ça boucle, non? Car les notifs de ton tel perso n’auront pas changé… Ou alors j’ai compris de travers…

Alors en fait, pour être plus clair, j’ai effectivement 1 téléphone pro et 1 téléphone perso.
Je n’ai pas mon téléphone perso sur moi pendant que je travaille. Seulement le téléphone pro.
Je ne peux donc pas ouvrir mes notifications sur mon téléphone perso.
Pendant mes test, je me suis rendu compte que si j’ouvrais les notifications sur mon téléphone perso, effectivement, la « boucle » ne se produisait pas. Elle ne se produit que si la notification reste affichée sur le téléphone (perso)

En fait, non, puisque la notification arrive sur mon téléphone pro

Ok j’ai compris. C’est donc que même sans nouvelle notif sur ton perso, le trigger de ton automatisation continue de déclencher. C’est de ce coté qu’il faut creuser.

Essaie de changer le trigger ou les conditions pour qu’il ne déclenche que quand une nouvelle notif arrive.

C’est ça qui te pollue car ça déclenche « trop »:

ton code
alias: Test SMS JH ++messages V2
description: Notification SMS JH
trigger:
  - platform: state
    entity_id: sensor.telephone_jh_active_notification_count
condition:
  - condition: template
    value_template: >
      {{

      trigger.from_state.attributes['android.messages_com.google.android.apps.messaging_2']

      !=

      trigger.to_state.attributes['android.messages_com.google.android.apps.messaging_2']

      }}
action:
  - service: script.turn_on
    target:
      entity_id: script.sms_jh_notification_script
    data: {}

une recherche rapide me fait tomber sur ça pour ta condition:

alias: Test SMS JH ++messages V2
description: Notification SMS JH
trigger:
  - platform: state
    entity_id: sensor.telephone_jh_active_notification_count
condition: "{{ trigger.from_state.state | int < trigger.to_state.state | int }}"
action:
  - service: script.turn_on
    target:
      entity_id: script.sms_jh_notification_script
    data: {}

Avec ça tu ne devrait notifier que si le compteur du nombre de notification active augmente.

A tester…

Souvent une recherche sur le forum francophone puis anglophone est plus efficace que ChatGPT, du moins pour l’instant…

Oui, presque

Oui, presque.
Désolé de ne pas être plus clair.
En fait, sensor.telephone_jh_active_notification_count surveille l’ensemble des notifications affichées sur le téléphone. Moi, pour l’exemple initial, ce qui m’intéresse, c’est l’attribut d’état messaging_2qui se trouve mélangé à tous les autres attributs d’état issus de sensor.telephone_jh_active_notification_count.
L’idéal serait donc de pouvoir isoler messaging_2 et de recevoir seulement une notification telegram que lorsque celui-ci est modifié.
Or, avec mon code actuel : entity_id: sensor.telephone_jh_active_notification_count ce qui est pris en compte, c’est l’acualisation de sensor.telephone_jh_active_notification_count de manière générale, mais seulement pour l’attribut d’état messaging_2

une recherche rapide me fait tomber sur ça pour ta condition:

alias: Test SMS JH ++messages V2
description: Notification SMS JH
trigger:
  - platform: state
    entity_id: sensor.telephone_jh_active_notification_count
condition: "{{ trigger.from_state.state | int < trigger.to_state.state | int }}"
action:
  - service: script.turn_on
    target:
      entity_id: script.sms_jh_notification_script
    data: {}

Avec ça tu ne devrait notifier que si le compteur du nombre de notification active augmente.

Merci pour ton code que j’ai testé. Malheureusement, l’effet boucle continue, puisque je ne reçois pas plus de sms, mais comme d’autres notifications s’affichent (mails, apps, etc etc), la notif telegram est envoyée.

Je suis entièrement d’accord avec, malheureusement, je n’ai pas les connaissances nécessaires pour faire des recherches pertinentes et surtout voir si les réponses correspondent réellement à ma demande

Essaie la meme chose avec cet attibut a la place du compteur de notification:

android.conversationUnreadMessageCount_com.google.android.apps.messaging_2

Ps désolé pour la mise en forme, je suis passé sur le téléphone…

Pas de souci, c’est déjà gentil de prendre le temps de m’aider.

Comme ceci ?

alias: Test SMS JH ++messages V2
description: Notification SMS JH
trigger:
  - platform: state
    entity_id: sensor.telephone_jh_active_notification_count
    to: null
condition:
  - condition: template
    value_template: >-
      {{ states('sensor.telephone_jh_active_notification_count') !=
      states('android.conversationUnreadMessageCount_com.google.android.apps.messaging_2')
      }}
action:
  - service: script.turn_on
    target:
      entity_id: script.sms_jh_notification_script
    data: {}

Non plutôt en testant si le compteur a augmenté.

Avec cette formule trigger.from_state.attributes[‹ android.messages_com.google.android.apps.messaging_2 ›]

Mais le bon attribut.

J’espère ne pas m’être trompé :

alias: Test SMS JH ++messages V3
description: Notification SMS JH
trigger:
  - platform: state
    entity_id: sensor.telephone_jh_active_notification_count
    to: null
condition:
  - condition: template
    value_template: "{{ trigger.from_state.state ['android.conversationUnreadMessageCount_com.google.android.apps.messaging_2'] }}"
action:
  - service: script.turn_on
    target:
      entity_id: script.sms_jh_notification_script
    data: {}

Si j’ai mon bon code,
Je viens de me rendre compte que peu importe l’activité, android.conversationUnreadMessageCount_com.google.android.apps.messaging_2 semble rester à 0

Plutôt comme ça, mais ça ne marche que si android.conversationUnreadMessageCount_com.google.android.apps.messaging_2 indique le nombre de messages non lus…

alias: Test SMS JH ++messages V3
description: Notification SMS JH
trigger:
  - platform: state
    entity_id: sensor.telephone_jh_active_notification_count
    to: null
condition:
  - condition: template
    value_template: "{{ trigger.from_state.state['android.conversationUnreadMessageCount_com.google.android.apps.messaging_2']  <  trigger.to_state.state['android.conversationUnreadMessageCount_com.google.android.apps.messaging_2'] }}"
action:
  - service: script.turn_on
    target:
      entity_id: script.sms_jh_notification_script
    data: {}

ou alors

alias: Test SMS JH ++messages V3
description: Notification SMS JH
trigger:
  - platform: state
    entity_id: sensor.telephone_jh_active_notification_count
    to: null
condition:
  - condition: template
    value_template: "{{ trigger.from_state.state['android.conversationUnreadMessageCount_com.google.android.apps.messaging_2'] | int  <  trigger.to_state.state['android.conversationUnreadMessageCount_com.google.android.apps.messaging_2'] | int }}"
action:
  - service: script.turn_on
    target:
      entity_id: script.sms_jh_notification_script
    data: {}

Merci.
Dans ce cas, ça ne fonctionnera pas, je confirme que android.conversationUnreadMessageCount_com.google.android.apps.messaging_2 reste bien à 0

Tu devrais alors essayer de tester ces attributs là pour voir comment ils se comportent:

Et sinon regarder bien en détail tous les attributs de sensor.telephone_jh_active_notification_count

L’idée c’est de trouver là dedans un attribut qui ne change que si tu reçoit un nouveau message, pour pouvoir le comparer avant / après trigger pour vérifier si le nouvel état de sensor.telephone_jh_active_notification_count nécessite de renvoyer la notification ou non.

Auquel cas tu pourras utiliser la syntaxe :

value_template: "{{ trigger.from_state.state['atribut'] | int  <  trigger.to_state.state['atribut'] | int }}"

si c’est un « compteur »
ou la syntaxe :

value_template: "{{ trigger.from_state.state['atribut']  !=  trigger.to_state.state['atribut'] | int }}"

si tu teste juste une différence.

Je vais creuser dans ce sens là. Je te remercie pour ton aide