[CARTE] Réveil (ou activation d'automatisation)

Au top Clemalex

Effectivement ça rend bien mieux. J’aime beaucoup. je prépare d’autres exemple de carte sympa.

N’hésite pas !

J’adore voir des cartes car on peut tellement faire de très belles choses :heart:

Bonsoir les homies,

Et un grand merci à toi @Clemalex pour cette carte faut pratique !

Je n’ai pas eu de problème pour reproduire la carte dans mon dashboard, par contre j’essaie d’adapter le code des entités de la carte à ma configuration. En effet je n’ai pas de xiaomi, j’utilise mon enceinte Google comme réveil. Du coup je voulais savoir à quoi sert les scripts xiaomi_alarm (1, 2 et 3) et alarm_snooze histoire d’essayer de convertir tout cela avec mon enceinte Google. J’imagine que c’est différent son d’alarme ?

Tant que j’y suis, les inputs select, datetime, et booleans m’ont pas mal rempli mon fichier de configuration, c’est possible de séparer ma config vers d’autres fichiers comme c’est le cas avec les automations, scripts, sensor etc…?

Bonne nuit.
A bientôt!

C’est détaillé ici :


Je te conseille de lire :

La traduction de la documentation est ici.

Inspire toi des configurations présentes dans l’awesome.


Si tu bloque toujours, n’hésite pas à expliquer ce que tu veux faire exactement, et on fera la mise au point ensemble :+1:

:hacf:

Bonjour,
Navré pour ma question basique, je débute: j’essaye d’intégrer le mode package en créant un fichier reveil.yaml que je déclare dans configuration .yaml (reveil: !include reveil.yaml) mais HA n’est pas content (Component error: reveil - Integration ‹ reveil › not found.). Cela avant d’aller intégrer la carte dans Lovelace.
Ce n’est pas la bonne procédure ?
Merci

Non, pas du tout :wink: :upside_down_face:

Regarde par ici :

1 « J'aime »

Re, merci pour les infos. Après avoir bien compris le fonctionnement de HA avec les fichiers yaml j’ai séparé ma config en créant les fichiers input_boolean.yaml, input_datetime.yaml, et input_select.yaml. Mon fichier de config s’est ainsi bien aéré.

En ce qui concerne les scripts de la xiaomi gateway j’ai bien compris qu’ils servent juste émettre un son répété d’alarme à l’heure du réveil.

A la place de ces scripts, j’ai simplement mis un script qui joue une musique sur mon enceinte. Le script est fonctionnelle quand je le joue manuellement mais il ne fonctionne pas avec les automatisations qui découle de la carte réveil. Pourtant j’ai bien veillé à remplacer dans l’automation « Wake 1 Activated » le script qui est lancé par le mien…

J’ai une piste : j’ai l’impression que l’automatisation qui met à jour l’heure du réveil ne fonctionne pas :thinking:

Tu as des idées @Clemalex ?

Tu peux me fournir le code que TU utilises (je précise le tiens car j’avais fait des remarques sur le fonctionnement de l’automatisation de base).

Réponds à la suite de ce fil ci :

J’avais fais ces remarques :

On passe sur le topic de l’automatisation plutôt que la carte :+1:

2 messages ont été fusionnés à un sujet existant : Un réveil sur Home assistant

Du coup, j’ai eu besoin d’ajouter une heure d’extinction à la carte de base, ce qui me donne :

animate

Le titre de la carte n’est plus cliquable et clignote si la prise associée est allumée.
L’activation/désactivation se fait depuis les boutons ON/OFF
Le réglage de l’heure d’allumage/extinction se fait à l’aide des boutons avec l’icone d’une prise.
Aucun changement pour les boutons des jours.

Code de la carte
style: >
  @keyframes blink {
      50% {
        color: var(--paper-item-icon-active-color);
      }
      100% {
        color: var(--primary-color);
      }
    }
  #root > hui-state-label-element:nth-child(2),#root >
  hui-state-label-element:nth-child(3) {
    animation: {% if is_state('switch.prise_bureau', 'on') %} blink 1.5s ease-in-out infinite{% endif %};
  }

elements:
  - entity: sensor.vide
    prefix: Bureau
    style:
      color: var(--primary-color)
      font-size: 20px
      font-variant: small-caps
      left: 15%
      pointer-events: none
      top: 23%
    tap_action:
      action: none
    type: state-label
  - entity: sensor.vide
    prefix: Clemalex
    style:
      color: var(--primary-color)
      font-size: 20px
      font-variant: small-caps
      left: 15%
      pointer-events: none
      top: 34%
    tap_action:
      action: none
    type: state-label
  - type: 'custom:stack-in-card'
    style:
      bottom: 30%
      left: 15%
    mode: horizontal
    keep:
      background: true
    cards:
      - type: 'custom:button-card'
        entity: input_boolean.wakestatus_1
        show_icon: false
        show_state: false
        name: 'On'
        styles:
          card:
            - width: 50px
            - height: 24px
            - padding: 10%
            - font-size: 16px
            - font-variant: small-caps
            - border: 2px solid var(--primary-color)
            - background: |
                [[[
                  if (entity.state == 'on')
                    return 'var(--primary-color)';
                  else
                    return 'white';
                ]]]
          name:
            - color: |
                [[[
                  if (entity.state == 'on')
                    return 'white';
                  else
                    return 'var(--primary-color)';
                ]]]
      - type: 'custom:button-card'
        entity: input_boolean.wakestatus_1
        show_icon: false
        show_state: false
        name: 'Off'
        styles:
          card:
            - width: 50px
            - height: 24px
            - padding: 10%
            - font-size: 16px
            - font-variant: small-caps
            - border: 2px solid var(--primary-color)
            - background: |
                [[[
                  if (entity.state == 'off')
                    return 'var(--primary-color)';
                  else
                    return 'white';
                ]]]
          name:
            - color: |
                [[[
                  if (entity.state == 'off')
                    return 'white';
                  else
                    return 'var(--primary-color)';
                ]]]
  - type: 'custom:state-switch'
    style:
      left: 47%
      top: 36%
    entity: input_boolean.wakesettime_1
    default: 'on'
    transition: flip
    transition_time: 300
    states:
      'on':
        entity: input_datetime.wake_time_1_on
        hide:
          name: true
        hour_step: 1
        layout:
          embedded: false
          name: inside
          align_controls: center
        link_values: true
        minute_step: 1
        name: ''
        style:
          .: |
            ha-card {
              box-shadow: none;
              background-color: rgba(0,0,0,0);
              opacity: {% if is_state('input_boolean.wakestatus_1', 'off') %} 0.3 {% endif %};
              pointer-events: {% if is_state('input_boolean.wakestatus_1', 'off') %} none {% endif %};
            }
            .time-picker-row{
              margin-left: 5px !important;
            }
          .time-picker-row:
            .time-picker-content:
              .: |
                .time-separator {
                  display: none;
                }
              time-unit:
                $: |
                  .time-unit {
                    padding: 2px !important;
                  }
                  .time-input {
                    border: 2px solid var(--primary-color) !important;
                    background-color: rgba(0,0,0,0) !important;
                    color: black !important;
                    border-radius: 5px;
                  }     
                  .time-picker-icon {
                    color: var(--primary-color) !important;
                    z-index: 100;
                  }
        type: 'custom:time-picker-card'
      'off':
        entity: input_datetime.wake_time_1_off
        hide:
          name: true
        hour_step: 1
        layout:
          embedded: false
          name: inside
          align_controls: center
        link_values: true
        minute_step: 1
        name: ''
        style:
          .: |
            ha-card {
              box-shadow: none;
              background-color: rgba(0,0,0,0);
              opacity: {% if is_state('input_boolean.wakestatus_1', 'off') %} 0.3 {% endif %};
              pointer-events: {% if is_state('input_boolean.wakestatus_1', 'off') %} none {% endif %};
            }
            .time-picker-row{
              margin-left: 5px !important;
            }
          .time-picker-row:
            .time-picker-content:
              .: |
                .time-separator {
                  display: none;
                }
              time-unit:
                $: |
                  .time-unit {
                    padding: 2px !important;
                  }
                  .time-input {
                    border: 2px solid var(--primary-color) !important;
                    background-color: rgba(0,0,0,0) !important;
                    color: black !important;
                    border-radius: 5px;
                  }     
                  .time-picker-icon {
                    color: var(--primary-color) !important;
                    z-index: 100;
                  }
        type: 'custom:time-picker-card'
  - entity: input_boolean.wakeweekday_mon_1
    show_label: false
    show_icon: false
    show_name: true
    show_state: false
    name: Lu
    style:
      '--paper-item-icon-color': var(--primary-color)
      right: 15%
      top: 20%
    styles:
      card:
        - width: 30px
        - height: 30px
        - border-radius: 999px
        - background-color: |
            [[[
              if ( (states['input_boolean.wakeweekday_mon_1'].state == 'off') ) return 'var(--primary-color)';
              else return 'var(--paper-item-icon-active-color)';
            ]]] 
        - box-shadow: none
        - border-radius: 999px
        - opacity: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return '0.3';
              else return '1';
            ]]] 
        - pointer-events: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return 'none';
              else return 'auto';
            ]]] 
      name:
        - color: white
    type: 'custom:button-card'
  - entity: input_boolean.wakeweekday_tue_1
    show_label: false
    show_icon: false
    show_name: true
    show_state: false
    name: Ma
    style:
      '--paper-item-icon-color': var(--primary-color)
      right: 5%
      top: 20%
    styles:
      card:
        - width: 30px
        - height: 30px
        - border-radius: 999px
        - background-color: |
            [[[
              if ( (states['input_boolean.wakeweekday_tue_1'].state == 'off') ) return 'var(--primary-color)';
              else return 'var(--paper-item-icon-active-color)';
            ]]] 
        - box-shadow: none
        - border-radius: 999px
        - opacity: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return '0.3';
              else return '1';
            ]]] 
        - pointer-events: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return 'none';
              else return 'auto';
            ]]] 
      name:
        - color: white
    type: 'custom:button-card'
  - entity: input_boolean.wakeweekday_wed_1
    show_label: false
    show_icon: false
    show_name: true
    show_state: false
    name: Me
    style:
      '--paper-item-icon-color': var(--primary-color)
      right: 20%
      top: 50%
    styles:
      card:
        - width: 30px
        - height: 30px
        - border-radius: 999px
        - background-color: |
            [[[
              if ( (states['input_boolean.wakeweekday_wed_1'].state == 'off') ) return 'var(--primary-color)';
              else return 'var(--paper-item-icon-active-color)';
            ]]] 
        - box-shadow: none
        - border-radius: 999px
        - opacity: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return '0.3';
              else return '1';
            ]]] 
        - pointer-events: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return 'none';
              else return 'auto';
            ]]] 
      name:
        - color: white
    type: 'custom:button-card'
  - entity: input_boolean.wakeweekday_thu_1
    show_label: false
    show_icon: false
    show_name: true
    show_state: false
    name: Je
    style:
      '--paper-item-icon-color': var(--primary-color)
      right: 10%
      top: 50%
    styles:
      card:
        - width: 30px
        - height: 30px
        - border-radius: 999px
        - background-color: |
            [[[
              if ( (states['input_boolean.wakeweekday_thu_1'].state == 'off') ) return 'var(--primary-color)';
              else return 'var(--paper-item-icon-active-color)';
            ]]] 
        - box-shadow: none
        - border-radius: 999px
        - opacity: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return '0.3';
              else return '1';
            ]]] 
        - pointer-events: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return 'none';
              else return 'auto';
            ]]] 
      name:
        - color: white
    type: 'custom:button-card'
  - entity: input_boolean.wakeweekday_fri_1
    show_label: false
    show_icon: false
    show_name: true
    show_state: false
    name: Ve
    style:
      '--paper-item-icon-color': var(--primary-color)
      right: 0%
      top: 50%
    styles:
      card:
        - width: 30px
        - height: 30px
        - border-radius: 999px
        - background-color: |
            [[[
              if ( (states['input_boolean.wakeweekday_fri_1'].state == 'off') ) return 'var(--primary-color)';
              else return 'var(--paper-item-icon-active-color)';
            ]]] 
        - box-shadow: none
        - border-radius: 999px
        - opacity: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return '0.3';
              else return '1';
            ]]] 
        - pointer-events: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return 'none';
              else return 'auto';
            ]]] 
      name:
        - color: white
    type: 'custom:button-card'
  - entity: input_boolean.wakeweekday_sat_1
    show_label: false
    show_icon: false
    show_name: true
    show_state: false
    name: Sa
    style:
      '--paper-item-icon-color': var(--primary-color)
      right: 15%
      top: 80%
    styles:
      card:
        - width: 30px
        - height: 30px
        - border-radius: 999px
        - background-color: |
            [[[
              if ( (states['input_boolean.wakeweekday_sat_1'].state == 'off') ) return 'var(--primary-color)';
              else return 'var(--paper-item-icon-active-color)';
            ]]] 
        - box-shadow: none
        - border-radius: 999px
        - opacity: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return '0.3';
              else return '1';
            ]]] 
        - pointer-events: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return 'none';
              else return 'auto';
            ]]] 
      name:
        - color: white
    type: 'custom:button-card'
  - entity: input_boolean.wakeweekday_sun_1
    show_label: false
    show_icon: false
    show_name: true
    show_state: false
    name: Di
    style:
      '--paper-item-icon-color': var(--primary-color)
      right: 5%
      top: 80%
    styles:
      card:
        - width: 30px
        - height: 30px
        - border-radius: 999px
        - background-color: |
            [[[
              if ( (states['input_boolean.wakeweekday_sun_1'].state == 'off') ) return 'var(--primary-color)';
              else return 'var(--paper-item-icon-active-color)';
            ]]] 
        - box-shadow: none
        - border-radius: 999px
        - opacity: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return '0.3';
              else return '1';
            ]]] 
        - pointer-events: |
            [[[
              if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return 'none';
              else return 'auto';
            ]]] 
      name:
        - color: white
    type: 'custom:button-card'
  - type: 'custom:stack-in-card'
    style:
      top: 80%
      left: 48%
    mode: horizontal
    keep:
      background: true
    cards:
      - type: 'custom:button-card'
        entity: input_boolean.wakesettime_1
        icon: 'mdi:power-plug'
        show_label: false
        show_name: false
        show_state: false
        styles:
          card:
            - line-height: 0
            - width: 50px
            - height: 24px
            - border: 2px solid var(--primary-color)
            - background: |
                [[[
                  if (entity.state == 'on')
                    return 'var(--primary-color)';
                  else
                    return 'white';
                ]]]
            - opacity: |
                [[[
                  if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return '0.3';
                  else return '1';
                ]]] 
            - pointer-events: |
                [[[
                  if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return 'none';
                  else return 'auto';
                ]]] 
          icon:
            - transform: scale(1.2)
            - color: |
                [[[
                  if (entity.state == 'on')
                    return 'white';
                  else
                    return 'var(--primary-color)';
                ]]]
      - type: 'custom:button-card'
        entity: input_boolean.wakesettime_1
        icon: 'mdi:power-plug-off'
        show_label: false
        show_name: false
        show_state: false
        styles:
          card:
            - line-height: 0
            - width: 50px
            - height: 24px
            - border: 2px solid var(--primary-color)
            - background: |
                [[[
                  if (entity.state == 'off')
                    return 'var(--primary-color)';
                  else
                    return 'white';
                ]]]
            - opacity: |
                [[[
                  if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return '0.3';
                  else return '1';
                ]]] 
            - pointer-events: |
                [[[
                  if ( (states['input_boolean.wakestatus_1'].state == 'off') ) return 'none';
                  else return 'auto';
                ]]] 
          icon:
            - transform: scale(1.2)
            - color: |
                [[[
                  if (entity.state == 'off')
                    return 'white';
                  else
                    return 'var(--primary-color)';
                ]]]
image: /local/images/transparent/transparent_clock.png
type: picture-elements

Image transparent agrandie : [transparent_clock ] ← Elle est entre les crochets :wink:

Et l’automatisation qui va avec :

Code de l'automatisation
- id: 'bureau_clemalex'
  alias: bureau_clemalex
  description: ''
  trigger:
  - platform: state
    entity_id: sensor.time
  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:
  - choose:
    - conditions:
      - condition: template
        value_template: "{% set time_off = strptime(states('input_datetime.wake_time_1_off'),\
          \ '%H:%M:%S').strftime('%H:%M:%S') %} {% set time = strptime(states('sensor.time'),\
          \ '%H:%M').strftime('%H:%M:%S')%} {% if time >= time_off %}\n  true\n{%\
          \ else %}\n  false\n{% endif %}\n"
      sequence:
      - service: switch.turn_off
        entity_id: switch.prise_bureau
    - conditions:
      - condition: template
        value_template: "{% set time_on = strptime(states('input_datetime.wake_time_1_on'),\
          \ '%H:%M:%S').strftime('%H:%M:%S') %} {% set time = strptime(states('sensor.time'),\
          \ '%H:%M').strftime('%H:%M:%S')%} {% if time >= time_on %}\n  true\n{% else\
          \ %}\n  false\n{% endif %}\n"
      sequence:
      - service: switch.turn_on
        entity_id: switch.prise_bureau
  mode: single

Pour rappel les entités :

Les entités
sensor:
  - platform: template
    sensors:
      vide:
        value_template: ""
input_boolean:
  wakesettime_1:
    name: set time
    icon: mdi:clock
  wakestatus_1:
    name: Alarme 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:
  wake_time_1_on:
    name: Horaire 1 on
    has_time: true
  wake_time_1_off:
    name: Horaire 1 off
    has_time: true

Mise à jour de la carte avec un bouton d’activation de l’automatisation plus compréhensible :

https://forum.hacf.fr/t/mon-dashboard-clemalex/737/51?u=clemalex

Salut @Clemalex ,
J’ai un p’tit soucis avec ta carte et j’arrive pas voir d’où ça vient.
J’ai un point d’exclamation à la place de l’activation, un truc Zarbi derrière les minutes…
Et la couleur ne change pas quand j’active ou desactive les jours…
Saurais tu m’aiguiller ?

Le « truc zarbi » je pense que c’est l’image non présente.

Le point d’exclamation, une entité manquante.

Le non changement de couleur doit être un autre manque d’entité je pense…

Sur la carte d’origine, le bouton activation fonctionne bien. C’est une autre entité ?
Les couleurs, je vois pas.
Je vais revérifier toutes les déclarations…

Et l’image encore moins :thinking: :rofl:

Mais j’ai pas d’erreurs dans le code, du moins il m’en dit pas…

De quoi ? Le texte ? Oui le texte est une entité vide.

Le texte c’est bon. Me manquait l’entité vide.
Les autres erreurs je sais pas encore…

input_boolean.wakestatus_1

Alors c’est pas le wakestatus, c’est plus bête que ça.
J’ai un thème dark_orange, et il ne me change pas la couleur. Il fait orange-orange…
Si j’enlève le thème, il me permute bien les couleurs.
Faut que je change les couleurs dans la carte ?

Me reste donc cet ersatz d’image derrière …

@Clemalex Hello,

j’ai pas compris dans le fonctionnement du réveil à un seul réglage comment le wakestatus_1 se remet à 0 ?

Et tu pourrais me dire comment changer la taille de la sélection d’heures/minutes, et la couleur ?

Merci