Bonjour à tous,
J’ai un custom:button-card sur lequel je souhaite réaliser l’action suivante incrémenter de 1, la valeur d’un input_number. J’ai donc testé le code suivant :
tap_action:
action: call-service
service: input_number.set_value
service_data:
entity_id: input_number.pump_forced_duration_preselection
value: "{{ (states('input_number.pump_forced_duration_preselection') + 1)|int }}"
J’ai le message d’erreur suivant :
code: « invalid_format »
message: « expected float for dictionary value @ data[‹ value ›] »
J’ai tenté de remplacer « |int » par « |float » mais cela ne change pas et j’ai le même message d’erreur. En mettant un chiffre en dur cella fonctionne. Du coup je dois avouer que là, je suis un peu perdu…
Si quelqu’un à une piste à me donner !!!
Merci d’avance.
Dans un premier temps, j’utiliserais le service dédié à l’augmentation et pas celui que tu utilise :
Te renvoit un string
qu’il faut convertir en float avant de pouvoir faire des calcul.
Jippy
Mai 20, 2022, 4:05
4
Bonjour @Clemalex et @Arnault
Je désire faire la meme chose depuis l’ecran,
deux petits boutons pour incrementer/decrementer, le volume de mon enceinte, et aussi la consigne de température de mon chauffage.
Le service Input_number
semble savoir faire ces choses, mais comment les relier à des boutons.
Quelqu’un aurait il un exemple joliement dessiné ?
Merci @Clemalex je vais utiliser le increse.
Dès que mon bouton fonctionne, je le partage ici (dans le we)
Ne pas hésiter à rechercher sur le forum :
Recherche
Merci @Clemalex pour le increment et le decrement ca fonctionne nickel. Par contre j’ai un rafraichissement complet de l’écran qui n’est pas très jolie :
Voici mon YAML si ca peut aider :
popup_pool_pump:
styles:
card:
- box-shadow: none
- padding: 0px
- border-radius: 0px
- background-color: transparent
- height: "100%"
grid:
- grid-template-areas: "'header' 'content' 'buttons'"
- grid-template-rows: "20vh 65vh 15vh"
- grid-template-columns: "1fr"
custom_fields:
content:
- display: "block"
- align-self: "start"
custom_fields:
header:
card:
type: "custom:button-card"
template: "popup_header"
name: "Piscine"
label: "Mode de filtration"
icon: mdi:pool
content:
card:
type: vertical-stack
cards:
- type: markdown
content: >-
Le mode de filtration de la piscine est actuellement réglé sur
**{{states('sensor.pool_pump')}}**. Sur quel mode souhaitez vous
régler la filtration ?
card_mod:
style: |
ha-card {
background-color: rgba(0, 0, 0, 0);
box-shadow: none;
font-size: 1rem;
text-align: center;
cursor: default;
border-radius: 0px;
padding: 0px 30px;
}
ha-card ha-markdown.no-header {
padding: 10px;
}
- type: custom:mod-card
card:
type: grid
square: false
columns: 2
cards:
- type: custom:button-card
template: popup_pool_pump_btn_mode
name: Automatique
label: Saison & Temp.
icon: mdi:calendar
variables:
mode: "Automatique"
- type: custom:button-card
template: popup_pool_pump_btn_mode
name: Programmé
label: Horaires fixe
icon: mdi:av-timer
variables:
mode: "Programmé"
- type: custom:button-card
template: popup_pool_pump_btn_mode
name: Marche
label: Forcé
icon: mdi:engine
variables:
mode: "Marche forcée"
- type: custom:button-card
template: popup_pool_pump_btn_mode
name: Arrêt
label: Forcé
icon: mdi:engine-off
variables:
mode: "Arrêt forcé"
- type: conditional
conditions:
- entity: input_select.pool_pump_preselection
state: Marche forcée
card:
type: markdown
content: Quelle durée pour la marche forcée ?
style: |
ha-card {
background-color: rgba(0, 0, 0, 0);
box-shadow: none;
font-size: 1rem;
text-align: center;
cursor: default;
border-radius: 0px;
padding: 0px 30px;
}
ha-card ha-markdown.no-header {
padding: 10px;
}
- type: conditional
conditions:
- entity: input_select.pool_pump_preselection
state: Marche forcée
card:
type: custom:button-card
styles:
card:
- border-radius: 0px
- box-shadow: none
- background-color: rgba(0, 0, 0, 0)
- padding: 0 0 10px 0
grid:
- grid-template-areas: '''c'''
- grid-template-columns: 1fr
- grid-template-rows: min-content
custom_fields:
c:
- place-self: center
custom_fields:
c:
card:
type: custom:button-card
styles:
card:
- padding: 8px
- border-radius: 5px
- width: auto
- place-self: center
grid:
- grid-template-areas: "'plus' 'days' 'minus"
- grid-template-columns: "min-content"
- grid-template-rows: "min-content min-content min-content"
custom_fields:
plus:
- padding: 10px 30px
minus:
- padding: 10px 30px
days:
- font-size: 0.85em
- padding: 5px 0px
custom_fields:
plus:
card:
type: custom:button-card
styles:
card:
- width: 20px
name: >
[[[
return `<ha-icon icon="mdi:arrow-up-drop-circle" style="width: 20px; height: 20px;"></ha-icon>`;
]]]
tap_action:
action: call-service
service: input_number.increment
service_data:
entity_id: input_number.pump_forced_duration_preselection
days: >
[[[
let days = parseInt(states['input_number.pump_forced_duration_preselection'].state);
return days + " jour" + (days > 1 ? "s" : "");
]]]
minus:
card:
type: custom:button-card
styles:
card:
- width: 20px
name: >
[[[
return `<ha-icon icon="mdi:arrow-down-drop-circle" style="width: 20px; height: 20px;"></ha-icon>`;
]]]
tap_action:
action: call-service
service: input_number.decrement
service_data:
entity_id: input_number.pump_forced_duration_preselection
buttons:
card:
type: "custom:button-card"
template: "popup_btn_close"
popup_pool_pump_btn_mode:
variables:
mode: ""
template: icon_info_bg
entity: input_select.pool_pump_preselection
show_lable: true
show_name: true
shwo_icon: true
styles:
icon:
- color: "rgba(var(--color-theme),0.9)"
name:
- align-self: "end"
- justify-self: "start"
- font-weight: "bold"
- font-size: "14px"
- margin-left: "12px"
- filter: "opacity(100%)"
label:
- justify-self: "start"
- align-self: "start"
- font-weight: "bolder"
- font-size: "12px"
- filter: "opacity(40%)"
- margin-left: "12px"
grid:
- grid-template-areas: "'i n' 'i l'"
- grid-template-columns: "min-content auto"
- grid-template-rows: "min-content min-content"
state:
- value: "[[[ return variables.mode; ]]]"
styles:
img_cell:
- background-color: var(--accent-color)
tap_action:
action: call-service
service: input_select.select_option
service_data:
option: "[[[ return variables.mode; ]]]"
entity_id: input_select.pool_pump_preselection
Merci
Jippy
Mai 22, 2022, 7:32
8
Merci @Arnault de ce partage, et merci au forum en général pour les bonnes astuces
1 « J'aime »
En remplaçant mes cartes markdown par des custom:button-card je n’ai plus le rafraichissement des cartes du coup c’est parfait
Bonjour @Clemalex
J’upgrade mon idée en essayant de me faire un bouton qui va me permettre a partir d’un input_datetime de modifier cette valeur. J’ai créé un template pour mon bouton au quel je passe mon entité et j’arrive à afficher le bouton comme je le souhaite.
Capture d’écran sur l’heure de mise en marche et d’arrêt de la filtration :
Sur le tap_action de mon bouton pour incrémenter les minutes j’étais parti sur un template :
{% set hour = states('input_datetime.pool_pump_programmed_mode_start').split(':')[0]|int %}
{% set minutes = states('input_datetime.pool_pump_programmed_mode_start').split(':')[1]|int + 5 %}
{% if minutes > 55 -%}{% set minutes = 55 %}{%- endif %}
{% if hour < 10 -%}0{%- endif %}{{ hour }}:{% if minutes < 10 -%}0{%- endif %}{{ minutes }}:00
Seulement après recherche, le cutom:button-card supporte le Javascript : GitHub - custom-cards/button-card: ❇️ Lovelace button-card for home assistant
Je suis donc parti sur un appel tout simple qui ne change pas la valeur de l’entity mais pour faire mes tests :
tap_action:
action: call-service
service: input_datetime.set_datetime
service_data:
entity_id: "[[[ return variables.entity; ]]]"
time: |
[[[
console.log(states[variables.entity].state);
return states[variables.entity].state;
]]]
Là en regardant ma console, je vois que le template JS est appelé au chargement de la page mais pas à chaque appuie sur le bouton.
Du coup après mon long message, ma question, est-il possible d’executer un code JS à chaque appuie sur le bouton ?
Sans ca je ne vois pas comment gérer l’incrémentation ou la décrémentation de l’heure ou des minutes (par pas de 5) de mon input_datetime…
Merci
Je suis en long week-end… Pas internet…
Regarde de ce côté si tu veux jouer avec les heures et styliser une carte :
https://forum.hacf.fr/t/interface-pour-entrer-dates-et-heures/3825/6?u=clemalex
Je partirais sur la carte dans le lien plutôt que de tout fabriquer…