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.
(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 :
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 :
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 :
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)
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 :
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
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