Faire fonctionner climatiseur Daikin avec Voltalis

Bonjour,

Voici mon but :
J’utilise Voltalis depuis des années pour gérer mes chauffages. Il est couplé avec ma gestion du prix EDF Tempo.
Lorsque le jour est rouge, j’utilise un programme voltalis « Jour rouge » qui coupe tous mes chauffages. Ceci fonctionne super bien !
Aujourd’hui je viens d’installer 4 splits de clim réversible Daïkin. On peut programmer chaque split avec un planning personnalisé sur l’application Daïkin.
Mais le basculement en jour rouge risque d’être complexe et un peu casse pied à gérer.

Le but est donc d’utiliser le bloc voltalis du chauffage correspondant au split (le chauffage de la chambre pour gérer le split de la chambre) pour piloter le bloc de clim Daïkin.

Dans ce but, je vais gérer, par split, un sensor de type climate pour ECO et CONFORT. Lorsque voltalis va changer de mode (ECO / CONFORT / ETEINDS) il suffira d’appliquer les paramètres correspondant au split correspondant.

Étape 1
Gérer les templates et mémoriser les paramètres.
Je commence par le split salon en mode confort.

Dans le fichier configuration.yaml, j’ajoute les packages :

homeassistant:
  # Chargement des fichiers packages (template des climate)
  packages: !include_dir_named /config/YAML/packages

Dans le répertoire /config/YAML/packages j’ai le fichier suivant : climate_prog_salon_confort.yaml

#╔══════════════════════════════════════════════════════════════════════════════════╗
#║  Template permettant de créer un ensemble d'Inputs pour permettre la             ║
#║  programmation des modes confort / eco                                           ║
#║                                                                                  ║
#║ Gère le salon (mode CONFORT)                                                     ║
#╚══════════════════════════════════════════════════════════════════════════════════╝

#╔══════════════════════╗
#║  INPUTS DE CONSIGNE  ║
#╚══════════════════════╝
input_number:
  clim_prog_salon_confort_temperature:
    name: Programmation Salon - Température
    icon: mdi:thermometer
    min: 10
    max: 30
    step: 0.5

input_select:
  clim_prog_salon_confort_hvac:
    name: Programmation Salon - Mode
    icon: mdi:power
    options:
      - off
      - fan_only
      - heat
      - cool
      - heat_cool
      - dry

  clim_prog_salon_confort_fan:
    name: Programmation Salon - Ventilation
    icon: mdi:fan
    options:
      - auto
      - quiet
      - "1"
      - "2"
      - "3"
      - "4"
      - "5"

  clim_prog_salon_confort_swing_horizontal:
    name: Programmation Salon - Oscillation orizontale
    icon: mdi:swap-horizontal
    options:
      - stop
      - swing

  clim_prog_salon_confort_swing_vertical:
    name: Programmation Salon - Oscillation verticale
    icon: mdi:swap-vertical
    options:
      - stop
      - swing
      - windnice

#╔══════════════════════╗
#║  TEMPLATE CLIMATE    ║
#╚══════════════════════╝
template:
  climate:
    name: "Salon CONFORT"
    unique_id: clim_prog_salon_confort

    modes:
      - off
      - fan_only
      - heat
      - cool
      - heat_cool
      - dry

    fan_modes:
      - auto
      - quiet
      - "1"
      - "2"
      - "3"
      - "4"
      - "5"

    swing_modes:
      - stop
      - swing
      - windnice

    swing_horizontal_modes:
      - stop
      - swing

    min_temperature: 10
    max_temperature: 30
    temperature_step: 0.5

    temperature_template: >
      {{ states('input_number.clim_prog_salon_confort_temperature') | float }}

    hvac_mode_template: >
      {{ states('input_select.clim_prog_salon_confort_hvac') }}

    fan_mode_template: >
      {{ states('input_select.clim_prog_salon_confort_fan') }}

    swing_mode_template: >
      {{ states('input_select.clim_prog_salon_confort_swing_vertical') }}

    swing_horizontal_mode_template: >
      {{ states('input_select.clim_prog_salon_confort_swing_horizontal') }}

    set_temperature:
      service: input_number.set_value
      data:
        entity_id: input_number.clim_prog_salon_confort_temperature
        value: "{{ temperature }}"

    set_hvac_mode:
      service: input_select.select_option
      data:
        entity_id: input_select.clim_prog_salon_confort_hvac
        option: "{{ hvac_mode }}"

    set_fan_mode:
      service: input_select.select_option
      data:
        entity_id: input_select.clim_prog_salon_confort_fan
        option: "{{ fan_mode }}"

    set_swing_mode:
      service: input_select.select_option
      data:
        entity_id: input_select.clim_prog_salon_confort_swing_vertical
        option: "{{ swing_mode }}"

    set_swing_horizontal_mode:
      service: input_select.select_option
      data:
        entity_id: input_select.clim_prog_salon_confort_swing_horizontal
        option: "{{ swing_horizontal_mode }}"

Je valide : ok il n’y a pas d’erreur, mais j’ai une erreur dans les logs:

Enregistreur: homeassistant.config
Source: config.py:354
S’est produit pour la première fois: 14:09:42 (1 occurrence)
Dernier enregistrement: 14:09:42

Invalid config for ‹ template › at YAML/packages/climate_prog_salon_confort.yaml, line 62: ‹ climate › is an invalid option for ‹ template ›, check: climate

J’ai tenté plein de trucs différents :

template:
  climate:
template:
  - climate:

Et plein d’autres trucs qui ne fonctionnent pas. Ceci est déjà la première étape.
La deuxième sera la traduction mais déjà ceci doit fonctionner sans erreur !

Une idée ?

Bonjour,

Teste ça :

#╔══════════════════════╗
#║  INPUTS DE CONSIGNE  ║
#╚══════════════════════╝
input_number:
  clim_prog_salon_confort_temperature:
    name: Programmation Salon - Température
    icon: mdi:thermometer
    min: 10
    max: 30
    step: 0.5

input_select:
  clim_prog_salon_confort_hvac:
    name: Programmation Salon - Mode
    icon: mdi:power
    options:
      - off
      - fan_only
      - heat
      - cool
      - heat_cool
      - dry

  clim_prog_salon_confort_fan:
    name: Programmation Salon - Ventilation
    icon: mdi:fan
    options:
      - auto
      - quiet
      - "1"
      - "2"
      - "3"
      - "4"
      - "5"

  clim_prog_salon_confort_swing_horizontal:
    name: Programmation Salon - Oscillation horizontale
    icon: mdi:swap-horizontal
    options:
      - stop
      - swing

  clim_prog_salon_confort_swing_vertical:
    name: Programmation Salon - Oscillation verticale
    icon: mdi:swap-vertical
    options:
      - stop
      - swing
      - windnice

#╔══════════════════════╗
#║  TEMPLATE CLIMATE    ║
#╚══════════════════════╝
template:
  - climate:
      - name: "Salon CONFORT"
        unique_id: clim_prog_salon_confort

        modes:
          - off
          - fan_only
          - heat
          - cool
          - heat_cool
          - dry

        fan_modes:
          - auto
          - quiet
          - "1"
          - "2"
          - "3"
          - "4"
          - "5"

        swing_modes:
          - stop
          - swing
          - windnice

        swing_horizontal_modes:
          - stop
          - swing

        min_temperature: 10
        max_temperature: 30
        temperature_step: 0.5

        temperature_template: >
          {{ states('input_number.clim_prog_salon_confort_temperature') | float }}

        hvac_mode_template: >
          {{ states('input_select.clim_prog_salon_confort_hvac') }}

        fan_mode_template: >
          {{ states('input_select.clim_prog_salon_confort_fan') }}

        swing_mode_template: >
          {{ states('input_select.clim_prog_salon_confort_swing_vertical') }}

        swing_horizontal_mode_template: >
          {{ states('input_select.clim_prog_salon_confort_swing_horizontal') }}

        set_temperature:
          service: input_number.set_value
          data:
            entity_id: input_number.clim_prog_salon_confort_temperature
            value: "{{ temperature }}"

        set_hvac_mode:
          service: input_select.select_option
          data:
            entity_id: input_select.clim_prog_salon_confort_hvac
            option: "{{ hvac_mode }}"

        set_fan_mode:
          service: input_select.select_option
          data:
            entity_id: input_select.clim_prog_salon_confort_fan
            option: "{{ fan_mode }}"

        set_swing_mode:
          service: input_select.select_option
          data:
            entity_id: input_select.clim_prog_salon_confort_swing_vertical
            option: "{{ swing_mode }}"

        set_swing_horizontal_mode:
          service: input_select.select_option
          data:
            entity_id: input_select.clim_prog_salon_confort_swing_horizontal
            option: "{{ swing_horizontal_mode }}"

J’avais déjà essayé :

Enregistreur: homeassistant.config
Source: config.py:354
S’est produit pour la première fois: 15:37:07 (1 occurrence)
Dernier enregistrement: 15:37:07

Invalid config for ‹ template › at YAML/packages/climate_prog_salon_confort.yaml, line 62: ‹ climate › is an invalid option for ‹ template ›, check: climate

Selon ChatGPT le template climate n’existe plus. Mais bon, il raconte tellement de conneries que parfois j’ai l’impression que mon chat est plus intelligent que lui !

Le but serait d’avoir visuellement un truc du genre :

Pour chaque split et chaque ECO / CONFORT (8 au total) pour faire les réglages et piloter par Voltalis mes splits.

Rappel : ce réglage n’est relié à rien de physique, juste des réglages…

Essaie éventuellement de corriger avec claude AI qui en principe est un peu plus performant en codage

Il est aussi con mais ça dure moins longtemps. Comme les autres il tourne en boucle et raconte n’importe quoi !
Si je met un generic_thermostat, ça passe.
Le champs « modes » me provoque des erreurs de yaml.
J’ai un peu du mal à comprendre ce que ça fait. Moi j’aimerais une entité « virtuelle » qu’on peut configurer (pas de température courante, ça n’a aucun sens) et qui soit utilisé dans des automatisation en tant que source : ex quand on passe en mode CONFORT sur le radiateur salon (voltalis), alors je prend de template (mode confort) et ses valeurs et je l’applique sur mon split daikin…

#╔══════════════════════╗
#║  TEMPLATE CLIMATE    ║
#╚══════════════════════╝
climate:
  - platform: generic_thermostat
    name: "Salon CONFORT"
    unique_id: clim_prog_salon_confort
    target_sensor: sensor.temp_ambiente
    heater: input_number.clim_prog_salon_confort_temperature

    modes:
      - off
      - fan_only
      - heat
      - cool
      - heat_cool
      - dry
1 « J'aime »

1ère étape franchie avec quelques astuces.
J’ai téléchargé le fork de climate_template : litinoveweedle/hass-template-climate: :snowflake:Templatable Climate Device for Home Assistant, Supports Running Actions On Service Calls.

J’ai du utiliser un script car dans ce template, il n’y a pas de swig vertical et horizontal.
J’ai donc défini un split avec tous les modes (heureusement qu’il n’y en a pas 8 dans chaque) et codé le set et le get puisque ce mode est en fait 2 modes dans le « vrai » climatiseur.

J’ai aussi dû traduire les textes directement dans les modes car je n’ai pas trouvé la possibilité de traduire les textes des modes (ni même mettre des icônes corrects), du coup je fais des conversions dans un sens et dans l’autre (lecture / écriture).
Si vous avez des solutions…

#╔══════════════════════════════════════════════════════════════════════════════════╗
#║  Template permettant de créer un ensemble d'Inputs pour permettre la             ║
#║  programmation des modes confort / eco                                           ║
#║                                                                                  ║
#║ Gère le salon (mode CONFORT)                                                     ║
#╚══════════════════════════════════════════════════════════════════════════════════╝

#╔══════════════════════╗
#║  INPUTS DE CONSIGNE  ║
#╚══════════════════════╝
input_number:
  clim_prog_salon_confort_temperature:
    name: Programmation Salon - Température
    icon: mdi:thermometer
    min: 10
    max: 30
    step: 0.5

input_select:
  clim_prog_salon_confort_hvac:
    name: Programmation Salon - Mode
    icon: mdi:power
    options:
      - "off"
      - fan_only
      - heat
      - cool
      - heat_cool
      - dry

  clim_prog_salon_confort_fan:
    name: Programmation Salon - Ventilation
    icon: mdi:fan
    options:
      - auto
      - quiet
      - "1"
      - "2"
      - "3"
      - "4"
      - "5"

  clim_prog_salon_confort_swing_horizontal:
    name: Programmation Salon - Oscillation orizontale
    icon: mdi:swap-horizontal
    options:
      - stop
      - swing

  clim_prog_salon_confort_swing_vertical:
    name: Programmation Salon - Oscillation verticale
    icon: mdi:swap-vertical
    options:
      - stop
      - swing
      - windnice

#╔══════════════════════╗
#║  TEMPLATE CLIMATE    ║
#╚══════════════════════╝
climate:
  - platform: climate_template
    unique_id: clim_prog_salon_confort
    name: Salon CONFORT

    # Températures min / max
    min_temp: 10
    max_temp: 30
    temp_step: 0.5

    # Modes de fonctionnement
    hvac_modes:
      - "off"
      - fan_only
      - heat
      - cool
      - heat_cool
      - dry

    # Ventilation
    fan_modes:
      - auto
      - "Silencieux"
      - "Niveau 1"
      - "Niveau 2"
      - "Niveau 3"
      - "Niveau 4"
      - "Niveau 5"

    # Swing vertical / horizontal
    swing_modes:
      - Stop
      - Horizontal seulement
      - Vertical seulement
      - Confort horizontal seulement
      - Confort horizontal / Vertical

    # =========================
    # Mode de fonctionnement
    # =========================
    # Lecture
    hvac_mode_template: >
      {{ states('input_select.clim_prog_salon_confort_hvac') }}
    # Écriture
    set_hvac_mode:
      service: input_select.select_option
      data:
        entity_id: input_select.clim_prog_salon_confort_hvac
        option: "{{ hvac_mode }}"

    # =========================
    # Température de consigne
    # =========================
    # Lecture
    target_temperature_template: >
      {{ states('input_number.clim_prog_salon_confort_temperature') }}
    # Écriture
    set_temperature:
      service: input_number.set_value
      data:
        entity_id: input_number.clim_prog_salon_confort_temperature
        value: >
          {{ temperature }}

    # =========================
    # Ventilation
    # =========================
    # Lecture
    fan_mode_template: >
      {% set fanmode = states('input_select.select_option') %}
      {% if fanmode == 'auto' %}
        auto
      {% elif fanmode == 'quiet' %}
        Silencieux
      {% elif fanmode == '1' %}
        Niveau 1
      {% elif fanmode == '2' %}
        Niveau 2
      {% elif fanmode == '3' %}
        Niveau 3
      {% elif fanmode == '4' %}
        Niveau 4
      {% elif fanmode == '5' %}
        Niveau 5
      {% endif %}
    # Écriture
    set_fan_mode:
      service: input_select.select_option
      data_template:
        entity_id: input_select.clim_prog_salon_confort_fan
        option: >
          {% if fan_mode == 'auto' %}
            auto
          {% elif fan_mode == 'Silencieux' %}
            quiet
          {% elif fan_mode == 'Niveau 1' %}
            1
          {% elif fan_mode == 'Niveau 2' %}
            2
          {% elif fan_mode == 'Niveau 3' %}
            3
          {% elif fan_mode == 'Niveau 4' %}
            4
          {% elif fan_mode == 'Niveau 5' %}
            5
          {% endif %}

    # =========================
    # Swing
    # =========================
    # Lecture
    swing_mode_template: >
      {% set h = states('input_select.clim_prog_salon_confort_swing_horizontal') %}
      {% set v = states('input_select.clim_prog_salon_confort_swing_vertical') %}
      {% if h == 'stop' and v == 'stop' %}
        Stop
      {% elif h == 'swing' and v == 'stop' %}
        Horizontal seulement
      {% elif h == 'stop' and v == 'swing' %}
        Vertical seulement
      {% elif h == 'stop' and v == 'windnice' %}
        Confort horizontal seulement
      {% elif h == 'swing' and v == 'windnice' %}
        Confort horizontal / Vertical
      {% else %}
        Stop
      {% endif %}
    # Écriture : appel d'un script obligatoire
    set_swing_mode:
      service: script.set_clim_salon_confort_swing
      data:
        swing_mode: "{{ swing_mode }}"

#╔══════════════════════╗
#║       SCRIPTS        ║
#╚══════════════════════╝
script:
  # =================================================================
  # Ce script permet de décomposer les modes de swing en deux swing
  # horizontal et vertical compréhensible par Daïkin
  # =================================================================
  set_clim_salon_confort_swing:
    alias: "Salon CONFORT - Appliquer swing"
    mode: single
    fields:
      swing_mode:
        description: Mode swing choisi
    sequence:
      - choose:
          - conditions: "{{ swing_mode == 'Stop' }}"
            sequence:
              - service: input_select.select_option
                data:
                  entity_id: input_select.clim_prog_salon_confort_swing_horizontal
                  option: stop
              - service: input_select.select_option
                data:
                  entity_id: input_select.clim_prog_salon_confort_swing_vertical
                  option: stop
          - conditions: "{{ swing_mode == 'Horizontal seulement' }}"
            sequence:
              - service: input_select.select_option
                data:
                  entity_id: input_select.clim_prog_salon_confort_swing_horizontal
                  option: swing
              - service: input_select.select_option
                data:
                  entity_id: input_select.clim_prog_salon_confort_swing_vertical
                  option: stop
          - conditions: "{{ swing_mode == 'Vertical seulement' }}"
            sequence:
              - service: input_select.select_option
                data:
                  entity_id: input_select.clim_prog_salon_confort_swing_horizontal
                  option: stop
              - service: input_select.select_option
                data:
                  entity_id: input_select.clim_prog_salon_confort_swing_vertical
                  option: swing
          - conditions: "{{ swing_mode == 'Confort horizontal seulement' }}"
            sequence:
              - service: input_select.select_option
                data:
                  entity_id: input_select.clim_prog_salon_confort_swing_horizontal
                  option: stop
              - service: input_select.select_option
                data:
                  entity_id: input_select.clim_prog_salon_confort_swing_vertical
                  option: windnice
          - conditions: "{{ swing_mode == 'Confort horizontal / Vertical' }}"
            sequence:
              - service: input_select.select_option
                data:
                  entity_id: input_select.clim_prog_salon_confort_swing_horizontal
                  option: swing
              - service: input_select.select_option
                data:
                  entity_id: input_select.clim_prog_salon_confort_swing_vertical
                  option: windnice

Ça donne ça :


Et on voit les icônes moches et les textes pas possible à traduire :

Bon, j’ai tenté la traduction sans succès.

Sinon, j’ai fais une petite vue avec les vrais valeurs (pour vérifier que tout se met bien à jour) et ça marche correctement en lecture / écriture, lorsque je modifie le thermostat.
Par contre, lorsque je modifie directement les champs → ça ne modifie par le thermostat, a priori c’est normal et franchement je n’en ai pas besoin ça ne se fera pas dans ce sens là !
Je vais la supprimer après :

Il me reste un souci, j’ai écris ça :

type: vertical-stack
cards:
  - type: thermostat
    entity: climate.salon_room_temperature
    name: Climatisation Salon
    show_current_as_primary: false
    features:
      - type: climate-hvac-modes
  - type: horizontal-stack
    cards:
      - type: custom:mushroom-select-card
        entity: climate.salon_room_temperature
        name: Ventilation
        icon: mdi:fan
        options: >
          {% set modes = state_attr('climate.salon_room_temperature',
          'fan_modes') %} {% for mode in modes %}
            {{ mode }}
          {% endfor %}
        tap_action:
          action: call-service
          service: climate.set_fan_mode
          target:
            entity_id: climate.salon_room_temperature
          data:
            fan_mode: |
              {{ value }}
      - type: custom:mushroom-select-card
        entity: climate.salon_room_temperature
        name: Horizontal
        icon: mdi:swap-horizontal
        options: >
          {% set modes = state_attr('climate.salon_room_temperature',
          'swing_modes') %} {% for mode in modes %}
            {{ mode }}
          {% endfor %}
        tap_action:
          action: call-service
          service: climate.set_swing_mode
          target:
            entity_id: climate.salon_room_temperature
          data:
            swing_mode: |
              {{ value }}
      - type: custom:mushroom-select-card
        entity: climate.salon_room_temperature
        name: Vertical
        icon: mdi:swap-vertical
        options: >
          {% set modes = state_attr('climate.salon_room_temperature',
          'swing_horizontal_modes') %} {% for mode in modes %}
            {{ mode }}
          {% endfor %}
        tap_action:
          action: call-service
          service: climate.set_swing_horizontal_mode
          target:
            entity_id: climate.salon_room_temperature
          data:
            swing_horizontal_mode: |
              {{ value }}


Il affiche chauffage au lieu de la ventilation ou du swing et l’appuie provoque une erreur :

Le mode de ventilation {{ value }} n’est pas valide. Les modes de ventilation valides sont les suivants : auto, quiet, 1, 2, 3, 4, 5.

Qu’est-ce que j’ai mal fait ?

Je repars d’un nouveau message !
Qu’est-ce que c’est compliqué !
Le but était d’avoir trois petits boutons pour Ventilation / Swing horizontal / Swing vertical et pouvoir choisir en cliquant sur les boutons via un menu popup.
Il fallait aussi que le popup se ferme lorsque l’on clic (ça évite 2 clics).
Voici la carte :


Et lorsque l’on clic on a :

Pour le code accrochez vous !
C’est beau mais … pfffffffffffffff
J’ai dû installer browser_mod pour gérer le popup.
Mais ça fonctionne, c’est cool.

type: vertical-stack
cards:
  - type: thermostat
    entity: climate.salon_room_temperature
    name: Climatisation Salon
    show_current_as_primary: false
    features:
      - type: climate-hvac-modes
  - type: horizontal-stack
    cards:
      - type: custom:mushroom-template-card
        entity: climate.salon_room_temperature
        icon: >
          {% set fan = state_attr('climate.salon_room_temperature', 'fan_mode')
          %} {% if fan == "auto" %} mdi:fan-auto {% elif fan == "quiet" %}
          mdi:fan-chevron-down {% elif fan == "1" or fan == "2" or fan == "3" or
          fan == "4" or fan == "5" %} mdi:fan {% endif %}
        icon_color: >
          {% set fan = state_attr('climate.salon_room_temperature', 'fan_mode')
          %} {% if fan == "auto" %} blue {% elif fan == "quiet" %} green {% elif
          fan == "1" or fan == "2" or fan == "3" or fan == "4" or fan == "5" %}
          darkorchid {% endif %}
        primary: Ventilation
        secondary: >
          {% set fan = state_attr('climate.salon_room_temperature', 'fan_mode')
          %} {% if fan == "auto" %} Automatique {% elif fan == "quiet" %}
          Silencieux {% else %} {{ fan }} {% endif %}
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Ventilation – Salon
              content:
                type: vertical-stack
                cards:
                  - type: custom:mushroom-chips-card
                    alignment: center
                    show_content: true
                    compact: false
                    chips:
                      - type: template
                        icon: mdi:fan-auto
                        icon_color: blue
                        content: Auto
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_fan_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    fan_mode: auto
                                - service: browser_mod.close_popup
                      - type: template
                        icon: mdi:fan-chevron-down
                        icon_color: green
                        content: Silencieux
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_fan_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    fan_mode: quiet
                                - service: browser_mod.close_popup
                      - type: template
                        icon: mdi:numeric-1-circle
                        icon_color: darkorchid
                        content: "1"
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_fan_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    fan_mode: "1"
                                - service: browser_mod.close_popup
                      - type: template
                        icon: mdi:numeric-2-circle
                        icon_color: darkorchid
                        content: "2"
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_fan_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    fan_mode: "2"
                                - service: browser_mod.close_popup
                      - type: template
                        icon: mdi:numeric-3-circle
                        content: "3"
                        icon_color: darkorchid
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_fan_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    fan_mode: "3"
                                - service: browser_mod.close_popup
                      - type: template
                        icon: mdi:numeric-4-circle
                        icon_color: darkorchid
                        content: "4"
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_fan_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    fan_mode: "4"
                                - service: browser_mod.close_popup
                      - type: template
                        icon: mdi:numeric-5-circle
                        icon_color: darkorchid
                        content: "5"
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_fan_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    fan_mode: "5"
                                - service: browser_mod.close_popup
      - type: custom:mushroom-template-card
        entity: climate.salon_room_temperature
        icon: mdi:swap-horizontal
        icon_color: >
          {% set swing = state_attr('climate.salon_room_temperature',
          'swing_horizontal_mode') %} {% if swing == "stop" %} gray {% elif
          swing == "swing" %} green {% else %} gray {% endif %}
        primary: Horizontal
        secondary: >
          {% set swing = state_attr('climate.salon_room_temperature',
          'swing_horizontal_mode') %} {% if swing == "stop" %} Arrêt {% elif
          swing == "swing" %} Marche {% else %} {{ swing }} {% endif %}
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Swing Horizontal – Salon
              content:
                type: vertical-stack
                cards:
                  - type: custom:mushroom-chips-card
                    alignment: center
                    show_content: true
                    compact: false
                    chips:
                      - type: template
                        icon: mdi:swap-horizontal
                        icon_color: gray
                        content: Arrêt
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_swing_horizontal_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    swing_horizontal_mode: stop
                                - service: browser_mod.close_popup
                      - type: template
                        icon: mdi:swap-horizontal
                        icon_color: green
                        content: Marche
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_swing_horizontal_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    swing_horizontal_mode: swing
                                - service: browser_mod.close_popup
      - type: custom:mushroom-template-card
        entity: climate.salon_room_temperature
        icon: mdi:swap-vertical
        icon_color: >
          {% set swing = state_attr('climate.salon_room_temperature',
          'swing_mode') %} {% if swing == "stop" %} gray {% elif swing ==
          "swing" %} green {% elif swing == "windnice" %} blue {% else %} gray
          {% endif %}
        primary: Vertical
        secondary: >
          {% set swing = state_attr('climate.salon_room_temperature',
          'swing_mode') %} {% if swing == "stop" %} Arrêt {% elif swing ==
          "swing" %} Marche {% elif swing == "windnice" %} Confort {% else %} {{
          swing }} {% endif %}
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Swing Vertical – Salon
              content:
                type: vertical-stack
                cards:
                  - type: custom:mushroom-chips-card
                    alignment: center
                    show_content: true
                    compact: false
                    chips:
                      - type: template
                        icon: mdi:swap-vertical
                        icon_color: gray
                        content: Arrêt
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_swing_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    swing_mode: stop
                                - service: browser_mod.close_popup
                      - type: template
                        icon: mdi:swap-vertical
                        icon_color: green
                        content: Marche
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_swing_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    swing_mode: swing
                                - service: browser_mod.close_popup
                      - type: template
                        icon: mdi:swap-vertical
                        icon_color: blue
                        content: Confort
                        tap_action:
                          action: fire-dom-event
                          browser_mod:
                            service: browser_mod.sequence
                            data:
                              sequence:
                                - service: climate.set_swing_mode
                                  target:
                                    entity_id: climate.salon_room_temperature
                                  data:
                                    swing_mode: windnice
                                - service: browser_mod.close_popup