Programmation des lumières avec Node-RED

Mon problème

Bonjour à tous,

Dans mon sous sol, j’ai installé sur mes interrupteurs standard des modules SONOFF Zigbee. Initialement, j’avais programmé l’extinction automatique des lumières après 20 minutes. J’en ai eu marre de me faire engeler par ma femme qui se retrouvait régulièrement dans le noir. J’ai donc installé des capteurs de présence aqara pour laisser la lumière tant qu’il y a quelqu’un dans les pièces. Malheureusement comme toujours, il y a toujours quelqu’un qui arrive à mettre à mal le système. Ma femme a réussi à ne plus se faire détecter par le capteur de présence donc elle c’est retrouver dans le noir. :sweat:

Je souhaiterais avoir des idées pour programmer au mieux Node-RED pour rallumer les lumières lors de la redétections d’une présence.

Dans l’idée, la lumière est allumée par l’interrupteur, ensuite tant qu’il y a une présence dans la pièce, la lumière reste allumé, si plus de détection extinction des lumières, si par contre redétections d’une présence dans la pièce allumage automatique de la lumière.

J’espère avoir été assez claire.

Merci à tous pour vos retour

Ma configuration

System Health

version core-2022.3.4
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.9
os_name Linux
os_version 5.10.92-v8
arch aarch64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4890
Installed Version 1.23.0
Stage running
Available Repositories 1077
Downloaded Repositories 18
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 Home Assistant OS 7.4
update_channel stable
supervisor_version supervisor-2022.03.3
docker_version 20.10.9
disk_total 116.7 GB
disk_used 19.9 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons Samba share (9.5.1), deCONZ (6.12.0), File editor (5.3.3), Mosquitto broker (6.0.1), SSH & Web Terminal (10.0.2), Duck DNS (1.14.0), ESPHome (2022.2.6), eWeLink Smart Home (1.2.3), Node-RED (11.1.0), AppDaemon 4 (0.8.1), Zigbee2mqtt (1.24.0-1), Zigbee2mqtt Edge (edge), room-assistant (2.19.0)
Lovelace
dashboards 1
resources 4
views 5
mode storage

Salut,

Je pense qu’il y a un petit souci dans ta logique.
Il faudrait qu’a chaque mouvement détecté tu reparte pour la durée voulue, sans éteindre les lumières.
Ca doit pouvoir se faire avec un compteur que tu réinitialise.

Le détecteur de présence devrait toujours allumer les lumières en fait… donc en gros remplacer l’interrupteur au final

J’ai eu la même remarque avec ma fille !
Mon interrupteur d’origine est toujours en position fermé et j’ai une ampoule Zigbee par contre.
Une automatisation classique pour allumer puis une autre pour éteindre, ça fonctionne bien, mon garage n’est pas très grand donc le capteur repère bien.
Voici l’automatisation pour allumer:

alias: Présence Mezzanine Nuit
description: ''
trigger:
  - type: motion
    platform: device
    device_id: 8f47695680b1028c7025c0ef454f9402
    entity_id: binary_sensor.presence_mez
    domain: binary_sensor
condition:
  - type: is_illuminance
    condition: device
    device_id: 8f47695680b1028c7025c0ef454f9402
    entity_id: sensor.lightlevel_mez
    domain: sensor
    below: 10
action:
  - type: turn_on
    device_id: 635c22fe8bb54c4f61f96fc8adafc44f
    entity_id: light.light_mezzanine
    domain: light
    brightness_pct: 70
    flash: long
mode: single

Pour éteindre l’inverse sans tenir compte les lux.

Bob

Merci AlexHass pour ta réponse,

Je comprend le principe mais dans ma situation je vois deux problèmes:

Le premier :

Au vu de mes connaissances actuel de Node-RED, je ne sais pas réinitialiser un compteur. Lors de certains paramètres, j’ai insérés des délais mais c’est tout.

Le deuxième :

J’ai une érudite à la maison, « la domotique ne sert à rien », je dois domotiser la maison sans rien changer à ses habitudes. Donc quand elle rentre dans une pièce, elle allume la lumière en appuyant sur un bouton.

Merci Bob,

Je vais tester

Fait comme moi, scotche l’interrupteur :slight_smile:

Tu veux un divorce? Bob :rofl: :rofl: :rofl:

Pour moi, ça c’est déjà fait :rofl: :rofl: :joy:

Trêve de plaisanterie Bob, je viens de tester ton automatisation, concrètement ce n’est pas ce que je cherchais. Mais cela ma donné une idée. Je travail sur le module « trigger-state » de Node-Red.

@Apollon16
Le fait d’avoir mis les interrupteurs connectés plutôt qu’une ampoule est déjà une bonne chose!
Pour garder les habitudes!

Concernant les compteurs, moi non plus je n’ai pas cherché plus loin sur Node Red.
Mais en revanche j’utilise des compteurs de HA.
Que je contrôle ensuite avec Node-Red au travers des services HA.
C’est plutôt simple.

En gros tu créé un compteur dans HA (dans configuration > assistants > entrées)
Tu lui met la durée de base que tu veux
Quand on allume la lumière, node-red le détecte et lance le compteur.
Si un mvt est détecté, on allume la lumière et on lance le compteur
Si un mvt est détecté et que le compteur tourne déjà, on appelle le service pour réinitialiser le compteur.
Si le compteur arrive à la fin, on le détecte dans Node Red et on eteint la lumière

Salut,
Voilà comment je procèderais.
Création d’un input number dans HA pour donner une durée en minutes
puis dans NR:
image

[{"id":"f62f941b736f3e7f","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"b59e00db60ff69a1","type":"server-state-changed","z":"f62f941b736f3e7f","name":"personne pendant timer","server":"df03acce.f940b","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.presence_couloir_occupancy","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"off","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":"timer","forType":"global","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":180,"y":240,"wires":[["b329f876d4923572"],[]]},{"id":"b329f876d4923572","type":"api-call-service","z":"f62f941b736f3e7f","name":"Éteins lumière","server":"df03acce.f940b","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.couloir"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":400,"y":240,"wires":[[]]},{"id":"2a0182a3293cb349","type":"server-state-changed","z":"f62f941b736f3e7f","name":"changement timer","server":"df03acce.f940b","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"timer.portail","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":170,"y":140,"wires":[["cfccc9432581ff23"]]},{"id":"cfccc9432581ff23","type":"change","z":"f62f941b736f3e7f","name":"","rules":[{"t":"set","p":"timer","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":140,"wires":[[]]},{"id":"279ed7c157574acd","type":"comment","z":"f62f941b736f3e7f","name":"global.timer = input number de HA","info":"","x":220,"y":100,"wires":[]},{"id":"37493a18a44f83c6","type":"comment","z":"f62f941b736f3e7f","name":"Si détecteur off pendant global.timer","info":"","x":220,"y":200,"wires":[]},{"id":"e62c43f1dbca796e","type":"server-state-changed","z":"f62f941b736f3e7f","name":"presence on","server":"df03acce.f940b","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.presence_couloir_occupancy","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"on","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":"timer","forType":"global","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":150,"y":340,"wires":[["4f1c08547b07807a"],[]]},{"id":"4f1c08547b07807a","type":"api-call-service","z":"f62f941b736f3e7f","name":"Allume lumière","server":"df03acce.f940b","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.couloir"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":400,"y":340,"wires":[[]]},{"id":"af80fa22a1636790","type":"comment","z":"f62f941b736f3e7f","name":"Si présence = allume lumière","info":"","x":200,"y":300,"wires":[]},{"id":"df03acce.f940b","type":"server","name":"Home Assistant","version":2,"addon":false,"rejectUnauthorizedCerts":false,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30"}]

Salut Fredarro,

Je viens de tester ta solution cela fonctionne bien. Je n’ai pas vraiment bien compris à quoi ça sert? Et surtout quand et comment est appelé le input timer?

image

Deuxième question : Que ce passe t’il si je dépasse le délai defini du input timer?

Perso j’utilise le node trigger, il a une option de ne pas se déclencher si un nouveau message lui arrive, donc dans mon cas par exemple quand je passe devant le détecteur de mouvement j’ai de la lumière pendant 3 minutes si pas d’autre détection de mouvement, mais si un nouveau mouvement déclenche le flow le trigger repart pour 3 minutes

Bonjour à tous,

Je vous remercie pour toutes vos idées.

Depuis 2 jours, je teste plusieurs configurations. Je pense avoir trouvé celle qui me correspond le mieux.
Je me suis inspiré de la réponse de Tarlak.

Voici le résultat :

Pour expliquer à ceux que cela peut intéresser :

  • J’utilise un « events state » pour la lumière manuelle et un « event state » pour allumer la lumière auto via le capteur de présence. Pour les inconditionnels de l’interrupteur, j’ai mis un décalage d’1 seconde sur l’« event state » du capteur de présence.

  • Ensuite, j’utilise le « tigger » en ne récupérant que la valeur 0 de sortie. Et comme Tarlak, je fais une vérif de présence avec un « poll state » que je réinjecte dans mon « tigger » pour le réinitialiser.

  • Enfin, petite vérif que la lumière est bien allumée avec « current state » et si oui, arrêt de la lumière.

Je vais valider cette solution.

Si toutefois certain de plus qualifier que moi, constate que le système peut être optimisé, je suis preneur.