Bonjour à toutes et tous,
J’ai un soucis sur le template de mes volets:
Voici le code:
- platform: template
sensors:
position_volets_chambres_amis:
friendly_name: "Position volets Chambres d'amis"
unit_of_measurement: "%"
value_template: >
{% set ns = namespace(total = 0, list= states['cover.volets_chambres_d_amis'].attributes.entity_id ) %}
{% set count =ns.list|count %}
{%if count > 0 %}
{%- for volet in ns.list %}
{% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int(default=0)) %}
{%- endfor %}
{{ (ns.total / count) | round(0) }}
{% else %}
0
{% endif %}
Le soucis est que quand j’active ( monter/descente) un volet (ou un groupe) le % de la position passe de 0 à 100 (on inversement) directement au lieu d’afficher le % de la position au fur a mesure du mouvement du volet.
Je sais pas si je suis très clair ^^
Quelqu’un a une idée de la correction a apporter?
Merci d’avance.
Hello,
Déjà est-ce que l’état du sensor de position évolue en temps réèl, tu peux voir qaund tu l’affiches la valeur changer ?
Ensuite bosser avec des logiques un peu plus complexes avec des listes c’est bien quand tu as un nombre in déterminé ou très variable, mais là tu ne dois pas avoir des 10aines de volets par chambre je suppose et tu ne vas pas ajouter des volets tous les 4 matins, donc ce serait pas plus facile pour la compréhension et le debug de directement faire des calculs avec les noms complets des entités?
Alors oui, j’ai l’état du sensor qui évolue en temps réel (moins le tems de latence )
J’ai pas compris la deuxième partie …
Voici les différentes chose que j’ai pour mes volets:
Je récupère/envoi les infos et les commandes via MQTT.
Exemple d'un volet
- platform: template
covers:
volet_baie_suite:
friendly_name: "Baie Chambre Parentale"
open_cover:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: 'up'
close_cover:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: 'down'
stop_cover:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: 'stop'
set_cover_position:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: "{{position}}"
Exemple d'un groupe de volet
- platform: group
name: Volets Suite Parentale
entities:
- cover.volet_baie_suite
- cover.volet_pano_p
- cover.volet_sdb_p
Sensor MQTT de la position
- name: "position_baie_suite"
state_topic: "nodered/volet/baie_Suite/get"
unit_of_measurement: '%'
Le template de la position d'un groupe de volet
- platform: template
sensors:
position_volets_suite:
friendly_name: "Position volets Suite Parentale"
unit_of_measurement: "%"
value_template: >
{% set ns = namespace(total = 0, list= states['cover.volets_suite_parentale'].attributes.entity_id ) %}
{% set count =ns.list|count %}
{%if count > 0 %}
{%- for volet in ns.list %}
{% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int(default=0)) %}
{%- endfor %}
{{ (ns.total / count) | round(0) }}
{% else %}
0
{% endif %}
La carte lovelace d'un volet
- type: custom:mushroom-cover-card
entity: cover.volet_baie_suite
fill_container: false
primary_info: name
show_position_control: true
show_tilt_position_control: false
show_buttons_control: true
tap_action:
action: none
hold_action:
action: none
double_tap_action:
action: none
Voila je crois que j’ai tout mis ^^
Hello,
J’ai résolu le soucis en ajoutant la position du volet dans le template:
- platform: template
covers:
volet_baie_suite:
friendly_name: "Baie Chambre Parentale"
position_template: "{{ states('sensor.position_baie_suite') }}"
open_cover:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: 'up'
close_cover:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: 'down'
stop_cover:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: 'stop'
set_cover_position:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: "{{position}}"
icon_template: >-
{% if is_state('sensor.position_baie_suite', '100') %}
mdi:window-shutter-open
{% elif is_state('sensor.position_baie_suite', '0') %}
mdi:window-shutter
{% else %}
mdi:window-shutter-alert
{% endif %}