Parce que je débute Si quelqu’un veut améliorer le code je suis plus que preneur.
Non non pas de soucis, c’était plus pour savoir si tu l’avais choisis car tu avais rencontrer des problèmes avec un input_datetime…
Après, il y a toujours mille et une façon d’arriver au même résultat… C’est juste une histoire de goût et d’affinité…
@cob94440, on en parlais hier, voici une autre façon (j’ai conservé tous les noms pour faciliter la comparaison) :
Pour ceux qui comme moi sont plus à l’aise (surtout sur mobile) avec des input_select
pour la définition de l’heure :
#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:
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
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.xiaomi_alarm1
Ce qui donne côté Lovelace :
code de la carte :
cards:
- entities:
- entity: input_boolean.wakestatus_1
icon: 'mdi:alarm-check'
name: Activation
- entity: sensor.time
name: Heure Actuelle
- entity: input_datetime.wake_time_1
name: 'Sonner à :'
show_header_toggle: false
title: Réveil
type: entities
- cards:
- entities:
- entity: input_select.wakehour_1
name: Heure
show_header_toggle: false
title: null
type: entities
- entities:
- entity: input_select.wakeminutes_1
name: Minutes
show_header_toggle: false
title: null
type: entities
type: horizontal-stack
- cards:
- entity: input_boolean.wakeweekday_sun_1
hold_action:
action: none
icon_height: 40px
name: Dim
show_icon: true
show_name: true
tap_action:
action: toggle
type: button
- entity: input_boolean.wakeweekday_mon_1
hold_action:
action: none
icon_height: 40px
name: Lun
show_icon: true
show_name: true
tap_action:
action: toggle
type: button
- entity: input_boolean.wakeweekday_tue_1
hold_action:
action: none
icon_height: 40px
name: Mar
show_icon: true
show_name: true
tap_action:
action: toggle
type: button
- entity: input_boolean.wakeweekday_wed_1
hold_action:
action: none
icon_height: 40px
name: Mer
show_icon: true
show_name: true
tap_action:
action: toggle
type: button
- entity: input_boolean.wakeweekday_thu_1
hold_action:
action: none
icon_height: 40px
name: Jeu
show_icon: true
show_name: true
tap_action:
action: toggle
type: button
- entity: input_boolean.wakeweekday_fri_1
hold_action:
action: none
icon_height: 40px
name: Ven
show_icon: true
show_name: true
tap_action:
action: toggle
type: button
- entity: input_boolean.wakeweekday_sat_1
hold_action:
action: none
icon_height: 40px
name: Sam
show_icon: true
show_name: true
tap_action:
action: toggle
type: button
type: horizontal-stack
- card:
entity: script.alarm_snooze
hold_action:
action: more-info
icon: 'mdi:alarm-off'
icon_height: 50px
name: Snooze
show_icon: true
show_name: true
show_state: false
tap_action:
action: toggle
type: button
conditions:
- entity: input_boolean.wakeactivated_1
state: 'on'
type: conditional
type: vertical-stack
Ne pas hésiter à poser des questions !
Si j’ai le temps ce soir, je mettrais une autre manière de présenter tout çà…
Sympa. Tu as modifié aussi le script off. J’avais cru voir une coquille qui n’arrêtait pas de suite le réveil.
Dans l’exemple il faisait sonner la gateway mais c’est possible de mettre un message sur Google home ou Alexa et lancer ensuite pourquoi pas des actions de salle de bain prépa de cafe
Non, je n’ai pas modifié les scripts, enfin si, mais au niveau de l’indentation du script xiaomi_alarm3
:
Mais j’avoue n’avoir pas regardé dans le détail le script…
Effectivement, les possibilités d’actions sont infinies, il suffit d’ajouter les actions que l’on souhaite à la suite de l’automation wake_1_alarm_activated
.
@cob94440
Du coup, tu m’as motivé en parlant d’une coquille et voici plusieurs remarques/explications sur le fonctionnement de ce réveil :
Le script alarm_snooze
qui est lancé quand tu appuis sur le bouton de la carte lovelace
éxécute en premier lieu le script alarmclock_off
.
Ce script alarmclock_off
est bizarre dans le sens où sa première action est d’arrêter xiaomi_alarm3
alors que celui-ci n’est pas démarré.
Ensuite, on attend 5min (300 sec) avant de démarrer xiaomi_alarm3
qui sera exécuté 180 fois (avec le délais de 6s cela fait 18min). Mais le script est arrêté en fait au bout de 5min à l’aide de l’exécution du script alarmclock_off
qui lui-même arrête le script xiaomi_alarm3
.
Du coup, quand l’alarme sonne :
-
Soit on ne fait rien et elle s’arrête au bout d’une minute car les scripts
xiaomi_alarm1
etxiaomi_alarm2
sont exécutés enmode :parallel
avec unmax: 10
et chacun dispose d’un délai de 6 secondes. -
Soit on appuie sur le bouton snooze et là, l’alarme continue de sonner jusqu’à ses 60 secondes (jusqu’à atteindre le
max: 10
d’exécution des scripts), puis après 5min, l’alarme se remet à sonner suite à l’exécution dexiaomi_alarm3
pendant 5min avant de s’arrêter suite à l’exécution dealarmclock_off
.
Du coup, plusieurs points me dérange pour le fonctionnement d’un réveil :
-
l’alarme ne sonne que 1 min
-
la fonction snooze ne coupe pas l’alarme instantanément
-
la fonction snooze relance l’alarme seulement pendant 5min puis l’arrête sans aucune intervention humaine
-
l’alarme ne fonctionne qu’une seule fois : le fait que l’alarme commence à sonner est conditionné par l’évènement que
input_boolean.wakeactivated_1
passe àon
. Or, il n’est jamais remis àoff
. Il manque une action de remise àoff
deinput_boolean.wakeactivated_1
quelque part
Loin de moi de critiquer ton travail, mais comme tu débute, je souhaitais t’expliquer le fonctionnement du code qui t’a inspiré et que tu partage afin que tout le monde puisse en profiter et comprendre le comportement.
Mon commentaire n’a que le but d’être constructif et ne dois en rien t’empêcher de continuer de partager tes automatismes sur le forum
Si tu le désire, on peux voir ensemble ce qu’il faut faire pour améliorer le fonctionnement de ce réveil
Pas de soucis. En effet je débute je m’inspire a gauche a droite pour le moment et je regroupe des idées.
Je viens de jeedom où je suis resté 3 ans.
Et j’aime bcp plus home assistant.
L’idée est de partager et améliorer tout ça pour qu’on puisse proposer quelque chose de propre.
Je regarderai demain tes modifs.
Et j’essaie de faire une présentation de où j’en suis.
C’est le but du forum de s’apporter. Je cherche sur youtube et les github de l’inspiration en cherchant ensuite a comprendre pour essayer ensuite de faire par moi même.
Attention, je n’ai apporté aucunes modifications dans les automatismes (automation/script).
Je te propose seulement mon aide si tu veux améliorer le fonctionnement.
Fait le point du fonctionnement et dis nous ce que tu souhaite améliorer (si tu souhaite améliorer quelque chose car le fonctionnement actuel t’es peut être suffisant).
Concernant Youtube, n’hésite pas à créer des posts si dans des vidéos tu souhaite approfondir/comprendre
@cob94440 Attention à ne pas tout mélanger.
Ici, c’est le post du réveil
pas de custom-ui
Si tu veux bien éditer ton commentaire pour ne garder que la partie du réveil, l’autre partie je l’ai basculé vers le bon post , j’ai commencé à t’y répondre
Désolé je n’ai pas la possibilité de répondre dans le post indiqué. Le bouton « répondre » n’apparaît pas…
Voici les automatisations que j’utilise :
- 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.music1
Si tu enlèves la condition, est-ce que cela fonctionne ?
Tu supprimes/commentes :
# 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')
Ça ne marche toujours pas…
L’automatisation d’update n’est pas déclenché quand je modifie l’heure du reveil sur la carte :
Tu mets bien a jour l’heure à travers les 2 input_select (heure/minute)?
On peut le remplacer par un truc plus sympa (et ne nécessite pas le sensor.time) :
trigger:
platform: time
at: input_datetime.wake_time_1
Oui :
#fichiers d'Input_select
wakehour_1:
#Représente le choix de l'heure du réveil
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 du réveil
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
J’ai bien le sensor.time
dans mon fichier sensor.yaml :
- platform: time_date
display_options:
- 'date'
- 'time'
- 'date_time
Et quand tu changes la valeur d’un input_select, l’ input_datetime se met à jour ?
Oui modifiant directement sur la carte l’heure et les minutes du réveil, l’état de mon input datetime se met bien à jour.
Que veux tu dire par ça alors ?
La mise a jour de cette automatisation se fait des input_select vers input_datetime. Pour l’autre sens il faut une autre automatisation…
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 ?