Automatisation avec bouton Xiaomi

Je suis tout nouveau sur Node-Red alors je ferais des petits poste sur sont utilisation pour les grands débutants.

Nous allons voir dans ce post comment utiliser les boutons Xiaomi switch Mijia ou Aqara pour des automatisations.

Pourquoi ? c’est simple non ?

Le problème de ces boutons c’est qu’ils ont plusieurs positions (voir les images ci-dessous) mais surtout que dés que l’on lâche le bouton il envoi une infos nul.

Positions bouton Xiaomi Mijia

J’ai voulu me faire un simple flow pour allumer ou éteindre ma cafetière.
Donc je suis parti sur un events: state avec si = single la prise et On sinon la prise est Off. sauf que le bouton repassant dans un état nul la prise s’active est se désactive aussitôt.

La solution est d’utiliser switch sur la branche false avec comme condition : tous ce qui est différent de null (le null ne doit pas être écrit).

Voici le flow en question.

Bouton Click Autre positions

Voici le code.
[{"id":"437e5ae6.d0bd1c","type":"tab","label":"Journalier","disabled":false,"info":""},{"id":"e0f4ae58.fa4d1","type":"api-call-service","z":"437e5ae6.d0bd1c","name":"Prise Cafetière On","server":"9002a0ed.0d72a","version":1,"debugenabled":false,"service_domain":"switch","service":"turn_on","entityId":"switch.prise_cafetiere_switch","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":730,"y":40,"wires":[[]]},{"id":"589f9be4.45ffb4","type":"api-call-service","z":"437e5ae6.d0bd1c","name":"Prise Cafetière Off","server":"9002a0ed.0d72a","version":1,"debugenabled":false,"service_domain":"switch","service":"turn_off","entityId":"switch.prise_cafetiere_switch","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":730,"y":100,"wires":[[]]},{"id":"226f5fcf.ffa3a8","type":"server-state-changed","z":"437e5ae6.d0bd1c","name":"Bouton Cafetière Simple","server":"9002a0ed.0d72a","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.bouton_cafetiere_click","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"single","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"x":230,"y":40,"wires":[["e0f4ae58.fa4d1"],["a36cc0a1.5f63f8"]]},{"id":"a36cc0a1.5f63f8","type":"switch","z":"437e5ae6.d0bd1c","name":"Autres positions valident","property":"payload","propertyType":"msg","rules":[{"t":"neq","v":"","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":470,"y":100,"wires":[["589f9be4.45ffb4"]]},{"id":"9002a0ed.0d72a","type":"server","z":"","name":"Home Assistant","addon":true}]

C’est très simple mais cela permet à tous ceux qui ne sont pas des experts de Node-Red de comprendre quelques petites subtilités.

Bonjour,
Quelle solution utilises tu pour interfacer les boutons xiaomi? Quelle passerelle zigbee?
Perso, j’utilise un CC2531 avec zigbee2mqtt. Ca permet de recevoir les événements des boutons directement dans nodered.
Donc un flot pour faire la même chose ou presque ressemble à:

Comme ça, je gére le click et le double click pour allumer deux lumières différentes avec le même bouton.

GV

Pour essayer de comprendre…

Quel intérêt à utiliser NodeRed (une surcouche) pour une action faisable en natif sous HA ?

J’ai choisi de faire toutes mes « automations » sous nodered. Je trouve ça plus facile à gérer que le yaml. J’ai commencé par le yaml et j’avais pas mal de difficultés pour le debug et les mises au point.
Là, je peux faire des scénario assez compliqués plutôt facilement.
Il n’y a pas réellement d’autre intérêt. C’est juste une affaire de goût.
GV

1 J'aime

oui en effet, automatisation HA ou node red reste une affaire de gout mais aussi strategique dans ton plan de continuité avec la séparation des fluxs en fonction de ta config hardware.
Comme beaucoup j’ai basculé tout mes scenarii sur node red par commodité (scene, input boolean, inputselect, automatisations ect…). Herberger HA sur un rpi et node red sur un autre host est interessant !
Node red (ibm) est quand meme super stable et fiable, la logique et son ergonomie permet une prise facile et aisée (à condition d’avoir une certaine motivation au début;) )

Idem que @golfvert je trouve plus simple de gérer mes automatisations via Node Red.
Plus visuel et le début est utile c’est ce qu’il manque a HA

Je pense basculer mon Node Red sur un autre RPi pour libérer de la mémoire et gérer les les déconnexions de HA.

Je ne ne suis pas convaincu par la valeur ajouté de NR qui justifierai de m’y mettre, d’y migrer une partie de mes logiques et d’ajouter de la complexité dans mon architecture
D’autant plus que l’on peut maintenant faire des automations dans l’interface de HA pour les allergiques à YAML.

C’est une affaire de goût.

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: