Différences entre les versions de « Utiliser MQTT en lien avec Home Assistant »

De Wiki de Mémoire Vive
Aller à la navigation Aller à la recherche
Ligne 5 : Ligne 5 :
* en récupérant toutes les informations publiées par les équipements dans ce protocole pour les utiliser ailleurs, et réciproquement.
* en récupérant toutes les informations publiées par les équipements dans ce protocole pour les utiliser ailleurs, et réciproquement.


C'est cette 2e méthode que j'ai regardée, dans le but de transmettre les informations d'une instance HA vers une autre. Exemple : transmettre une température sur un site et la transmettre à un autre.
C'est cette 2e méthode que j'ai regardée, dans le but de transmettre les informations d'une instance HA vers une autre. Exemple : relever une température sur un site et la transmettre à un autre.


Pour ce faire,
Pour ce faire,

Version du 18 décembre 2023 à 23:42

MQTT, ou Message Queuing Telemetry Transport, est un protocole de communication léger et fiable conçu pour les appareils à faible bande passante et à faible puissance, typiquement utilisé dans l'Internet des Objets (IoT). Il offre un moyen simple et efficace pour que ces appareils puissent communiquer entre eux et avec des serveurs.

Il y a 2 façons de l'utiliser dans HA,

  • en le connectant directement à la clé Zigbee, auquel cas les équipements sont pilotés au travers de ce protocole de façon native (Zigbee2MQTT),
  • en récupérant toutes les informations publiées par les équipements dans ce protocole pour les utiliser ailleurs, et réciproquement.

C'est cette 2e méthode que j'ai regardée, dans le but de transmettre les informations d'une instance HA vers une autre. Exemple : relever une température sur un site et la transmettre à un autre.

Pour ce faire,

- on installe un broker MQTT, typiquement Mosquito, qui est un module complémentaire de HA. En parallèle, on définit un user et un mot de passe pour y accéder

- on installe une intégration MQTT, qui fait le lien entre HA et ce broker, via son adresse IP, le port (1883) et user/pwd. Si on souhaite accéder au broker à travers une box, il sera nécessaire de définir une règle pour effectuer un transfert de port.

Ensuite on ajoute quelques lignes dans HA, dans configuration.yaml, pour que tous les messages générés par les capteurs et autres équipements soient publiés dans le broker.

Ces quelques lignes sont :

# publication pour MQTT
mqtt_statestream:
  base_topic: homeassistant
  publish_attributes: true
  publish_timestamps: true

https://www.home-assistant.io/integrations/mqtt_statestream/

Pour voir ce qui se passe sur le broker, utiliser un outil tel que MQTT Explorer (windows). Ceci permet de consulter le flux de messages publiés sur le broker MQTT. On utilisera les mêmes paramètres pour s'y connecter que pour HA, c'est à dire, IP du broker, port, user et pwd.

Dans cette application, on peut rechercher la valeur du capteur qui nous intéresse. Exemple, homeassistant/sensor/ewelink_th01_temperature/state

Ensuite, il faut modifier configuration .yaml pour créer des entités en miroir des topics qui nous intéressent, i.e. la valeur d'un capteur donné.

Voici un exemple avec 2 capteurs, qu'on peut faire apparaitre sur un tableau de bord,

# configuration des entités MQTT
mqtt:
  sensor:
    - name: "Temperature int"
      state_topic: "homeassistant/sensor/ewelink_th01_temperature_2/state"
    - name: "Temperature ext"
      state_topic: "homeassistant/sensor/ewelink_th01_temperature/state"

https://www.home-assistant.io/integrations/sensor.mqtt/#json-attributes-template-configuration

https://www.youtube.com/watch?v=cQ8vqJgCVC8&ab_channel=HorizonDomotique

Pour aller plus loin,

  • voir la possibilité de connecter des brokers MQTT entre eux,
  • voir comment actionner un équipement via MQTT

Pour ce dernier point, voici comment on peut procéder, et on va supposer qu'on a un contacteur (switch) sur l'instance 1 et qu'on souhaite le déclencher depuis l'instance 2. Alors voici les opérations à réaliser, étant entendu que notre capteur n'est pas géré par Zigbee2MQTT mais ZHA.

  • dans l'instance 2, on crée un bouton sous forme de Input Booléen, qui va servir à actionner le contacteur

Voici le code du bouton,

input_boolean:
  simulate_switch_prise_3:
    name: "Simuler Switch Prise 3"
    initial: off
  • dans cette même instance 2, on fait remonter les entités vers le broker avec le code de publication à ajouter dans configuration.yaml, en changeant juste le base_topic pour s'y retrouver.
# publication pour MQTT
mqtt_statestream:
  base_topic: homeassistant2
  publish_attributes: true
  publish_timestamps: true
  • ensuite, côté instance 1, on crée une automatisation qui fait référence à notre bouton, dont la valeur est transmise via MQTT. Il n'y a rien à ajouter dans configuration .yaml

Voici le code de cette automatisation,

alias: MQTT Nouvelle automatisation pour le contacteur
description: Automatisation pour activer/désactiver laprise n°3
trigger:
  - platform: mqtt
    topic: homeassistant2/input_boolean/simulate_switch_prise_3/state
condition: []
action:
  - service: switch.toggle
    data: {}
    target:
      entity_id: switch.tz3000_hdopuwv6_ts011f_switch_3
mode: single

En résultat, à chaque fois qu'on actionne le bouton, le contacteur change d'état.

Pour compléter, c'est bien de voir dans quel état se trouve le contacteur quand on l'actionne depuis l'instance 2. Alors on complète la section MQTT dans configuration.yaml de cette façon,

# configuration des entités MQTT
mqtt:
  sensor:
    - name: "Temperature int"
      state_topic: "homeassistant/sensor/ewelink_th01_temperature_2/state"
    - name: "Temperature ext"
      state_topic: "homeassistant/sensor/ewelink_th01_temperature/state"
    - name : contacteur Prise3
      state_topic : "homeassistant/switch/tz3000_hdopuwv6_ts011f_switch_3/state"

Il y a peut-être plus simple mais là ça marche.