Switch ON/OFF ou Toggle?

Bonjour,

Je tourne en rond depuis plusieurs jours : j’ai ajouté ce micro-module pour piloter les lumières extérieures de mon jardin. Une télécommande permet de les allumer ou des les éteindre. Je voudrais intégrer cela à HA.

Je vois bien l’événement qui est détecté automatiquement par le RFXCom. Il me crée une entité swith qui attend une commande pour le ON et une autre pour le OFF. Mais mon module ne fonctionne qu’avec une seule commande qui fait TOGGLE.

Appui sur la télécommande = ça fait un toggle sur les lumières en vrai / dans HA ça passe l’état du switch à ON

Appui dans HA sur ON : pas d’effet sur les lumières en vrai / dans HA ça passe l’état du switch à ON

Appui dans HA sur OFF : ça fait un toggle sur les lumières en vrai (à chaque appui, même si c’est déjà OFF) / dans HA ça passe l’état du switch à OFF

Je ne vais pas faire le liste de tout ce que j’ai essayé parce que rien n’a marché. Je débute dans HA depuis deux mois.

C’est peut-être tout simple… Mais je suis paumé !

Les entités switches de HA permettent de faire nativement, du on, du off et du toggle. Tu as testé l’appel de toggle depuis HA ?

Oui j’ai testé ça : quand le switch passe de on à off il change l’état des lumières (allume ou éteint selon le cas) et quand il passe de off à on il ne se passe rien.

Le problème c’est que le micro-module n’a qu’un code alors que l’entité en attend deux différents pour on et off. La doc explique comment faire une entité on/off avec deux codes vus comme deux appareils dans Rfxcom, mais pas l’inverse !

Il suffirait de savoir comment dire à HA : il y a un seul code qui fait du toggle et ça serait réglé !

Mon appareil est un PT-2262 qui parle en Lightning4.

Si je comprends bien, dans HA si tu appelles switch.turn_on plusieurs fois, ca allume puis éteint, puis allume,…
Logiquement, tu dois pouvoir t’en sortir avec ça:

En gros, tu crées un switch template qui appelle tout le temps turn_on pour agir sur le switch physique.

Oui, c’est bien ça mais avec switch.turn_off.

J’ai déjà lu plusieurs fois cette doc, mais il y a mille trucs que je ne connais pas, et qui font que je ne sais pas comment l’adapter à mes besoins. Je ne trouve pas de tuto, de formation, de documentation qui me permettraient de comprendre bien les bases en partant du début et en étant un peu exhaustif.

J’ai essayé ça :

switch:
  - platform: template
    switches:
        lumieres_exterieur:
        value_template: '{{ states("binary_sensor.lumieres_exterieur") }}'
        turn_on:
          service: switch.turn_off
          target:
            entity_id: switch.lumieres_exterieur
        turn_off:    
          service: switch.turn_off
          target:
            entity_id: switch.lumieres_exterieur

Mais ça ne change strictement rien, comme si je n’avais rien fait !

Je n’utilise pas ce template… Mais, en fait, l’idée, c’est de créer un second switch (template/virtuel) qui agit sur le switch réel.

Donc, un truc comme ça:

switch:
  - platform: template
    switches:
        lumieres:
        value_template: '{{ states("binary_sensor.lumieres_exterieur") }}'
        turn_on:
          service: switch.turn_off
          target:
            entity_id: switch.lumieres_exterieur
        turn_off:    
          service: switch.turn_off
          target:
            entity_id: switch.lumieres_exterieur

Et tu agis sur switch.lumieres en on/off. et ça, ça enverra toujours turn_off a switch.lumieres_exterieur (que je comprends être le switch physique)

Après, pour l’état je suis surpris de binary_sensor.lumieres_exterieur tu as aussi un binary_sensor avec le même nom ??

Oui ça fonctionne, je n’avais pas compris qu’on créait un nouveau switch. En utilisant celui-là en effet ça a l’air de fonctionner. Je dis ça a l’air parce que lorsque je le fais plusieurs fois de suite, au bout de 4 ou 5 allumages/extinctions, ça ne répond plus pendant 3-4 allumages/extinctions… Peut-être le RFXcom qui sature, ou le wifi… Merci, ça c’est déjà chouette de savoir faire ça !

Ensuite second souci : ça ne détecte pas si j’agis avec la télécommande.

Pour binary_sensor, oui cette entité a été créée par l’intégration Rfxcom à la détection automatique. Quoique je fasse elle est toujours ON, même quand j’utilise à la souris le switch qui est juste au dessus.

Je l’ai utilisé mais sans comprendre à 100% ce que je faisais… J’ai essayé avec et sans cette ligne mais ça ne change rien et dans les deux cas l’état du premier switch n’est pas mis à jour.

switch.lumieres_exterieur est bien l’entité créée par la détection du switch physique, ou plus exactement par la détection de l’émission du code qui active le switch physique.

C’est lequel le « premier » switch ?
Avec la solution template, tu vas masquer complètement le physique. Le physique agira effectivement sur les lumières, mais, c’est tout. Dans lovelace, il faudra mettre le template, par exemple.

Est-ce que l’état du binary_sensor.lumieres_exterieur change quand tu utilises la télécommande ? Si, oui, c’est ça qu’il va falloir mettre dans la ligne value_template.
Un truc comme ça :

value_template: "{{ is_state('binary_sensor.lumieres_exterieur', 'on') }}"

Il faut tester la syntaxe dans les outils de développement (template).

Celui que j’appelle le premier switch c’est celui qui a été créé automatiquement par Rfxcom.
Le second c’est celui que j’ai créé grâce à ton aide.

D’accord, donc le premier est en quelque sorte désactivé par la création du second?

Les lumières extérieures ne s’allument que par télécommande. Il n’y a pas de switch physique, uniquement un code Lightning4 qui agit en toggle sur un micro-module.

Et malheureusement lorsque j’utilise la télécommande cela n’est pas détecté dans HA actuellement, ni binary_sensor ni switch ne changent d’état, pourtant je sais que le Rfxcom le capte puisqu’en mode ajout automatique, il m’a bien créé l’appareil.

Tant que l’état ne remonte pas dans HA (et je ne sais pas comment ça marche en RFXCom…), tu ne pourras pas faire grand-chose qui dépend de l’état :wink:

Je dirais plutôt masqué / inutile à visualiser plus que désactivé.

Je suis en train d’avancer. J’ai trouvé comment récupérer l’événement quand on appuie sur le bouton de la télécomande.

image

J’ai compris que je ne ferai rien avec binary_sensor car ce n’est pas éditable. J’ai donc créé un input_boolean pour stocker l’état des lumières, et je le met à jour quand on appuie sur la télécommande.

Cet input boolean conditionne l’état du switch qu’on a créé ensemble. Tout cela fonctionne.

image

Là où j’en suis il me reste un souci : quand j’actionne le switch via lovelace je ne parviens pas à mettre à,jour input_boolean et donc mon switch revient automatiquement à sa position de départ et éteint les lumières une seconde après que je les aient allumées :face_with_peeking_eye:

J’ai essayé d’ajouter un second déclencheur dans mon automation sur le changement d’état du switch, mais ça ne fonctionne pas… Voilà où j’en suis, je continue de chercher… Merci pour ton aide, tu m’as aidé à l’étape où j’étais tout à l’heure :grinning:

Il faut rajouter une action pour l’input_boolean (cf. doc mentionnée plus haut)

        turn_on:
          service: switch.turn_off
          target:
            entity_id: switch.lumieres_exterieur
          service: input_boolean.turn_on
          target:
            entity_id: input_boolean.xxx

Et pareil pour le off.

Quand j’ai lu ton message, je me suis dit, yes, c’est la solution !!!

Mais ça ne fonctionne pas pour l’instant : le switch ne commande plus aucune rien et n’est plus mis à jour.
Je pense que c’est dû à un souci de formatage du code, car il se trouve que j’ai déjà une utilisation de ce template.

# ##########################################################################################
# # Switch
# ##########################################################################################

switch:
  - platform: template
    switches:
      party:
        value_template: '{{ states("input_boolean.party") }}'
        friendly_name: "La Festa"
        turn_on:
          - service: input_boolean.turn_on
            entity_id: input_boolean.party
        turn_off:
          - service: input_boolean.turn_off
            entity_id: input_boolean.party
      lumieres_exterieur2:
        unique_id: etat_lumieres_exterieur
        value_template: '{{ states("input_boolean.etat_lumieres_exterieur") }}'
        turn_on:
          service: switch.turn_off
          target:
            entity_id: switch.lumieres_exterieur
          service: input_boolean.turn_on
          target:
            entity_id: input_boolean.etat_lumieres_exterieur
        turn_off:    
          service: switch.turn_off
          target:
            entity_id: switch.lumieres_exterieur
          service: input_boolean.turn_off
          target:
            entity_id: input_boolean.etat_lumieres_exterieur

Et l’éditeur n’est pas content :

image

J’ai essayé de séparer les deux mais il n’est pas content non plus…

relit ton code, tu oublié des - devant service et target: aussi a des endroits.

un service:

        turn_on:
          service: switch.toggle
          target:
            entity_id: switch.blind_toggle

deux service a la suite:

        turn_on:
          - service: switch.turn_on
            target:
              entity_id: switch.target
          - service: light.turn_on
            target:
              entity_id: light.target
            data:
              brightness_pct: 40

OK j’ai compris, je détaille pour les futurs débutants comme moi qui passeront par ici. Comme il y a plusieurs services, il faut les énumérer avec des tirets. Là tout fonctionne !

switch:
  - platform: template
    switches:
      party:
        value_template: '{{ states("input_boolean.party") }}'
        friendly_name: "La Festa"
        turn_on:
          - service: input_boolean.turn_on
            entity_id: input_boolean.party
        turn_off:
          - service: input_boolean.turn_off
            entity_id: input_boolean.party
      lumieres_exterieur2:
        unique_id: etat_lumieres_exterieur
        value_template: '{{ states("input_boolean.etat_lumieres_exterieur") }}'
        turn_on:
          - service: switch.turn_off
            entity_id: switch.lumieres_exterieur
          - service: input_boolean.turn_on
            entity_id: input_boolean.etat_lumieres_exterieur
        turn_off:    
          - service: switch.turn_off
            entity_id: switch.lumieres_exterieur
          - service: input_boolean.turn_off
            entity_id: input_boolean.etat_lumieres_exterieur

Merci de ton aide golfvert !!! J’ai encore appris un peu au passage…

C’est ce que je viens de deviner, ça confirme, merci ! D’après ce que je vois on peut même se passer de « target »?

Non, c’est obligatoire.

Pourtant le code ci-dessus fonctionne. Pourquoi?

J’en sais rien, mais la syntaxe est comme ca.

Regarde les exemples de la doc.

Je suis trop débutant pour en être certain, mais j’ai parfois l’impression qu’il y a plusieurs façons de faire les mêmes choses… Plusieurs manières d’agencer le code?