Bonjour,
Mon problème
J’ai une carte qui montre une heure, celle du prochain démarrage d’un chauffe eau. Je souhaiterais ajouter un bouton à côté qui publierait cette heure en MQTT.
Quelque chose comme ça :
Pour l’instant, mon heure est affichée avec ceci :
type: custom:time-picker-card
entity: input_datetime.hdemarragece
hour_mode: 24
hour_step: 1
minute_step: 5
layout:
hour_mode: double
align_controls: center
name: header
hide:
seconds: true
name: Prochain démarrage chauffe eau
link_values: false
A côté j’ai mis un bouton :
show_name: true
show_icon: true
type: button
tap_action:
action: perform-action
perform_action: mqtt.publish
target: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: elec/cedemarre
payload: "{{ state_attr('time_date.hDemarrageCE') | timestamp_local }}"
name: Envoyer au CE
icon: mdi:heating-coil
Le problème est que ce qui est envoyé est une chaîne de caractères et pas l’heure.
Est-ce qu’il faut recréer un time_date template qui serait initialisé au moment du clic et qui publierait sa valeur ? j’ai plus ou moins essayé mais la syntaxe est toujours incorrecte.
Ma configuration
|Version|core-2025.3.4|
| — | — |
|Type d’installation|Home Assistant OS|
|Développement|false|
|Supervisor|true|
|Docker|true|
|Utilisateur|root|
|Environnement virtuel|false|
|Version de Python|3.13.2|
|Famille du système d’exploitation|Linux|
|Version du système d’exploitation|6.6.74-haos-raspi|
|Architecture du processeur|aarch64|
|Fuseau horaire|Europe/Paris|
|Répertoire de configuration|/config|
Pourquoi oublier en mqtt ? Tu comptes l’utiliser dans quoi ?
Je le ferais plutôt avec une entrée (helper)
Bonjour,
La raison est que toute la partie commande est réalisée par un esp32 et j’ai choisi d’utiliser MQTT pour communiquer.
Donc ton esp32 vas écouter le mqtt et stocker quelque part la donnée
Attention certains confondent mqtt et base de donnée
Ou alors il faut jouer avec le retain pour garder la valeur en mémoire
C’est tout à fait ça, dans l’idéal je souhaiterais que toute modification de l’heure ou de la minute soit publiée.
J’ai essayé mais sans parvenir à un code accepté, il y a toujours des erreurs de syntaxe.
De ce fait je me suis dit qu’avec un bouton qui publierait la valeur du time_date ce serait plus facile, … bof
A l’instant j’ai essayé de mettre ceci dans configuration.yaml
mqtt_statestream:
base_topic: homeassistant
include:
entities:
- input_datetime.hdemarragece
D’après la doc cela ne devrait publier une info que lorsque la valeur de input_datetime.hdemarragece est modifiée, enfin c’est ce que je comprends. Et bien j’ai vu passer plus de 2000 lignes de publication en quelques secondes alors que je n’avais encore rien changé …
Encore un essai infructueux. J’ai tout supprimé, je reviens à mon essai de bouton.
(Je fais du C++, du Python depuis plusieurs année sans pb particulier mais avec les différents codes de HA, je galère beaucoup
).
Donc le pb reste : J’ai l’impression qu’il n’y a que deux actions sur un input_datetime → set_datetime pour définir et reload pour recharger.
Moi je ne veux que récupérer sa valeur pour la publier, cela ne devrait pas être si compliqué. Je m’y prends mal ??
Pourquoi ne pas publier avec un script ton bouton modifies ta valeur et est le script qui publies ta valeur
Si j’ai bien compris : la pression du bouton lance une automatisation, celle ci publie la valeur du time_date … pourquoi pas je vais essayer.
(Suite au prochain épisode)
1 « J'aime »
Génial, ça marche, merci ddfdom
Franchement je n’aurais pas trouvé, c’est tellement mystérieux pour moi, comment expliquer que l’on puisse récupérer correctement le contenu de input_datetime depuis un script :
sequence:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: true
qos: 0
retain: false
payload: "{{states(\"input_datetime.hdemarragece\")}}"
topic: elec/recept/CE
enabled: true
alias: modifHdemarrageCE
alors que le même payload envoyé depuis un bouton ne fonctionne pas
type: button
tap_action:
action: perform-action
perform_action: mqtt.publish
target: {}
data:
evaluate_payload: true
qos: 0
retain: false
topic: elec/recept/CE
payload: "{{states(\"input_datetime.hdemarragece\")}}"
name: Envoyer au CE
icon: mdi:heating-coil
Dans un cas, {{states("input_datetime.hdemarragece")}} est envoyé comme une chaine de caractères, dans l’autre c’est évalué ???
1 « J'aime »