Lancer une commande après X temps sans réponse sur telegram

Bonjour Messieurs,

Nouveau sur le forum mais aussi sur home assistant, je sollicite votre aide pour une configuration d’automatisation avec telegram.
En effet, je suis un couche tard et est tendance à m’endormir devant la TV, du coup sur Jeedom j’avais crée un scénario basique avec notification telegram de cette façon programmé à 1H du mat:
la condition si Etat Denon X2400H (ampli) est "on "
Action-> notification telegram:
→ dois-je éteindre la tv ?
OUI / NON

OUI: appel du scénario/script de l’extinction de la tv (vidéoprojecteur, ampli, chromcast, kodi ) grâce au HUB harmony

NON: donne la réponse « bon film »

Jusque là je pense pouvoir le gérer sur HA, mais le problème c’est que sur Jeedom j’avais rajouté un empty=1 (durée 120) qui lançais l’extinction de la tv si pas de réponse au bout de 120 sec, mais je ne sais vraiment pas comment le retranscrire sur HA.

Pouvez-vous m’aider svp?

Je n’utilise pas encore NodeRed, j’essaye de me familiariser avec les outils uniquement HA me permettant de mieux appréhender la suite des futures automatisations.

Mon HA est sous ESX, parti directement de la OVA officiel, mon telegram est opérationnel (nouveau bot pour HA et bien configuré).

Merci d’avance

Petit UP svp
J’avoue je galère et ne trouve pas d’info…

Rapidement, passe par un booléen qui se mets à Vrai lors de l’envoi du telegram initial.

Ensuite, tu lances un minuteur et à sa fin, si le booléen est encore à Vrai, tu exécutes tes actions.

Et dans les actions de la réponses telegram, tu passes le booléen à Faux.

1 « J'aime »

Ok je vais regarder de ce côté merci pour l’info

au cas où, utilises tu node red?

:point_up: @jybi89 :sweat_smile: :yum: :kissing_heart:

ah merdouille, lol …on dirait que je n’avais pas tout lu :smiley:

1 « J'aime »

bon je test je test mais j’ai vraiment beaucoup de mal.
je sais que inconsciemment je pense et réfléchi jeedom (mais j’essaye de m’en défaire) mais dur à poser la logique.
Vu la puissance du système c’est surement faisable mais j’ai du mal à comprendre

J’essaierai de me rendre disponible dans la semaine pour voir ça avec toi si personne n’intervient :+1:

1 « J'aime »

merci c’est cool ton aide est grandement appréciée :+1:

1 « J'aime »

Comme promis:

animate

Le code ci-dessous permet, selon ta demande :

  • Envoi d’un message Telegram à heure fixe (input_datetime.telegram_tv_horaire)
  • Réception du même message en envoyant la commande /tv depuis Telegram vers HA
  • Choix possible dans le message :
    • Oui (extinction)
    • Non (aucune action)
    • Minuteur de la durée définie (timer.telegram_tv_time_out) arrivé à terme (Extinction)
      Il faut renseigner dans le fichier secrets l’identifiant Telegram telegram_chat_id (utilisé dans l’automatisation horaire)

Le principe est le suivant :

  • Une automatisation scrute la commande /tv et envoie le message
  • Une automatisation envoie le message à heure fixe
  • Une automatisation scrute la réponse Oui et exécute le script script.extinction_tv
  • Une automatisation scrute la réponse Non
  • Une automatisation lance le minuteur
  • Une automatisation scrute la fin du minuteur et exécute le script script.extinction_tv

Le code :

#Fichier secrets.yaml
#telegram_chat_id: 12345678 #chat_id utilisé par l'intégration Telegram

#Configurtion Packages
#################################################
# Les entités utilisées dans les automatisations#
#################################################
input_datetime:
  telegram_tv_horaire:
    name: Heure de déclenchement (Telegram TV)
    has_date: false
    has_time: true
input_boolean:
  telegram_tv_minuteur_actif:
  #Permet de lancer le minuteur
    name: TimeOut actif (Telegram TV)
    icon: mdi:timer-sand
input_text:
  telegram_tv_last_chat_id:
  #Permet de conserver la dernière personne ayant demandé la commande /tv
    name: Dernière personne contactée (Telegram TV)
timer:
  telegram_tv_time_out:
  #Le minuteur avant extinction automatique
    name: TimeOut (Telegram TV)
    duration: "00:01:00"
    icon: mdi:timer-sand
#################################################

#################################################
#               Les automatisations             #
#################################################
automation:

#####################################
#            La question            #
#####################################

  ############################
  # Réception de la commande #
  #   Envoi de la question   #
  ############################
  - alias: _hacf_telegram_tv_commande
    trigger:
      - platform: event
        event_type: telegram_command
        event_data:
          command: /tv
    action:
      - service: input_boolean.turn_on
        target:
          entity_id: input_boolean.telegram_tv_minuteur_actif
      - service: input_text.set_value
        target:
          entity_id: input_text.telegram_tv_last_chat_id
        data:
          value: "{{ trigger.event.data.chat_id }}"
      - service: timer.start
        target:
          entity_id: timer.telegram_tv_time_out
      - service: telegram_bot.send_message
        data:
          title: "*Il est tard (/tv) \U0001F319*"
          message: |-
            Faut-il éteindre la télé ? 📺
          target: "{{ trigger.event.data.chat_id }}"
          inline_keyboard:
            - "Oui - \U0001F634:/tv_oui, Non - \U0001F3A6️:/tv_non"
    mode: single
  ############################

  ############################
  #      Horaire définie     #
  #   Envoi de la question   #
  ############################
  - alias: _hacf_telegram_tv_horaire
    trigger:
      - platform: time
        at: input_datetime.telegram_tv_horaire
    action:
      - service: input_boolean.turn_on
        target:
          entity_id: input_boolean.telegram_tv_minuteur_actif
      - service: input_text.set_value
        target:
          entity_id: input_text.telegram_tv_last_chat_id
        data:
          value: !secret telegram_chat_id
      - service: timer.start
        target:
          entity_id: timer.telegram_tv_time_out
      - service: telegram_bot.send_message
        data:
          title: "*Il est tard (/tv) \U0001F319*"
          message: |-
            Faut-il éteindre la télé ? 📺
          target: "{{ states('input_text.telegram_tv_last_chat_id') }}"
          inline_keyboard:
            - "Oui - \U0001F634:/tv_oui, Non - \U0001F3A6️:/tv_non"
    mode: single
  ############################

############################
#  Lancement du minuteur   #
############################
  - id: '_hacf_telegram_tv_timeout'
    alias: _hacf_telegram_tv_timeout
    trigger:
      - platform: state
        entity_id: input_boolean.telegram_tv_minuteur_actif
        to: 'on'
    action:
      # - delay:
      #     seconds: 5
      - service: input_boolean.turn_off
        target:
          entity_id: input_boolean.telegram_tv_minuteur_actif
############################

############################
# Réception de la réponse  #
#           NON            #
############################
  - id: '_hacf_telegram_tv_non'
    alias: _hacf_telegram_tv_non
    trigger:
    - platform: event
      event_type: telegram_callback
      event_data:
        data: '/tv_non'
    action:
      - service: input_boolean.turn_off
        target:
          entity_id: input_boolean.telegram_tv_minuteur_actif
      - service: telegram_bot.answer_callback_query
        data:
          callback_query_id: '{{ trigger.event.data.id }}'
          message: "Bon Film ! \U0001F37F"
      - service: telegram_bot.edit_replymarkup
        data:
          message_id: '{{ trigger.event.data.message.message_id }}'
          chat_id: '{{ trigger.event.data.user_id }}'
          inline_keyboard: []
############################

############################
# Réception de la réponse  #
#           OUI            #
############################
  - id: '_hacf_telegram_tv_oui'
    alias: _hacf_telegram_tv_oui
    trigger:
    - platform: event
      event_type: telegram_callback
      event_data:
        data: '/tv_oui'
    action:
      - service: input_boolean.turn_off
        target:
          entity_id: input_boolean.telegram_tv_minuteur_actif
      - service: telegram_bot.answer_callback_query
        data:
          callback_query_id: '{{ trigger.event.data.id }}'
          message: "Bonne nuit ! \U0001F6CF️"
      - service: telegram_bot.edit_replymarkup
        data:
          message_id: '{{ trigger.event.data.message.message_id }}'
          chat_id: '{{ trigger.event.data.user_id }}'
          inline_keyboard: []
      ####################
      # Actions à réaliser
      ####################
      - service: script.extinction_tv
############################

############################
#       Pas de réponse     #
#          TimeOut         #
############################
  - id: '_hacf_telegram_tv_timeout_finished'
    alias: _hacf_telegram_tv_timeout_finished
    trigger:
      - platform: event
        event_type: timer.finished
        event_data:
          entity_id: timer.telegram_tv_time_out
    action:
      - service: telegram_bot.edit_message
        data:
          message_id: 'last'
          chat_id: "{{ states('input_text.telegram_tv_last_chat_id') }}"
          title: "*Il est tard (/tv) \U0001F319*"
          message: "\U0001F4A4 Extinction automatique"
      - service: input_text.set_value
        target:
          entity_id: input_text.telegram_tv_last_chat_id
        data:
          value: ""
      ####################
      # Actions à réaliser
      ####################
      - service: script.extinction_tv
############################

#################################################
#                   Les Scripts                 #
#################################################
script:
  extinction_tv:
  #Contient les actions à réaliser en cas d'extinction demandé ou timeout
    sequence:
      - service: switch.turn_off
        target:
          entity_id: switch.tv
      - delay:
          milliseconds: 500
      - service: switch.turn_off
        target:
          entity_id: switch.ampli

Des questions ? Attention ! Tu auras des réponses :wink:

PS :
Il me semble plus propre d’utiliser le service telegram_bot.edit_message en lieu et place de telegram_bot.edit_replymarkup. A toi de faire la modification en t’inspirant de l’utilisation déjà réalisée dans l’automatisation :automation._hacf_telegram_tv_timeout_finished+1:

1 « J'aime »

1000000000000000000000000000 merci!!!
C’est plus une entraide c’est carrément le tuto personnalisé au petit oignon!!!
Grand merci encore à toi Clemalex !!!
Je n’aurais jamais trouvé cette config (malgré de nombreux heure sur google )
J’ai une question, la réponse /tv_non devrait arrêter le timer normalement ?
Malheureusement le timer continue son décompte et exécute le script d’extinction…
Dois-je appeler un autre service dans l’automatisation « NON » ?

1 « J'aime »

:sweat_smile:

Plusieurs chose :

Cette automatisation ne sert à rien… :

Elle m’était utile pour le debug.
Tu dois la supprimer :+1:


J’ai effectivement oublié (j’y avais pensé pourtant d’où l’utilisation du booléen input_boolean.telegram_tv_minuteur_actif :roll_eyes:) l’ajout de la condition dans l’automatisation _hacf_telegram_tv_timeout_finished :

############################
#       Pas de réponse     #
#          TimeOut         #
############################
  - id: '_hacf_telegram_tv_timeout_finished'
    alias: _hacf_telegram_tv_timeout_finished
    trigger:
      - platform: event
        event_type: timer.finished
        event_data:
          entity_id: timer.telegram_tv_time_out
    condition: #<-- l'oubli est ici ;-)
      - condition: state
        entity_id: input_boolean.telegram_tv_minuteur_actif
        state: 'on'
    action:
      - service: telegram_bot.edit_message
        data:
          message_id: 'last'
          chat_id: "{{ states('input_text.telegram_tv_last_chat_id') }}"
          title: "*Il est tard (/tv) \U0001F319*"
          message: "\U0001F4A4 Extinction automatique"
      - service: input_text.set_value
        target:
          entity_id: input_text.telegram_tv_last_chat_id
        data:
          value: ""
      ####################
      # Actions à réaliser
      ####################
      - service: script.extinction_tv
############################

Tu peux observer qu’une réponse (oui ou non) entraine la mise à faux de ce booléen, et donc le minuteur se termine mais l’automatisation ne se déclenche pas dû fait de la condition :+1:

1 « J'aime »

Tu es un chef!!!
Bon je me sens vraiment largué jamais je n’aurais trouvé!!
Du coup cela me fait un peu peur pour la suite, pourtant j’aime cherché énormément par moi même.
Tu es Dev à tout hasard si ce n’est pas indiscret?