Fermeture avec Node Red

Bonjour,

Je migre certaine automatisation HA sur Node-Red. Actuellement, je suis bloqué sur l’automatisation de la fermeture de ma porte de garage et de mon portail.

Ce qui me pose problème, c’est le déclencher de l’automatisation lors de la fermeture de la porte de garage.

Dans HA, j’ai crée un Template sensor, avec trois position : Ouvert, Fermé, Entrouvert.

 - platform: template
    sensors:
      porte_garage: 
        friendly_name: "Etat de la porte Garage"
        value_template: >-
          {% if is_state('binary_sensor.capteur_porte_de_garage', 'off') and is_state('binary_sensor.capteur_de_porte_de_garage', 'on') %}
            Ouvert
          {% elif is_state('binary_sensor.capteur_porte_de_garage', 'off') and is_state('binary_sensor.capteur_de_porte_de_garage', 'off') %}
            Fermé
          {% else %}
            Entrouvert
          {% endif %}
        icon_template: >-
          {% if is_state('binary_sensor.capteur_de_porte_de_garage','on') %}
            mdi:garage-open
          {% else %}
            mdi:garage
          {% endif %}
          

Ayant identifié, un décalage de temps entre la fermeture et l’ouverture de la porte de garage. J’ai créé cette automatisation Node Red.

[
    {
        "id": "XXXXXXXXX",
        "type": "server-state-changed",
        "z": "YYYYYYYYY",
        "name": "Porte de garage",
        "server": "WWWWWWWWWW",
        "version": 3,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "entityidfilter": "sensor.porte_garage",
        "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": "18",
        "forType": "num",
        "forUnits": "seconds",
        "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": 80,
        "y": 600,
        "wires": [
            [
                "XXXXXXXXX"
            ]
        ]
    },
    {
        "id": "XXXXXXXXXXXX",
        "type": "switch",
        "z": "YYYYYYYYYYY",
        "name": "Fermeture de la porte de garage",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "Entrouvert",
                "vt": "str"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 1,
        "x": 450,
        "y": 500,
        "wires": [
            [
                "XXXXXXXXXX"
            ]
        ]
    },
    {
        "id": "XXXXXXXXXX",
        "type": "api-current-state",
        "z": "YYYYYYYYYYYY",
        "name": "Vérification du portail pour voiture ouvert",
        "server": "WWWWWWWWWW",
        "version": 2,
        "outputs": 2,
        "halt_if": "open",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "cover.gate_voiture",
        "state_type": "str",
        "blockInputOverrides": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 880,
        "y": 420,
        "wires": [
            [
                "XXXXXXXX"
            ],
            [
                "XXXXXXXXX"
            ]
        ]
    },
    {
        "id": "XXXXXXXXXXXXX",
        "type": "api-current-state",
        "z": "YYYYYYYYYYY",
        "name": "Vérification du portail pour voiture ouvert",
        "server": "WWWWWWWW",
        "version": 2,
        "outputs": 2,
        "halt_if": "open",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "cover.gate_pieton",
        "state_type": "str",
        "blockInputOverrides": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 880,
        "y": 520,
        "wires": [
            [
                "XXXXXXXXX"
            ],
            []
        ]
    },
    {
        "id": "XXXXXXX",
        "type": "api-call-service",
        "z": "YYYYYYYY",
        "name": "Fermeture portail",
        "server": "WWWWWWWW",
        "version": 3,
        "debugenabled": false,
        "service_domain": "switch",
        "service": "turn_on",
        "entityId": "switch.porte_pieton",
        "data": "",
        "dataType": "jsonata",
        "mergecontext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "x": 1300,
        "y": 460,
        "wires": [
            []
        ]
    },
    {
        "id": "YYYYYYYYYYY",
        "type": "server",
        "name": "Home Assistant",
        "version": 2,
        "addon": true,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true,
        "heartbeat": false,
        "heartbeatInterval": 30
    }
]

Maintenant, j’aimerais aller plus loin et que Node Red puisse identifier 4 positions avec pour commencement l’état « Fermé ».

Position 1 : Fermé (initiale/finale)
Position 2 : Entrouvert 1 ( quand on passe de « Fermé » à « ouvert »)
Position 3 : Ouvert ( avec plus ou moins de temps)
Position 4 : Entrouvert 2 (quand on passe de « Ouvert » à « Fermé ».
Et lancer la fermeture de mon portail 4 secondes après lancement de la position 4.

Merci pour votre aide

Ma configuration


System Health

version core-2021.11.5
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.7
os_name Linux
os_version 5.10.17-v8
arch aarch64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 4931
Installed Version 1.17.2
Stage running
Available Repositories 975
Installed Repositories 10
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 6.6
update_channel stable
supervisor_version supervisor-2021.10.8
docker_version 20.10.8
disk_total 116.7 GB
disk_used 12.2 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons Samba share (9.5.1), deCONZ (6.10.0), File editor (5.3.3), Mosquitto broker (6.0.1), SSH & Web Terminal (9.1.1), Duck DNS (1.14.0), ESPHome (2021.11.1), eWeLink Smart Home (1.2.3), Node-RED (10.1.1), AppDaemon 4 (0.7.1), Zigbee2mqtt (1.22.0-3), Zigbee2mqtt Edge (edge)
Lovelace
dashboards 1
resources 3
views 5
mode storage
___

Dans ma recherche d’identification de position en faisant un debug sur Node Red, j’obtiens.

Pour la position 2, j’obtiens 2 messages playload :

23/11/2021, 12:26:56node: XXXXXXXXXX
sensor.porte_garage : msg.payload : string[6]
"Ouvert"
23/11/2021, 12:26:56node: XXXXXXXXXX
sensor.porte_garage : msg.payload : string[10]
"Entrouvert"

Pour la position 3, j’obtiens 1 message playload :

23/11/2021, 12:27:14node: XXXXXXXXXX
sensor.porte_garage : msg.payload : string[6]
"Ouvert"

Pour la position 4, j’obtiens 1 message playload :

23/11/2021, 12:27:35node: XXXXXXXXX
sensor.porte_garage : msg.payload : string[10]
"Entrouvert"*

Et pour la position 1, j’obtiens 2 message playload :

23/11/2021, 12:27:55node: 108f8fc23d05d443
sensor.porte_garage : msg.payload : string[6]
"Ouvert"
23/11/2021, 12:27:55node: 108f8fc23d05d443
sensor.porte_garage : msg.payload : string[5]
"Fermé"

Quelle node pourrais me permettre de fusionner les messages playload pour n’en créer qu’un là ou il y en a deux?

Hello.
Regarde du côté du node trigger state, il permet de spécifier les états previous et current …

Merci mais je n’arrive pas à le réglé. Je n’arrive pas à filtrer seulement la position 4, le node valide la porte en position 2 et 4. :relieved:

Attends je met ma boule de cristal à recharger sur le port usb et je tente de voir ta config à distance. :sweat_smile:
Ou alors si tu veux aller plus vite, tu partages tes tentatives / configurations / informations ?

C’est ce que j’ai essayer de faire mais ça n’a pas l’air clair.

Je cherche à fermé mon portail quand je ferme mon garage. Ma porte de garage est en contacte sec donc j’ai mis deux capteur pour identifier les trois positions réel de la porte de garage comme expliqué dans mon premier message.

Pour fermé mon portail, je souhaite pouvoir séparer en 4 positions l’état de ma porte de garage. Et la je n’y arrive pas. A chaque fois je me retrouve avec 3 positions. 2 Positions « Entrouvert », 1 position « Ouvert » et 1 position « Fermé ».

J’ai fais une première ébauche, j’ai séparé les positions par un temps car ma porte de garage s’ouvre plus vite qu’elle ne se referme.

J’espère avoir été plus clair

De ce que je vois c’est pas le node que je t’indique…

Comme? je n’ai pas réussi à le paramétrer. je suis revenu a mon ancienne configuration pour le retour de ma femme :wink:

Peux tu m’expliquer comment remplir les champs?

Tu regardé un peu la doc ?
https://zachowj.github.io/node-red-contrib-home-assistant-websocket/node/trigger-state.html

Parce que c’est pas bien compliqué
trigger

Je viens de tester mais cela ne marche pas car comme je l’ai mis plus haut à l’ouverture de mon garage j’ai un message playload caché nommé « Ouvert » qui se lance au début. Il faut que je trouve un moyen de le supprimer ou de le fusionner.

Pour modifier, ou supprimer, tu peux utiliser le node « CHANGE »
Par contre tu as des msg.payload différents à la sortie de chaque node.
Cela dépend du lieu où tu place ton débug.
Il serai bien que tu nous fasses une copie d’écran de ton flow pour que l’on comprenne un peu mieux.

1 « J'aime »

Si ton capteur sensor.porte_garage marche bien, c’est simple

  • passe de Fermé (previous) à Entreouvert (current) = > Entreouvert 1
  • passe de Ouvert (previous) à Entreouvert (current) = > Entreouvert 2
  • passe de Entreouvert (previous) à Fermé (current) = > Fermé
  • passe de Entreouvert (previous) à Ouvert (current) = > Ouvert

Tu fais 4 nodes différents et tu regarde

Voici les flux

La capture d’écran lors de l’ouverture de ma porte de garage

Celle porte ouverte

Fermeture de la porte de garage

Porte fermé

Je pense que tu as un bug sur ton sensor à 3 positions.
Tu as un état parasite (apparemment ouvert )
Tu peux l’isoler en jouant sur ce paramètre sur ton node « event state »
image

et voir si en le ré-écrivant comme ça c’est mieux :

Je viens de modifier le code mais j’ai toujours la présence de l’état parasite.

Je l’ai bien isolé en mettant la seconde.

Y a-t-il un moyen d’utiliser le node « trigger state » (ou un autre équivalent) en décalant le flux d’une seconde pour supprimer l’état parasite?

binary_sensor.capteur_porte_de_garage et binary_sensor.capteur_de_porte_de_garage c’est une paire de capteurs différents de cette config ?

Oui, car je voulais que la fermeture du portail se fasse avant le fermeture complète du garage. J’ai donc rajouter un capteur à la porte de garage en plus du capteur d’ouverture/fermeture initiale. Ensuite, j’ai créé le template sensor, avec la position « Entrouvert ».