Différences entre les versions de « Utiliser MQTT en lien avec Home Assistant »
Ligne 91 : | Ligne 91 : | ||
En résultat, à chaque fois qu'on actionne le bouton, le contacteur change d'état. | 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, | |||
<pre> | |||
# 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" | |||
</pre> | |||
Il y a peut-être plus simple mais là ça marche. |
Version du 18 décembre 2023 à 20:59
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 : transmettre 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.