Créer un bouton ventilation à plusieurs vitesses

Bonjour,

Mon problème

Je viens de connecter ma VMC à HA via un DUAL3R de Sonoff.
Je me retrouve avec 2 boutons, un pour lancer la Petite vitesse, un pour la Grande vitesse.
J’ai réussi à convertir les 2 boutons en ventilateur.

Sur mon dashboard, je me retrouve donc avec 2 boutons, que j’ai lié via une automatisation (l’activation de l’un désactive l’autre).

J’aurai aimé créer un bouton ventilateur multi-vitesse, du type ci-dessous. Je ne trouve pas comment faire.

Comment dois-je m’y prendre ?

Merci !

Ma configuration


System Information

version core-2024.12.5
installation_type Home Assistant Container
dev false
hassio false
docker true
user root
virtualenv false
python_version 3.13.0
os_name Linux
os_version 4.4.302+
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
HACS Data ok
GitHub API Calls Remaining 5000
Installed Version 2.0.1
Stage running
Available Repositories 1502
Downloaded Repositories 13
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Dashboards
dashboards 5
resources 9
views 3
mode storage
Recorder
oldest_recorder_run 19 décembre 2024 à 06:20
current_recorder_run 30 décembre 2024 à 12:44
estimated_db_size 105.69 MiB
database_engine sqlite
database_version 3.45.3
Sonoff
version 3.8.1 (ffa7e22)
cloud_online 1 / 1
local_online 1 / 1
___

Salut,

Pour ça faudra surement faire de la configuration pour faire un Ventilateur Template dans lequel il faudra inclure des 2 switch pour gérer la vitesse ou les preset du ventilateur. Ce n’est pas encore géré dans l’interface graphique, alors c’est avec du yaml qu’il faudra le faire.

Merci pour ce retour, j’étais justement sur cet article.
J’ai donc ajouté le template dans mon fichier configuration.yaml et j’ai relancé HA.

Par contre, comment dois-je faire pour intégrer ce template à mon dashboard ?Je ne trouve pas l’information dans l’article.

SI tu as tout bien configuré ça devrait te créer une nouvelle entité qui s’appellera « fan.ton_ventilo »
Tu peux vérifier dans outils de dev / états si tu le trouve.
Et si c’ets bon tu verra qu’il aura les options que tu veux et tu pourra utilise un tuile ou un autre carte qui prendra en comtpe que c’est une ventilateur.

1 « J'aime »

Bouton fonctionnel, après quelques heures de recherches et essais ! :face_with_peeking_eye:

Je met le template et les scripts pour besoin du prochain ci-dessous.

Nouvelle question : ce pilotage fonctionne très bien en full HA. Cependant, j’ai un interrupteur qui permet le forçage manuel.

Cet interrupteur est branché sur le switch S1 du DUAL3R de Sonoff.

Ce switch lorsqu’il est activé bascule la grande vitesse dans son autre position.

Actuellement, j’ai donc créé des automations pour détecter ce basculement sur la grande vitesse pour désactiver/réactiver la petite vitesse (pour ne pas me retrouver avec la Grande vitesse et la Petite vitesse activées en même temps).

Comme je ne modifie pas la valeur de vmc_percentage, alors je sais aussi revenir dans la position précédente via mon automations.

Par contre, comme ces automations ne changent pas vmc_percentage (afin de revenir à la bonne position lorsque l’interrupteur est désactivé), alors la tuile garde l’image Petite vitesse si j’ai forcé la Grande vitesse via l’interrupteur.

J’ai pensé créer une nouvelle entité vmc_forcage qui prendrai la valeur 1 lors de l’activation de l’interrupteur. Ainsi je pourrai ajouter un libellé « Forçage VMC » sur la tuile pour afficher une discordance entre mon template et l’état réel de la Vmc.

Est-ce la bonne voie ou je me complique la vie à coupler des automations et des scripts ?


  1. Ajouter le template dans le fichier configuration .yaml :
fan:
  - platform: template
    fans:
      vmc:
        friendly_name: "VMC"
        unique_id: e244c3b5-0db9-4737-8486-4bf30540c288
        value_template: "{{ states('input_boolean.vmc_state') }}"
        percentage_template: "{{ states('input_number.vmc_percentage') }}"
        turn_on:
          - service: script.vmc_1
          - service: input_boolean.turn_on
            target:
              entity_id: input_boolean.vmc_state
        turn_off:
          - service: script.vmc_0
          - service: input_boolean.turn_off
            target:
              entity_id: input_boolean.vmc_state
        set_percentage:
          - service: script.vmc_set_speed
            data:
              percentage: "{{ percentage }}"
        speed_count: 2
  1. Créer les entités suivantes :
input_boolean.vmc_state
input_number.vmc_percentage

  1. Créer les scripts (on / off / réglage vitesse). De mon côté, je les ai créé via l’UI.
vmc_0:
  alias: Vmc_0
  sequence:
  - type: turn_off
    device_id: 9762bee1f344319ee1dce7af86f499b5
    entity_id: 4c2abe3dbb98ce8ca98dd5c05d6cfa18
    domain: fan
  - type: turn_off
    device_id: 9762bee1f344319ee1dce7af86f499b5
    entity_id: f3f0c108c22d0197b8778e0a712d349f
    domain: fan
  - action: input_boolean.turn_off
    metadata: {}
    data: {}
    target:
      entity_id: input_boolean.vmc_state
  - action: input_number.set_value
    metadata: {}
    data:
      value: 0
    target:
      entity_id: input_number.vmc_percentage
  description: ''
vmc_1:
  alias: vmc_1
  sequence:
  - type: turn_on
    device_id: 9762bee1f344319ee1dce7af86f499b5
    entity_id: f3f0c108c22d0197b8778e0a712d349f
    domain: fan
  - type: turn_off
    device_id: 9762bee1f344319ee1dce7af86f499b5
    entity_id: 4c2abe3dbb98ce8ca98dd5c05d6cfa18
    domain: fan
  - action: input_number.set_value
    metadata: {}
    data:
      value: 50
    target:
      entity_id: input_number.vmc_percentage
  - action: input_boolean.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: input_boolean.vmc_state
  description: ''
vmc_2:
  alias: vmc_2
  sequence:
  - type: turn_off
    device_id: 9762bee1f344319ee1dce7af86f499b5
    entity_id: f3f0c108c22d0197b8778e0a712d349f
    domain: fan
  - type: turn_on
    device_id: 9762bee1f344319ee1dce7af86f499b5
    entity_id: 4c2abe3dbb98ce8ca98dd5c05d6cfa18
    domain: fan
  - action: input_boolean.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: input_boolean.vmc_state
  - action: input_number.set_value
    metadata: {}
    data:
      value: 100
    target:
      entity_id: input_number.vmc_percentage
  description: ''
vmc_set_speed:
  alias: vmc_set_speed
  sequence:
  - action: input_number.set_value
    metadata: {}
    data:
      value: '{{ percentage }}'
    target:
      entity_id: input_number.vmc_percentage
  - delay:
      hours: 0
      minutes: 0
      seconds: 0
      milliseconds: 100
  - choose:
    - conditions:
      - condition: state
        entity_id: input_number.vmc_percentage
        state: '50.0'
      sequence:
      - action: script.vmc_1
        metadata: {}
        data: {}
    - conditions:
      - condition: state
        entity_id: input_number.vmc_percentage
        state: '100.0'
      sequence:
      - action: script.vmc_2
        metadata: {}
        data: {}
    - conditions:
      - condition: state
        entity_id: input_number.vmc_percentage
        state: '0.0'
      sequence:
      - action: script.vmc_0
        metadata: {}
        data: {}
  description: ''
1 « J'aime »

Du coup, j’ai utilisé la carte Mushroom-template pour personnaliser l’affichage de la tuile avec un mode forcé :

type: custom:mushroom-template-card
primary: VMC
secondary: >-
  {% if not is_state('input_number.vmc_percentage', '100.0') and
  is_state('switch.vmc_gv', 'on') %}
    Marche forcée 
  {% elif is_state('fan.vmc', 'off') %}
    Éteinte
  {% else %}
    Allumée 
  {% endif %}
icon: >-
  {% if is_state('switch.vmc_gv', 'on') and is_state('switch.vmc_pv', 'off') %}
    mdi:fan-speed-2
  {% elif is_state('switch.vmc_gv', 'off') and is_state('switch.vmc_pv', 'on')
  %}
    mdi:fan-speed-1
  {% elif is_state('switch.vmc_gv', 'on') and is_state('switch.vmc_pv', 'on') %}
    mdi:fan-remove
  {% else %}
    mdi:fan-off
  {% endif %}
entity: fan.vmc
tap_action:
  action: perform-action
  perform_action: script.vmc_vitesse_suivante
  target: {}
hold_action:
  action: more-info
multiline_secondary: true
icon_color: >-
  {% if is_state('switch.vmc_gv', 'on') and is_state('switch.vmc_pv', 'on') %}
    red
  {% elif not is_state('input_number.vmc_percentage', '100.0') and
  is_state('switch.vmc_gv', 'on') %}
    orange
  {% elif is_state('fan.vmc', 'on') %}
    green
  {% else %}
    red
  {% endif %}

Les différents états programmés :




C’est tout bon pour moi, il me reste plus qu’à réceptionner ma sonde d’humidité pour gérer les mises en marche forcée.

Je clos donc le sujet.