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é
switchdé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 :
- Outils de développement → Événements
- Dans « Écouter les évènements », tapez
meshcore_message, cliquez sur Démarrer l’écoute - Envoyez un message test depuis un autre nœud sur votre canal
- Observez le JSON reçu — le champ contenant le texte du message s’appelle
message, et l’index de canalchannel_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 :
| Placeholder | Exemple |
|---|---|
<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 lampelumiere off→ l’éteintlumiere 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.