Piloter une lampe via un canal MeshCore chiffré et Home Assistant

Vous avez un réseau mesh LoRa (MeshCore) et une instance Home Assistant ? Voici comment envoyer une simple commande texte sur un canal privé chiffré pour allumer, éteindre ou vérifier l’état d’une lampe connectée — sans app tierce, juste avec l’intégration meshcore-ha. Article créé avec l’aide de Claude AI

Pré-requis

  • Home Assistant avec l’intégration meshcore-ha installée (via HACS) et un nœud MeshCore relié en local (USB/BLE/TCP)
  • L’app MeshCore Chat (ou tout autre client MeshCore) pour envoyer les commandes
  • Un canal MeshCore dédié, idéalement chiffré avec une clé privée plutôt que le canal public, pour éviter que n’importe qui sur le mesh puisse piloter vos appareils
  • Une entité switch déjà fonctionnelle dans Home Assistant (relais, prise connectée, etc.)

Étape 1 — Identifier l’index de votre canal

Dans Home Assistant, allez dans Outils de développement → États, filtrez sur binary_sensor.meshcore. Vous verrez une entité du type binary_sensor.meshcore_<id_noeud>_ch_<N>_messages — le <N> est l’index de votre canal (channel_idx), c’est ce numéro qu’il faudra utiliser dans l’automatisation ci-dessous.

Étape 2 — Vérifier la structure de l’événement reçu

Chaque message reçu sur le mesh déclenche un événement meshcore_message dans Home Assistant. Avant d’écrire l’automatisation, vérifiez la structure exacte de cet événement :

  1. Outils de développement → Événements
  2. Dans « Écouter les évènements », tapez meshcore_message, cliquez sur Démarrer l’écoute
  3. Envoyez un message test depuis un autre nœud sur votre canal
  4. Observez le JSON reçu — le champ contenant le texte du message s’appelle message, et l’index de canal channel_idx

Étape 3 — Créer l’automatisation

Dans Paramètres → Automatisations et scènes → Créer une automatisation → Modifier en YAML, collez ce modèle en remplaçant les valeurs entre < > :

alias: "MeshCore - Contrôle lumière"
trigger:
  - platform: event
    event_type: meshcore_message
condition:
  - condition: template
    value_template: "{{ trigger.event.data.channel_idx == <CHANNEL_IDX> }}"
  - condition: template
    value_template: >
      {{ (trigger.event.data.message | lower | trim) in
         ['lumiere on', 'lumiere off', 'lumiere status'] }}
action:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ (trigger.event.data.message | lower | trim) == 'lumiere on' }}"
        sequence:
          - service: switch.turn_on
            target:
              entity_id: <ENTITY_ID_SWITCH>
      - conditions:
          - condition: template
            value_template: "{{ (trigger.event.data.message | lower | trim) == 'lumiere off' }}"
        sequence:
          - service: switch.turn_off
            target:
              entity_id: <ENTITY_ID_SWITCH>
      - conditions:
          - condition: template
            value_template: "{{ (trigger.event.data.message | lower | trim) == 'lumiere status' }}"
        sequence:
          - service: meshcore.send_channel_message
            data:
              channel_idx: <CHANNEL_IDX>
              message: >
                💡 Lumière :
                {{ 'allumée' if is_state('<ENTITY_ID_SWITCH>', 'on') else 'éteinte' }}
mode: single

À remplacer :

PlaceholderExemple
<CHANNEL_IDX>6
<ENTITY_ID_SWITCH>switch.lampe_du_plafond_switch_1

Étape 4 — Tester

Depuis votre client MeshCore, envoyez tour à tour sur le canal concerné :

  • lumiere on → allume la lampe
  • lumiere off → l’éteint
  • lumiere status → renvoie l’état actuel sur le canal

Les commandes sont idempotentes : envoyer lumiere on alors que la lampe est déjà allumée ne provoque aucun changement ni erreur.

Pourquoi un canal chiffré plutôt que public

Sur le canal public MeshCore, n’importe quel nœud du mesh peut lire et rejouer la commande lumiere on. Un canal privé avec une clé partagée uniquement entre vos appareils de confiance réduit fortement ce risque. Ce n’est pas un chiffrement de bout en bout façon messagerie sécurisée classique — quiconque possède la clé du canal peut déchiffrer et usurper les commandes — mais c’est largement suffisant pour un usage domotique résidentiel. Pour un contrôle d’accès supplémentaire, il est possible de filtrer aussi sur le champ sender_name ou pubkey_prefix de l’événement, afin que seul un expéditeur précis puisse déclencher l’action.

Pour aller plus loin

Le même schéma (meshcore_message → filtre sur mot-clé → action Home Assistant → réponse via meshcore.send_channel_message) fonctionne pour n’importe quel type d’appareil ou d’information : volets roulants, sondes de température, bulletins météo à la demande, alertes personnalisées, etc.

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *