[aide] gérer mode manuel et mode auto d'allumage des lumières

Mon problème

Bonjour à tous.

J’ai quelques automatisations afin de m’aider à gérer mes lumières. En suivant les excellents conseils du forum, j’ai modifié mes automations, initialement basés sur des délai dans une automatisation pour des timers. La plupart du temps je m’appuie sur les mécaniques suivantes:

  • une automatisation qui allume les lumières sur un ou plusieur triggers (par exemple un détecteur de mouvement, ouverture de porte) et (re)lance un timer.
  • une automatisation qui éteint la lumière à la fin du timer
  • une automatisation qui évite les oubli et éteint les lumières au bout d’un certain temps sans détection de présence

J’ai un soucis avec cette architecture que je n’arrive pas à résoudre:
Comment séparer les cas d’allumages automatiques (et donc extinction par le timer) des cas d’allumages manuels où je ne veux pas d’extinction par le timer (et juste l’extinction après détection d’absence si oubli d’éteindre).

Dans le cas où j’ai des smart light dimables, je contourne le problème et allumant en automatique à un niveau <100% et en testant le niveau dans l’automatisation d’extinction par timer avant d’éteindre. Ceci marche dans 99% des cas.

Mon problème se situe dans les pièces où j’ai un micromodule qui pilote une lumière basique. Je n’arrive pas à séparer logiquement dans l’automatisation d’extinction par le timer les cas où la lumière a été allumée manuellement par l’interrupteur et ceux où cela a été fait dans l’automatisation. Même si j’allume à la main, si mon trigger est activé, il lance le timer et éteint les lumières à la fin. Si je teste l’état avant de lancer le trigger, je ne relance pas le timer et risque de me trouver dans le noir…

J’avoue je sèche, j’imagine que cela a déjà été fait, mais je n’ai pas trouvé…
Comment faites vous chez vous?

En bonus, j’aimerai rester sur une architecture simple où je ne multiplie pas (trop) les variables et automatisation pour gérer une seule lumière…

J’aimerai aussi continuer à respecter une de mes philo de base:

  • allumage auto => extinction auto
  • allumage manuel => extinction manuelle (avec éventuellement une ceinture de sécurité en cas d’absence « longue »)

Ma configuration


Inutile dans ce cas… la question est générique.


Bonjour @BBE
Astucieux l’histoire du %, je vais implémenter.
Pour le timer ce n’est pas vraiment utile, le nombre d’automatisation n’est pas un souci je trouve, souvent on n’y revient plus quand c’est au point.
Exemple dans ma cuisine, si présence et luminosité faible, on allume.
Seconde automatisation, si absence de plus de 2 minute, ça s’éteint.
Ça ne répond pas vraiment mais ça te permet de supprimer tes timer.

Bob

1 « J'aime »

Merci Bob.

En fait c’est a peu près équivalent comme solution. J’ai utilisé les timers car c’est un truc que je voulais essayer… J’ai aussi pas mal utilisé les délais et temps de confirmation pour faire ça…
Avoir 3 automatisations par lumière comme actuellement ne me dérange pas, c’est s’il faut en plus commencer à déclarer plusieurs variables et avoir encore d’autres automatisations associées que la chose va commencer à être compliqué à appliquer à de nombreuses lumières.

Par contre ça ne change pas que je n’arrive pas à séparer le déclenchement auto du déclenchement manuel…

Et si ça marche bien avec des capteurs de présence, avec des motion sensor, ça ne marche pas si tu restes immobile.

BBE

J’ai une solution partielle (déjà testée) qui peut convenir à certains en supprimant le timer (ou la relance du timer):

  • En automatique j’active l’éclairage XXmin sans relance du timer en cas de nouveau trigger
  • Dans l’automatisation d’extinction, je teste si l’éclairage est actif depuis plus de XXmin et si c’est le cas, je n’éteint pas.

Le problème c’est qu’alors, comme je ne relance pas le timer, il est possible de se retrouver dans le noir au bout des XXmin en cas d’allumage auto et de multiples passages. C’est ce qui m’a conduit à mettre cette relance du timer.

J’aurai voulu pouvoir retrouver quelque part soit le fait que l’éclairage a été allumé par l’automatisation, soit savoir qu’il a été allumé manuellement pour pouvoir utiliser/stocker / tester cette condition…

On arrive à voir cette info dans le journal de bord. Sait on la récupérer??

Pour l’instant je sèche encore…

Tu pourrais éventuellement utiliser input_select liés à chaque lumière qui dit si la lumière a été allumée en mode auto ou en mode manuel:
off - lumière off
on - lumière allumée en mode manuel
auto- lumière allumée en mode auto
Evidemment, il faut le gérer, et dès que ça devient complexe, perso, je recommande de passer à NodeRed plutôt que les automatisations qui deviennent vite ingérables.

Et pour les 99%, bonne idée, j’utilise le même système pour mes volets, je les ouvre à 99% en mode auto, ce qui me permet de savoir s’ils ont été ouverts à la main à 100% ou par l’automatisation à 99%. :slight_smile:

1 « J'aime »

C’est bien là le noeud du problème, mais je sais assez facilement gérer les états Off et auto. Mais je ne parviens pas à détecter le ON en mode manuel.

Pour ce qui est de node-red. Je suis suffisamment a l’aise avec if/then/else pour ne pas en avoir vu l’intérêt pour l’instant (j’ai toujours réussi à faire ce que je voulais tant que je trouve où récupérer l’info). Et j’ai déjà trop de choses qui tournent sur mon petit rpi3b+…

Bon j’ai pris le problème dans l’autre sens et j’ai quelque chose qui marche assez bien:

  • j’ai créé un input_booléean « auto_ON ».
  • j’ai ajouté une 4eme automatisation: quand la lumière passe à OFF, je passe auto_on à false
  • j’ai modifié l’automatisation d’allumage auto: je commence par tester si la lampe est eteinte et dans ce cas je passe auto_on à true puis j’allume la lampe et enfin je (re)lance le timer dans tous les cas.
  • j’ai modifié l’automatisation d’extinction en fin de timer pour qu’elle ne s’active que si auto_on est true.
  • j’ai toujours en sécurité mon extinction si inoccupé depuis XXmin pour couvrir les cas d’oubli à plus long terme (il arrive d’être étourdi…)

En cherchant bien je dois pouvoir me passer du booléen en jouant avec l’etat du timer à la place…

1 « J'aime »

Suite au message précédent, qui aboutissait à une solution qui fonctionne gràce à un input_booleen supplémentaire, j’ai creusé un peu et j’ai fini par arriver à un truc un peu plus satisfaisant, sans utiliser de booléen… Merci encore à la communauté qui pousse toujours à se creuser un peu la tête!

Je partage ici au cas où ça inspire quelqu’un:

Pour gérer une lampe (ici pilotée par un SONOFF ZBMINI-L sans neutre) qui ne me permet donc pas d’avoir un retour de l’activation manuelle contrairement à d’autres cas (bouton télécommande par exemple) avec deux scénario différents:

  • allumage et extinction auto après un timer (ré activable) déclenché par un capteur (ici ouverture de porte ou détection de présence)
  • allumage manuel et pas d’extinction auto (ou dans mon cas une extinction si absence après XXmin - facultatif)

Il faut créer les éléments suivants:

  • un timer associé au scenario automatique. Ici allumage_garage réglé à 5min
  • 4 automatisations pour:
    * allumer automatiquement sur détection et gérer le timer

    * éteindre automatiquement en fin de timer (ou relancer le timer si présence)

    * éteindre automatiquement en cas d’absence prolongée (facultatif)

    * supprimer le timer en cas d’extinction de la lampe
    .

Ici, toute la subtilité est dans l’utilisation du timer comme un booléen pour vérifier si on est en allumage auto ou non dans les automatisations:

  • Il faut tester si la lumière est allumée avant de lancer le timer
  • il faut tester si le timer est actif avant de le relancer.
  • Il ne faut pas oublier d’annuler le timer si la lumière s’éteint.

L’état actif du timer correspond alors à un booléen « allumage automatique ON » (comme dans la solution du message précédent, mais sans ajouter d’input_booleen).

Ci joint les 4 automatisations:

alias: Lumières - Garage - gestion timer
description: passe le timer allumage_garage à off quand la lumière s'eteint
trigger:
  - platform: state
    entity_id:
      - light.inter_lumiere_garage
    to: "off"
condition: []
action:
  - service: timer.cancel
    data: {}
    target:
      entity_id: timer.allumage_garage
mode: single

alias: Lumières - Garage - allumage auto
description: >-
  allume le garage et (re)lance un timer de 5 min si on ouvre ou ferme la porte
  du garage, si on ouvre le cellier ou si on détecte une présence.
trigger:
  - platform: state
    entity_id:
      - binary_sensor.0x00124b0028943f14_contact
    from: "off"
    to: "on"
  - platform: state
    entity_id:
      - binary_sensor.0x00124b0028941c36_contact
    from: "off"
    to: "on"
  - platform: state
    entity_id:
      - binary_sensor.0x00124b002453456c_occupancy
    to: "on"
  - platform: state
    entity_id:
      - binary_sensor.0x00124b0028943f14_contact
    from: "on"
    to: "off"
condition: []
action:
  - if:
      - condition: state
        entity_id: light.inter_lumiere_garage
        state: "off"
    then:
      - service: timer.start
        data: {}
        target:
          entity_id: timer.allumage_garage
      - type: turn_on
        device_id: f3acbfbbcc889a2540f8c9c561a74ba2
        entity_id: light.inter_lumiere_garage
        domain: light
  - if:
      - condition: state
        entity_id: timer.allumage_garage
        state: active
    then:
      - service: timer.start
        data: {}
        target:
          entity_id: timer.allumage_garage
mode: single
alias: Lumières - Garage - extinction auto timer
description: Éteint le garage a la fin du timer de 5min si personne présent, 
sinon relance le timer.
trigger:
  - platform: event
    event_type: timer.finished
    event_data:
      entity_id: timer.allumage_garage
condition: []
action:
  - if:
      - condition: state
        entity_id: binary_sensor.0x00124b002453456c_occupancy
        state: "on"
    then:
      - service: timer.start
        data: {}
        target:
          entity_id: timer.allumage_garage
    else:
      - type: turn_off
        device_id: f3acbfbbcc889a2540f8c9c561a74ba2
        entity_id: light.inter_lumiere_garage
        domain: light
mode: single

et la 4eme facultative:

alias: Lumières - Garage - extinction auto inoccupé
description: extinction auto du garage en absence de mouvement 15min si allumé
trigger:
  - platform: state
    entity_id:
      - binary_sensor.0x00124b002453456c_occupancy
    to: "off"
    for:
      hours: 0
      minutes: 15
      seconds: 0
condition:
  - condition: device
    type: is_on
    device_id: f3acbfbbcc889a2540f8c9c561a74ba2
    entity_id: switch.0x00124b0026b75b52
    domain: switch
action:
  - type: turn_off
    device_id: f3acbfbbcc889a2540f8c9c561a74ba2
    entity_id: switch.0x00124b0026b75b52
    domain: switch
mode: single

En espérant que ça puisse aider quelqu’un…