Ma gestion de présence pour le chauffage

Bonjour,

L’objectif de ce 3e post est de permettre la programmation d’un préchauffage le plus simple possible.
On utilise à nouveau des conditions de visibilité des boutons pour avoir ces 4 affichages possibles :

Initial
image

Prêt à être programmer ou démarrer immédiatement
image

Une fois programmée
image

En route (C’est alors exactement comme le mode forçage du 1e post)
image

Le code est alors simple pour la partie automatisation.

  • On stocke les heures
input_datetime
input_datetime:
  heure_retour:
    name: "Heure de retour"
    has_time: true
    has_date: false

    
  heure_prechauffage:
    name: "Heure de préchauffage"
    has_time: true
    has_date: false
  • On prévoit les différents états et le timer
input_boolean
input_boolean:
  configurer_prechauffage:
    name: "Préchauffage : Configurer"
    initial: off 
  prechauffage_programmee:
    name: "Prechauffage : Programmée"
    initial: off 
  force_prechauffage:
    name: "Force la présence dans la maison pour préchauffer"
    initial: off 
timer:
  timer_prechauffage:
    name: "Timer préchauffage"
    duration: '00:30:00'  
  • Les automatismes sont similaires au forçage de la présence.
    On remarquera l’usage de Jinja2 entre doubles accolades pour prévoir l’heure de préchauffade 30 minutes avant l’heure de retour. Je dis Jinja2, mais c’est en fait du python en accolages pour rendre le code dynamique (C’est ma définition du Jinja2)
automation
automation:
  - alias: "Définir heure préchauffage"
    triggers:
      - platform: state
        entity_id: input_datetime.heure_retour
    actions:
      - action: input_datetime.set_datetime
        target:
          entity_id: input_datetime.heure_prechauffage
        data:
          time: "{{ (strptime(states('input_datetime.heure_retour'),'%H:%M:%S' ) - timedelta(minutes=30)).strftime('%H:%M:%S') }}"

  - alias: "Préchauffage : Activer"
    triggers:
      platform: time
      at: input_datetime.heure_prechauffage
    condition:
      - condition: state
        entity_id: input_boolean.prechauffage_programmee
        state: 'on' 
    actions:
      - action: timer.start
        target:
          entity_id: timer.timer_prechauffage
      - action: input_boolean.turn_on
        target:
         entity_id: input_boolean.force_prechauffage
      - action: input_boolean.turn_off
        target:
         entity_id: input_boolean.prechauffage_programmee

  - alias: "Préchauffage : Arrêt"
    triggers:
      - platform: event
        event_type: timer.finished
        event_data:
          entity_id: timer.timer_prechauffage
    actions:
      - action: input_boolean.turn_off
        target:
         entity_id:
           - input_boolean.force_prechauffage
           - input_boolean.configurer_prechauffage
           - input_boolean.prechauffage_programmee

La partie réglage de l’heure de retour est plus spécifique.
L’objectif est de permettre le réglage le plus facile possible, avec des boutons incrémentant de 15 minutes (le réglages précis de l’heure restant possible en cliquant de dessus)
On utilise un script qui sera lancé par action sur le tableau de bord
image

script:
  incrementer_heure_retour:
    sequence:
      - action: input_datetime.set_datetime
        target:
          entity_id: input_datetime.heure_retour
        data:
          time: "{{ (strptime(states('input_datetime.heure_retour'),'%H:%M:%S' ) + timedelta(minutes=15)).strftime('%H:%M:%S') }}"
  decrementer_heure_retour:
    sequence:
      - action: input_datetime.set_datetime
        target:
          entity_id: input_datetime.heure_retour
        data:
          time: "{{ (strptime(states('input_datetime.heure_retour'),'%H:%M:%S' ) - timedelta(minutes=15)).strftime('%H:%M:%S') }}"

Ce script peut être adapté à d’autres réglages de l’heure par exemple pour un réveil.
Il doit exister d’autres méthodes plus élégantes.

Pour finir, il faut un bon placement des entités dans le tableau de bord en mode section, des interactions et des règles de visibilité adaptées permettent un jolie bouton paramétrage pas trop gros.

Je mets la configuration en yaml

      - type: grid
        cards:
          - type: tile
            entity: input_boolean.configurer_prechauffage
            hide_state: true
            icon: mdi:thermometer-chevron-up
            layout_options:
              grid_columns: 4
              grid_rows: 2
            color: indigo
            show_entity_picture: false
            tap_action:
              action: toggle
            icon_tap_action:
              action: toggle
            visibility:
              - condition: state
                entity: input_boolean.configurer_prechauffage
                state: 'off'
          - type: tile
            entity: input_datetime.heure_retour
            visibility:
              - condition: state
                entity: input_boolean.configurer_prechauffage
                state: 'on'
              - condition: state
                entity: timer.timer_prechauffage
                state: idle
              - condition: state
                entity: input_boolean.prechauffage_programmee
                state: 'off'
          - type: tile
            entity: script.lancer_immediatement_prechauffage
            icon: mdi:thermometer-check
            hide_state: true
            name: Préchauffage direct
            tap_action:
              action: toggle
            icon_tap_action:
              action: toggle
            visibility:
              - condition: state
                entity: input_boolean.configurer_prechauffage
                state: 'on'
              - condition: state
                entity: timer.timer_prechauffage
                state: idle
              - condition: state
                entity: input_boolean.prechauffage_programmee
                state: 'off'
          - show_name: false
            show_icon: true
            type: button
            tap_action:
              action: toggle
            entity: script.decrementer_heure_retour
            icon: mdi:clock-minus
            hold_action:
              action: toggle
            visibility:
              - condition: state
                entity: input_boolean.configurer_prechauffage
                state: 'on'
              - condition: state
                entity: timer.timer_prechauffage
                state: idle
              - condition: state
                entity: input_boolean.prechauffage_programmee
                state: 'off'
          - show_name: false
            show_icon: true
            type: button
            tap_action:
              action: toggle
            entity: script.incrementer_heure_retour
            icon: mdi:clock-plus
            visibility:
              - condition: state
                entity: input_boolean.configurer_prechauffage
                state: 'on'
              - condition: state
                entity: timer.timer_prechauffage
                state: idle
              - condition: state
                entity: input_boolean.prechauffage_programmee
                state: 'off'
          - type: tile
            entity: input_boolean.prechauffage_programmee
            tap_action:
              action: toggle
            icon_tap_action:
              action: toggle
            icon: mdi:thermometer-lines
            name: 'Programme préchauffage '
            hide_state: true
            visibility:
              - condition: state
                entity: input_boolean.configurer_prechauffage
                state: 'on'
              - condition: state
                entity: timer.timer_prechauffage
                state: idle
              - condition: state
                entity: input_boolean.prechauffage_programmee
                state: 'off'
          - type: tile
            entity: input_datetime.heure_prechauffage
            layout_options:
              grid_columns: 4
              grid_rows: 2
            tap_action:
              action: perform-action
              perform_action: automation.trigger
              target:
                entity_id: automation.prechauffage_arret
              data:
                skip_condition: true
            visibility:
              - condition: state
                entity: input_boolean.prechauffage_programmee
                state: 'on'
              - condition: state
                entity: timer.timer_prechauffage
                state: idle
          - type: tile
            entity: timer.timer_prechauffage
            tap_action:
              action: perform-action
              perform_action: timer.finish
              target:
                entity_id: timer.timer_prechauffage
              data: {}
            layout_options:
              grid_columns: 4
              grid_rows: 2
            icon_tap_action:
              action: perform-action
              perform_action: timer.finish
              target:
                entity_id: timer.timer_prechauffage
            visibility:
              - condition: state
                entity: timer.timer_prechauffage
                state: active
1 « J'aime »