Gestion de 4 input_boolean avec un seul choix possible sur ces 4

Bonjour à tous,

Dans le cadre de la gestion de mon chauffage, j’ai crée 4 input_boolean.
Je souhaiterais pouvoir en sélectionner qu’un donc j’ai créer pour les 4 une automation qui désactive les 3 autres dès que j’en active un (voir exemple ci-dessous).

Par contre, il m’est toujours possible de désactiver celui qui est activé.
J’ai voulu appliquer la même méthode que ce que j’ai fait pour l’activation mais cela ne marche pas bien (si je mets un code similaire avec from: on to: off, j’ai tout qui se télescope et ça ne marche pas « bien ».

Est-il possible de ne pas autoriser à mettre sur « off » celui qui est sur « on » ?

  • alias: « Semaine_on »
    trigger:
    • platform: state
      entity_id: switch.chauffage_semaine
      from: « off »
      to: « on »
      condition:
      action:
    • service: switch.turn_off
      target:
      entity_id: switch.chauffage_semaine_dejeuner
    • service: switch.turn_off
      target:
      entity_id: switch.chauffage_semaine_teletravail
    • service: switch.turn_off
      target:
      entity_id: switch.absence_semaine

Merci par avance pour votre aide.

smilorel

Ma configuration


System Information

version core-2022.10.4
installation_type Home Assistant Supervised
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.5
os_name Linux
os_version 5.10.0-18-arm64
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.28.0
Stage running
Available Repositories 1121
Downloaded Repositories 23
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Debian GNU/Linux 11 (bullseye)
update_channel stable
supervisor_version supervisor-2022.10.0
agent_version 1.2.2
docker_version 20.10.18
disk_total 229.1 GB
disk_used 14.9 GB
healthy true
supported failed to load: Unsupported
supervisor_api ok
version_api ok
installed_addons File editor (5.4.1), InfluxDB (4.5.0), Samba share (10.0.0), SQLite Web (3.6.1), deCONZ (6.16.0), MariaDB (2.5.1), Node-RED (13.4.0), Nginx Proxy Manager (0.12.2), WireGuard (0.7.0), AdGuard Home (4.7.4), Terminal & SSH (9.6.1), Mosquitto broker (6.1.3)
Dashboards
dashboards 1
resources 15
views 11
mode storage
Recorder
oldest_recorder_run 6 octobre 2022 à 08:00
current_recorder_run 16 octobre 2022 à 00:34
estimated_db_size 317.33 MiB
database_engine sqlite
database_version 3.38.5
___

Salut,

Pourquoi 4 input_booleans avec exclusion mutuelle ???
Autant faire un input_select qui corresponds à ton choix parmi les 4 options possibles, ça gère déjà l’exclusion

Salut @Pulpy-Luke,

Oui effectivement. J’étais parti sur cette solution et je n’ai pas chercher une autre pour être honnête. Je vais regarder comme cette solution fonctionne. :+1:

EDIT: Je viens de vérifier et je me souviens pourquoi je suis parti sur cette solution.
En fait ces 4 inputs sont ceux que j’ai crées dans mon scheduler: en sélectionnant l’input choisi, je choisi directement le paramétrage scheduler associé.
image

Ci-dessous une partie des paramétrages scheduler :
image

J’ai tenté un input_select (input_select.mode_chauffage_semaine) mais je n’arrive pas à faire marcher l’automation.
Ci-dessous ce que j’ai tenté de faire: si vous avez une idée, je suis preneur. :wink:
(Je pense que je gère mal les conditions…)

Merci.

  • alias: « Selection_Semaine »
    trigger:
    platform: state
    entity_id: input_select.mode_chauffage_semaine
    action:
    service: switch.turn_on
    target:
    {% if states.input_select.mode_chauffage_semaine == « Semaine » %}
    entity_id: switch.chauffage_semaine
    {% elseif states.input_select.mode_chauffage_semaine == « Semaine + Déjeuner » %}
    entity_id: switch.chauffage_semaine_dejeuner
    {% elseif states.input_select.mode_chauffage_semaine == « Semaine Télétravail » %}
    entity_id: switch.chauffage_semaine_teletravail
    {% elseif states.input_select.mode_chauffage_semaine == « Absence Semaine » %}
    entity_id: switch.chauffage_absence_semaine
    {% else %}
    entity_id: switch.chauffage_semaine
    {% endif %}

Autre idee… il existe un card ‹ condition › ou tu peux avoir une condition comme ‹ si un des input_select est active, ne pas changeable ›…ou: pour activer un des boutons, il faut d’abord avoir tout les quatre déactivés

Fait attention à la mise en forme type code (bouton </>) sinon ça devient difficile à lire.
A mon avis il manque un > après le target: pour en faire un template

J’ai essayé en rajoutant le > mais cela ne fonctionne pas non plus.

2 solutions m’ont été données par 123 sur le forum de homeassistant.io:

  1. Une 1ère solution est la suivante :
- alias: Selection_Semaine
  trigger:
    platform: state
    entity_id: input_select.mode_chauffage_semaine
  condition: []
  action:
    - service: switch.turn_on
      target:
        entity_id: >
          {% if trigger.to_state.state == 'Semaine' %}
            switch.chauffage_semaine
          {% elif trigger.to_state.state == 'Semaine + Déjeuner' %}
            switch.chauffage_semaine_dejeuner
          {% elif trigger.to_state.state == 'Semaine Télétravail' %}
            switch.chauffage_semaine_teletravail
          {% elif trigger.to_state.state == 'Absence Semaine' %}
            switch.chauffage_absence_semaine
          {% else %}
            switch.chauffage_semaine
          {% endif %}
  1. Une seconde est de faire un code plus court en faisant en sorte que le input_select possède le même nom que les switchs…

Options de l’Input Select:

Semaine
Semaine avec dejeuner
Semaine teletravail
Semaine absence

Au niveau des noms des switch:

switch.chauffage_semaine
switch.chauffage_semaine_dejeuner
switch.chauffage_semaine_teletravail
switch.chauffage_semaine_absence

Soit l’automatisation suivante :

- alias: Selection semaine
  trigger:
    - platform: state
      entity_id: input_select.chauffage_semaine
  condition: []
  action:
    - service: switch.turn_on
      target:
        entity_id: 'switch.chauffage_{{ trigger.to_state.state | slugify }}'
  1. Une 3ème solution consiste à utiliser les dictionnaires :
- alias: Selection semaine
  trigger:
    - platform: state
      entity_id: input_select.mode_chauffage_semaine
  condition: []
  action:
    - service: switch.turn_on
      target:
        entity_id: >
          {% set values = {'Semaine': 'semaine', 'Semaine+Déjeuner': 'semaine_dejeuner',
            'Semaine Télétravail': 'semaine_teletravail',  'Absence semaine': 'absence_semaine'} %}
          switch.chauffage_{{ values.get(trigger.to_state.state, 'week') }}

EDIT : Afin de gérer la désactivation des autres switch, il faut ajouter un service turn_off avant le service turn_on:

    - service: switch.turn_off
      target:
        entity_id:
        - switch.chauffage_semaine
        - switch.chauffage_semaine_dejeuner
        - switch.chauffage_semaine_teletravail
        - switch.chauffage_absence_semaine

Many thanks to 123 from community of home assistant .io.

smilorel

Pour info, on avait discuté d’un sujet similaire ici avec l’utilisation d’un input_select