{"id":1040,"date":"2024-08-01T15:20:10","date_gmt":"2024-08-01T13:20:10","guid":{"rendered":"https:\/\/www.domedia.net\/?p=1040"},"modified":"2024-08-08T19:29:10","modified_gmt":"2024-08-08T17:29:10","slug":"home-assistant-ha-et-the-things-network-stack-v3-comment-faire","status":"publish","type":"post","link":"https:\/\/www.domedia.net\/?p=1040&lang=fr","title":{"rendered":"LoRa: Connecter son premier appareil et l&rsquo;utiliser dans Home-Assistant"},"content":{"rendered":"<p>Apr\u00e8s avoir pr\u00e9sent\u00e9 les principes et le fonctionnement des r\u00e9seaux LoRa (<a href=\"https:\/\/www.domedia.net\/?p=1271&amp;lang=fr\" target=\"_blank\" rel=\"noopener\">LoRa: qu\u2019est-ce que c\u2019est ?\u00a0\u00e0 quoi \u00e7a sert ?<\/a>), on va ici s&rsquo;int\u00e9resser \u00e0 la connexion d&rsquo;un premier appareil LoRa \u00e0 un r\u00e9seau et \u00e0 la r\u00e9cup\u00e9ration des informations dans Home-Assistant.<\/p>\n<p>Pour rappel, LoRa vous permet de <b><strong>connecter des capteurs distants et\/ou hors de port\u00e9e de votre syst\u00e8me domotique<\/strong><\/b>. Vous pourrez par exemple connecter une station m\u00e9t\u00e9o dans la maison de campagne, une boite aux lettres ou un portail tout au bout du chemin de votre propri\u00e9t\u00e9, ou encore un capteur de temp\u00e9rature dans une cabane au fond du jardin.<\/p>\n<p>Comme exemples, on va se concentrer sur un capteur d&rsquo;ambiance classique (Temp\u00e9rature\/Humidit\u00e9) de Dragino, un capteur d&rsquo;ouverture de porte (Dragino \u00e9galement) et un t\u00e9l\u00e9commande sans fil \u00e0 boutons de RAKWireless (voir plus loin).<!--more--><\/p>\n<h3><strong>Choix du r\u00e9seau<\/strong><\/h3>\n<p>Mais tout d&rsquo;abord il va falloir choisir un r\u00e9seau pour y connecter nos appareils. Comme on l&rsquo;a vu dans l&rsquo;article cit\u00e9 pr\u00e9c\u00e9demment, il existe 3 types de r\u00e9seau. Les <strong>priv\u00e9s<\/strong> ne nous concernent pas ici mais le principe de connexion avec\u00a0 Home-Assistant pr\u00e9sent\u00e9 plus bas reste valable. Les r\u00e9seaux <strong>commerciaux<\/strong> ne seront pas non plus consid\u00e9r\u00e9s ici car leurs conditions d&rsquo;acc\u00e8s les r\u00e9servent aux professionnels. Nous allons donc nous concentrer sur les r\u00e9seaux partag\u00e9s. Les r\u00e9seaux <strong>partag\u00e9s<\/strong> ne sont pas tr\u00e8s nombreux et je vais \u00e9voquer les trois plus connus et importants. Il en existe d&rsquo;autres mais tr\u00e8s limit\u00e9s, alors que ceux cit\u00e9s ci-dessous ont une couverture \u00e0 peu pr\u00e8s mondiale maintenant.<\/p>\n<ul>\n<li><strong>H\u00e9lium<\/strong> (<a href=\"https:\/\/www.helium.com\/lorawan\" target=\"_blank\" rel=\"noopener\">Helium &amp; LoRaWAN<\/a>): r\u00e9seau am\u00e9ricain relativement r\u00e9cent sur le march\u00e9 et dont le r\u00e9seau h\u00e9berge \u00e9galement une blockchain. (Il existe des bornes LoRa sp\u00e9cifiques pour le r\u00e9seau Helium qui mine de la crypto-monnaie en m\u00eame temps, et l&rsquo;op\u00e9rateur r\u00e9ttribue \u00e9galement en crypto-monnaie ceux qui font tourner une borne LoRa Helium. Helium permet une utilisation gratuite pour un usage personnel avec un maximum de 10 appareils ce qui est d\u00e9ja pas mal pour un appartement ou une maison de taille classique ! Vous pouvez au choix utiliser la couverture existante si une ou plusieurs bornes couvrent votre zone (<a href=\"https:\/\/explorer.helium.com\/\" target=\"_blank\" rel=\"noopener\">Helium Coverage<\/a>) ou installer une borne LoRa connect\u00e9 au r\u00e9seau Helium. Le choix et l&rsquo;installation d&rsquo;une borne LoRa feront l&rsquo;objet d&rsquo;un article s\u00e9par\u00e9 prochainement disponible.<\/li>\n<li><strong>The Things Network<\/strong> (<a href=\"https:\/\/www.thethingsnetwork.org\/\" target=\"_blank\" rel=\"noopener\">The Things Network<\/a>): r\u00e9seau n\u00e9erlandais, qui existe depuis une dizaine d&rsquo;ann\u00e9es maintenant. The Things Network (TTN) est le r\u00e9seau communautaire fourni par <a href=\"https:\/\/www.thethingsindustries.com\/\" target=\"_blank\" rel=\"noopener\">The Things Industries<\/a>, la maison m\u00e8re, qui propose des services commerciaux aux entreprises concernant le LoRa. Une carte de couverture indicative est pr\u00e9sente sur le site tiers <a href=\"https:\/\/ttnmapper.org\/heatmap\/\" target=\"_blank\" rel=\"noopener\">TTN Mapper<\/a>, mais il s&rsquo;agit d&rsquo;une carte participative donc il peut y avoir de la couverture m\u00eame si le site indique le contraire.<\/li>\n<li><strong>Loriot<\/strong> (<a href=\"https:\/\/loriot.io\" target=\"_blank\" rel=\"noopener\">Loriot<\/a>): r\u00e9seau suisse qui, de fa\u00e7on similaire \u00e0 TTN, propose un service communautaire (limit\u00e9 \u00e0 30 appareils par compte) et un service pour les professionnels avec serveur(s) d\u00e9di\u00e9(s). Comme pour les deux pr\u00e9c\u00e9dents, vous pouvez les utiliser gratuitement si vous \u00eates dans une zone d\u00e9ja couverte par le r\u00e9seau concern\u00e9, ou installer une gateway que vous connecterez \u00e0 ce m\u00eame r\u00e9seau.<\/li>\n<\/ul>\n<h5><em>Pour les besoins de cet article, nous utiliserons le r\u00e9seau TTN mais le principe reste tr\u00e8s similaire pour les autres r\u00e9seaux, qu&rsquo;ils soient priv\u00e9s ou publics. J&rsquo;\u00e9voquerais rapidement en fin d&rsquo;article la pr\u00e9sentation de la console pr\u00e9sente chez Swisscom (Suisse) pour le LoRa \u00e0 titre d&rsquo;exemple pour un r\u00e9seau commercial.<\/em><\/h5>\n<h4><strong>Les appareils \u00e0 connecter<\/strong><\/h4>\n<p>Pour les appareils, on verra 3 exemples diff\u00e9rents d&rsquo;appareils: une sonde de temp\u00e9rature\/ambiance de Dragino: <a href=\"https:\/\/www.dragino.com\/products\/temperature-humidity-sensor\/item\/224-lht65n.html\" target=\"_blank\" rel=\"noopener\">LHT65N<\/a>, une t\u00e9l\u00e9commande 4 boutons de RakWireless: <a href=\"https:\/\/rakwireless.kckb.st\/9ae71df6\" target=\"_blank\" rel=\"noopener\">Wisnode Button 4K<\/a>, et un d\u00e9tecteur d&rsquo;ouverture de porte\/fen\u00eatre de Dragino: <a href=\"https:\/\/www.dragino.com\/products\/lorawan-nb-iot-door-sensor-water-leak\/item\/181-lds02.html\" target=\"_blank\" rel=\"noopener\">LDS02<\/a>. On va dans un premier temps s&rsquo;occuper de \u00ab\u00a0connecter\u00a0\u00bb notre appareil au r\u00e9seau LoRa TTN. Une alternative avec Loriot est \u00e9galement pr\u00e9sent\u00e9e.<\/p>\n<p>Nous verrons ensuite comment r\u00e9cup\u00e9rer les informations de cet appareil dans Home-Assistant: une int\u00e9gration LoRa et MQTT.<\/p>\n<p>Le principe restera le m\u00eame quelque soit le type d&rsquo;appareils LoRa si ce n&rsquo;est qu&rsquo;il aura plus ou moins de donn\u00e9es transmises (par exemple: un tracker LoRa transmettra des coordonn\u00e9es GPS (latitude, longitude) et une altitude).<\/p>\n\n\n<figure class=\"wp-block-gallery alignwide has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f848093&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f848093\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1299\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/01\/CAI_9740-1024x1024.jpg\" alt=\"\" class=\"wp-image-1299\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/01\/CAI_9740-980x980.jpg 980w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/01\/CAI_9740-480x480.jpg 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Dragino LHT-65N<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f8485a6&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f8485a6\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1381\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/wisnode-button-4k.jpg\" alt=\"RakWireless Wisnode Button 4K\" class=\"wp-image-1381\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/wisnode-button-4k.jpg 800w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/wisnode-button-4k-480x480.jpg 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 800px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Rakwireless Wisnode 4K Button<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f8489db&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f8489db\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"441\" height=\"441\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1380\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/dragino-lds-02.webp\" alt=\"Dragino LDS-02\" class=\"wp-image-1380\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/dragino-lds-02.webp 441w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/dragino-lds-02-300x300.webp 300w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/dragino-lds-02-100x100.webp 100w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/dragino-lds-02-150x150.webp 150w\" sizes=\"(max-width: 441px) 100vw, 441px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Dragino LDS-002<\/figcaption><\/figure>\n<\/figure>\n\n\n<h3>\u00a0<\/h3>\n<h3><strong>Connexion d&rsquo;un appareil LoRa \u00e0 un r\u00e9seau LoRa<\/strong><\/h3>\n<p>Dans un syst\u00e8me LoRa, chaque appareil est identifi\u00e9 par un trio de \u00ab\u00a0codes\u00a0\u00bb. Ils permettent l&rsquo;appairage initial de l&rsquo;appareil avec son r\u00e9seau LoRa et la communication ensuite.<\/p>\n<p>Ces 3 codes sont communiqu\u00e9s par le fabricant de l&rsquo;appareil (en g\u00e9n\u00e9ral sur un sticker <strong>\u00c0 NE PAS PERDRE<\/strong>), et ils sont modifiables sur certains appareils en se connectant directement dessus (possible par exemple parmi nos appareils de test avec le capteur de temp\u00e9rature\/humidit\u00e9 et avec la t\u00e9l\u00e9commande mais pas avec le d\u00e9tecteur d&rsquo;ouverture).<\/p>\n<p>Voyons ce que sont ces 3 codes:<\/p>\n<ul>\n<li><strong>DevEUI<\/strong>: cet identifiant (de la forme suivante: A0 B1 C2 D3 E4 F5 01 23) est l&rsquo;\u00e9quivalent de l&rsquo;adresse MAC pour une carte r\u00e9seau. Elle permet d&rsquo;identifier de fa\u00e7on unique un appareil, il est donc pr\u00e9f\u00e9rable d&rsquo;\u00e9viter de la modifier pour \u00e9viter tout conflit \u00e9ventuel dans le r\u00e9seau LoRa (le fabricant s&rsquo;assure que cet identifiant soit unique).<\/li>\n<li><strong>JoinEUI<\/strong> (anciennement appel\u00e9 AppEUI): cet identifiant, du m\u00eame format que le DevEUI, permet d&rsquo;identifier le serveur qui va g\u00e9rer la demande de pairage de l&rsquo;appareil avec le r\u00e9seau LoRa. Il est en g\u00e9n\u00e9ral identique pour tous les appareils d&rsquo;un m\u00eame type, voire d&rsquo;un m\u00eame fabricant.<\/li>\n<li><strong>AppKey<\/strong>: cet indentifiant (de la forme: A0 B1 C2 D3 E4 F5 01 23 45 67 89 0A BC DE F1 23), souvent compos\u00e9 de la concat\u00e9nation du DevEUI et du JoinEUI, va servir de cl\u00e9 d&rsquo;encryption pour la communication avec le serveur Lora. C&rsquo;est ce qui garantira la confidentialit\u00e9 de la communication radio et doit \u00eatre gard\u00e9 confidentiel.<\/li>\n<\/ul>\n<h4><strong>Appairage<\/strong><\/h4>\n<p>Une fois en possession d&rsquo;un appareil LoRa, ses identifiants et en \u00e9tant dans une zone couverte par le r\u00e9seau LoRa choisi (soit par votre propre gateway connect\u00e9 au dit r\u00e9seau soit par la couverture existante de ce r\u00e9seau), on va devoir \u00ab\u00a0<strong>appairer<\/strong>\u00a0\u00bb l&rsquo;appareil avec le serveur LoRa (Join en anglais). On va donc se connecter \u00e0 la console de l&rsquo;op\u00e9rateur LoRa pour ajouter l&rsquo;appareil et que ce dernier puisse alors communiquer.<\/p>\n<p>Nous mettrons ici en parall\u00e8le la configuration dans <strong>TTN<\/strong> (The Things Network) et <strong>Loriot<\/strong> (le syst\u00e8me suisse). A vous de choisir en fonction de votre couverture.<\/p>\n<p>Pour <strong>TTN<\/strong>, la console est accessible sur ces pages:<\/p>\n<ul>\n<li><a href=\"https:\/\/eu1.cloud.thethings.network\" target=\"_blank\" rel=\"noopener\">Console EU1<\/a> pour le serveur europ\u00e9en<\/li>\n<li><a href=\"https:\/\/nam1.cloud.thethings.network\" target=\"_blank\" rel=\"noopener\">Console NAM1<\/a> pour l&rsquo;am\u00e9rique du Nord et Sud<\/li>\n<li><a href=\"https:\/\/au1.cloud.thethings.network\" target=\"_blank\" rel=\"noopener\">Console AU1<\/a> pour l&rsquo;Asie et l&rsquo;Australie.<\/li>\n<\/ul>\n<p>Pour <strong>Loriot<\/strong>, on y acc\u00e9dera par exemple \u00e0 cette adresse pour leur serveur \u00e0 Amsterdam: <a href=\"https:\/\/eu2.loriot.io\" target=\"_blank\" rel=\"noopener\">Console EU2.<\/a><\/p>\n<p>Une fois connect\u00e9 \u00e0 la console, on va cr\u00e9er une <strong>Application<\/strong> (cela permettra de classer les appareils de votre compte, vous pouvez vous organiser comme vous voulez, cela n&rsquo;a aucune cons\u00e9quence technique).<\/p>\n<p>Une fois choisi un <strong>id<\/strong> (en minuscule sans espace) et une \u00e9ventuelle <strong>description<\/strong>, vous allez alors arriver sur l&rsquo;interface permettant d&rsquo;<strong>ajouter les appareils<\/strong> dans le r\u00e9seau LoRa<\/p>\n<p>La <strong>console TTN<\/strong> vous guide tout le long du processus afin de rendre cel\u00e0 le plus simple possible (une possibilit\u00e9 est propos\u00e9e d&rsquo;ajouter un appareil en scannant son code QR mais jamais rencontr\u00e9 d&rsquo;appareils avec un QRCode compatible !). <strong>Loriot<\/strong> dispose d&rsquo;une interface plus technique o\u00f9 c&rsquo;est \u00e0 vous \u00e0 d\u00e9finir la version de LoRa impl\u00e9ment\u00e9 par votre appareil au lieu d&rsquo;utiliser une liste d&rsquo;appareils d\u00e9ja connus comme TTN.<\/p>\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f8494d2&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f8494d2\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"763\" height=\"1024\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1359\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Register_end_device_TTN-763x1024.png\" alt=\"TTN: Register end device\" class=\"wp-image-1359\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Register_end_device_TTN-763x1024.png 763w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Register_end_device_TTN-480x644.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 763px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">TTN Console<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f849919&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f849919\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"493\" height=\"853\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1358\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Register_end_device_Loriot.png\" alt=\"Loriot: Register end device\" class=\"wp-image-1358\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Register_end_device_Loriot.png 493w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Register_end_device_Loriot-480x831.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 493px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Loriot Console<\/figcaption><\/figure>\n<\/figure>\n\n\n<p>Pour <strong>TTN<\/strong> (\u00e0 gauche ci-dessus, il suffit de choisir la <strong>marque<\/strong>, le <strong>mod\u00e8le<\/strong> et la <strong>r\u00e9gion Radio<\/strong> parmi les choix propos\u00e9s pour facilement rajouter un appareil.<\/p>\n<p>La r\u00e9gion Radio doit correspondre \u00e0 la zone g\u00e9ographique o\u00f9 vous \u00eates (voir <a href=\"https:\/\/www.domedia.net\/?p=1271&amp;lang=fr\" target=\"_blank\" rel=\"noopener\">LoRa: qu\u2019est-ce que c\u2019est ? \u00e0 quoi \u00e7a sert ?<\/a> si besoin) et \u00e0 la fr\u00e9quence radio de votre appareil).<\/p>\n<p><strong>Pour Loriot (\u00e0 droite ci-dessus<\/strong>, il faudra choisir juste la <strong>version<\/strong> de Lora impl\u00e9ment\u00e9e par l&rsquo;appareil (se reporter \u00e0 la documentation de l&rsquo;appareil) et le <strong>mode de \u00ab\u00a0Join\/Enrollment\u00a0\u00bb<\/strong>.<\/p>\n<p>Par d\u00e9faut, on utilisera toujours le mode <strong>OTAA<\/strong> (seul mode accessible sur TTN) qui est le mode le plus s\u00e9curis\u00e9 pour le LoRa. Il existe un autre mode <strong>ABP<\/strong> qui est tr\u00e8s peu utilis\u00e9 et beaucoup moins s\u00e9curis\u00e9.<\/p>\n<p>Il n&rsquo;y a plus maintenant qu&rsquo;\u00e0 saisir chacun des 3 identifiants dans l&rsquo;interface pour enregistrer l&rsquo;appareil dans le r\u00e9seau.<\/p>\n<p>A partir de l\u00e0, il va falloir provoquer sur l&rsquo;appareil ajout\u00e9 une commande de <strong>JOIN<\/strong>. C&rsquo;est un message sp\u00e9cial qui permet un pairage unique entre l&rsquo;appareil et le r\u00e9seau LoRa (\u00e0 partir des identifiants un nouveau jeu de cl\u00e9 d&rsquo;encryptage va \u00eatre g\u00e9n\u00e9r\u00e9 et stock\u00e9 dans l&rsquo;appareil et utilis\u00e9 pour les messages suivants qu&rsquo;il enverra).<\/p>\n<ul>\n<li>Pour notre <strong>capteur de temp\u00e9rature<\/strong>, il suffira d&rsquo;appuyer quelques secondes sur l&rsquo;unique bouton pour provoquer l&rsquo;envoi de la commande JOIN.<\/li>\n<li>Pour la <strong>t\u00e9l\u00e9commande 4 boutons<\/strong>, il suffira d&rsquo;appuyer quelques secondes sur le bouton 2 pour provoquer la commande JOIN.<\/li>\n<li>Pour le <strong>d\u00e9tecteur d&rsquo;ouverture<\/strong>, il suffira de provoquer une action du capteur (balader l&rsquo;aimant le long du capteur) et l&rsquo;appareil va automatiquement JOIN le r\u00e9seau LoRa.<\/li>\n<\/ul>\n<p>Ci-dessous ce que vous verrez apparaitre dans la console TTN si le JOIN r\u00e9ussit. En cas d&rsquo;erreur, il faut v\u00e9rifier que les 3 identifiants ont bien \u00e9t\u00e9 saisis sans erreur, que vous \u00eates bien dans une zone couverte par TTN\/Loriot, que votre appareil est bien aliment\u00e9 et qu&rsquo;il est bien dans la bonne fr\u00e9quence pour votre r\u00e9gion g\u00e9ographique.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f849ddd&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f849ddd\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"361\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/LoRa_join-1024x361.png\" alt=\"Lora JOIN in TTN console\" class=\"wp-image-1365\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/LoRa_join-980x346.png 980w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/LoRa_join-480x169.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n<p><strong>Remarque<\/strong>: avec un r\u00e9seau commercial (ici Swisscom \u00e0 titre d&rsquo;exemple), le principe reste tr\u00e8s similaire. On donne un nom \u00e0 l&rsquo;appareil, on indique les DevEUI, JoinEUI, et AppKey et le tour est jou\u00e9.<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f84a20f&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f84a20f\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"753\" height=\"909\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Screenshot_20240807_101519.png\" alt=\"Swisscom LPN:\u00a0Ajout d'un appareil\" class=\"wp-image-1383\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Screenshot_20240807_101519.png 753w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Screenshot_20240807_101519-480x579.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 753px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n<\/p>\n<h4><strong>D\u00e9codeur de messages<\/strong><\/h4>\n<p>Il nous reste d\u00e9sormais un dernier point \u00e0 configurer qui est le \u00ab\u00a0payload decoder\u00a0\u00bb ou d\u00e9codeur de messages. En effet, comme on l&rsquo;a vu pr\u00e9c\u00e9demment, les messages LoRa sont crypt\u00e9s et encod\u00e9s. Il va donc falloir les d\u00e9coder pour pouvoir les rendre exploitables. Pour le moment, si vous regardez dans la console les messages re\u00e7us, le payload est de la forme: ci-dessous ce qui n&rsquo;est pas vraiment lisible.<\/p>\n<blockquote>\n<p>\u00ab\u00a0frm_payload\u00a0\u00bb: \u00ab\u00a0AUcNABQEsAPoAAAAAAAAAE2W\u00a0\u00bb<\/p>\n<\/blockquote>\n<p>On va donc se rendre dans l&rsquo;onglet \u00ab\u00a0Payload Formatters\u00a0\u00bb o\u00f9 il est possible de saisir un Javascript ou de se connecter avec un service externe pour le d\u00e9codage. Si vous avez choisi le bon appareil lors de l&rsquo;ajout dans la console TTN, le bon \u00ab\u00a0formatter\u00a0\u00bb sera par d\u00e9faut s\u00e9lectionn\u00e9. C&rsquo;est le cas ici pour nos appareils RakWireless comme Dragino, ce qui simplifie les choses. Dans le cas contraire, il faudra r\u00e9cup\u00e9rer le Javascript ad\u00e9quat de la part du fabricant que vous copierez\/collerez dans l&rsquo;onglet Uplink (messages des appareils vers le serveur LoRa).<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f84a66c&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f84a66c\" class=\"wp-block-image size-full is-resized wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"417\" height=\"259\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Decoded_payload.png\" alt=\"Decoded Payload on TTN\" class=\"wp-image-1366\" style=\"width:745px;height:auto\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Decoded_payload.png 417w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Decoded_payload-300x186.png 300w\" sizes=\"(max-width: 417px) 100vw, 417px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n<p>Et l\u00e0 miracle, le payload, qui \u00e9tait jusque l\u00e0 illisible, devient soudainement beaucoup plus clair avec les diff\u00e9rentes valeurs retourn\u00e9es par l&rsquo;appareil.<\/p>\n<p>On va donc maintenant pouvoir exploiter cela dans Home-Assistant une fois fait la connection faite entre TTN et Home-Assistant.<\/p>\n<h3><strong>Int\u00e9gration Home-Assistant<\/strong><\/h3>\n<p>Deux solutions se pr\u00e9sentent \u00e0 nous<strong>:<\/strong><\/p>\n<ul>\n<li><strong>utiliser une int\u00e9gration<\/strong> qui est une solution simple et rapide mais avec des restrictions\/contraintes et qui n&rsquo;est possible au jour d&rsquo;aujourd&rsquo;hui qu&rsquo;avec TTN<\/li>\n<li>ou utiliser la <strong>solution MQTT<\/strong> un peu plus compliqu\u00e9e, mais permet beaucoup plus de choses et utilisable avec tous les serveur LoRa.<\/li>\n<\/ul>\n<h4><strong>Int\u00e9gration HACS TTN:<\/strong><\/h4>\n<p>Nous n&rsquo;allons pas utiliser l&rsquo;int\u00e9gration <a href=\"https:\/\/www.home-assistant.io\/integrations\/thethingsnetwork\/\" target=\"_blank\" rel=\"noopener\">TTN officielle<\/a> car cette derni\u00e8re a de nombreuses restrictions d\u00fbes aux contraintes des int\u00e9grations officielles Home-Assistant. Nous allons utiliser la version non officielle, faite par le m\u00eame d\u00e9veloppeur, et qui s&rsquo;installe facilement via HACS:<a href=\"https:\/\/github.com\/angelnu\/home_assistant_thethingsnetwork\" target=\"_blank\" rel=\"noopener\"> https:\/\/github.com\/angelnu\/home_assistant_thethingsnetwork<\/a> Une fois install\u00e9e via HACS, il suffira de l&rsquo;ajouter comme une int\u00e9gration officielle (Param\u00e8tres -&gt; Int\u00e9gration et chercher \u00ab\u00a0The Things Network\u00a0\u00bb.<\/p>\n<p>Il n&rsquo;y aura plus qu&rsquo;\u00e0 saisir l&rsquo;application ID pr\u00e9c\u00e9demment cr\u00e9\u00e9 dans la console TTN et la cl\u00e9 d&rsquo;API, cette derni\u00e8re doit \u00eatre cr\u00e9\u00e9e sur la page de l&rsquo;application dans la console TTN (attention \u00e0 sauvegarder la cl\u00e9 car elle n&rsquo;est plus consultable ensuite).<\/p>\n<p>Il faudra \u00e9galement toujours sur la page de l&rsquo;application dans la console TTN activer la Storage Integration (menu Int\u00e9grations -&gt; Storage Integration et activer la coche, tout simplement).<\/p>\n<p>Apr\u00e8s quelques minutes, parfois imm\u00e9diatement, vos appareils ajout\u00e9s dans TTN vont apparaitre dans l&rsquo;int\u00e9gration TTN:<\/p>\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f84aad3&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f84aad3\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"996\" height=\"527\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1371\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_integration.png\" alt=\"TTN integration: liste des applications\" class=\"wp-image-1371\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_integration.png 996w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_integration-980x519.png 980w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_integration-480x254.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 996px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">TTN Integration page<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f84aef1&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f84aef1\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"509\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1370\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_liste_devices-1024x509.png\" alt=\"TTN integration: liste des appareils\" class=\"wp-image-1370\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_liste_devices-1024x509.png 1024w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_liste_devices-980x487.png 980w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_liste_devices-480x239.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Liste des appareils<\/figcaption><\/figure>\n<\/figure>\n\n\n<p>Si l&rsquo;on s\u00e9lectionne notre appareil, on a alors le d\u00e9tail des capteurs et autres donn\u00e9es que retoure l&rsquo;appareil en question. On y voit alors le d\u00e9tail de toutes les informations retourn\u00e9es par l&rsquo;appareil y compris son niveau de batterie (\u00e0 gauche le capteur de temp\u00e9rature\/fumidit\u00e9, et \u00e0 droite le d\u00e9tecteur d&rsquo;ouverture de porte).<\/p>\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f84b3fc&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f84b3fc\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"706\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1372\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Details_device.png\" alt=\"D\u00e9tails Device LoRa\" class=\"wp-image-1372\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Details_device.png 1024w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Details_device-980x676.png 980w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Details_device-480x331.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Capteur de temp\u00e9rature\/humidit\u00e9<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f84b81b&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f84b81b\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"706\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"1373\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Detecteur_ouverture_porte.png\" alt=\"D\u00e9tecteur ouverture porte\" class=\"wp-image-1373\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Detecteur_ouverture_porte.png 1024w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Detecteur_ouverture_porte-980x676.png 980w, https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Detecteur_ouverture_porte-480x331.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">D\u00e9tecteur d&rsquo;ouverture de porte<\/figcaption><\/figure>\n<\/figure>\n\n\n<ul>\n<li>Facile et rapide \u00e0 configurer.<\/li>\n<li>les appareils qui ne retournent pas de donn\u00e9es comme la t\u00e9l\u00e9commande 4 boutons n&rsquo;apparaissent pas et donc ne peuvent pas \u00eatre utilis\u00e9es via cette int\u00e9gration.<\/li>\n<li>l&rsquo;int\u00e9gration utilise l&rsquo;API de TTN pour communiquer et cette derni\u00e8re tombe en panne de temps en temps ou a une grosse latence.<\/li>\n<li>Compatible uniquement avec le r\u00e9seau LoRa TTN.<\/li>\n<li>l&rsquo;int\u00e9gration ne pouvant pas par elle-m\u00eame d\u00e9tecter le type des donn\u00e9es retourn\u00e9es par les appareils, il est souvent utile de passer par le menu Configurer de l&rsquo;int\u00e9gration et choisir \u00ab\u00a0Fields\u00a0\u00bb puis choisir le param\u00e8tre \u00e0 modifier pour le configurer correctement.<\/li>\n<\/ul>\n<h4><strong>Int\u00e9gration via MQTT:<\/strong><\/h4>\n<p>Ici on va recourir \u00e0 la bonne vieille solution du <strong>broker MQTT<\/strong>.<\/p>\n<p>Pour ceux qui ne conna\u00eetraient pas encore MQTT, il s&rsquo;agit d&rsquo;un dispositif logiciel pour distribuer des courts messages, typiquement pour l&rsquo;IoT. Il s&rsquo;agit d&rsquo;un protocole tr\u00e8s l\u00e9ger mais qui peut \u00eatre s\u00e9curis\u00e9 si besoin est et qui bien s\u00fbr est nativement g\u00e9r\u00e9 par HA ! Pour ceux qui voudraient en savoir plus sur MQTT, le site officiel en donne une <a href=\"https:\/\/mqtt.org\/\" target=\"_blank\" rel=\"noopener\">pr\u00e9sentation d\u00e9taill\u00e9e<\/a>. MQTT est un syst\u00e8me normalis\u00e9 d\u00e9sormais.<\/p>\n<p>Premi\u00e8re \u00e9tape (probablement inutile pour la plupart d&rsquo;entre vous): <strong>installer le module compl\u00e9mentaire\/add-on MQTT Broker<\/strong>.<\/p>\n<p>Une fois install\u00e9, s&rsquo;assurer que les options suivantes sont activ\u00e9es dans le module (il faudra \u00e9galement cr\u00e9er le dossier mosquitto dans lo dossier \/share de HA):<\/p>\n<blockquote>\n<p>active: true<br \/>folder: mosquitto<\/p>\n<\/blockquote>\n<p>Une fois le module compl\u00e9mentaire activ\u00e9, vous pouvez installer l&rsquo;<strong>int\u00e9gration officielle MQTT Broker<\/strong>. Une fois install\u00e9 et d\u00e9marr\u00e9, elle va automatiquement se configurer pour communiquer avec le broker MQTT pr\u00e9c\u00e9demment install\u00e9.<\/p>\n<p>On va laisser de c\u00f4t\u00e9 HA un instant pour continuer la configuration c\u00f4t\u00e9 TTN. Il va falloir se rendre dans la console TTN, dans la rubrique Applications puis choisir l&rsquo;Application dans laquelle se trouve l&rsquo;appareil LoRa dont on veut r\u00e9cup\u00e9rer les informations.<\/p>\n<p>On va alors choisir dans le menu de gauche: API puis \u00ab\u00a0Add API key\u00a0\u00bb. On lui donne un <strong>nom<\/strong> (cela est juste pour nous comme rep\u00e8re), une \u00e9ventuelle <strong>date d&rsquo;expiration<\/strong> sinon on laisse vide.<\/p>\n<p>Vous pouvez laisser par d\u00e9faut tous les droits (dans l&rsquo;absolu seuls Write Downlink application traffic, et Read Application Traffic sont n\u00e9cessaires).<\/p>\n<p style=\"padding-left: 40px;\"><strong>IMPORTANT: une fois valid\u00e9, bien sauvegarder la cl\u00e9 d&rsquo;API qui ne sera plus jamais accessible apr\u00e8s en clair.<\/strong><\/p>\n<p>Il nous reste \u00e0 r\u00e9cup\u00e9rer l&rsquo;ID de l&rsquo;appareil LoRa avec lequel on veut interagir et pour cela on va aller dans le menu \u00ab\u00a0End Devices\u00a0\u00bb du menu de gauche et cliquer alors sur l&rsquo;end-device qui nous int\u00e9resse. On pourra alors r\u00e9cup\u00e9rer l&rsquo;ID de l&rsquo;appareil.<\/p>\n<p>D\u00e9sormais il ne nous reste plus qu&rsquo;\u00e0 faire un peu de configuration dans HA pour r\u00e9cup\u00e9rer nos infos d&rsquo;appareils LoRa.<\/p>\n<p>Tout d&rsquo;abord on va relier ou \u00ab\u00a0bridger\u00a0\u00bb le broker MQTT de HA avec celui de TTN. Pour cela on va devoir cr\u00e9er un fichier bridge.conf pour MQTT qui lui dira comment faire la liaison. Ce fichier doit \u00eatre plac\u00e9 dans votre dossier \u00ab\u00a0share\u00a0\u00bb da HAOS (ce dossier n&rsquo;est pas accessible par l&rsquo;\u00e9diteur de fichier de HA, il faut y acc\u00e9der par le partage de fichiers de HA).<\/p>\n<p>Dans ce dossier share, vous cr\u00e9ez s&rsquo;il n&rsquo;existe pas un dossier mosquitto et dans ce dossier vous cr\u00e9ez un fichier bridge.conf (un seul fichier suffit pour tous les bridges que vous cr\u00e9erez, il suffit de les lister \u00e0 la suite l&rsquo;un de l&rsquo;autre !). Ce fichier contiendra les \u00e9l\u00e9ments suivants:<\/p>\n<blockquote>\n<p>connection <strong>lenomquejeveux<\/strong><br \/>address <strong>eu1.cloud.thethings.network<\/strong><br \/>bridge_protocol_version mqttv311<br \/>remote_username <strong>iddemondevice<\/strong>@ttn<br \/>start_type automatic<br \/>notifications false<br \/>try_private false<br \/>remote_password <strong>NNSXS.xxxxxxxxxxxxxxxxxxxxxxxx<\/strong><br \/>bridge_insecure true<br \/>topic # in 0<br \/>cleansession true<\/p>\n<\/blockquote>\n<ul>\n<li>lenomquejeveux vous permet de nommer le bridge (c&rsquo;est purement pour vous et doit \u00eatre unique pour chaque bridge d\u00e9clar\u00e9 dans le fichier bridge.conf)<\/li>\n<li>eu1&#8230; doit \u00eatre remplac\u00e9 par le serveur TTN que vous utilisez selon la r\u00e9gion du monde o\u00f9 vous vous trouvez<\/li>\n<li>iddemondevice est \u00e0 remplacer par l&rsquo;ID du device pr\u00e9c\u00e9demment r\u00e9cup\u00e9r\u00e9 dans la console TTN<\/li>\n<li>et pour finir dans remote_password vous y collez la cl\u00e9 d&rsquo;API que vous avez pr\u00e9c\u00e9demment g\u00e9n\u00e9r\u00e9e.<\/li>\n<\/ul>\n<p>Vous pouvez alors red\u00e9marrer le module compl\u00e9mentaire Mosquitto Broker dans HA, et si tout est bien configur\u00e9, vous devriez voir cela dans les logs du module compl\u00e9mentaire:<\/p>\n<blockquote>\n<pre>1684589377: Loading config file \/share\/mosquitto\/bridge.conf\r\n1684589377: Warning: Bridge lenomquejeveux using insecure mode.\r\n<\/pre>\n<\/blockquote>\n<p>Si vous avez bien \u00e7a, c&rsquo;est parfait, cela veut dire que le broker MQTT de HA communique bien avec celui de TTN et que l&rsquo;on va automatiquement recevoir les donn\u00e9es envoy\u00e9es par nos appareils LoRa.<\/p>\n<p>Il ne nous reste plus qu&rsquo;\u00e0 extraire les donn\u00e9es qui vous int\u00e9ressent pour les exploiter dans HA. La structure du message re\u00e7u de TTN est en JSON, cela va donc \u00eatre assez simple \u00e0 r\u00e9cup\u00e9rer.<\/p>\n<p>Voici un cas simple et concret avec notre capteur de temp\u00e9rature\/humidit\u00e9 LHT-52. En examinant les messages envoy\u00e9s par la console TTN, voici ce qui appara\u00eet en dehors des ent\u00eates et autres informations qui ne nous int\u00e9ressent pas:<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f84bc63&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f84bc63\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"568\" height=\"217\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2021\/11\/Screenshot_20230520_153502.png\" alt=\"\" class=\"wp-image-1054\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2021\/11\/Screenshot_20230520_153502.png 568w, https:\/\/www.domedia.net\/wp-content\/uploads\/2021\/11\/Screenshot_20230520_153502-480x183.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 568px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n<p>On va alors pouvoir ajouter un capteur MQTT dans HA qui extraira automatiquement la valeur qui nous int\u00e9resse de la fa\u00e7on suivante:<\/p>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69d592f84c05d&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69d592f84c05d\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"590\" height=\"116\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2021\/11\/JSON_decoding.png\" alt=\"\" class=\"wp-image-1056\" srcset=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2021\/11\/JSON_decoding.png 590w, https:\/\/www.domedia.net\/wp-content\/uploads\/2021\/11\/JSON_decoding-480x94.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 590px, 100vw\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n<p>sonde-ambiance doit \u00eatre remplac\u00e9 par l&rsquo;ID de votre application dans la console TTN.<\/p>\n<p>Pour r\u00e9duire le risque d&rsquo;erreur et pour ceux qui sont sous Android (il doit probablement exister l&rsquo;\u00e9quivalent sous IoS mais je n&rsquo;ai pas d&rsquo;appareil IoS), il existe une application tr\u00e8s pratique qui s&rsquo;appelle <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=mqttsnooper.mqttsnooper\" target=\"_blank\" rel=\"noopener\"><strong>MQTT Snooper<\/strong><\/a> qui vous permet de voir tous les messages MQTT sur un broker.<\/p>\n<p>Une fois install\u00e9 l&rsquo;application, vous ajoutez un nouveau host (vous indiquez comme serveur le serveur de TTN, en username l&rsquo;id de l&rsquo;application TTN suivi de @ttn et en mot de passe la cl\u00e9 d&rsquo;API).<\/p>\n<p>Une fois connect\u00e9, vous verrez automatiquement passer les messages MQTT \u00e9mis par TTN et facilement reconna\u00eetre les champs que vous souhaitez extraire.<\/p>\n<p><strong>Limitations\/Inconv\u00e9nients de cette solution:<\/strong><\/p>\n<ul>\n<li>Compatible avec tous les appareils LoRa et permet \u00e9galement d&rsquo;envoyer des Downlinks pour param\u00e9trer des appareils LoRa.<\/li>\n<li>Compatible avec la grande majorit\u00e9 des serveurs Lora (TTN, Helium, Chirpstack), pas compatible directement avec Loriot.<\/li>\n<li>N\u00e9cessite un peu plus de manipulations pour \u00eatre configur\u00e9 et utilisable avec Home-Assistant.<\/li>\n<li>Communication instantan\u00e9e avec les appareils LoRa car le MQTT est impl\u00e9ment\u00e9 directement dans le serveur LoRa, contrairement \u00e0 des API qui parfois peuvent souffrir de latence\/panne.<\/li>\n<\/ul>\n<p>Cet article est une profonde refonte et mise-\u00e0-jour d&rsquo;un pr\u00e9c\u00e9dent article datant de 2021 qu&rsquo;il remplace.<\/p>\n<h3 dir=\"ltr\"><strong>Conclusion<\/strong><\/h3>\n<p dir=\"ltr\">Voil\u00e0, vous avez (je l&rsquo;esp\u00e8re) r\u00e9ussi \u00e0 connecter un premier appareil via LoRa et \u00e0 le faire communiquer avec Home-Assistant.<\/p>\n<p dir=\"ltr\">Vous avez d\u00e9sormais acc\u00e8s \u00e0 un outil tr\u00e8s pratique pour des capteurs d\u00e9port\u00e9s ou d\u00e9tecteurs sans le probl\u00e8me de la port\u00e9e Wifi, ou avoir \u00e0 passer un c\u00e2ble.<\/p>\n<p dir=\"ltr\">Cet article est \u00e9galement publi\u00e9 sur le forum de la communaut\u00e9 francophone de Home-Assistant.<\/p>","protected":false},"excerpt":{"rendered":"<p>Apr\u00e8s avoir pr\u00e9sent\u00e9 les principes et le fonctionnement des r\u00e9seaux LoRa (LoRa: qu\u2019est-ce que c\u2019est ?\u00a0\u00e0 quoi \u00e7a sert ?), on va ici s&rsquo;int\u00e9resser \u00e0 la connexion d&rsquo;un premier appareil LoRa \u00e0 un r\u00e9seau et \u00e0 la r\u00e9cup\u00e9ration des informations dans Home-Assistant. Pour rappel, LoRa vous permet de connecter des capteurs distants et\/ou hors de [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"Apr\u00e8s avoir pr\u00e9sent\u00e9 les principes et le fonctionnement des r\u00e9seaux LoRa (<a href=\"https:\/\/www.domedia.net\/?p=1271&lang=fr\" target=\"_blank\" rel=\"noopener\">LoRa: qu\u2019est-ce que c\u2019est ?\u00a0\u00e0 quoi \u00e7a sert ?<\/a>), on va ici s'int\u00e9resser \u00e0 la connexion d'un premier appareil LoRa \u00e0 un r\u00e9seau et \u00e0 la r\u00e9cup\u00e9ration des informations dans Home-Assistant.\r\n\r\nPour rappel, LoRa vous permet de <b><strong>connecter des capteurs distants et\/ou hors de port\u00e9e de votre syst\u00e8me domotique<\/strong><\/b>. Vous pourrez par exemple connecter une station m\u00e9t\u00e9o dans la maison de campagne, une boite aux lettres ou un portail tout au bout du chemin de votre propri\u00e9t\u00e9, ou encore un capteur de temp\u00e9rature dans une cabane au fond du jardin.\r\n\r\nComme exemples, on va se concentrer sur un capteur d'ambiance classique (Temp\u00e9rature\/Humidit\u00e9) de Dragino, un capteur d'ouverture de porte (Dragino \u00e9galement) et un t\u00e9l\u00e9commande sans fil \u00e0 boutons de RAKWireless (voir plus loin).<!--more-->\r\n<h3><strong>Choix du r\u00e9seau<\/strong><\/h3>\r\nMais tout d'abord il va falloir choisir un r\u00e9seau pour y connecter nos appareils. Comme on l'a vu dans l'article cit\u00e9 pr\u00e9c\u00e9demment, il existe 3 types de r\u00e9seau. Les <strong>priv\u00e9s<\/strong> ne nous concernent pas ici mais le principe de connexion avec\u00a0 Home-Assistant pr\u00e9sent\u00e9 plus bas reste valable. Les r\u00e9seaux <strong>commerciaux<\/strong> ne seront pas non plus consid\u00e9r\u00e9s ici car leurs conditions d'acc\u00e8s les r\u00e9servent aux professionnels. Nous allons donc nous concentrer sur les r\u00e9seaux partag\u00e9s. Les r\u00e9seaux <strong>partag\u00e9s<\/strong> ne sont pas tr\u00e8s nombreux et je vais \u00e9voquer les trois plus connus et importants. Il en existe d'autres mais tr\u00e8s limit\u00e9s, alors que ceux cit\u00e9s ci-dessous ont une couverture \u00e0 peu pr\u00e8s mondiale maintenant.\r\n<ul>\r\n \t<li><strong>H\u00e9lium<\/strong> (<a href=\"https:\/\/www.helium.com\/lorawan\" target=\"_blank\" rel=\"noopener\">Helium & LoRaWAN<\/a>): r\u00e9seau am\u00e9ricain relativement r\u00e9cent sur le march\u00e9 et dont le r\u00e9seau h\u00e9berge \u00e9galement une blockchain. (Il existe des bornes LoRa sp\u00e9cifiques pour le r\u00e9seau Helium qui mine de la crypto-monnaie en m\u00eame temps, et l'op\u00e9rateur r\u00e9ttribue \u00e9galement en crypto-monnaie ceux qui font tourner une borne LoRa Helium. Helium permet une utilisation gratuite pour un usage personnel avec un maximum de 10 appareils ce qui est d\u00e9ja pas mal pour un appartement ou une maison de taille classique ! Vous pouvez au choix utiliser la couverture existante si une ou plusieurs bornes couvrent votre zone (<a href=\"https:\/\/explorer.helium.com\/\" target=\"_blank\" rel=\"noopener\">Helium Coverage<\/a>) ou installer une borne LoRa connect\u00e9 au r\u00e9seau Helium. Le choix et l'installation d'une borne LoRa feront l'objet d'un article s\u00e9par\u00e9 prochainement disponible.<\/li>\r\n \t<li><strong>The Things Network<\/strong> (<a href=\"https:\/\/www.thethingsnetwork.org\/\" target=\"_blank\" rel=\"noopener\">The Things Network<\/a>): r\u00e9seau n\u00e9erlandais, qui existe depuis une dizaine d'ann\u00e9es maintenant. The Things Network (TTN) est le r\u00e9seau communautaire fourni par <a href=\"https:\/\/www.thethingsindustries.com\/\" target=\"_blank\" rel=\"noopener\">The Things Industries<\/a>, la maison m\u00e8re, qui propose des services commerciaux aux entreprises concernant le LoRa. Une carte de couverture indicative est pr\u00e9sente sur le site tiers <a href=\"https:\/\/ttnmapper.org\/heatmap\/\" target=\"_blank\" rel=\"noopener\">TTN Mapper<\/a>, mais il s'agit d'une carte participative donc il peut y avoir de la couverture m\u00eame si le site indique le contraire.<\/li>\r\n \t<li><strong>Loriot<\/strong> (<a href=\"https:\/\/loriot.io\" target=\"_blank\" rel=\"noopener\">Loriot<\/a>): r\u00e9seau suisse qui, de fa\u00e7on similaire \u00e0 TTN, propose un service communautaire (limit\u00e9 \u00e0 30 appareils par compte) et un service pour les professionnels avec serveur(s) d\u00e9di\u00e9(s). Comme pour les deux pr\u00e9c\u00e9dents, vous pouvez les utiliser gratuitement si vous \u00eates dans une zone d\u00e9ja couverte par le r\u00e9seau concern\u00e9, ou installer une gateway que vous connecterez \u00e0 ce m\u00eame r\u00e9seau.<\/li>\r\n<\/ul>\r\n<h5><em>Pour les besoins de cet article, nous utiliserons le r\u00e9seau TTN mais le principe reste tr\u00e8s similaire pour les autres r\u00e9seaux, qu'ils soient priv\u00e9s ou publics. J'\u00e9voquerais rapidement en fin d'article la pr\u00e9sentation de la console pr\u00e9sente chez Swisscom (Suisse) pour le LoRa \u00e0 titre d'exemple pour un r\u00e9seau commercial.<\/em><\/h5>\r\n<h4><strong>Les appareils \u00e0 connecter<\/strong><\/h4>\r\nPour les appareils, on verra 3 exemples diff\u00e9rents d'appareils: une sonde de temp\u00e9rature\/ambiance de Dragino: <a href=\"https:\/\/www.dragino.com\/products\/temperature-humidity-sensor\/item\/224-lht65n.html\" target=\"_blank\" rel=\"noopener\">LHT65N<\/a>, une t\u00e9l\u00e9commande 4 boutons de RakWireless: <a href=\"https:\/\/rakwireless.kckb.st\/9ae71df6\" target=\"_blank\" rel=\"noopener\">Wisnode Button 4K<\/a>, et un d\u00e9tecteur d'ouverture de porte\/fen\u00eatre de Dragino: <a href=\"https:\/\/www.dragino.com\/products\/lorawan-nb-iot-door-sensor-water-leak\/item\/181-lds02.html\" target=\"_blank\" rel=\"noopener\">LDS02<\/a>. On va dans un premier temps s'occuper de \"connecter\" notre appareil au r\u00e9seau LoRa TTN. Une alternative avec Loriot est \u00e9galement pr\u00e9sent\u00e9e.\r\n\r\nNous verrons ensuite comment r\u00e9cup\u00e9rer les informations de cet appareil dans Home-Assistant: une int\u00e9gration LoRa et MQTT.\r\n\r\nLe principe restera le m\u00eame quelque soit le type d'appareils LoRa si ce n'est qu'il aura plus ou moins de donn\u00e9es transmises (par exemple: un tracker LoRa transmettra des coordonn\u00e9es GPS (latitude, longitude) et une altitude).\r\n\r\n<a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/01\/CAI_9740.jpg\"><img class=\"alignleft wp-image-1299 size-medium\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/01\/CAI_9740-300x300.jpg\" alt=\"\" width=\"300\" height=\"300\" \/><\/a>\r\n\r\n<a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/dragino-lds-02.webp\"><img class=\"alignright size-medium wp-image-1380\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/dragino-lds-02-300x300.webp\" alt=\"Dragino LDS-02\" width=\"300\" height=\"300\" \/><\/a><a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/wisnode-button-4k.jpg\"><img class=\"aligncenter size-medium wp-image-1381\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/wisnode-button-4k-300x300.jpg\" alt=\"RakWireless Wisnode Button 4K\" width=\"300\" height=\"300\" \/><\/a>\r\n<h3><strong>Connexion d'un appareil LoRa \u00e0 un r\u00e9seau LoRa<\/strong><\/h3>\r\nDans un syst\u00e8me LoRa, chaque appareil est identifi\u00e9 par un trio de \"codes\". Ils permettent l'appairage initial de l'appareil avec son r\u00e9seau LoRa et la communication ensuite.\r\n\r\nCes 3 codes sont communiqu\u00e9s par le fabricant de l'appareil (en g\u00e9n\u00e9ral sur un sticker <strong>\u00c0 NE PAS PERDRE<\/strong>), et ils sont modifiables sur certains appareils en se connectant directement dessus (possible par exemple parmi nos appareils de test avec le capteur de temp\u00e9rature\/humidit\u00e9 et avec la t\u00e9l\u00e9commande mais pas avec le d\u00e9tecteur d'ouverture).\r\n\r\nVoyons ce que sont ces 3 codes:\r\n<ul>\r\n \t<li><strong>DevEUI<\/strong>: cet identifiant (de la forme suivante: A0 B1 C2 D3 E4 F5 01 23) est l'\u00e9quivalent de l'adresse MAC pour une carte r\u00e9seau. Elle permet d'identifier de fa\u00e7on unique un appareil, il est donc pr\u00e9f\u00e9rable d'\u00e9viter de la modifier pour \u00e9viter tout conflit \u00e9ventuel dans le r\u00e9seau LoRa (le fabricant s'assure que cet identifiant soit unique).<\/li>\r\n \t<li><strong>JoinEUI<\/strong> (anciennement appel\u00e9 AppEUI): cet identifiant, du m\u00eame format que le DevEUI, permet d'identifier le serveur qui va g\u00e9rer la demande de pairage de l'appareil avec le r\u00e9seau LoRa. Il est en g\u00e9n\u00e9ral identique pour tous les appareils d'un m\u00eame type, voire d'un m\u00eame fabricant.<\/li>\r\n \t<li><strong>AppKey<\/strong>: cet indentifiant (de la forme: A0 B1 C2 D3 E4 F5 01 23 45 67 89 0A BC DE F1 23), souvent compos\u00e9 de la concat\u00e9nation du DevEUI et du JoinEUI, va servir de cl\u00e9 d'encryption pour la communication avec le serveur Lora. C'est ce qui garantira la confidentialit\u00e9 de la communication radio et doit \u00eatre gard\u00e9 confidentiel.<\/li>\r\n<\/ul>\r\n<h4><strong>Appairage<\/strong><\/h4>\r\nUne fois en possession d'un appareil LoRa, ses identifiants et en \u00e9tant dans une zone couverte par le r\u00e9seau LoRa choisi (soit par votre propre gateway connect\u00e9 au dit r\u00e9seau soit par la couverture existante de ce r\u00e9seau), on va devoir \"<strong>appairer<\/strong>\" l'appareil avec le serveur LoRa (Join en anglais). On va donc se connecter \u00e0 la console de l'op\u00e9rateur LoRa pour ajouter l'appareil et que ce dernier puisse alors communiquer.\r\n\r\nNous mettrons ici en parall\u00e8le la configuration dans <strong>TTN<\/strong> (The Things Network) et <strong>Loriot<\/strong> (le syst\u00e8me suisse). A vous de choisir en fonction de votre couverture.\r\n\r\nPour <strong>TTN<\/strong>, la console est accessible sur ces pages:\r\n<ul>\r\n \t<li><a href=\"https:\/\/eu1.cloud.thethings.network\" target=\"_blank\" rel=\"noopener\">Console EU1<\/a> pour le serveur europ\u00e9en<\/li>\r\n \t<li><a href=\"https:\/\/nam1.cloud.thethings.network\" target=\"_blank\" rel=\"noopener\">Console NAM1<\/a> pour l'am\u00e9rique du Nord et Sud<\/li>\r\n \t<li><a href=\"https:\/\/au1.cloud.thethings.network\" target=\"_blank\" rel=\"noopener\">Console AU1<\/a> pour l'Asie et l'Australie.<\/li>\r\n<\/ul>\r\nPour <strong>Loriot<\/strong>, on y acc\u00e9dera par exemple \u00e0 cette adresse pour leur serveur \u00e0 Amsterdam: <a href=\"https:\/\/eu2.loriot.io\" target=\"_blank\" rel=\"noopener\">Console EU2.<\/a>\r\n\r\nUne fois connect\u00e9 \u00e0 la console, on va cr\u00e9er une <strong>Application<\/strong> (cela permettra de classer les appareils de votre compte, vous pouvez vous organiser comme vous voulez, cela n'a aucune cons\u00e9quence technique).\r\n\r\nUne fois choisi un <strong>id<\/strong> (en minuscule sans espace) et une \u00e9ventuelle <strong>description<\/strong>, vous allez alors arriver sur l'interface permettant d'<strong>ajouter les appareils<\/strong> dans le r\u00e9seau LoRa\r\n\r\nLa <strong>console TTN<\/strong> vous guide tout le long du processus afin de rendre cel\u00e0 le plus simple possible (une possibilit\u00e9 est propos\u00e9e d'ajouter un appareil en scannant son code QR mais jamais rencontr\u00e9 d'appareils avec un QRCode compatible !). <strong>Loriot<\/strong> dispose d'une interface plus technique o\u00f9 c'est \u00e0 vous \u00e0 d\u00e9finir la version de LoRa impl\u00e9ment\u00e9 par votre appareil au lieu d'utiliser une liste d'appareils d\u00e9ja connus comme TTN.\r\n\r\n<a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Register_end_device_Loriot.png\"><img class=\"alignright size-medium wp-image-1358\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Register_end_device_Loriot-173x300.png\" alt=\"Loriot: Register end device\" width=\"173\" height=\"300\" \/><\/a><a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Register_end_device_TTN.png\"><img class=\"alignleft size-medium wp-image-1359\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Register_end_device_TTN-223x300.png\" alt=\"TTN: Register end device\" width=\"223\" height=\"300\" \/><\/a>\r\n\r\nPour <strong>TTN<\/strong> (\u00e0 gauche ci-dessus, il suffit de choisir la <strong>marque<\/strong>, le <strong>mod\u00e8le<\/strong> et la <strong>r\u00e9gion Radio<\/strong> parmi les choix propos\u00e9s pour facilement rajouter un appareil.\r\n\r\nLa r\u00e9gion Radio doit correspondre \u00e0 la zone g\u00e9ographique o\u00f9 vous \u00eates (voir <a href=\"https:\/\/www.domedia.net\/?p=1271&lang=fr\" target=\"_blank\" rel=\"noopener\">LoRa: qu\u2019est-ce que c\u2019est ? \u00e0 quoi \u00e7a sert ?<\/a> si besoin) et \u00e0 la fr\u00e9quence radio de votre appareil).\r\n\r\n<strong>Pour Loriot (\u00e0 droite ci-dessus<\/strong>, il faudra choisir juste la <strong>version<\/strong> de Lora impl\u00e9ment\u00e9e par l'appareil (se reporter \u00e0 la documentation de l'appareil) et le <strong>mode de \"Join\/Enrollment\"<\/strong>.\r\n\r\nPar d\u00e9faut, on utilisera toujours le mode <strong>OTAA<\/strong> (seul mode accessible sur TTN) qui est le mode le plus s\u00e9curis\u00e9 pour le LoRa. Il existe un autre mode <strong>ABP<\/strong> qui est tr\u00e8s peu utilis\u00e9 et beaucoup moins s\u00e9curis\u00e9.\r\n\r\nIl n'y a plus maintenant qu'\u00e0 saisir chacun des 3 identifiants dans l'interface pour enregistrer l'appareil dans le r\u00e9seau.\r\n\r\nA partir de l\u00e0, il va falloir provoquer sur l'appareil ajout\u00e9 une commande de <strong>JOIN<\/strong>. C'est un message sp\u00e9cial qui permet un pairage unique entre l'appareil et le r\u00e9seau LoRa (\u00e0 partir des identifiants un nouveau jeu de cl\u00e9 d'encryptage va \u00eatre g\u00e9n\u00e9r\u00e9 et stock\u00e9 dans l'appareil et utilis\u00e9 pour les messages suivants qu'il enverra).\r\n<ul>\r\n \t<li>Pour notre <strong>capteur de temp\u00e9rature<\/strong>, il suffira d'appuyer quelques secondes sur l'unique bouton pour provoquer l'envoi de la commande JOIN.<\/li>\r\n \t<li>Pour la <strong>t\u00e9l\u00e9commande 4 boutons<\/strong>, il suffira d'appuyer quelques secondes sur le bouton 2 pour provoquer la commande JOIN.<\/li>\r\n \t<li>Pour le <strong>d\u00e9tecteur d'ouverture<\/strong>, il suffira de provoquer une action du capteur (balader l'aimant le long du capteur) et l'appareil va automatiquement JOIN le r\u00e9seau LoRa.<\/li>\r\n<\/ul>\r\nCi-dessous ce que vous verrez apparaitre dans la console TTN si le JOIN r\u00e9ussit. En cas d'erreur, il faut v\u00e9rifier que les 3 identifiants ont bien \u00e9t\u00e9 saisis sans erreur, que vous \u00eates bien dans une zone couverte par TTN\/Loriot, que votre appareil est bien aliment\u00e9 et qu'il est bien dans la bonne fr\u00e9quence pour votre r\u00e9gion g\u00e9ographique..<strong><a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/LoRa_join.png\"><img class=\"aligncenter size-medium wp-image-1365\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/LoRa_join-300x106.png\" alt=\"Lora JOIN in TTN console\" width=\"300\" height=\"106\" \/><\/a>Remarque<\/strong>: avec un r\u00e9seau commercial (ici Swisscom \u00e0 titre d'exemple), le principe reste tr\u00e8s similaire. On donne un nom \u00e0 l'appareil, on indique les DevEUI, JoinEUI, et AppKey et le tour est jou\u00e9.<a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Screenshot_20240807_101519.png\"><img class=\"aligncenter size-medium wp-image-1383\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Screenshot_20240807_101519-249x300.png\" alt=\"Swisscom LPN:\u00a0Ajout d'un appareil\" width=\"249\" height=\"300\" \/><\/a>\r\n<h4><strong>D\u00e9codeur de messages<\/strong><\/h4>\r\nIl nous reste d\u00e9sormais un dernier point \u00e0 configurer qui est le \"payload decoder\" ou d\u00e9codeur de messages. En effet, comme on l'a vu pr\u00e9c\u00e9demment, les messages LoRa sont crypt\u00e9s et encod\u00e9s. Il va donc falloir les d\u00e9coder pour pouvoir les rendre exploitables. Pour le moment, si vous regardez dans la console les messages re\u00e7us, le payload est de la forme: ci-dessous ce qui n'est pas vraiment lisible.\r\n<blockquote>\"frm_payload\": \"AUcNABQEsAPoAAAAAAAAAE2W\"<\/blockquote>\r\nOn va donc se rendre dans l'onglet \"Payload Formatters\" o\u00f9 il est possible de saisir un Javascript ou de se connecter avec un service externe pour le d\u00e9codage. Si vous avez choisi le bon appareil lors de l'ajout dans la console TTN, le bon \"formatter\" sera par d\u00e9faut s\u00e9lectionn\u00e9. C'est le cas ici pour nos appareils RakWireless comme Dragino, ce qui simplifie les choses. Dans le cas contraire, il faudra r\u00e9cup\u00e9rer le Javascript ad\u00e9quat de la part du fabricant que vous copierez\/collerez dans l'onglet Uplink (messages des appareils vers le serveur LoRa).<a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Decoded_payload.png\"><img class=\"aligncenter size-medium wp-image-1366\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Decoded_payload-300x186.png\" alt=\"Decoded Payload on TTN\" width=\"300\" height=\"186\" \/><\/a>Et l\u00e0 miracle, le payload, qui \u00e9tait jusque l\u00e0 illisible, devient soudainement beaucoup plus clair avec les diff\u00e9rentes valeurs retourn\u00e9es par l'appareil.\r\n\r\nOn va donc maintenant pouvoir exploiter cela dans Home-Assistant une fois fait la connection faite entre TTN et Home-Assistant.\r\n<h3><strong>Int\u00e9gration Home-Assistant<\/strong><\/h3>\r\nDeux solutions se pr\u00e9sentent \u00e0 nous<strong>:<\/strong>\r\n<ul>\r\n \t<li><strong>utiliser une int\u00e9gration<\/strong> qui est une solution simple et rapide mais avec des restrictions\/contraintes et qui n'est possible au jour d'aujourd'hui qu'avec TTN<\/li>\r\n \t<li>ou utiliser la <strong>solution MQTT<\/strong> un peu plus compliqu\u00e9e, mais permet beaucoup plus de choses et utilisable avec tous les serveur LoRa.<\/li>\r\n<\/ul>\r\n<h4><strong>Int\u00e9gration HACS TTN:<\/strong><\/h4>\r\nNous n'allons pas utiliser l'int\u00e9gration <a href=\"https:\/\/www.home-assistant.io\/integrations\/thethingsnetwork\/\" target=\"_blank\" rel=\"noopener\">TTN officielle<\/a> car cette derni\u00e8re a de nombreuses restrictions d\u00fbes aux contraintes des int\u00e9grations officielles Home-Assistant. Nous allons utiliser la version non officielle, faite par le m\u00eame d\u00e9veloppeur, et qui s'installe facilement via HACS:<a href=\"https:\/\/github.com\/angelnu\/home_assistant_thethingsnetwork\" target=\"_blank\" rel=\"noopener\"> https:\/\/github.com\/angelnu\/home_assistant_thethingsnetwork<\/a> Une fois install\u00e9e via HACS, il suffira de l'ajouter comme une int\u00e9gration officielle (Param\u00e8tres -> Int\u00e9gration et chercher \"The Things Network\".\r\n\r\nIl n'y aura plus qu'\u00e0 saisir l'application ID pr\u00e9c\u00e9demment cr\u00e9\u00e9 dans la console TTN et la cl\u00e9 d'API, cette derni\u00e8re doit \u00eatre cr\u00e9\u00e9e sur la page de l'application dans la console TTN (attention \u00e0 sauvegarder la cl\u00e9 car elle n'est plus consultable ensuite).\r\n\r\nIl faudra \u00e9galement toujours sur la page de l'application dans la console TTN activer la Storage Integration (menu Int\u00e9grations -> Storage Integration et activer la coche, tout simplement).\r\n\r\nApr\u00e8s quelques minutes, parfois imm\u00e9diatement, vos appareils ajout\u00e9s dans TTN vont apparaitre dans l'int\u00e9gration TTN:\r\n\r\n<a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_liste_devices.png\"><img class=\"alignright wp-image-1370 size-medium\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_liste_devices-300x149.png\" alt=\"TTN integration: liste des appareils\" width=\"300\" height=\"149\" \/><\/a><a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_integration.png\"><img class=\"alignleft wp-image-1371 size-medium\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/TTN_integration-300x159.png\" alt=\"TTN integration: liste des applications\" width=\"300\" height=\"159\" \/><\/a>\r\n\r\nSi l'on s\u00e9lectionne notre appareil, on a alors le d\u00e9tail des capteurs et autres donn\u00e9es que retoure l'appareil en question. On y voit alors le d\u00e9tail de toutes les informations retourn\u00e9es par l'appareil y compris son niveau de batterie (\u00e0 gauche le capteur de temp\u00e9rature\/fumidit\u00e9, et \u00e0 droite le d\u00e9tecteur d'ouverture de porte).\r\n\r\n<a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Detecteur_ouverture_porte.png\"><img class=\"alignright size-medium wp-image-1373\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Detecteur_ouverture_porte-300x207.png\" alt=\"D\u00e9tecteur ouverture porte\" width=\"300\" height=\"207\" \/><\/a><a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Details_device.png\"><img class=\"aligncenter size-medium wp-image-1372\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2024\/08\/Details_device-300x207.png\" alt=\"D\u00e9tails Device LoRa\" width=\"300\" height=\"207\" \/><\/a><strong>Avantages\/Limitations\/Inconv\u00e9nients de cette int\u00e9gration:<\/strong>\r\n<ul>\r\n \t<li>Facile et rapide \u00e0 configurer.<\/li>\r\n \t<li>les appareils qui ne retournent pas de donn\u00e9es comme la t\u00e9l\u00e9commande 4 boutons n'apparaissent pas et donc ne peuvent pas \u00eatre utilis\u00e9es via cette int\u00e9gration.<\/li>\r\n \t<li>l'int\u00e9gration utilise l'API de TTN pour communiquer et cette derni\u00e8re tombe en panne de temps en temps ou a une grosse latence.<\/li>\r\n \t<li>Compatible uniquement avec le r\u00e9seau LoRa TTN.<\/li>\r\n \t<li>l'int\u00e9gration ne pouvant pas par elle-m\u00eame d\u00e9tecter le type des donn\u00e9es retourn\u00e9es par les appareils, il est souvent utile de passer par le menu Configurer de l'int\u00e9gration et choisir \"Fields\" puis choisir le param\u00e8tre \u00e0 modifier pour le configurer correctement.<\/li>\r\n<\/ul>\r\n<h4><strong>Int\u00e9gration via MQTT:<\/strong><\/h4>\r\nIci on va recourir \u00e0 la bonne vieille solution du <strong>broker MQTT<\/strong>.\r\n\r\nPour ceux qui ne conna\u00eetraient pas encore MQTT, il s'agit d'un dispositif logiciel pour distribuer des courts messages, typiquement pour l'IoT. Il s'agit d'un protocole tr\u00e8s l\u00e9ger mais qui peut \u00eatre s\u00e9curis\u00e9 si besoin est et qui bien s\u00fbr est nativement g\u00e9r\u00e9 par HA ! Pour ceux qui voudraient en savoir plus sur MQTT, le site officiel en donne une <a href=\"https:\/\/mqtt.org\/\" target=\"_blank\" rel=\"noopener\">pr\u00e9sentation d\u00e9taill\u00e9e<\/a>. MQTT est un syst\u00e8me normalis\u00e9 d\u00e9sormais.\r\n\r\nPremi\u00e8re \u00e9tape (probablement inutile pour la plupart d'entre vous): <strong>installer le module compl\u00e9mentaire\/add-on MQTT Broker<\/strong>.\r\n\r\nUne fois install\u00e9, s'assurer que les options suivantes sont activ\u00e9es dans le module (il faudra \u00e9galement cr\u00e9er le dossier mosquitto dans lo dossier \/share de HA):\r\n<blockquote>active: true\r\nfolder: mosquitto<\/blockquote>\r\nUne fois le module compl\u00e9mentaire activ\u00e9, vous pouvez installer l'<strong>int\u00e9gration officielle MQTT Broker<\/strong>. Une fois install\u00e9 et d\u00e9marr\u00e9, elle va automatiquement se configurer pour communiquer avec le broker MQTT pr\u00e9c\u00e9demment install\u00e9.\r\n\r\nOn va laisser de c\u00f4t\u00e9 HA un instant pour continuer la configuration c\u00f4t\u00e9 TTN. Il va falloir se rendre dans la console TTN, dans la rubrique Applications puis choisir l'Application dans laquelle se trouve l'appareil LoRa dont on veut r\u00e9cup\u00e9rer les informations.\r\n\r\nOn va alors choisir dans le menu de gauche: API puis \"Add API key\". On lui donne un <strong>nom<\/strong> (cela est juste pour nous comme rep\u00e8re), une \u00e9ventuelle <strong>date d'expiration<\/strong> sinon on laisse vide.\r\n\r\nVous pouvez laisser par d\u00e9faut tous les droits (dans l'absolu seuls Write Downlink application traffic, et Read Application Traffic sont n\u00e9cessaires).\r\n<p style=\"padding-left: 40px;\"><strong>IMPORTANT: une fois valid\u00e9, bien sauvegarder la cl\u00e9 d'API qui ne sera plus jamais accessible apr\u00e8s en clair.<\/strong><\/p>\r\nIl nous reste \u00e0 r\u00e9cup\u00e9rer l'ID de l'appareil LoRa avec lequel on veut interagir et pour cela on va aller dans le menu \"End Devices\" du menu de gauche et cliquer alors sur l'end-device qui nous int\u00e9resse. On pourra alors r\u00e9cup\u00e9rer l'ID de l'appareil.\r\n\r\nD\u00e9sormais il ne nous reste plus qu'\u00e0 faire un peu de configuration dans HA pour r\u00e9cup\u00e9rer nos infos d'appareils LoRa.\r\n\r\nTout d'abord on va relier ou \"bridger\" le broker MQTT de HA avec celui de TTN. Pour cela on va devoir cr\u00e9er un fichier bridge.conf pour MQTT qui lui dira comment faire la liaison. Ce fichier doit \u00eatre plac\u00e9 dans votre dossier \"share\" da HAOS (ce dossier n'est pas accessible par l'\u00e9diteur de fichier de HA, il faut y acc\u00e9der par le partage de fichiers de HA).\r\n\r\nDans ce dossier share, vous cr\u00e9ez s'il n'existe pas un dossier mosquitto et dans ce dossier vous cr\u00e9ez un fichier bridge.conf (un seul fichier suffit pour tous les bridges que vous cr\u00e9erez, il suffit de les lister \u00e0 la suite l'un de l'autre !). Ce fichier contiendra les \u00e9l\u00e9ments suivants:\r\n<blockquote>connection <strong>lenomquejeveux<\/strong>\r\naddress <strong>eu1.cloud.thethings.network<\/strong>\r\nbridge_protocol_version mqttv311\r\nremote_username <strong>iddemondevice<\/strong>@ttn\r\nstart_type automatic\r\nnotifications false\r\ntry_private false\r\nremote_password <strong>NNSXS.xxxxxxxxxxxxxxxxxxxxxxxx<\/strong>\r\nbridge_insecure true\r\ntopic # in 0\r\ncleansession true<\/blockquote>\r\n<ul>\r\n \t<li>lenomquejeveux vous permet de nommer le bridge (c'est purement pour vous et doit \u00eatre unique pour chaque bridge d\u00e9clar\u00e9 dans le fichier bridge.conf)<\/li>\r\n \t<li>eu1... doit \u00eatre remplac\u00e9 par le serveur TTN que vous utilisez selon la r\u00e9gion du monde o\u00f9 vous vous trouvez<\/li>\r\n \t<li>iddemondevice est \u00e0 remplacer par l'ID du device pr\u00e9c\u00e9demment r\u00e9cup\u00e9r\u00e9 dans la console TTN<\/li>\r\n \t<li>et pour finir dans remote_password vous y collez la cl\u00e9 d'API que vous avez pr\u00e9c\u00e9demment g\u00e9n\u00e9r\u00e9e.<\/li>\r\n<\/ul>\r\nVous pouvez alors red\u00e9marrer le module compl\u00e9mentaire Mosquitto Broker dans HA, et si tout est bien configur\u00e9, vous devriez voir cela dans les logs du module compl\u00e9mentaire:\r\n<blockquote>\r\n<pre>1684589377: Loading config file \/share\/mosquitto\/bridge.conf\r\n1684589377: Warning: Bridge lenomquejeveux using insecure mode.\r\n<\/pre>\r\n<\/blockquote>\r\nSi vous avez bien \u00e7a, c'est parfait, cela veut dire que le broker MQTT de HA communique bien avec celui de TTN et que l'on va automatiquement recevoir les donn\u00e9es envoy\u00e9es par nos appareils LoRa.\r\n\r\nIl ne nous reste plus qu'\u00e0 extraire les donn\u00e9es qui vous int\u00e9ressent pour les exploiter dans HA. La structure du message re\u00e7u de TTN est en JSON, cela va donc \u00eatre assez simple \u00e0 r\u00e9cup\u00e9rer.\r\n\r\nVoici un cas simple et concret avec notre capteur de temp\u00e9rature\/humidit\u00e9 LHT-52. En examinant les messages envoy\u00e9s par la console TTN, voici ce qui appara\u00eet en dehors des ent\u00eates et autres informations qui ne nous int\u00e9ressent pas:<a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2021\/11\/Screenshot_20230520_153502.png\"><img class=\"aligncenter wp-image-1054 size-medium\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2021\/11\/Screenshot_20230520_153502-300x115.png\" alt=\"\" width=\"300\" height=\"115\" \/><\/a>On va alors pouvoir ajouter un capteur MQTT dans HA qui extraira automatiquement la valeur qui nous int\u00e9resse de la fa\u00e7on suivante:<a href=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2021\/11\/JSON_decoding.png\"><img class=\"aligncenter wp-image-1056 size-medium\" src=\"https:\/\/www.domedia.net\/wp-content\/uploads\/2021\/11\/JSON_decoding-300x59.png\" alt=\"\" width=\"300\" height=\"59\" \/><\/a>sonde-ambiance doit \u00eatre remplac\u00e9 par l'ID de votre application dans la console TTN.\r\n\r\nPour r\u00e9duire le risque d'erreur et pour ceux qui sont sous Android (il doit probablement exister l'\u00e9quivalent sous IoS mais je n'ai pas d'appareil IoS), il existe une application tr\u00e8s pratique qui s'appelle <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=mqttsnooper.mqttsnooper\" target=\"_blank\" rel=\"noopener\"><strong>MQTT Snooper<\/strong><\/a> qui vous permet de voir tous les messages MQTT sur un broker.\r\n\r\nUne fois install\u00e9 l'application, vous ajoutez un nouveau host (vous indiquez comme serveur le serveur de TTN, en username l'id de l'application TTN suivi de @ttn et en mot de passe la cl\u00e9 d'API).\r\n\r\nUne fois connect\u00e9, vous verrez automatiquement passer les messages MQTT \u00e9mis par TTN et facilement reconna\u00eetre les champs que vous souhaitez extraire.\r\n\r\n<strong>Limitations\/Inconv\u00e9nients de cette solution:<\/strong>\r\n<ul>\r\n \t<li>Compatible avec tous les appareils LoRa et permet \u00e9galement d'envoyer des Downlinks pour param\u00e9trer des appareils LoRa.<\/li>\r\n \t<li>Compatible avec la grande majorit\u00e9 des serveurs Lora (TTN, Helium, Chirpstack), pas compatible directement avec Loriot.<\/li>\r\n \t<li>N\u00e9cessite un peu plus de manipulations pour \u00eatre configur\u00e9 et utilisable avec Home-Assistant.<\/li>\r\n \t<li>Communication instantan\u00e9e avec les appareils LoRa car le MQTT est impl\u00e9ment\u00e9 directement dans le serveur LoRa, contrairement \u00e0 des API qui parfois peuvent souffrir de latence\/panne.<\/li>\r\n<\/ul>\r\nCet article est une profonde refonte et mise-\u00e0-jour d'un pr\u00e9c\u00e9dent article datant de 2021 qu'il remplace.\r\n<h3 dir=\"ltr\"><strong>Conclusion<\/strong><\/h3>\r\n<p dir=\"ltr\">Voil\u00e0, vous avez (je l'esp\u00e8re) r\u00e9ussi \u00e0 connecter un premier appareil via LoRa et \u00e0 le faire communiquer avec Home-Assistant.<\/p>\r\n<p dir=\"ltr\">Vous avez d\u00e9sormais acc\u00e8s \u00e0 un outil tr\u00e8s pratique pour des capteurs d\u00e9port\u00e9s ou d\u00e9tecteurs sans le probl\u00e8me de la port\u00e9e Wifi, ou avoir \u00e0 passer un c\u00e2ble.<\/p>\r\n<p dir=\"ltr\">Cet article est \u00e9galement publi\u00e9 sur le forum de la communaut\u00e9 francophone de Home-Assistant.<\/p>","_et_gb_content_width":"","footnotes":""},"categories":[30],"tags":[112,488,486,480,482,138,110,490,233,484,235,126,478,492],"class_list":["post-1040","post","type-post","status-publish","format-standard","hentry","category-technique","tag-assistant","tag-bridge","tag-broker","tag-devices","tag-gateways","tag-ha","tag-home","tag-json","tag-lora","tag-mqtt","tag-ttn","tag-tts","tag-v3","tag-yaml"],"_links":{"self":[{"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/posts\/1040","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.domedia.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1040"}],"version-history":[{"count":50,"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/posts\/1040\/revisions"}],"predecessor-version":[{"id":1400,"href":"https:\/\/www.domedia.net\/index.php?rest_route=\/wp\/v2\/posts\/1040\/revisions\/1400"}],"wp:attachment":[{"href":"https:\/\/www.domedia.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1040"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.domedia.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1040"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.domedia.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1040"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}