LoraPayload plugin

This plugin is a plugin allowing to link LoraWan payload commands and to create a device with commands while parsing the values.

Configuration

Plugin configuration

You can check the state of dependencies here and relaunch them. In case of problems with the plugin always restart the dependencies even if OK in doubt.

The plugin

Go to the plugins / protocol menu to find the plugin.

On this page you can see the modules already included.

On the upper part of this page you have several buttons alt text

Equipement

When you click on one of your modules, you arrive on its configuration page :

On the right side you will find :

You also have two additional tabs:

Adding equipment

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.

It is important on the right side to choose the type of equipment. This is what will allow us to know how to parse the frame.

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

Once done you can save. Following this, the next time you receive a frame, the commands for your equipment will update

Sending orders

Some Lorawan modules have Action commands which can be used to send instructions to the modules via the Jeedom interface.

In the LoraPayload plugin’s Equipment tab :

The send command, when used with MQTT, is an MQTT command of type Action and sub-type Message. The topic is the topic dedicated to downlinks and the value of the command is #message#.

Ajouter un nouveau capteur Milesight (downlink/uplink)

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 communiquer 
      },
      {
        "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": "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": "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

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.