Plugin LoraPayload

Le plugin LoraPayload est un plugin Jeedom qui permet d’intégrer des équipements LoRaWAN connectés via ChirpStack (v3 ou v4). Il gère automatiquement les payloads uplink, les downlinks, et crée les commandes Jeedom correspondantes pour piloter et superviser vos capteurs. Il agit comme un intermédiaire intelligent :

Fonctionnalité

Le plugin LoraPayload offre les fonctionnalités suivantes :

Configuration


Configuration du plugin

Dans la page de configuration du plugin, vous pouvez :

alt text

Le plugin

Retrouvez le plugin dans le menu Plugins → Protocole domotique → LoraPayload.
Sur cette page, vous pourrez voir la liste de vos équipements LoRaWAN déjà configurés.

En haut de la page se trouvent plusieurs boutons :

alt text

Equipement

En cliquant sur un module, vous accédez à sa page de configuration :

alt text

Sur la partie droite :

Deux onglets supplémentaires :

Changer l’application ChirpStack d’un équipement

Il est possible de modifier directement l’application ChirpStack liée à votre équipement depuis Jeedom.

Procédez comme suit :

  1. Choisir la bonne application via la liste déroulante du champ Application.
  2. Régénérer la configuration LoRaWAN en utilisant le bouton dédié.
  3. Afficher les commandes MQTT en utilisant le bouton dédié.

Attention : si ces deux étapes sont respectées, l’équipement sera :

NB : Vous devrez effectuer à nouveau un join du capteur, car le changement d’application réinitialise son enregistrement côté ChirpStack.

Ajout d’un équipement

alt text Il suffit de cliquer sur le bouton Génération automatique et de choisir un nom. Ensuite vous pouvez configurer l’objet Parent, renseigner le Dev EUI l’app Key, l’application pour chirpstack Pour configurer, activer l’équipement, choisir une ou des catégories, et rendre l’équipement visible ou non.

Il est important sur la partie droite de choisir le type de l’équipement. C’est ce qui permettra de savoir comment parser la trame.

L’onglet LoRaWAN est très important : alt text

Une fois fait vous pouvez sauver. Suite à cela lors de la prochaine réception de trame les commandes de votre équipement se mettront à jour

Envoyer des commandes

Certains modules Lorawan possèdent des commandes de type Action qui permettent d’envoyer des consignes aux modules via l’interface Jeedom.

Dans l’onglet Equipement du plugin LoraPayload :


Cette section détaille l’ajout de la configuration et de la gestion des commandes (uplink/downlink) pour un capteur Milesight dans le plugin LoraPayload.


1. Ajout des fichiers d’encodage/décodage

  1. Créer un fichier JavaScript nommé selon la convention suivante :
    milesight_modele.js
    Exemple :
    • milesight_WT101.js
    • milesight_GS601.js
  2. Déposer ce fichier dans :
    /var/www/html/plugins/lorapayload/resources/lorapayload/payloads/

  3. Fusionner le code d’encodage (encoder) et décodage (decoder) dans ce même fichier.

2. Adapter la fonction Decode

Remplacer :

function Decode(fPort, bytes) {
    return milesightDeviceDecode(bytes);
}
Par 
function Decode(input) {
    bytes = input.bytes;
    return milesightDeviceDecode(bytes);
}

3. Adapter la fonction Encoder

Remplacer :

function Encode(fPort, obj, variables) {
return milesightDeviceEncode(obj);
}
Par 
function Encode(obj) {
    return milesightDeviceEncode(obj);
}

4. Explorter les fonctions

A la fin du fichier, ajouter:

module.exports = {
    Decode,
    Encode
};

5. Déclaration du capteur dans la configuration

  1. Créer un dossier dans /var/www/html/plugins/lorapayload/core/config/devices/qui porte le même nom que votre fichier d’encodage/décodage (sans l’extension .js).

  2. Ajouter dans ce dossier :

6. Exemple de configuration JSON pour un capteur Milesight

{
  "milesight_GS601": {
    "name": "Milesight GS601 - Vape Detector",  // Modele + Nom du capteur 
    "groupe": "Milesight",      //Nom du Fabricant
    "configuration": {
      "type": "milesight_GS601",
      "language": "js",         // Indique que l’encodeur/décodeur est en JS (sinon omettre)
      "deviceProfile": "C"      // Indique que le profil LoRaWAN du device est "Class C" (sinon omettre)
    },
    "commands": [
      {
        "name": "Température",  // Nom 
        "type": "info",         // Commande info = remonte une info du capteur (uplink)
        "subtype": "numeric",   // numeric/string/binary selon la donnée
        "isVisible": 1,         // 1 = visible, 0 = cachée
        "isHistorized": 1,      // 1 = historisé, 0 = non historisé
        "unite": "°C",          // Unité d'affichage
        "logicalId": "parsed::temperature" // Doit correspondre à la variable dans le JS (decoded.temperature)
      },
      {
        "name": "fPort",        // Toujours préciser le fPort
        "type": "info",
        "subtype": "numeric",
        "isVisible": 0,
        "isHistorized": 0,
        "unite": "",
        "logicalId": "fport" // Port utilisé pour les downlinks
      },
      {
        "name": "Reboot",
        "type": "action",        // Commande action = envoi une commande vers le capteur (downlink)
        "subtype": "other",
        "isVisible": 1,
        "logicalId": "encoder::reboot::1" // Format pour envoyer une commande d'action (encoder::<fonction>::<valeur>)
      },
      {
        "name": "ON/OFF",
        "type": "action",        // Commande action = envoi une commande vers le capteur (downlink)
        "subtype": "other",
        "isVisible": 1,
        "logicalId": "action::f90001" // Format pour envoyer une commande d'action (action::<valeur_en_hexadecimal>)
      },
      {
        "name": "Set report interval",
        "type": "action",
        "subtype": "slider",     // slider/other selon le type d'action
        "isVisible": 1,
        "logicalId": "encoder::report_interval",
        "configuration": {
          "minValue": 1,
          "maxValue": 5000,
          "step": 1
        }
      },
      {
        "name": "Set report interval",
        "type": "action",
        "subtype": "slider",     // slider/other selon le type d'action
        "isVisible": 1,
        "logicalId": "action::f800llll",
        "configuration": {
          "minValue": 1,
          "maxValue": 5000,
          "step": 1
        }
      },
      {
        "name": "Payload brut",
        "type": "info",
        "subtype": "string",
        "isVisible": 0,
        "isHistorized": 0,
        "logicalId": "payload"   // Pour afficher le payload reçu tel quel
      }
    ],
    "compatibility": [
      {
        "manufacturer": "Milesight",
        "name": "GS601",
        "doc": "",
        "type": "milesight_GS601",
        "remark": "",
        "inclusion": "",
        "imglink": "milesight_GS601"
      }
    ]
  }
}

Comment écrire le fichier de configuration JSON?

Le fichier de configuration JSON permet de décrire chaque capteur (uplink et downlink), d’associer les variables décodées, de définir les commandes d’action, et d’assurer l’affichage correct dans Jeedom.

Explication des champs principaux

Bonnes pratiques

Ajouter l’image du capteur

  1. Note l’exemple de payload dans la doc.

    • Parfois c’est un tableau, parfois un JSON d’exemple.
  2. Prépare la chaîne de valeurs à envoyer dans le bon ordre, séparées par (comme vu plus haut), ou sous forme de JSON si l’outil le demande.
  3. (Facultatif) : Si tu es un utilisateur avancé, tu peux regarder le code pour vérifier le mapping pour écrire le message.

Exemple Concret Supposons, dans la documentation Milesight, tu trouves ce tableau :

Champ Valeurs possibles Description
enable 0, 1 0: Désactiver, 1: Activer
threshold_condition 1,2,3,4 1: en-dessous, 2: au-dessus…
threshold_min 0~100 En °C
threshold_max 0~100 En °C
{
  "temperature_alarm_settings": {
    "enable": 1,
    "threshold_condition": 2,
    "threshold_min": 30,
    "threshold_max": 40
  }
}

Panel

Qu’est-ce que le panel Lorapayload ?


Visualisation dans Jeedom


Présentation du panneau

Le panneau est divisé en deux parties principales :

  1. Liste des devices dans ChirpStack
    Cette table affiche pour chaque équipement :
    • Status : un point coloré qui indique l’état de communication du capteur.
      • 🟢 Vert : le capteur a communiqué récemment.
      • 🔴 Rouge : le capteur n’a pas communiqué depuis trop longtemps.
      • Gris : aucune donnée n’a encore été reçue pour ce capteur.
    • Last Seen : date et heure du dernier message.
    • Application / Device Name / DevEUI / Device Profile : informations de base de l’équipement.
    • Signal Quality : indique la qualité de réception radio du capteur, calculée à partir du SF, du RSSI et du SNR.
      • 🟢 Bonne : signal fort et stable (RSSI élevé, SNR positif).
      • 🟡 Moyenne : communication possible mais instable (RSSI ou SNR limite).
      • 🔴 Faible : risque élevé de perte de messages (RSSI faible, SNR très négatif).
    • Config Page : un bouton permettant d’accéder directement à la page de configuration Jeedom de l’équipement.
  2. Sélection multiple
    • Chaque ligne contient une case à cocher.
    • Il est possible de sélectionner plusieurs équipements simultanément afin d’appliquer des actions groupées.
      La case All en haut du tableau permet de cocher/décocher tous les équipements d’un coup.
  3. Actions disponibles
    • Recréer les commandes
      Recrée automatiquement les commandes Jeedom pour les équipements sélectionnés.
    • Envoyer un downlink en masse
      Ouvre une fenêtre de configuration pour définir les paramètres du downlink (port, confirmé, type d’encodage, payload) puis envoie la même commande à tous les équipements cochés.
  4. Cache des Downlinks
    Cette zone regroupe la file d’attente des messages downlink envoyés aux capteurs, avec la possibilité de la rafraîchir, de la vider entièrement ou de supprimer des entrées individuellement.

Personnalisation du délai de communication

Le changement de couleur du Status est influencé par le paramètre de timeout configuré dans Jeedom.
Pour le personnaliser :

  1. Ouvre la configuration avancée de ton équipement.
  2. Va dans l’onglet Alertes.
  3. Modifie la valeur Communication en alerte (minutes).

Concrètement :

Cela permet d’adapter la surveillance en fonction du rythme normal de communication de chaque capteur.


Gestionnaire de file d’attente

Cette mise à jour améliore la gestion de la file d’attente des downlinks dans le plugin lorapayload pour Jeedom. Elle introduit :

Fonctionnalités clés

  1. Démon Worker Le démon (lorapayloadd.php) tourne en continu et lit la clé de cache queueDownlink. À chaque cycle :
    • Cycle toutes les 3s
    • Relit à chaque itération pour prendre en compte les purges ou modifications.
  2. Panneau d’administration

alt text

Dans l’interface Jeedom, onglet Acceuil → lorapayload → Cache queueDownlink :

  1. Fonctionnalités clés
    • Démon Exécution programmée des downlinks selon leur champ ts et relecture dynamique de la queue pour tenir compte des purges.
  1. Configuration Configurer les équipements prioritaires en allant dans les configuration de l’équipement puis dans LoRaWAN > Downlink alt text Si votre équipement est prioritaire, cochez sur le check point Prioritaire puis enregistrez. Ensuite rendez-vous dans les configurations du plugin Lorapayload et dans le champs configuration, ajustez les paramètres globaux en fonction de votre application. alt text Redémarrer le démon s’il est arrêté ou en statut NOK. Suivre et gérer l’état de la file dans l’onglet Cache queueDownlink.

Guide d’utilisation du testeur RAK10701 avec Jeedom (LoRaPayload)

1. Intégration de l’équipement

2. Mise sous tension et join


3. Collecte des données GPS


4. Parcours de la zone de test


5. Consultation et export des résultats

Chemin d’accès : html/plugins/lorapayload/resources/lorapayload/payloads

→ fichiers rak10701.csv et rak10701_history.json. alt text

Si la permission d’écriture n’est pas accordée rétablissez les droits des dossiers et fichier dans le champ OS/DB dans configuration.

6. Téléchargez le fichier et traitez les données

alt text _____

FAQ

Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site web. Si vous continuez à utiliser ce site, nous supposerons que vous en êtes satisfait.