Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[TUTO] Programmer une période date/heure vers le KNX
#1
Bonjour,

Un petit tuto pour une fonction plutôt utile à savoir programmer une période date/heure depuis HA vers le KNX.
C'est très utile pour toutes les automations (souvent à base de ABA S1.2.1) qui ont besoin d'avoir des consignes de date et/ou d'heure.

On va prendre un exemple concret : programmer une période d'absence (le knx ensuite, gère la maison en fonction de ce vous lui avez demandé de faire)

Prérequis KNX :
Dans les prérequis, on a besoin au niveau KNX de plusieurs objets (à modifier en fonction de vos besoins) mais personnellement je trouve qu'il s'agit des objets à avoir au minimum.
  • Une entrée date pour le départ
  • Une entrée date pour le retour
  • Une entrée time pour le départ
  • Une entrée time pour le retour
  • Une entrée switch pour activer/desactiver la programmation
  • Un état de la programmation en cours (pour savoir si elle est dans sa période active)

(Pour des raisons techniques pour le ABA S1.2.1, il n'est pas possible de travailler avec un objet Date/Time dans les calendriers de comparaison, d'où les objets scindés date et heure - A voir si quelqu'un peut faire évoluer la chose !)

Prérequis KNX/HA :
Il est nécessaire de créer des objets spécifiques pour que HA puisse écrire dans les GA concernées. Pour ceux qui connaisse la méthode "expose" de knx sous HA, ce n'est pas adapté à ce contexte. Cela sert uniquement (dans le cas de date/time) à exposer l'heure et la date courante (pour remplacer un participant qui n'aurait pas cette fonctionnalité pour l'envoyer à tous les participants sur le bus).
Pour envoyer une date et/ou heure différent de la date/heure courante (ce que l'on cherche ici) c'est un formatage dédié en yaml date: et time:

Voici un exemple pour ce tuto avec les objets attendus :

Code :
knx:
##################
#  Dates et heures KNX
##################
  date:
    - name: "Date depart vacances"
      address: "8/5/2"
      state_address: "8/5/2"
    - name: "Date retour vacances"
      address: "8/5/3"
      state_address: "8/5/3"
  time:
    - name: "Heure depart vacances"
      address: "8/5/4"
      state_address: "8/5/4"
    - name: "Heure retour vacances"
      address: "8/5/5"
      state_address: "8/5/5"

##################
#     Boutons
##################
  switch:
    - name: 'Prog Mode Vacances'
      address: '8/5/6'

##################
#     Binary Sensor
##################
  binary_sensor:
    - name: "Mode vacances status"
      state_address: '8/5/7'
      sync_state: true
      device_class: presence
      invert: false



Prérequis HA :
On a besoin de pouvoir saisir les dates et les heures de départ et de retour.
On crée donc 4 input_datetime dans HA. 
Paramètres->Appareils et services->Entrées
Bouton "Créer une entrée" puis choisir "Date et/ou heure"

On va les appeler comme ceci :
  • "prog_vacances_date_depart" en mode date uniquement
  • "prog_vacances_date_retour" en mode date uniquement
  • "prog_vacances_heure_depart" en mode heure uniquement
  • "prog_vacances_heure_retour" en mode heure uniquement

On aura aussi besoin d'un script qui va copier ces input_datetime dans les objets HA précédemment créés.
Pour rappel pour créer le script :
Paramètres->Automatisations et scènes->Scripts
Bouton "Créer un script", passer en édition yaml et copier/coller le code suivant :

Code :
sequence:
 - action: date.set_value
   target:
     entity_id: date.date_depart_vacances
   data:
     date: "{{ states('input_datetime.prog_vacances_date_depart') }}"
 - action: date.set_value
   target:
     entity_id: date.date_retour_vacances
   data:
     date: "{{ states('input_datetime.prog_vacances_date_retour') }}"
 - action: time.set_value
   target:
     entity_id: time.heure_depart_vacances
   data:
     time: "{{ states('input_datetime.prog_vacances_heure_depart') }}"
 - action: time.set_value
   target:
     entity_id: time.heure_retour_vacances
   data:
     time: "{{ states('input_datetime.prog_vacances_heure_retour') }}"
 - action: switch.turn_on
   target:
     entity_id: switch.mode_vacances
   data: {}
alias: Validation Programmation Vacances
description: ""


On a preque terminé, il ne reste qu'à interagir avec tout cela.

Visuel HA :
Comme à mon habitude, je suis adapte des cards mushroom. 
J'ai fait simple pour celle-ci, cela nécessite quand même quelques add-ons (que tout le monde doit avoir j'imagine)
  • mushroom-card
  • browser-mod
  • card-mod
  • time-picker-card

Ensuite la carte est simple, voici le fonctionnement :
Une carte unique, lorsqu'on clic dessus, une fenêtre supplémentaire s'ouvre et demande date/heure départ et date/heure retour ainsi qu'un bouton de validation. On valide (avec une confirmation) et la programmation se met en place et active la programmation. 
Un double clic permet de désactiver la programmation.
Un badge_icon indique le fonctionnement de la période si c'est le cas.


A noter, un bug existe dans brower_mod qui n'affiche pas le popup date_picker de l'input_datetime pour une raison inconnue. En attendant il faut cliquer sur le nom plutôt que le champ. Cela ouvre le input_date, la le datepicker fonctionne, choisissez la date et revenir ensuite sur la programmation.
En réalité HA a un peu de retard (en natif) pour créer des beaux date/time picker et permettre d'utiliser des popup. Ici pour palier les manques de HA, il faut donc utiliser browser_mod pour le popup et time-picker-card pour faire défiler les heures. Il n'existe pas encore d'équivalent 'date picker' malheureusement.
Il faut donc prendre son mal en patience pour le bug rencontré qui j'espère sera corrigé bientôt.

Voici donc le code de la carte :
Code :
type: vertical-stack
title: Programmation Absence
cards:
 - type: horizontal-stack
   cards:
     - type: custom:mushroom-template-card
       icon: mdi:airplane-clock
       name: Programmation
       layout: vertical
       multiline_secondary: true
       primary: Programmer une période d'absence
       secondary: |
         Programmer une période avec un clic
         Active/désactive la programmation par un double clic
       badge_icon: |
         {% if (states("binary_sensor.mode_vacances_status") == "on" )  %}
           mdi:calendar-check-outline            
         {% endif %}
       badge_color: |
         {% if (states("binary_sensor.mode_vacances_status") == "on" )  %}
           green
         {% endif %}
       icon_color: |
         {% if (states("switch.mode_vacances") == "off" )  %}
           grey
         {% elif (states("switch.mode_vacances") == "on") %}
           green
         {% endif %}        
       hold_action:
         action: call-service
         service: switch.toggle
         data:
           entity_id: switch.mode_vacances
       double_tap_action:
         action: call-service
         service: switch.toggle
         data:
           entity_id: switch.mode_vacances
       card_mod:
         style:
           .: |
             ha-card {
               padding-bottom: 5px !important;
             }              
           mushroom-badge-icon$: |
             .badge {
               --badge-icon-size: 18px;
               --badge-size: 22px;
             }
           mushroom-shape-icon$: |
             .shape {
               --icon-symbol-size: 40px;
               --icon-size: 60px;
             }
       tap_action:
         action: fire-dom-event
         browser_mod:
           service: browser_mod.popup
           data:
             title: Programmer la période d'absence
             content:
               type: custom:vertical-stack-in-card
               cards:
                 - type: vertical-stack
                   cards:
                     - type: custom:mushroom-title-card
                       title: null
                       subtitle: Choisir la date et l'heure du départ
                       card_mod:
                         style: |
                           ha-card {
                             margin-left: 30px;
                             margin-right: 30px;
                           }
                     - type: entities
                       entities:
                         - entity: input_datetime.prog_vacances_date_depart
                           name: Date départ
                         - type: custom:time-picker-card
                           entity: input_datetime.prog_vacances_heure_depart
                           name: Heure départ
                           layout:
                             name: inside
                             align_controls: right
                             embedded: true
                             thin: true
                     - type: custom:mushroom-title-card
                       title: null
                       subtitle: Choisir la date et l'heure du retour
                       card_mod:
                         style: |
                           ha-card {
                             margin-left: 30px;
                             margin-right: 30px;
                           }
                     - type: entities
                       entities:
                         - entity: input_datetime.prog_vacances_date_retour
                           name: Date retour
                         - type: custom:time-picker-card
                           entity: input_datetime.prog_vacances_heure_retour
                           name: Heure retour
                           layout:
                             name: inside
                             align_controls: right
                             embedded: true
                             thin: true
                     - type: horizontal-stack
                       cards:
                         - type: custom:gap-card
                         - type: custom:mushroom-template-card
                           icon: mdi:tooltip-check-outline
                           primary: Valider
                           fill_container: false
                           icon_color: green
                           tap_action:
                             action: call-service
                             confirmation:
                               text: >-
                                 Valider et activer la programmation de la
                                 période d'absence indiquée ?
                             service: script.validation_programmation_vacances
                           card_mod:
                             style:
                               .: |
                                 ha-card {
                                   margin-top: 30px;
                                   margin-bottom: 30px;
                                 }
                         - type: custom:gap-card
 
Résultats et visuels :
La carte lovelace
   

La carte si une programmation est activée
   

La carte si la programmation demandée est en cours
   

La fenêtre de programmation
   

La validation de la programmation
   
Répondre
#2
Merci pour ce tuto
Répondre
#3
Merci pour le tuto. Je testerai prochainement pour comparer à ma solution actuelle qui consiste à entrer les données dates/heures dans ce type de carte 
   

Pour la date: création d'un imput_datetime dans HA puis lien direct avec une GA (exploitée dans l'ABA/1.2.1) via Node-Red avec ce type de noeud
   
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)