Un réveil sur Home assistant

Bah en faite, sur la capture d’écran ci-dessous, il y a un paramètre intitulé « last trigerred » qui veut dire dernier déclenchement. Je me fie à ça pour constater que l’automatisation wake_1_update_time ne se déclenche pas quand je modifie l’heure et les minutes du réveil. C’est normal ?

Ok pour ça :+1:

Non (et c’est l’automatisation la plus simple dans le cas du reveil :sweat_smile:

Les input_select sont bien nommés ainsi :
input_select.wakehour_1
input_select.wakeminutes_1
?

Utilise pour la mise au point une carte comme celle-ci :

type: entities
entities:
  - entity: input_select.wakehour_1
  - entity: input_select.wakeminutes_1
  - entity: automation.wake_1_update_time
    secondary_info: last-triggered

Merci pour ça c’est pas bête ! Du coup effectivement, depuis la carte de mise au point l’automatisation update est déclenchée lorsque je modifie les input selects :

Dans mon fichiers input_select.yaml et dans l’automation update oui ils sont bien nommées ainsi. Par contre je ne les vois pas apparaître dans la carte du réveil. C’est normal ?

Oui…
L’automatisation (qui marche du coup) sert a mettre à jour l’input_datetime utilisé par la carte.

Mais vu la carte que tu utilises, les input_select ne sont pas nécessaire car cette carte gère très bien nativement le changement horaire (grâce aux flèche)…

Du coup, il reste juste le problème de non déclenchement de l’automatisation de réveil ? (vérifie comme la première dans une carte entités, et utilise seulement la carte pas led input_select)

Non… Car définir l’heure et les minutes du réveil sur la carte de réveil ne déclenche pas l’automatisation update. Seule la carte de mise au point permet cela…

C’est normal ça…On va reprendre depuis le depuis avec ce que tu as en place :

Ce que tu as :

  1. 1x input_datetime représentant l’heure de déclenchement de l’alarme (input_datetime.wake_time_1)

  2. 1x input_select représentant les heures de l'input_datetime (input_select.wakehour_1)

  3. 1x input_select représentant les minutes de l’input_datetime (input_select.wakeminutes_1)

  4. 7x input_boolean représentants les jours de la semaine pour le déclenchement de l’alarme (input_boolean.wakeweekday_ [sun,mon,tue,wed,thu,fri,sat] _1)

  5. 1x input_boolean représentant l’activation de l’alarme (input_boolean.wakestatus_1)

  6. 1x automatisation de mise à jour de l’input_datetime (automation.wake_1_update_time)

  7. 1x automatisation déclenchée lorsque l’heure locale est égale à la valeur de l’input_datetime (automation.wake_1_detect_time)

  8. 1x automatisation qui est déclenchée par automation.wake_1_detect_time (automation.wake_1_alarm_activated)

des scripts pour faire tourner en boucle l’alarme ? Si oui partage les (peut être réalisé directement dans un seul script avec une boucle until par exemple)

Fini pour le résumé des entités…

Maintenant concernant :

C’est normal car tu as seulement une automatisation (automation.wake_1_update_time) qui met à jour dans le sens [ input_select → input_datetime ]. Il te faudrait l’équivalent dans l’autre sens : [ input_datetime → input_select ].
On peut y arriver en ajoutant quelques lignes à automation.wake_1_update_time :

automation:
- id: 'wake_1_update_time'
  #nouvelle par rapport au post 1
  # Automatisation qui met à jour le input_datetime 'wake_time_1' représentant l'heure du reveil
  # en fonction des input_select représentants les heures et les minutes
  alias: wake_1_update_time
  trigger:
    - platform: state
      entity_id: input_select.wakehour_1
    - platform: state
      entity_id: input_select.wakeminutes_1
    - platform: state
      entity_id: input_datetime.wake_time_1
  action:
  - choose:
      # Si le déclencheur est l'input_datetime
      - conditions:
          - condition: template
            value_template: "{{ trigger.entity_id.split('.')[0] == 'input_datetime' }}"
        sequence:
          - service: input_select.select_option
            entity_id: input_select.wakehour_1
            data:
              option: "{{trigger.to_state.state.split(':')[0]}}"
          - service: input_select.select_option
            entity_id: input_select.wakeminutes_1
            data:
              option: "{{trigger.to_state.state.split(':')[1]}}"
      # Si le déclencheur est l'un des input_select
      - conditions:
          - condition: template
            value_template: "{{ trigger.entity_id.split('.')[0] == 'input_select' }}"
        sequence:
          - service: input_datetime.set_datetime
            entity_id: input_datetime.wake_time_1
            data_template:
              time: '{{states("input_select.wakehour_1")}}:{{states("input_select.wakeminutes_1")}}:00'

Mais comme tu utilises la carte que j’ai faite, tu n’as pas besoin des input_selects (qui ne sont la que pour régler l’alarme) car la carte permet l’édition de l’heure facilement (contrairement à la carte de base de HA).

Du coup, qu’est-ce qui ne fonctionne pas ?

Bonjour, super boulot. J’ai vu la carte aussi et c’est juste top.
Petite question, actuellement je me réveille avec une routine Alexa sur mon enceinte echo qui me met la musique. Quand je bosse pas un jour de semaine ou suis en télétravail, je l’éteins et en active une autre plus tard…
Je souhaiterais gérer cela de HA. Est il possible de faire quelque chose de similaire, mais d’activer ou désactiver une routine ?
J’ai vu qu’ont pouvez récupérer des « sévices » et lancer des routines. Mais pas avec tous. Par exemple input_bookean, je le vois mais je peux rien faire avec…si j’arrivais à faire 2h de réveil différentes en fonction de télétravail ou présentiel ça serait nickel !!

Et qui sait, si je pousse le bouchon plus loin, si je met télétravail dans mon agenda Google, que ça active le réveil plus tard ?

Bon, j’ai réglé mes problèmes d’alexa.

Par contre, j’ai pas compris dans le fonctionnement du réveil, comment le wakestatus_1 se remet à 0 ?

Il ne se remet pas à zéro et c’est un manque que j’ai signalé…

En prenant exemple sur le code fournit du 1er post, voici pour ceux qui veulent un code fonctionnel (@barto_95 :wink: ) :

##############################
#SENSOR
##############################
sensor:
  - platform: time_date
   #Création de 1 entité représentant l'heure (HH:MM )
    display_options:
      - 'time'

##############################
#INPUT_BOOLEAN
##############################
input_boolean:
  reveil_1:
    #Représente si le réveil est activé
    name: Réveil 1 (Activation)
    icon: mdi:alarm
  reveil_declenche_1:
    #Représente si le réveil à déjà sonné dans la journée (empêche le déclenchement toutes les minutes après l'heure de réveil)
    name: Le réveil a déjà sonné
    icon: mdi:alarm
  reveil_mon_1:
    #Représente le jour : Lundi
    name: Lundi
    icon: mdi:calendar
  reveil_tue_1:
    #Représente le jour : Mardi
    name: Mardi
    icon: mdi:calendar
  reveil_wed_1:
    #Représente le jour : Mercredi
    name: Mercredi
    icon: mdi:calendar
  reveil_thu_1:
    #Représente le jour : Jeudi
    name: Jeudi
    icon: mdi:calendar
  reveil_fri_1:
    #Représente le jour : Vendredi
    name: Vendredi
    icon: mdi:calendar
  reveil_sat_1:
    #Représente le jour : Samedi
    name: Samedi
    icon: mdi:calendar
  reveil_sun_1:
    #Représente le jour : Dimanche
    name: Dimanche
    icon: mdi:calendar

##############################
#INPUT_DATETIME
##############################
input_datetime:
  reveil_heure_1:
    #Représente l'heure du réveil 1
    name: Réveil 1
    has_time: true

##############################
#AUTOMATION
##############################
automation:
  - id: 'reveil_1'
    alias: reveil_1
    description: "Se déclenche à l'heure définie par l'entité input_datetime.reveil_heure_1"
    trigger:
    - platform: state
      #Déclenchement de l'automatisation toutes les minutes (permet de s'assuser que le réveil va sonner même si HA était indisponible à l'heure du réveil (reboot principalement))
      entity_id: sensor.time
    - platform: state
      #Déclenchement lors du changement de l'heure du réveil (permet de reprogrammer le réveil)
      entity_id: input_datetime.reveil_heure_1
    condition:
    - condition: template
      value_template: >-
        {% set numero = '1' %} {# Représente le numéro du réveil #}
        {% set today = 'input_boolean.reveil_' ~now().strftime("%a") | lower ~'_' ~numero %} {# Récupère le nom court de la semaine en anglais et le concatène pour formé le texte <input_boolean.reveil_XXX_1> où XXX peut prendre les valeurs [mon,tue,wed,thu,fri,sat,sun] #}
        {{ is_state(('input_boolean.reveil_' ~numero), 'on') and is_state(today, 'on') }} {# Si le réveil est ACTIF et que le booléen du jour est à Vrai la condition est remplie #}
    action:
    - choose:
      - conditions:
        - condition: template
          #Si l'heure actuelle est inférieure à l'heure du réveil : 
            #Et si le réveil à déjà sonné (input_boolean.reveil_declenche_1)
             #Remise à Faux de l'entité input_boolean.reveil_declenche_1
          value_template: >-
            {% set numero = '1' %} {# Représente le numéro du réveil #}
            {% set heure_du_reveil = strptime(states('input_datetime.reveil_heure_1'),'%H:%M:%S').strftime('%H:%M:%S') %} {# Conversion de l'input_datetime en objet DATETIME au format HH:MM:SS #}
            {% set heure_actuelle = strptime(states('sensor.time'),'%H:%M').strftime('%H:%M:%S')%}  {# Conversion de l'heure actuelle en objet DATETIME au format HH:MM:SS #}
            {% if heure_actuelle < heure_du_reveil %}
              {% if is_state(('input_boolean.reveil_declenche_' ~numero), 'on') %}
                true
              {% else %}
                false
              {% endif %}
            {% else %}
              false
            {% endif %}
        sequence:
          - service: persistent_notification.create
            data:
              message: >
                Déjà réveillé !
              title: DEBUG Automatisation
              notification_id: '{{ (range(1, 9999)|random) }}'
          - service: input_boolean.turn_off
            entity_id: input_boolean.reveil_declenche_1
      - conditions:
        - condition: template
          #Si l'heure actuelle est égale ou supérieure à l'heure du réveil : 
            #Et si le réveil n'a pas déjà sonné (input_boolean.reveil_declenche_1)
             #Mise à Vrai de l'entité input_boolean.reveil_declenche_1
             #<AJOUTER LES ACTIONS DU REVEIL>
             #<AJOUTER LES ACTIONS DU REVEIL>
             #<AJOUTER LES ACTIONS DU REVEIL>
          value_template: >-
            {% set numero = '1' %} {# Représente le numéro du réveil #}
            {% set heure_du_reveil = strptime(states('input_datetime.reveil_heure_1'),'%H:%M:%S').strftime('%H:%M:%S') %} {# Conversion de l'input_datetime en objet DATETIME au format HH:MM:SS #}
            {% set heure_actuelle = strptime(states('sensor.time'),'%H:%M').strftime('%H:%M:%S')%} {# Conversion de l'heure actuelle en objet DATETIME au format HH:MM:SS #}
            {% if heure_actuelle >= heure_du_reveil %}
              {% if is_state(('input_boolean.reveil_declenche_' ~numero), 'off') %}
                true
              {% else %}
                false
              {% endif %}
            {% else %}
              false
            {% endif %}
        sequence:
          - service: persistent_notification.create
            data:
              message: >
                C'est l'heure !
              title: DEBUG Automatisation - Fired
              notification_id: '{{ (range(1, 9999)|random) }}'
          - service: input_boolean.turn_on
            entity_id: input_boolean.reveil_declenche_1
        #  - Action supplémentaire 
        #  - Action supplémentaire
        #  - Action supplémentaire
1 « J'aime »

Merci je vais tester ce soir

@Clemalex tu aurai le code de la card lovelace ?
qui va avec ton code ?

Oui là :

https://forum.hacf.fr/t/carte-reveil-ou-activation-dautomatisation/848

Il y a plusieurs version parcours le fil et demande de l’aide la bas… :innocent:

j’ai essayer justement mais le nom de entity ne corresponde pas et perso j’arrive pas a comprendre lequel utiliser et ou … pour la partie des jours pas de pb mais la partie du haut non …

1 « J'aime »

Voici ma contribution à cette problématique de réveil
J’ai souhaité être réveillé en musique en fonction d’un agenda de travail. Dans l’agenda gmail en question, j’ai planifié un évènement récurrent de travail , commençant à 8h ou à 7h
=> je veux que la radio sur le google mini s’allume 1h avant l’event.
Voila le code

alias: Radio_si_Travail
description: ""
trigger:
  - platform: calendar
    event: start
    offset: "-1:00:0"
    entity_id: calendar.xxxxxxxxxxx_gmail_com
condition:
  - condition: state
    entity_id: calendar.xxxxxxxxxxxxx_gmail_com
    attribute: message
    state: Travail
action:
  - service: media_player.play_media
    target:
      entity_id: media_player.chambre_principale
    data:
      media_content_id: media-source://radio_browser/003baf55-9ac9-4352-bceb-375ee4203133
      media_content_type: audio/aac
    metadata:
      title: France Info
      thumbnail: >-
        https://www.francetvinfo.fr/assets/common/images/pwa/launcher-120x120-2e45ada1.png
      media_class: music
      children_media_class: null
      navigateIds:
        - {}
        - media_content_type: app
          media_content_id: media-source://radio_browser
        - media_content_type: music
          media_content_id: media-source://radio_browser/country/FR
mode: single

Le trigger ne fonctionne qu’une fois par jour.

Bonjour, avez-vous une solution pour éviter de recevoir des spams dans le journal ?

Bonjour

Tout d’abord, merci @cob94440 @Clemalex pour ce fil, très instructif.

J’essaye de reproduire ce réveil mais avec un petit bémol, j’ai une erreur au niveau de

Entité non disponible: sensor.time.

Screenshot_20231101_190522

Comment puis-je corriger cela ? Je ne vois pas trace de celle-ci dans les « outils de développement »

De plus, j’ai remplacé

 service: xiaomi_aqara.play_ringtone par media_player.bureau_gauche  (haut parleur connecté)

En changeant également l'adresse MAC

et

script.xiaomi_alarm2 par script.reveil1_alarm2  (idem pour les autres alarmes)

Est-ce correct ? Dois-je modifier autre chose ?

Merci

PS
j’ai mis cela dans /config/packages/reveil/reveil1.yaml

et dans /config/configuration.yaml, il y a

homeassistant:
packages: !include_dir_named packages/

EDIT

je viens d’ajouter

- platform: time_date
    display_options:
      - 'time'
      - 'date'
      - 'date_time'
      - 'date_time_utc'
      - 'date_time_iso'
      - 'time_date'
      - 'time_utc'
      - 'beat'

dans le fichier /config/configuration.yaml, et c’est bon, j’obtiens l’heure. Mais impossible de modifier les données sur la carte

Screenshot_20231101_195358

idem pour les autres entités.

1 « J'aime »

Il semble manquait la configuration.

Elle a bien était chargée à un moment d’où la trace des entités mais elles ne sont plus chargées apparemment.

1 « J'aime »

Merci. Je ne parviens pas à trouver, pourquoi ?
Comment puis-je corriger cela, à ton avis ?

#Par rapport au post 1 de @cob94440 
# sensor.wake_time_1 est remplacé par input_datetime.wake_time_1 pour la définition de l'heure du réveil
# input_number.wakehour_1 est remplacé par input_select.wakehour_1 pour la définition de l'heure
# input_number.wakeminutes_1 est remplacé par input_select.wakeminutes_1 pour la définition des minutes

#Input_booleans (inchangés par rapport au post 1) 
input_boolean:
  wakeactivated_1:
    name: Alarm 1 Activated
    icon: mdi:alarm
  wakestatus_1:
    name: Alarm 1
    icon: mdi:alarm
  wakeweekday_sun_1:
    name: Sunday
    icon: mdi:calendar
  wakeweekday_mon_1:
    name: Monday        
    icon: mdi:calendar
  wakeweekday_tue_1:
    name: Tuesday        
    icon: mdi:calendar
  wakeweekday_wed_1:
    name: Wednesday       
    icon: mdi:calendar
  wakeweekday_thu_1:
    name: Thursday       
    icon: mdi:calendar
  wakeweekday_fri_1:
    name: Friday        
    icon: mdi:calendar
  wakeweekday_sat_1:
    name: Saturday        
    icon: mdi:calendar
    
#Input_datetime (nouveau par rapport au post 1)
input_datetime:
  wake_time_1:
  #Représente l'heure du réveil
    name: wake_time_1
   # has_date: false
    has_time: true

#Input_select (nouveau par rapport au post 1) 
input_select:
  wakehour_1:
  #Représente le choix de l'heure
    name: wakehour_1
    options:
     - '00'
     - '01'
     - '02'
     - '03'
     - '04'
     - '05'
     - '06'
     - '07'
     - '08'
     - '09'
     - 10
     - 11
     - 12
     - 13
     - 14
     - 15
     - 16
     - 17
     - 18
     - 19
     - 20
     - 21
     - 22
     - 23
  wakeminutes_1:
  #Représente le choix des minutes
    name: wakeminutes_1
    options:
     - '00'
     - '01'
     - '02'
     - '03'
     - '04'
     - '05'
     - '06'
     - '07'
     - '08'
     - '09'
     - 10
     - 11
     - 12
     - 13
     - 14
     - 15
     - 16
     - 17
     - 18
     - 19
     - 20
     - 21
     - 22
     - 23
     - 24
     - 25
     - 26
     - 27
     - 28
     - 29
     - 30
     - 31
     - 32
     - 33
     - 34
     - 35
     - 36
     - 37
     - 38
     - 39
     - 40
     - 41
     - 42
     - 43
     - 44
     - 45
     - 46
     - 47
     - 48
     - 49
     - 50
     - 51
     - 52
     - 53
     - 54
     - 55
     - 56
     - 57
     - 58
     - 59


#Scripts (inchangés par rapport au post 1)
script:
  reveil1_alarm1:
    sequence:
    - data:
        gw_mac: xxxxx
        ringtone_id: 13
        ringtone_vol: 50
      service: media_player.hp_bureau_gauche
    - delay:
        seconds: 6
    - service: script.reveil1_alarm2
    mode: parallel
    max: 10

  reveil1_alarm2:
    sequence:
    - data:
        gw_mac: xxxx
        ringtone_id: 13
        ringtone_vol: 75
      service: media_player.hp_bureau_gauche
    - delay:
        seconds: 6
    - service: script.reveil1_alarm1
    mode: parallel
    max: 10

  reveil1_alarm3:
    sequence:
    - repeat:
        count: 180
        sequence:
        - data:
           gw_mac: xxxxx
           ringtone_id: 13
           ringtone_vol: 40
          service: media_player.hp_bureau_gauche
        - delay:
            seconds: 6
    mode: restart

  alarm_snooze:
    alias: Alarm was Snooze
    sequence:
    - service: script.alarmclock_off
    - delay:
        seconds: 300
    - service: script.turn_on
      entity_id:
      - script.reveil1_alarm3
    - delay:
        seconds: 300
    - service: script.turn_on
      entity_id:
      - script.alarmclock_off

  alarmclock_off:
    alias: Alarm was disarmed
    sequence:
    - service: script.turn_off
      data:
        entity_id:
        - script.reveil1_alarm3

automation:
  - id: 'wake_1_update_time' #nouvelle par rapport au post 1
    # Automatisation qui met à jour le input_datetime 'wake_time_1' représentant l'heure du reveil
    # en fonction des input_select représentants les heures et les minutes
    alias: wake_1_update_time
    trigger:
      - platform: state
        entity_id: input_select.wakehour_1
      - platform: state
        entity_id: input_select.wakeminutes_1
    action:
    - service: input_datetime.set_datetime
      entity_id: input_datetime.wake_time_1
      data_template:
        time: '{{states("input_select.wakehour_1")}}:{{states("input_select.wakeminutes_1")}}:00'

  - id: 'wake_1_detect_time' #modifiée par rapport au post 1 pour la partie déclenchement (trigger)
    # Automatisation qui s'enclenche quand l'heure du système est égale à l'heure de l'input_datetime.wake_time_1
    alias: Wake 1
    trigger:
      platform: template
      value_template: "{{states('sensor.time') == (state_attr('input_datetime.wake_time_1','timestamp') | int | timestamp_custom('%H:%M', False))}}"
    condition:  
     condition: template
     value_template: >
        {% set today = 'input_boolean.wakeweekday_' ~ now().strftime("%a") | lower ~ '_1' %}
        {{ is_state('input_boolean.wakestatus_1', 'on') and is_state(today, 'on') }}
    action:
      service: input_boolean.turn_on
      entity_id: input_boolean.wakeactivated_1

  - id: 'wake_1_alarm_activated' #inchangée par rapport au post 1
    alias: 'Wake 1 Activated'
    trigger:
      platform: state
      entity_id: input_boolean.wakeactivated_1
      from: 'off'
      to: 'on'
    action:   
      service: script.turn_on 
      entity_id:
      - script.reveil1_alarm1

Est-ce que le fait de mettre le code pour sensor.time dans /config/configuration.yaml et le reste dans /config/packages/reveil, pourrait poser un problème ?

Je viens de faire une bétise, je pense. Croyant pouvoir recréer les entités, automatisations, je les ai effacés et je ne parviens plus çà les récupérer. Puis-je corriger le souci ? merci

EDIT:
Le plus simple n’est-ce pas de renommer les entités pour que HA les recréer avec un autre nom ? Mais, c’est dommage d’en arriver là.

EDIT2: je suis parvenu à effacer toutes les entités créées en supprimant card-mod, pour pouvoir recommencer à zéro.

1 « J'aime »

Bonjour

Dans le message : Un réveil sur Home assistant - #38 par Clemalex

Lorsque tu parles @Clemalex d’ajouter les actions, c’est quoi exactement ?

#<AJOUTER LES ACTIONS DU REVEIL>
             #<AJOUTER LES ACTIONS DU REVEIL>
             #<AJOUTER LES ACTIONS DU REVEIL>

et

  #  - Action supplémentaire 
        #  - Action supplémentaire
        #  - Action supplémentaire

c’est cela ,

script:
  xiaomi_alarm1:
    sequence:
    - data:
        gw_mac: 0123456789
        ringtone_id: 13
        ringtone_vol: 50
      service: xiaomi_aqara.play_ringtone
    - delay:
        seconds: 6
    - service: script.xiaomi_alarm2
    mode: parallel
    max: 10

  xiaomi_alarm2:
    sequence:
    - data:
        gw_mac: 0123456789
        ringtone_id: 13
        ringtone_vol: 75
      service: xiaomi_aqara.play_ringtone
    - delay:
        seconds: 6
    - service: script.xiaomi_alarm1
    mode: parallel
    max: 10

  xiaomi_alarm3:
    sequence:
    - repeat:
        count: 180
        sequence:
        - data:
           gw_mac: 0123456789
           ringtone_id: 13
           ringtone_vol: 40
          service: xiaomi_aqara.play_ringtone
        - delay:
            seconds: 6
    mode: restart

  alarm_snooze:
    alias: Alarm was Snooze
    sequence:
    - service: script.alarmclock_off
    - delay:
        seconds: 300
    - service: script.turn_on
      entity_id:
      - script.xiaomi_alarm3
    - delay:
        seconds: 300
    - service: script.turn_on
      entity_id:
      - script.alarmclock_off

  alarmclock_off:
    alias: Alarm was disarmed
    sequence:
    - service: script.turn_off
      data:
        entity_id:
        - script.xiaomi_alarm3

Un très grand merci

1 « J'aime »