# Watteco Modbus

{% hint style="info" %}
Il faut au préalable configurer une ou plusieurs requêtes Modbus périodiques via downlink. Plus d'informations : <https://support.watteco.com/modbus/>

Dans l'ordre, il faut :

1. Configurer l'inetrface série (baudrate, parité, etc).
2. Configurer une requête Modbus sur un E*ndPoint*.
3. Configurer un envoi d'*uplink* à chaque réponse Modbus (suite à la requête).
   {% endhint %}

Il y a 10 *EndPoint* possibles sur les Watteco Modbus, le codec ne couvrent que les 4 premiers. Les requêtes ne peuvent pas excéder 16 registres. Chaque requête Modbus sera reportée dans la table Modbus du RX LoRaWAN comme suit :

{% code title="" expandable="true" %}

```
{
    endpointXSlaveID
    endpointXFunctionCode
    endpointXNumberOfRegisters
    endpointXExceptionCode
    endpointXRegister0
    endpointXRegister2
    ...
    endpointXRegister15
} 
```

{% endcode %}

## Codec

{% code title="watteco-modbus.codec.js" lineNumbers="true" expandable="true" %}

```js
// get endpoint number
function getFctrl(byte) {
    const mapping = {
        0x11: 0, 0x31: 1, 0x51: 2, 0x71: 3, 0x91: 4,
        0xB1: 5, 0xD1: 6, 0xF1: 7, 0x13: 8, 0x33: 9
    };

    if (mapping.hasOwnProperty(byte)) {
        return mapping[byte];
    }
    throw new Error("Unhandled Fctrl: Byte 0x" + byte.toString(16) + " not found in mapping.");
}

function decodeUplink(input) {

    if (!input || !input.bytes || input.bytes.length < 8) {
        throw new Error("Unhandled data: Payload too short or invalid");
    }

    const bytes = input.bytes;
    const fctrlSeq = getFctrl(bytes[0]);

    const prefix = "endpoint" + fctrlSeq;
    const data = {};

    // CHECK 1: MODBUS REPORT (Cluster 0x0013)
    const isStandardReport =
        bytes[1] === 0x0a &&                     // CmdID: Report Attributes
        (bytes[2] << 8 | bytes[3]) === 0x8007 && // ClusterID: Serial Master/Slave protocol
        (bytes[4] << 8 | bytes[5]) === 0x0001 && // AttributeID: <not documented>
        bytes[6] === 0x41;

    // CHECK 2: POWER CONFIGURATION REPORT (Cluster 0x0050)
    const isStandardPowerReport = 
        bytes[1] === 0x0a && 
        (bytes[2] << 8 | bytes[3]) === 0x0050 &&
        (bytes[4] << 8 | bytes[5]) === 0x0006 && // Attribute ID 0x0006
        bytes[6] === 0x41;                       // Type: Structured/Byte String

    // PROCESSING MODBUS
    if (isStandardReport) {
        const funcCode = bytes[9];
        data[prefix + "SlaveID"] = bytes[8];
        data[prefix + "FunctionCode"] = funcCode;
        data[prefix + "NumberOfRegisters"] = 0;
        data[prefix + "ExceptionCode"] = 0;

        if (funcCode >= 0x80) {
            data[prefix + "ExceptionCode"] = bytes[10];
            for (let r = 0; r < 16; r++) data[prefix + "Register" + r] = 0;
        } else {
            const byteCount = bytes[10];
            data[prefix + "NumberOfRegisters"] = byteCount / 2;
            const regStart = 11;
            for (let r = 0; r < 16; r++) {
                const offset = regStart + (r * 2);
                data[prefix + "Register" + r] = (offset + 1 < bytes.length && (r * 2) < byteCount) 
                    ? (bytes[offset] << 8) | bytes[offset + 1] 
                    : 0;
            }
        }
    } 
    // PROCESSING POWER CONFIG
    else if (isStandardPowerReport) {
        // bytes[10] & [11] is Voltage (0e 68)
        const voltage = (bytes[10] << 8) | bytes[11];
        data.batteryVoltage = voltage;
    } 
    // UNKNOWN FRAME
    else {
        throw new Error("Unhandled data: Frame structure or ClusterID unknown");
    }

    return { data: data };
}
```

{% endcode %}

## Mapping

{% code title="watteco-modbus.mapping.json" lineNumbers="true" expandable="true" %}

```json
{
  "uplink":{
    "fields":[
      {
        "name":"endpoint0SlaveID",
        "description": "endpoint0: Slave ID",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific": {
          "modbus": {
            "register_type": "input",
            "factor": 1
          }
        }
      },
      {
        "name":"endpoint0FunctionCode",
        "description": "endpoint0: Function code",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0NumberOfRegisters",
        "description": "endpoint0: Number of registers",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0ExceptionCode",
        "description": "endpoint0: Exception code",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register0",
        "description": "endpoint0: Register 0 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register1",
        "description": "endpoint0: Register 1 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register2",
        "description": "endpoint0: Register 2 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register3",
        "description": "endpoint0: Register 3 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register4",
        "description": "endpoint0: Register 4 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register5",
        "description": "endpoint0: Register 5 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register6",
        "description": "endpoint0: Register 6 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register7",
        "description": "endpoint0: Register 7 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register8",
        "description": "endpoint0: Register 8 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register9",
        "description": "endpoint0: Register 9 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register10",
        "description": "endpoint0: Register 10 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register11",
        "description": "endpoint0: Register 11 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register12",
        "description": "endpoint0: Register 12 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register13",
        "description": "endpoint0: Register 13 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register14",
        "description": "endpoint0: Register 14 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint0Register15",
        "description": "endpoint0: Register 15 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1SlaveID",
        "description": "Slaveendpoint1: Slave ID",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1FunctionCode",
        "description": "Slaveendpoint1: Function code",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1NumberOfRegisters",
        "description": "Slaveendpoint1: Number of registers",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1ExceptionCode",
        "description": "Slaveendpoint1: Exception code",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register0",
        "description": "Slaveendpoint1: Register 0 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register1",
        "description": "Slaveendpoint1: Register 1 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register2",
        "description": "Slaveendpoint1: Register 2 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register3",
        "description": "Slaveendpoint1: Register 3 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register4",
        "description": "Slaveendpoint1: Register 4 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register5",
        "description": "Slaveendpoint1: Register 5 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register6",
        "description": "Slaveendpoint1: Register 6 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register7",
        "description": "Slaveendpoint1: Register 7 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register8",
        "description": "Slaveendpoint1: Register 8 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register9",
        "description": "Slaveendpoint1: Register 9 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register10",
        "description": "Slaveendpoint1: Register 10 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register11",
        "description": "Slaveendpoint1: Register 11 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register12",
        "description": "Slaveendpoint1: Register 12 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register13",
        "description": "Slaveendpoint1: Register 13 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register14",
        "description": "Slaveendpoint1: Register 14 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint1Register15",
        "description": "Slaveendpoint1: Register 15 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2SlaveID",
        "description": "Slaveendpoint2: Slave ID",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2FunctionCode",
        "description": "Slaveendpoint2: Function code",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2NumberOfRegisters",
        "description": "Slaveendpoint2: Number of registers",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2ExceptionCode",
        "description": "Slaveendpoint2: Exception code",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register0",
        "description": "Slaveendpoint2: Register 0 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register1",
        "description": "Slaveendpoint2: Register 1 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register2",
        "description": "Slaveendpoint2: Register 2 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register3",
        "description": "Slaveendpoint2: Register 3 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register4",
        "description": "Slaveendpoint2: Register 4 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register5",
        "description": "Slaveendpoint2: Register 5 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register6",
        "description": "Slaveendpoint2: Register 6 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register7",
        "description": "Slaveendpoint2: Register 7 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register8",
        "description": "Slaveendpoint2: Register 8 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register9",
        "description": "Slaveendpoint2: Register 9 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register10",
        "description": "Slaveendpoint2: Register 10 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register11",
        "description": "Slaveendpoint2: Register 11 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register12",
        "description": "Slaveendpoint2: Register 12 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register13",
        "description": "Slaveendpoint2: Register 13 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register14",
        "description": "Slaveendpoint2: Register 14 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint2Register15",
        "description": "Slaveendpoint2: Register 15 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3SlaveID",
        "description": "Slaveendpoint3: Slave ID",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3FunctionCode",
        "description": "Slaveendpoint3: Function code",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3NumberOfRegisters",
        "description": "Slaveendpoint3: Number of registers",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3ExceptionCode",
        "description": "Slaveendpoint3: Exception code",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register0",
        "description": "Slaveendpoint3: Register 0 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register1",
        "description": "Slaveendpoint3: Register 1 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register2",
        "description": "Slaveendpoint3: Register 2 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register3",
        "description": "Slaveendpoint3: Register 3 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register4",
        "description": "Slaveendpoint3: Register 4 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register5",
        "description": "Slaveendpoint3: Register 5 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register6",
        "description": "Slaveendpoint3: Register 6 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register7",
        "description": "Slaveendpoint3: Register 7 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register8",
        "description": "Slaveendpoint3: Register 8 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register9",
        "description": "Slaveendpoint3: Register 9 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register10",
        "description": "Slaveendpoint3: Register 10 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register11",
        "description": "Slaveendpoint3: Register 11 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register12",
        "description": "Slaveendpoint3: Register 12 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register13",
        "description": "Slaveendpoint3: Register 13 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register14",
        "description": "Slaveendpoint3: Register 14 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"endpoint3Register15",
        "description": "Slaveendpoint3: Register 15 value",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      },
      {
        "name":"batteryVoltage",
        "description":"Battery voltage",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"mV",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "factor":1
          }
        }
      }
    ]
  },
  "lns_metadata":{
    "fields":[
      {
        "name":"rssi",
        "description":"Received RSSI",
        "data_type":"NUMBER",
        "numeric_type":"INT16",
        "access_mode":"R",
        "unit":"dBm",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "offset":1,
            "factor":1
          }
        }
      },
      {
        "name":"snr",
        "description":"Received SNR",
        "data_type":"NUMBER",
        "numeric_type":"INT16",
        "access_mode":"R",
        "unit":"dB",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "offset":2,
            "factor":1
          }
        }
      },
      {
        "name":"sf",
        "description":"Spreading Factor",
        "data_type":"NUMBER",
        "numeric_type":"UINT8",
        "access_mode":"R",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "offset":3,
            "factor":1
          }
        }
      },
      {
        "name":"minutesSinceLastRx",
        "description":"Minutes since last reception",
        "data_type":"NUMBER",
        "numeric_type":"UINT16",
        "access_mode":"R",
        "unit":"min",
        "protocol_specific":{
          "modbus":{
            "register_type":"input",
            "offset":4,
            "factor":1
          }
        }
      }
    ]
  }
}
```

{% endcode %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://enless.gitbook.io/centre-aide/ressources/gateway-lorawan/decodeurs-capteurs-tiers/watteco-modbus.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
