Calcul de durée - Ecran

Et dans le bonus, tu pourras chercher à corriger la faute d’orthographe avec ‹ la switch ›/ ‹ allumé ›

J’ai essayé on verra si ca marche :slight_smile:

alias: Duree-ecran-annonce2
description: >-
  Annonce vocale si un écran (TV, PC, Switch) a été allumé entre 45 et 60
  minutes.
triggers:
  - entity_id: sensor.tv_chambre_duree
    id: tvch
    trigger: state
  - entity_id: sensor.pc_adam_duree
    id: pcadam
    trigger: state
  - entity_id: sensor.switch_duree
    id: switch
    trigger: state
conditions:
  - condition: time
    after: "09:30:00"
    before: "20:00:00"
  - condition: template
    value_template: |-
      {% set current_state = trigger.to_state.state | int(0) %}
          {{ current_state >= 45 and (current_state % 5) == 0 and current_state <= 60 }}
actions:
  - variables:
      name: |
        {% if trigger.id == 'tvch' %}
          la TV
        {% elif trigger.id == 'pcadam' %}
          le PC de Adam
        {% elif trigger.id == 'switch' %}
          la Switch
        {% else %}
          un appareil
        {% endif %}
      message_announcement: >-
        attention {{ name }} est allumé depuis {{ trigger.to_state.state }}
        minutes.
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ current_state < 45 }}"
        sequence:
          - data:
              cache: true
              message: attention il faut stopper {{ name }} dans 10 minutes
              media_player_entity_id: media_player.googlehome5583
            target:
              entity_id: tts.google_translate_fr_fr
            action: tts.speak
          - delay:
              seconds: 5
          - data:
              cache: true
              message: attention il faut stopper {{ name }} dans 10 minutes
              media_player_entity_id: media_player.googlehome2453
            target:
              entity_id: tts.google_translate_fr_fr
            action: tts.speak
      - conditions:
          - condition: template
            value_template: "{{ current_state >= 45 }}"
        sequence:
          - data:
              cache: true
              message: "{{ message_announcement }}"
              media_player_entity_id: media_player.googlehome5583
            target:
              entity_id: tts.google_translate_fr_fr
            action: tts.speak
          - delay:
              seconds: 5
          - data:
              cache: true
              message: "{{ message_announcement }}"
              media_player_entity_id: media_player.googlehome2453
            target:
              entity_id: tts.google_translate_fr_fr
            action: tts.speak
mode: queued
max: 10

  • Le 30 ne passe pas, il faut le mettre dans le conditions globales (les actions ne sont pas déclenchées sinon) pas loin du truc que tu n’aimes pas :wink:
  • current_state n’existe pas dans le choose

Après il y a de l’optimisation à faire, plutôt que de répéter le bloc TTS, adapte juste la variable message_announcement qui prends l’un ou l’autre des messages…

Une solution si tu n’y arrives pas

Résumé
alias: Duree-ecran-annonce
description: >-
  Annonce vocale si un écran (TV, PC, Switch) a été allumé entre 45 et 60
  minutes (par tranche de 5 min) ou s'il atteint 35 minutes.
triggers:
  - entity_id: sensor.tv_chambre_duree
    id: tvch
    alias: Chambre TV Durée
    trigger: state
  - entity_id: sensor.pc_adam_duree
    id: pcadam
    alias: PC Adam Durée
    trigger: state
  - entity_id: sensor.switch_duree
    id: switch
    alias: Switch Durée
    trigger: state
conditions:
  - condition: time
    alias: Plage horaire (9h30 - 20h00)
    after: "09:30:00"
    before: "20:00:00"
  - condition: or
    conditions:
      - condition: template
        alias: Durée entre 45 et 60 min (par multiple de 5)
        value_template: >-
          {% set current_state = trigger.to_state.state | int(0) %} {{
          current_state >= 45 and (current_state % 5) == 0 and current_state <=
          60 }}
      - condition: template
        alias: Durée égale à 35 minutes
        value_template: "{{ trigger.to_state.state | int(0) == 35 }}"
actions:
  - alias: Définir les variables (Nom & Message)
    variables:
      name: |
        {% if trigger.id == 'tvch' %}
          la TV
        {% elif trigger.id == 'pcadam' %}
          le PC de Adam
        {% elif trigger.id == 'switch' %}
          la Switch
        {% else %}
          un appareil
        {% endif %}
      message_announcement: >-
        {% set duration = trigger.to_state.state | int(0) %} {% if duration ==
        35 %}
          Attention il faut stopper {{ name }} dans 10 minutes.
        {% elif duration == 45 %}
          Attention {{ name }} est allumé depuis {{ duration }} minutes.
        {% else %}
          Rappel important : {{ name }} est allumé depuis {{ duration }} minutes.
        {% endif %}
  - alias: Envoyer un SMS (Free Mobile)
    action: notify.send_message
    metadata: {}
    target:
      entity_id: notify.sms_free_antony
    data:
      message: |
        {{ message_announcement }}
    enabled: true
  - alias: Annonce vocale sur Google Home 1
    data:
      cache: true
      message: "{{ message_announcement }}"
      media_player_entity_id: media_player.googlehome5583
    target:
      entity_id: tts.google_translate_fr_fr
    action: tts.speak
  - alias: Attendre 5 secondes
    delay:
      seconds: 5
  - alias: Annonce vocale sur Google Home 2
    data:
      cache: true
      message: "{{ message_announcement }}"
      media_player_entity_id: media_player.googlehome2453
    target:
      entity_id: tts.google_translate_fr_fr
    action: tts.speak
mode: parallel
max: 10


Oua je suis pas prêt d’arriver à ce niveau :frowning:

J’arrive à peu près à tout comprendre.
Sauf ça ou j’ai un peu de mal.

message_announcement: |-
    {% set duration = trigger.to_state.state | int(0) %} {% if duration == 35 %}
      Attention il faut stopper {{ name }} dans 10 minutes.
    {% elif duration == 45 %}
      Attention {{ name }} est allumé depuis {{ duration }} minutes.
    {% else %}
      Rappel important : {{ name }} est allumé depuis {{ duration }} minutes.
    {% endif %}

Heureusement chat gpt est mon ami

Étape par étape :

  1. {% set duration = trigger.to_state.state | int(0) %}
  • Cette ligne récupère l’état de l’entité qui a déclenché le trigger.
  • Elle le convertit en entier avec | int(0) (si la valeur n’est pas un nombre, elle devient 0).
  • duration représente donc le nombre de minutes depuis que quelque chose (par ex. une TV) est allumé.
  1. {% if duration == 35 %}
  • Si la durée est exactement 35 minutes, le message sera :
    "Attention il faut stopper {{ name }} dans 10 minutes."
  • {{ name }} sera remplacé par le nom de l’appareil ou de l’entité.
  1. {% elif duration == 45 %}
  • Si la durée est exactement 45 minutes, le message sera :
    "Attention {{ name }} est allumé depuis 45 minutes."
  1. {% else %}
  • Pour toutes les autres durées, le message par défaut sera :
    "Rappel important : {{ name }} est allumé depuis {{ duration }} minutes."

Tout ça c’est du jinja, un langage de code (ouais en plus du yaml qui n’est lui que pour de la config)
Et si chatgpt t’aide alors pourquoi pas

1 « J'aime »

Ce sujet a été automatiquement fermé après 60 jours. Aucune réponse n’est permise dorénavant.