Automatisation avec bouton Xiaomi

oui et non car pour celui qui utilise du mqtt par ex on peut se passer de ha pour l’automation donc si ton ha tombe tu pourras toujours allumer ta lumière par ex :wink:
après si c’est node red qui tombe on est d’accord le soucis est inversé ^^

Peux tu partager ton flow ?

Je débute et souhaiterais voir le contenu des nœuds :innocent:

@jybi89, @DcJona ou @golfvert (oui, c’est un peu un @everyone:wink:)

Je commence à regarder Node-red et à la lecture du premier post, je me pose une question :

  • Peux t’on récupérer les évènements de HA dans NR ?
    En clair, est-ce que NR est capable d’avoir TOUS les évènements de HA ?

Merci.

C’est juste une liste non exhaustive

Voilà:

[{"id":"cadd0992.962ed8","type":"switch","z":"fda65aca.413398","name":"Quel ?","property":"topic","propertyType":"msg","rules":[{"t":"cont","v":"bouton/cave","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":350,"y":840,"wires":[["e31b5a12.fefe28"]]},{"id":"e31b5a12.fefe28","type":"switch","z":"fda65aca.413398","name":"Bouton Cave","property":"payload.click","propertyType":"msg","rules":[{"t":"eq","v":"single","vt":"str"},{"t":"eq","v":"double","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":490,"y":840,"wires":[["a7ec43d6.b86cf"],["7874d19c.420a2"]]},{"id":"a7ec43d6.b86cf","type":"api-call-service","z":"fda65aca.413398","name":"Placard","server":"d28c9492.f419c8","version":1,"service_domain":"light","service":"toggle","entityId":"light.yeelightplacard","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":640,"y":800,"wires":[[]]},{"id":"f1b592e6.1e952","type":"json","z":"fda65aca.413398","name":"","property":"payload","action":"","pretty":false,"x":230,"y":840,"wires":[["cadd0992.962ed8"]]},{"id":"d45195bf.b51188","type":"mqtt in","z":"fda65aca.413398","name":"Bouton","topic":"zigbee2mqtt/bouton/#","qos":"2","datatype":"auto","broker":"8cf5f6b5.937088","x":110,"y":840,"wires":[["f1b592e6.1e952"]]},{"id":"7874d19c.420a2","type":"api-call-service","z":"fda65aca.413398","name":"Cave","server":"d28c9492.f419c8","version":1,"service_domain":"switch","service":"toggle","entityId":"switch.cavelightonoff","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":630,"y":860,"wires":[[]]},{"id":"d28c9492.f419c8","type":"server","name":"hassio","legacy":false,"addon":false,"rejectUnauthorizedCerts":false,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true},{"id":"8cf5f6b5.937088","type":"mqtt-broker","name":"","broker":"192.168.0.204","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
1 « J'aime »

Je pense que oui… Je ne les ai pas tous testé loin de là.
En fait, j’utilise assez peu le déclencheur event, mais plus le trigger ou le poll.
Quel évènement t’intéresse? Pour les états des capteurs pas la peine de passer par là.

En fait, en automatisation YAML, quand on utilise un déclencheur state par exemple, il est pas notion de temps mais d’évènement.

La même chose est possible avec Node-red ?

Pour l’exemple concret, j’ai ce bouton également chez moi, et je gères les appuis par évènements et pas par états.
Le code que tu as mis juste au dessus, utilise ce principe c’est ça ?

Edit:
ma réponse dans ce poste du coup :wink:

Hello !
je ne sais pas si je fait bien de déterrer un sujet aussi vieux mais étant donné que ça parle du bouton Xiaomi…

Je m’explique je dispose de 2 boutons :
1 rond Xiaomi et 1 carré Aqara tout 2 communiquent en Zigbee avec ma Gateway Xiaomi et HA du coup.
Le bouton rond permet normalement d’avoir 3 fonctions :
simple clic
double clic
appuie long

le carré fait 2 fonction :
simple clic
double clic

Simplement je ne trouve pas comment paramétrer ça dans HA.
Pour une fois que je test une automation dans HA directement sans passer par NodeRed je me retrouve un peu perdu.
Votre aide sera la bienvenue !
merci :slight_smile:

Je ne sais via la passerelle xiaomi, va dans outils de devellopement puis filtre sur ton bouton, clique et regarde ce qui s’affiche. Ce devrait etre genre single_click, double_ click et long press.

Ensuite dans automatisation

platform: state
entity_id: sensor.bouton_cafetiere_action
to: single_click

En image

Quel intégration tu utilise pour ta passerelle xiaomi?
moi, j’ai une gateway v3 avec l’intégration xiaomi_gateway3.
comme le propose @McFly tu peu faire une automatisation par action, mais faudra en créer une par action du bouton.
Alors que si tu utilise un blueprint, tu pourra créer une seul automatisation qui comprendras toutes les actions de ton bouton.

un exemple d’un blueprint pour un button sonoff ( le principe reste identique, a modifier suivant le nom des actions)

blueprint:
  name: Sonoff Button SNZB-01 with Xiaomi Gateway 3
  description: '

    ## Sonoff Button SNZB-01 with Xiaomi Gateway 3

    Basic blueprint for executing supported actions with the Sonoff Button SNZB-01 and
    Xiaomi Gateway 3 using default firmware.


    Supports the following actions:

    - Single

    - Double

    - Hold

    ### Requirements:

    - [Xiaomi Gateway 3 Integration][1] v2.0.3

    - Official Firmware for the Gateway

    - Paired Sonoff Button SNZB-01


    [1]: https://github.com/AlexxIT/XiaomiGateway3

    '
  domain: automation
  input:
    trigger_entity:
      name: Sonoff Button
      description: Choose Sonoff Button Action entity
      selector:
        entity:
          domain: sensor
          integration: xiaomi_gateway3
    single:
      name: Single
      description: Actions to one click
      default: []
      selector:
        action: {}
    double:
      name: Double
      description: Actions to double click
      default: []
      selector:
        action: {}
    hold:
      name: Hold
      description: Actions to hold click
      default: []
      selector:
        action: {}
variables:
  action: '{{ trigger.to_state.state }}'
trigger:
- platform: state
  entity_id: !input 'trigger_entity'
condition: []
action:
- choose:
  - conditions:
    - '{{ action == ''single'' }}'
    sequence: !input 'single'
  - conditions:
    - '{{ action == ''double'' }}'
    sequence: !input 'double'
  - conditions:
    - '{{ action == ''hold'' }}'
    sequence: !input 'hold'
  default: []
mode: queued
max_exceeded: silent

voila l’automatisation créer a partir du blueprint:

alias: Sonoff Button SNZB-01 Salle a manger
description: ''
use_blueprint:
  path: warcozes/sonoff_snzb01_for_xiaomi_gateway3.yaml
  input:
    trigger_entity: sensor.0x00124b0025189cb5_action
    single:
      - service: light.toggle
        data: {}
        target:
          entity_id: light.salle_a_manger_tuya_local
    double:
      - service: switch.toggle
        data: {}
        target:
          entity_id: switch.prise_spot_sejour_tuya_local
    hold:
      - service: switch.toggle
        data: {}
        target:
          entity_id: switch.prise_vitrine_tuya_local

Ça va pas simplifier la chose mais j’ai aussi l’évent appui long sur un Xiaomi carré.
Je peux partager le bout de Flow qui fait les tri des 3 états

Avec plaisir pulpy ! Je testerais ensuite appliqué à l’un et l’autre de mes boutons.

Donc bouton de type WXKG11LM

Via zigbee2mqtt, il propose 3 sensors

sous Nodered, on utilise le sensor « action » dans un state node, et un switch pour ventiler les 3 états : single, double, hold de tous les boutons

Export des 2 boutons + switch :

[{"id":"c8093c23.7738","type":"server-state-changed","z":"5db898f0.0aad08","g":"a95e4519.b6db18","name":"Bouton chevet 1","server":"94a12356.a4a14","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.chevet1_suite_action","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"}],"x":120,"y":1720,"wires":[["4432e2f5.6990ec"]]},{"id":"efb21338.54c6","type":"server-state-changed","z":"5db898f0.0aad08","g":"a95e4519.b6db18","name":"Bouton chevet 2","server":"94a12356.a4a14","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.chevet2_suite_action","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"}],"x":120,"y":1780,"wires":[["4432e2f5.6990ec"]]},{"id":"4432e2f5.6990ec","type":"switch","z":"5db898f0.0aad08","g":"a95e4519.b6db18","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"single","vt":"str"},{"t":"eq","v":"double","vt":"str"},{"t":"eq","v":"hold","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":290,"y":1780,"wires":[["b0dc46f1.1ee8d8"],["4f655ecd.01ccf"],["e422d1e0b8e15b94"]]},{"id":"94a12356.a4a14","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open|1","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30}]

Pas obliger de créer une automatisation par action, tous rentre dans une seul automatisation.

Après oui le blueprint simplifie la tache.

Maintenant je serais curieux de connaitre l’impact sur les ressources entre un blueprint ou une automatisation car souvent les blueprint propose plusieurs actions qui ne sont pas forcement utiles.

Sujet intéressant. Sur les ressources probablement négligeable (c’est un if then else un peu plus élaboré). Par contre c’est probablement plus lent qu’une automatisation classique sans pour autant être humainement perceptible. C’est le même cas en pire avec NR est très franchement ça ne me choque pas.

1 « J'aime »

Hello,
je fait seulement le test et je ne parviens pas à faire fonctionner le simple clic.
En cherchant un peu sur le forum je suis allé dans :
Outils de développement > Evenements, puis dans Ecouter les événements, j’ai mis state_changed puis commence à écouter.

Il m’en ressort ça :

> {
>     "event_type": "state_changed",
>     "data": {
>         "entity_id": "binary_sensor.switch_158d00022b7792",
>         "old_state": {
>             "entity_id": "binary_sensor.switch_158d00022b7792",
>             "state": "off",
>             "attributes": {
>                 "last_action": "single",
>                 "voltage": 3.03,
>                 "battery_level": 46.4,
>                 "friendly_name": "Bouton Xiaomi"
>             },
>             "last_changed": "2022-04-09T19:07:35.230790+00:00",
>             "last_updated": "2022-04-09T19:13:58.814906+00:00",
>             "context": {
>                 "id": "576ab29d87b99297cdfa38670708c002",
>                 "parent_id": null,
>                 "user_id": null
>             }
>         },
>         "new_state": {
>             "entity_id": "binary_sensor.switch_158d00022b7792",
>             "state": "off",
>             "attributes": {
>                 "last_action": "double",
>                 "voltage": 3.03,
>                 "battery_level": 46.4,
>                 "friendly_name": "Bouton Xiaomi"
>             },
>             "last_changed": "2022-04-09T19:07:35.230790+00:00",
>             "last_updated": "2022-04-09T19:14:54.932041+00:00",
>             "context": {
>                 "id": "802e45ab8a553f43159ca34aa9e5f6a5",
>                 "parent_id": null,
>                 "user_id": null
>             }

Mais je ne vois passer à aucun moment le « single ».
Le double et le long_click_press.

Mais merci beaucoup pour ton aide en fait je doit me baser sur l’event pour récupérer l’état et surtout ça me permet de mieux comprendre le langage de NodeRed.
Je doit avouer que si y’as bien un truc que je deteste c’est tout ces langages de programmation du coup j’ai du mal à faire l’apprentissage je suis en revanche à fond technique…

Je vais essayer de creuser mon ce single click.

edit : je m’aperçois que beaucoup m’ont aidé et je n’ai pas fait attention à leur post ayant regardé sur le téléphone en journée… je vais tout regarder.
Merci beaucoup l’équipe le forum est agréable et l’aide vraiment précieuse vous êtes des chefs !

Pas compris …

Je vois au moins 2 actions sur les 3 (action pas event…)

Oulà non j’ai bien plus vieux que ça c’est une modèle dgnwg02lm donc si je dit pas de bétise une V2. Ca fait un bon moment que j’ai ces produits chez moi ça date de quand je me suis lancé la première fois en domotique :grin:
Je l’ai intégré avec l’intégration « Xiaomi Aqara Gateway ».

Si je vais dans les entités pour ressortir les « Last action » : j’ai 3 actions : single double et hold.
ce qui est différent de ce que je trouve en passant dans les evenements…
Comme je disais d’ailleurs le flow nodered de pulpy fonctionne sauf le simple click.

pardon tu as raison :
en fait en « new state » j’ai bien une « last action » : double. Mais si je passe dans les evenements je ne vois pas le new state passer à single. Je ne sais pas si je suis clair :sweat_smile:

Du coup je comprends le message.
Etrange quand même, il y a pas de raison que le single ne fonctionne pas comme au moins le double
Tu peux debugger en NR directement… il y a un noeud debug exprès

Bisard également si je regarde le « last action » directement dans mon entité je ne vois pas passer de « long_click_press » mais un « hold » à la place.
Alors que dans les evenement j’ai bien un « long_click_press »…
Si je met hold dans ton flow le click long ne fonctionne plus… :exploding_head:
Pas grave ça fonctionne en changeant mais c’est quand même plutôt étrange le comportement.