> For the complete documentation index, see [llms.txt](https://docs.mclimate.eu/mclimate-lorawan-devices/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.mclimate.eu/mclimate-lorawan-devices/devices/mclimate-fan-coil-thermostat-fct/decoding-and-bacnet-object-mapping/bacnet-codec-and-definition-files/milesight.md).

# Milesight

## Creation procedure

### **Network Server → Payload Codec → Custom Payload Codec**

Copy and paste each of the following in their respective fields:

#### Payload Decoder Function

```js
// DataCake
function Decoder(bytes, port) {
    var decoded = decodeUplink({ bytes: bytes, fPort: port }).data;
    return decoded;
}

// Milesight
function Decode(port, bytes) {
    var decoded = decodeUplink({ bytes: bytes, fPort: port }).data;
    return decoded;
}

// The Things Industries / Main
function decodeUplink(input) {
    try {
        var bytes = input.bytes;
        var data = {};

        function handleKeepalive(bytes, data) {
            var tempRaw = (bytes[1] << 8) | bytes[2];
            data.sensorTemperature = Number(((tempRaw - 400) / 10).toFixed(2));
            data.relativeHumidity  = Number(((bytes[3] * 100) / 256).toFixed(2));
            data.targetTemperature = ((bytes[4] << 8) | bytes[5]) / 10;
            data.operationalMode   = bytes[6];   // 0 Ventilation, 1 Heating, 2 Cooling
            data.displayedFanSpeed = bytes[7];   // 0 Auto .. 6 High
            data.actualFanSpeed    = bytes[8];   // 1..6 speeds, 7 Fan off
            data.valveStatus       = bytes[9];   // 0 closed, 1 open
            data.deviceStatus      = bytes[10];  // 0 off, 1 on
            return data;
        }

        function handleResponse(bytes, data) {
            var commands = bytes.map(function (byte) {
                return ("0" + byte.toString(16)).substr(-2);
            });
            commands = commands.slice(0, -11);
            var command_len = 0;

            commands.map(function (command, i) {
                switch (command) {
                    case '04': {
                        command_len = 2;
                        // Nibble-encoded: 0x25 => version 2.5 (FIX D5)
                        var hwByte = parseInt(commands[i + 1], 16);
                        var swByte = parseInt(commands[i + 2], 16);
                        data.devHwVer = ((hwByte >> 4) & 0x0F) + ((hwByte & 0x0F) / 10);
                        data.devSwVer = ((swByte >> 4) & 0x0F) + ((swByte & 0x0F) / 10);
                        break;
                    }
                    case '05': {
                        command_len = 1;
                        data.targetTemperatureStep = parseInt(commands[i + 1], 16) / 10;
                        break;
                    }
                    case '12': {
                        command_len = 1;
                        data.keepAliveTime = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case '14': {
                        command_len = 1;
                        // raw enum 0-5 (FIX D6): 0 none, 1 all, 2 onoff+mode,
                        // 3 onoff, 4 all-except-onoff, 5 mode
                        data.keysLock = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case '15': {
                        command_len = 2;
                        data.tempRangeMin = parseInt(commands[i + 1], 16);
                        data.tempRangeMax = parseInt(commands[i + 2], 16);
                        break;
                    }
                    case '17': {
                        command_len = 4;
                        data.heatingTempMin = parseInt(commands[i + 1], 16);
                        data.heatingTempMax = parseInt(commands[i + 2], 16);
                        data.coolingTempMin = parseInt(commands[i + 3], 16);
                        data.coolingTempMax = parseInt(commands[i + 4], 16);
                        break;
                    }
                    case '19': {
                        command_len = 1;
                        // raw*5 seconds -> minutes
                        data.joinRetryPeriod = parseInt(commands[i + 1], 16) * 5 / 60;
                        break;
                    }
                    case '1b': {
                        command_len = 1;
                        data.uplinkType = parseInt(commands[i + 1], 16); // 0 unconf, 1 conf
                        break;
                    }
                    case '1d': {
                        command_len = 2;
                        // plain numbers, 0 = disabled (FIX D9)
                        data.wdogConfirmed   = parseInt(commands[i + 1], 16);
                        data.wdogUnconfirmed = parseInt(commands[i + 2], 16);
                        break;
                    }
                    case '2f': {
                        command_len = 2; // FIX D1: 2 bytes, /10
                        data.targetTemperature =
                            (((parseInt(commands[i + 1], 16) << 8) | parseInt(commands[i + 2], 16))) / 10;
                        break;
                    }
                    case '30': {
                        command_len = 2; // FIX D2: 2 bytes, /10
                        data.manualTargetTemperature =
                            (((parseInt(commands[i + 1], 16) << 8) | parseInt(commands[i + 2], 16))) / 10;
                        break;
                    }
                    case '32': {
                        command_len = 1;
                        data.valveOpenCloseTime = parseInt(commands[i + 1], 16); // seconds
                        break;
                    }
                    case '34': {
                        command_len = 1;
                        data.displayRefreshPeriod = parseInt(commands[i + 1], 16); // hours
                        break;
                    }
                    case '36': {
                        command_len = 1;
                        data.extAutoTempControl = parseInt(commands[i + 1], 16); // 0/1
                        break;
                    }
                    case '3e': {
                        command_len = 2; // FIX D4: /10
                        data.extSensorTemperature =
                            (((parseInt(commands[i + 1], 16) << 8) | parseInt(commands[i + 2], 16))) / 10;
                        break;
                    }
                    case '41': {
                        command_len = 1;
                        data.currentTempVisibility = parseInt(commands[i + 1], 16); // 0 hidden, 1 shown
                        break;
                    }
                    case '43': {
                        command_len = 1;
                        data.humidityVisibility = parseInt(commands[i + 1], 16); // 0 hidden, 1 shown
                        break;
                    }
                    case '45': {
                        command_len = 1;
                        data.fanSpeed = parseInt(commands[i + 1], 16); // 0 Auto .. 6 High
                        break;
                    }
                    case '47': {
                        command_len = 1;
                        // 0 L/M/H, 1 L/M, 2 L, 3 deactivated
                        data.fanSpeedLimit = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case '49': {
                        command_len = 2;
                        data.ecmVoltageMin = parseInt(commands[i + 1], 16) / 10; // V
                        data.ecmVoltageMax = parseInt(commands[i + 2], 16) / 10; // V
                        break;
                    }
                    case '4b': {
                        command_len = 1;
                        data.ecmStartUpTime = parseInt(commands[i + 1], 16); // seconds
                        break;
                    }
                    case '4d': {
                        command_len = 1;
                        data.ecmRelay = parseInt(commands[i + 1], 16); // 0/1
                        break;
                    }
                    case '4f': {
                        command_len = 1;
                        data.frostProtection = parseInt(commands[i + 1], 16); // 0/1
                        break;
                    }
                    case '51': {
                        command_len = 2;
                        data.frostProtThreshold = parseInt(commands[i + 1], 16); // degC
                        data.frostProtSetpoint  = parseInt(commands[i + 2], 16); // degC
                        break;
                    }
                    case '53': {
                        command_len = 1;
                        data.operationalMode = parseInt(commands[i + 1], 16); // 0/1/2
                        break;
                    }
                    case '55': {
                        command_len = 1;
                        // 0 V/H/C, 1 V/H, 2 V/C
                        data.allowedOperModes = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case '57': {
                        command_len = 1;
                        data.coolingSetpointUnocc = parseInt(commands[i + 1], 16); // degC
                        break;
                    }
                    case '59': {
                        command_len = 1;
                        data.heatingSetpointUnocc = parseInt(commands[i + 1], 16); // degC
                        break;
                    }
                    case '5b': {
                        command_len = 2; // FIX D7: single signed value in degC
                        var sign = parseInt(commands[i + 1], 16) === 1 ? -1 : 1;
                        data.tempCompensation = sign * parseInt(commands[i + 2], 16) / 10;
                        break;
                    }
                    case '5d': {
                        command_len = 1;
                        // 0 Low, 1 Automatic, 2 Do not change
                        data.fanSpeedUnocc = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case '5f': {
                        command_len = 1;
                        data.autoChangeover = parseInt(commands[i + 1], 16); // 0/1
                        break;
                    }
                    case '61': {
                        command_len = 1;
                        data.application = parseInt(commands[i + 1], 16); // wiring diagram 0-6
                        break;
                    }
                    case '63': {
                        command_len = 1;
                        data.occFunction = parseInt(commands[i + 1], 16); // 0-10
                        break;
                    }
                    case '65': {
                        command_len = 2;
                        data.changeoverCoolThr = parseInt(commands[i + 1], 16); // degC
                        data.changeoverHeatThr = parseInt(commands[i + 2], 16); // degC
                        break;
                    }
                    case '67': {
                        command_len = 1;
                        data.deviceStatus = parseInt(commands[i + 1], 16); // 0/1
                        break;
                    }
                    case '69': {
                        command_len = 1;
                        // 0 last status, 1 on, 2 off
                        data.powerRecovery = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case '6b': {
                        command_len = 1;
                        data.deltaT1 = parseInt(commands[i + 1], 16) / 10; // degC
                        break;
                    }
                    case '6d': {
                        command_len = 2; // FIX D3: /10 (was *10)
                        data.deltaT2 = parseInt(commands[i + 1], 16) / 10; // degC
                        data.deltaT3 = parseInt(commands[i + 2], 16) / 10; // degC
                        break;
                    }
                    case '6e': {
                        command_len = 1;
                        data.frostProtStatus = parseInt(commands[i + 1], 16); // 0/1 running
                        break;
                    }
                    case '70': {
                        command_len = 1;
                        // 0 occupied, 1 unoccupied (set-point decrease)
                        data.occStatusSetpoint = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case '71': {
                        command_len = 1;
                        // 0 occupied, 1 unoccupied (fan off, valve closed)
                        data.occStatusFanValve = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case '72': {
                        command_len = 1;
                        data.dewPointStatus = parseInt(commands[i + 1], 16); // 0/1 reached
                        break;
                    }
                    case '73': {
                        command_len = 1;
                        data.filterAlarm = parseInt(commands[i + 1], 16); // 0/1
                        break;
                    }
                    case '74': {
                        command_len = 2;
                        // NTC temp 1degC res; FW>=2.1 sends 0xFF on NTC fault
                        data.changeoverNtcTemp  = parseInt(commands[i + 1], 16);
                        // 0 threshold not reached, 1 heating, 2 cooling
                        data.changeoverModeFlag = parseInt(commands[i + 2], 16);
                        break;
                    }
                    case '75': {
                        command_len = 1;
                        data.powerModuleStatus = parseInt(commands[i + 1], 16); // 0 OK, 1 error
                        break;
                    }
                    case '77': {
                        command_len = 4;
                        data.heatMinUnocc = parseInt(commands[i + 1], 16);
                        data.heatMaxUnocc = parseInt(commands[i + 2], 16);
                        data.coolMinUnocc = parseInt(commands[i + 3], 16);
                        data.coolMaxUnocc = parseInt(commands[i + 4], 16);
                        break;
                    }
                    case '79': {
                        command_len = 1;
                        data.fanOffDelayTime = parseInt(commands[i + 1], 16); // minutes
                        break;
                    }
                    case '7b': {
                        command_len = 1;
                        // 0 off at target, 1 keep running for a time, 2 continuous
                        data.additionalFanMode = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case '7c': {
                        command_len = 1;
                        // 0 none, 1 detection, 2 init, 3 measurement
                        data.intTempSensorError = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case '7d': {
                        command_len = 1;
                        // 0 none, 1 open, 2 short, 3 internal module, 4 measurement
                        data.extTempSensorError = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case '9b': {
                        command_len = 1;
                        // 0 EN, 1 FR, 2 DE (FW>=2.1), 3 ES (FW>=2.1)
                        data.uiLanguage = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case 'a4': {
                        command_len = 1; // FIX D8 (was missing)
                        // 0 EU868, 1 AS923, 2 AU915, 3 US915
                        data.lorawanRegion = parseInt(commands[i + 1], 16);
                        break;
                    }
                    case 'a0': {
                        command_len = 4;
                        data.fuotaAddress =
                            (parseInt(commands[i + 1], 16) << 24) |
                            (parseInt(commands[i + 2], 16) << 16) |
                            (parseInt(commands[i + 3], 16) << 8)  |
                             parseInt(commands[i + 4], 16);
                        break;
                    }
                    default:
                        break;
                }
                commands.splice(i, command_len);
            });
            return data;
        }

        if (bytes[0] === 1) {
            data = handleKeepalive(bytes, data);
        } else {
            data = handleResponse(bytes, data);
            bytes = bytes.slice(-11);
            data = handleKeepalive(bytes, data);
        }
        return { data: data };
    } catch (e) {
        throw new Error('Unhandled data');
    }
}

```

#### Payload Encoder Function

```js
function asNumber(value, fallback) {
  if (value === null || value === undefined || value === "") return fallback;
  if (typeof value === "number") return value;
  var n = Number(value);
  return isNaN(n) ? fallback : n;
}

function asBool(value, fallback) {
  if (value === null || value === undefined || value === "") return fallback;
  if (typeof value === "boolean") return value;
  if (typeof value === "number") return value !== 0;
  if (typeof value === "string") {
    var v = value.trim().toLowerCase();
    if (v === "true" || v === "on" || v === "1" || v === "yes") return true;
    if (v === "false" || v === "off" || v === "0" || v === "no") return false;
  }
  return fallback;
}

function parseMaybeJson(value) {
  if (value && typeof value === "object") return value;
  if (typeof value !== "string") return value;
  try {
    return JSON.parse(value);
  } catch (e) {
    return value;
  }
}

function normalizeCall(portOrInput, maybeInput) {
  var fPort = 1;
  var input = {};
  // CRITICAL: JS passes a 2nd undefined arg on single-arg calls; without the
  // !== undefined guard every UG65-style Encode({fPort,data}) call is treated
  // as legacy and emits an EMPTY downlink (16ASPM root cause).
  var legacy = arguments.length >= 2 && maybeInput !== undefined && maybeInput !== null;

  if (legacy) {
    fPort = portOrInput || 1;
    input = maybeInput || {};
  } else {
    input = portOrInput || {};
    fPort = input.fPort || input.port || 1;
  }

  if (!input.hasOwnProperty("data")) {
    input = { data: input };
  }

  return { legacy: legacy, fPort: fPort, data: input.data || {} };
}

// simple 1-byte GET commands: key -> opcode
var GET_OPCODES = {
  getDeviceVersions:               0x04,
  getTargetTemperatureStep:        0x05,
  getKeepAliveTime:                0x12,
  getKeysLock:                     0x14,
  getTemperatureRange:             0x15,
  getHeatingCoolingTargetTempRanges: 0x17,
  getJoinRetryPeriod:              0x19,
  getUplinkType:                   0x1B,
  getWatchDogParams:               0x1D,
  getTargetTemperature:            0x2F, // FIX E7
  getValveOpenCloseTime:           0x32,
  getDisplayRefreshPeriod:         0x34,
  getExtAutoTempControl:           0x36,
  getExtSensorTemperature:         0x3E,
  getCurrentTempVisibility:        0x41,
  getHumidityVisibility:           0x43,
  getFanSpeed:                     0x45,
  getFanSpeedLimit:                0x47,
  getEcmVoltageRange:              0x49, // FIX E5
  getEcmStartUpTime:               0x4B, // FIX E6
  getEcmRelay:                     0x4D,
  getFrostProtection:              0x4F, // FIX E4
  getFrostProtectionSettings:      0x51,
  getOperationalMode:              0x53,
  getAllowedOperModes:             0x55,
  getCoolingSetpointUnocc:         0x57,
  getHeatingSetpointUnocc:         0x59,
  getTempCompensation:             0x5B,
  getFanSpeedUnocc:                0x5D,
  getAutoChangeover:               0x5F,
  getApplication:                  0x61,
  getOccFunction:                  0x63,
  getChangeoverThresholds:         0x65,
  getDeviceStatus:                 0x67,
  getPowerRecovery:                0x69,
  getDeltaT1:                      0x6B,
  getDeltaT2and3:                  0x6D,
  getFrostProtStatus:              0x6E,
  getOccStatusSetpoint:            0x70,
  getOccStatusFanValve:            0x71,
  getDewPointStatus:               0x72,
  getFilterAlarm:                  0x73,
  getChangeoverMode:               0x74,
  getPowerModuleStatus:            0x75,
  getTargetTempRangesUnocc:        0x77,
  getFanOffDelayTime:              0x79,
  getAdditionalFanMode:            0x7B,
  getIntTempSensorError:           0x7C,
  getExtTempSensorError:           0x7D,
  getUiLanguage:                   0x9B,
  getLoRaWANRegion:                0xA4
};

function encodeDownlink(input) {
  var bytes = [];
  var data = (input && input.data) || {};
  var key, i, obj, v;

  for (key in data) {
    if (!data.hasOwnProperty(key)) continue;

    // GET triggers (BO objects write active/inactive; any truthy write fires)
    if (GET_OPCODES.hasOwnProperty(key)) {
      bytes.push(GET_OPCODES[key]);
      continue;
    }

    switch (key) {
      case "setKeepAlive":
        bytes.push(0x02);
        bytes.push(Math.round(asNumber(data[key], 10)) & 0xFF); // minutes
        break;

      case "setTargetTemperatureStep": // FIX E9: x10
        bytes.push(0x03);
        bytes.push(Math.round(asNumber(data[key], 0.5) * 10) & 0xFF);
        break;

      case "setKeysLock": // 0 none,1 all,2 onoff+mode,3 onoff,4 all-but-onoff,5 mode
        bytes.push(0x07);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setTemperatureRange": // 0x08 <min><max>, whole degC (FW<=1.5, >=1.8)
        obj = parseMaybeJson(data[key]) || {};
        bytes.push(0x08);
        bytes.push(Math.round(asNumber(obj.min, 5)) & 0xFF);
        bytes.push(Math.round(asNumber(obj.max, 30)) & 0xFF);
        break;

      case "setJoinRetryPeriod": // minutes -> raw*5s  (FIX E1)
        bytes.push(0x10);
        bytes.push(Math.round((asNumber(data[key], 10) * 60) / 5) & 0xFF);
        break;

      case "setUplinkType": // 0 unconfirmed, 1 confirmed
        bytes.push(0x11);
        bytes.push(asBool(data[key], false) ? 1 : 0);
        break;

      case "setHeatingCoolingTargetTempRanges": // 0x16, FW>=1.6
        obj = parseMaybeJson(data[key]) || {};
        bytes.push(0x16);
        bytes.push(Math.round(asNumber(obj.heatingTempMin, 5))  & 0xFF);
        bytes.push(Math.round(asNumber(obj.heatingTempMax, 30)) & 0xFF);
        bytes.push(Math.round(asNumber(obj.coolingTempMin, 5))  & 0xFF);
        bytes.push(Math.round(asNumber(obj.coolingTempMax, 30)) & 0xFF);
        break;

      case "setWatchDogParams": // FIX E2
        obj = parseMaybeJson(data[key]) || {};
        bytes.push(0x1C);
        bytes.push(Math.round(asNumber(obj.confirmedUplinks, 2))    & 0xFF);
        bytes.push(Math.round(asNumber(obj.unconfirmedUplinks, 24)) & 0xFF);
        break;

      case "setTargetTemperature": // degC -> x10, 2 bytes BE
        v = Math.round(asNumber(data[key], 0) * 10);
        bytes.push(0x2E);
        bytes.push((v >> 8) & 0xFF);
        bytes.push(v & 0xFF);
        break;

      case "setValveOpenCloseTime": // seconds 1..255 (apps 01/05 only)
        bytes.push(0x31);
        bytes.push(Math.round(asNumber(data[key], 160)) & 0xFF);
        break;

      case "setDisplayRefreshPeriod": // hours 1..24
        bytes.push(0x33);
        bytes.push(Math.round(asNumber(data[key], 12)) & 0xFF);
        break;

      case "setExtAutoTempControl": // 0 deactivate, 1 activate
        // WARNING (docs): set the external temperature (3B/3C) BEFORE
        // activating, otherwise the FCT regulates against a 0 degC reading.
        bytes.push(0x35);
        bytes.push(asBool(data[key], false) ? 1 : 0);
        break;

      case "setExtSensorTemperatureCoarse": // 0x3B, whole degC 1..99
        bytes.push(0x3B);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setExtSensorTemperature": // 0x3C, degC -> x10, 2 bytes BE, 0.1..99.9
        v = Math.round(asNumber(data[key], 0) * 10);
        bytes.push(0x3C);
        bytes.push((v >> 8) & 0xFF);
        bytes.push(v & 0xFF);
        break;

      case "setCurrentTempVisibility": // 0 hide, 1 show
        bytes.push(0x40);
        bytes.push(asBool(data[key], true) ? 1 : 0);
        break;

      case "setHumidityVisibility": // 0 hide, 1 show
        bytes.push(0x42);
        bytes.push(asBool(data[key], true) ? 1 : 0);
        break;

      case "setFanSpeed": // 0 Auto; 1..6 (3-speed: 2 Low, 4 Med, 6 High)
        bytes.push(0x44);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setFanSpeedLimit": // 0 L/M/H, 1 L/M, 2 L, 3 deactivated (buttons only)
        bytes.push(0x46);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setEcmVoltageRange": // volts -> x10 (ADVANCED — docs: use with caution)
        obj = parseMaybeJson(data[key]) || {};
        bytes.push(0x48);
        bytes.push(Math.round(asNumber(obj.min, 3)  * 10) & 0xFF);
        bytes.push(Math.round(asNumber(obj.max, 10) * 10) & 0xFF);
        break;

      case "setEcmStartUpTime": // seconds 0..20, 0 = off
        bytes.push(0x4A);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setEcmRelay": // 0 deactivated, 1 activated
        bytes.push(0x4C);
        bytes.push(asBool(data[key], true) ? 1 : 0);
        break;

      case "setFrostProtection": // FIX E3: opcode 0x4E
        bytes.push(0x4E);
        bytes.push(asBool(data[key], true) ? 1 : 0);
        break;

      case "setFrostProtectionSettings": // 0x50 <threshold><setpoint> whole degC
        obj = parseMaybeJson(data[key]) || {};
        bytes.push(0x50);
        bytes.push(Math.round(asNumber(obj.threshold, 4)) & 0xFF);
        bytes.push(Math.round(asNumber(obj.setpoint, 5))  & 0xFF);
        break;

      case "setOperationalMode": // 0 Ventilation, 1 Heating, 2 Cooling
        bytes.push(0x52);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setAllowedOperModes": // 0 V/H/C, 1 V/H, 2 V/C
        bytes.push(0x54);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setCoolingSetpointUnocc": // whole degC
        bytes.push(0x56);
        bytes.push(Math.round(asNumber(data[key], 25)) & 0xFF);
        break;

      case "setHeatingSetpointUnocc": // whole degC
        bytes.push(0x58);
        bytes.push(Math.round(asNumber(data[key], 17)) & 0xFF);
        break;

      case "setTempCompensation": // signed degC -> <sign><|v|x10>
        v = asNumber(data[key], 0);
        bytes.push(0x5A);
        bytes.push(v < 0 ? 0x01 : 0x00);
        bytes.push(Math.round(Math.abs(v) * 10) & 0xFF);
        break;

      case "setFanSpeedUnocc": // 0 Low, 1 Automatic, 2 Do not change
        bytes.push(0x5C);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setAutoChangeover": // 0 deactivated, 1 activated (apps 00/01/06)
        bytes.push(0x5E);
        bytes.push(asBool(data[key], false) ? 1 : 0);
        break;

      case "setApplication": // wiring diagram 0..6 (6: FW>=1.9)
        bytes.push(0x60);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setOccFunction": // 0..10 (8,9 GET-only; 10 FW>=1.9)
        bytes.push(0x62);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setChangeoverThresholds": // 0x64 <cooling 5..20><heating 30..60>
        obj = parseMaybeJson(data[key]) || {};
        bytes.push(0x64);
        bytes.push(Math.round(asNumber(obj.cooling, 15)) & 0xFF);
        bytes.push(Math.round(asNumber(obj.heating, 40)) & 0xFF);
        break;

      case "setDeviceStatus": // 0 off, 1 on
        bytes.push(0x66);
        bytes.push(asBool(data[key], false) ? 1 : 0);
        break;

      case "setPowerRecovery": // 0 last, 1 on, 2 off
        bytes.push(0x68);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setDeltaT1": // FIX E8: degC -> x10 (0.5..10, 0.5 res)
        bytes.push(0x6A);
        bytes.push(Math.round(asNumber(data[key], 1) * 10) & 0xFF);
        break;

      case "setDeltaTemperature2and3": // degC -> x10 each
        obj = parseMaybeJson(data[key]) || {};
        bytes.push(0x6C);
        bytes.push(Math.round(asNumber(obj.deltaT2, 1) * 10) & 0xFF);
        bytes.push(Math.round(asNumber(obj.deltaT3, 1) * 10) & 0xFF);
        break;

      case "setTargetTempRangesUnoccupied": // 0x76, FW>=1.6, 3-speed apps, whole degC
        obj = parseMaybeJson(data[key]) || {};
        bytes.push(0x76);
        bytes.push(Math.round(asNumber(obj.heatingTempMin, 5))  & 0xFF);
        bytes.push(Math.round(asNumber(obj.heatingTempMax, 30)) & 0xFF);
        bytes.push(Math.round(asNumber(obj.coolingTempMin, 5))  & 0xFF);
        bytes.push(Math.round(asNumber(obj.coolingTempMax, 30)) & 0xFF);
        break;

      case "setFanOffDelayTime": // minutes 1..255, FW>=1.6
        bytes.push(0x78);
        bytes.push(Math.round(asNumber(data[key], 1)) & 0xFF);
        break;

      case "setAdditionalFanMode": // 0 off-at-target, 1 run-after, 2 continuous
        bytes.push(0x7A);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "setUiLanguage": // 0 EN, 1 FR, 2 DE (FW>=2.1), 3 ES (FW>=2.1)
        bytes.push(0x9A);
        bytes.push(Math.round(asNumber(data[key], 0)) & 0xFF);
        break;

      case "restartDevice": // 0xA5, FW>=1.8 — restarts + rejoins after ~20 s
        if (asBool(data[key], false)) bytes.push(0xA5);
        break;

      case "sendCustomHexCommand":
        var hexStr = String(data[key] || "").replace(/\s+/g, "");
        for (i = 0; i < hexStr.length; i += 2) {
          var b = parseInt(hexStr.substr(i, 2), 16);
          if (!isNaN(b)) bytes.push(b);
        }
        break;

      default:
        break;
    }
  }

  return {
    bytes: bytes,
    fPort: (input && input.fPort) || 1,
    warnings: [],
    errors: []
  };
}

function Encode(portOrInput, maybeInput) {
  var call = normalizeCall(portOrInput, maybeInput);
  var result = encodeDownlink({ fPort: call.fPort, data: call.data });

  // legacy style: Encode(port, input) -> raw bytes
  if (call.legacy) {
    return result.bytes;
  }
  // UG65/UG67 style: Encode(input) -> object
  return result;
}

function Encoder(portOrInput, maybeInput) {
  return Encode(portOrInput, maybeInput);
}

function decodeDownlink(input) {
  return {
    data: { bytes: input.bytes },
    warnings: [],
    errors: []
  };
}

```

#### Object Mapping Function (JSON Function)

```json
{
    "object": [
        {
            "id": "sensorTemperature",
            "name": "Temperature",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "relativeHumidity",
            "name": "Humidity",
            "value": "",
            "unit": "%",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 29,
            "bacnet_unit_type": "UNITS_PERCENT_RELATIVE_HUMIDITY"
        },
        {
            "id": "targetTemperature",
            "name": "Target Temp",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "operationalMode",
            "name": "Operational Mode",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Ventilation"
                },
                {
                    "value": 1,
                    "name": "Heating"
                },
                {
                    "value": 2,
                    "name": "Cooling"
                }
            ]
        },
        {
            "id": "displayedFanSpeed",
            "name": "Displayed Fan Spd",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Auto"
                },
                {
                    "value": 1,
                    "name": "Speed 1"
                },
                {
                    "value": 2,
                    "name": "Low"
                },
                {
                    "value": 3,
                    "name": "Speed 3"
                },
                {
                    "value": 4,
                    "name": "Medium"
                },
                {
                    "value": 5,
                    "name": "Speed 5"
                },
                {
                    "value": 6,
                    "name": "High"
                }
            ]
        },
        {
            "id": "actualFanSpeed",
            "name": "Actual Fan Spd",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 1,
                    "name": "Speed 1"
                },
                {
                    "value": 2,
                    "name": "Low"
                },
                {
                    "value": 3,
                    "name": "Speed 3"
                },
                {
                    "value": 4,
                    "name": "Medium"
                },
                {
                    "value": 5,
                    "name": "Speed 5"
                },
                {
                    "value": 6,
                    "name": "High"
                },
                {
                    "value": 7,
                    "name": "Fan off"
                }
            ]
        },
        {
            "id": "valveStatus",
            "name": "Valve Status",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "deviceStatus",
            "name": "Device Status",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "devHwVer",
            "name": "HW Version",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "devSwVer",
            "name": "SW Version",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "targetTemperatureStep",
            "name": "Target Temp Step",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "keepAliveTime",
            "name": "KeepAlive",
            "value": "",
            "unit": "min",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 72,
            "bacnet_unit_type": "UNITS_MINUTES"
        },
        {
            "id": "keysLock",
            "name": "Keys Lock",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "None"
                },
                {
                    "value": 1,
                    "name": "All"
                },
                {
                    "value": 2,
                    "name": "OnOff+Mode"
                },
                {
                    "value": 3,
                    "name": "OnOff"
                },
                {
                    "value": 4,
                    "name": "All except OnOff"
                },
                {
                    "value": 5,
                    "name": "Mode"
                }
            ]
        },
        {
            "id": "tempRangeMin",
            "name": "T Range Min",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "tempRangeMax",
            "name": "T Range Max",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "heatingTempMin",
            "name": "Heat T Min",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "heatingTempMax",
            "name": "Heat T Max",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "coolingTempMin",
            "name": "Cool T Min",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "coolingTempMax",
            "name": "Cool T Max",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "joinRetryPeriod",
            "name": "Join Retry",
            "value": "",
            "unit": "min",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 72,
            "bacnet_unit_type": "UNITS_MINUTES"
        },
        {
            "id": "uplinkType",
            "name": "Uplink Type",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Unconfirmed"
                },
                {
                    "value": 1,
                    "name": "Confirmed"
                }
            ]
        },
        {
            "id": "wdogConfirmed",
            "name": "WDP-C",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "wdogUnconfirmed",
            "name": "WDP-UC",
            "value": "",
            "unit": "h",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 71,
            "bacnet_unit_type": "UNITS_HOURS"
        },
        {
            "id": "manualTargetTemperature",
            "name": "Manual Target",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "valveOpenCloseTime",
            "name": "Valve O/C Time",
            "value": "",
            "unit": "s",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 73,
            "bacnet_unit_type": "UNITS_SECONDS"
        },
        {
            "id": "displayRefreshPeriod",
            "name": "Disp Refresh",
            "value": "",
            "unit": "h",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 71,
            "bacnet_unit_type": "UNITS_HOURS"
        },
        {
            "id": "extAutoTempControl",
            "name": "Ext Auto Ctrl",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "extSensorTemperature",
            "name": "Ext Sensor Temp",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "currentTempVisibility",
            "name": "Temp Visible",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "humidityVisibility",
            "name": "Humidity Visible",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "fanSpeed",
            "name": "Fan Speed",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Auto"
                },
                {
                    "value": 1,
                    "name": "Speed 1"
                },
                {
                    "value": 2,
                    "name": "Low"
                },
                {
                    "value": 3,
                    "name": "Speed 3"
                },
                {
                    "value": 4,
                    "name": "Medium"
                },
                {
                    "value": 5,
                    "name": "Speed 5"
                },
                {
                    "value": 6,
                    "name": "High"
                }
            ]
        },
        {
            "id": "fanSpeedLimit",
            "name": "Fan Speed Limit",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Low/Med/High"
                },
                {
                    "value": 1,
                    "name": "Low/Med"
                },
                {
                    "value": 2,
                    "name": "Low"
                },
                {
                    "value": 3,
                    "name": "Deactivated"
                }
            ]
        },
        {
            "id": "ecmVoltageMin",
            "name": "ECM V Min",
            "value": "",
            "unit": "V",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 5,
            "bacnet_unit_type": "UNITS_VOLTS"
        },
        {
            "id": "ecmVoltageMax",
            "name": "ECM V Max",
            "value": "",
            "unit": "V",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 5,
            "bacnet_unit_type": "UNITS_VOLTS"
        },
        {
            "id": "ecmStartUpTime",
            "name": "ECM StartUp",
            "value": "",
            "unit": "s",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 73,
            "bacnet_unit_type": "UNITS_SECONDS"
        },
        {
            "id": "ecmRelay",
            "name": "ECM Relay",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "frostProtection",
            "name": "Frost Prot",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "frostProtThreshold",
            "name": "Frost Thresh",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "frostProtSetpoint",
            "name": "Frost Setpoint",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "allowedOperModes",
            "name": "Allowed Modes",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Vent/Heat/Cool"
                },
                {
                    "value": 1,
                    "name": "Vent/Heat"
                },
                {
                    "value": 2,
                    "name": "Vent/Cool"
                }
            ]
        },
        {
            "id": "coolingSetpointUnocc",
            "name": "Cool SP Unocc",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "heatingSetpointUnocc",
            "name": "Heat SP Unocc",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "tempCompensation",
            "name": "Temp Compensation",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "fanSpeedUnocc",
            "name": "Fan Spd Unocc",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Low"
                },
                {
                    "value": 1,
                    "name": "Automatic"
                },
                {
                    "value": 2,
                    "name": "Do not change"
                }
            ]
        },
        {
            "id": "autoChangeover",
            "name": "Auto Changeover",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "application",
            "name": "Application",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "App 0 2p 3sp"
                },
                {
                    "value": 1,
                    "name": "App 1 2p 3w 3sp"
                },
                {
                    "value": 2,
                    "name": "App 2 4p 3w 3sp"
                },
                {
                    "value": 3,
                    "name": "App 3 4p ECM"
                },
                {
                    "value": 4,
                    "name": "App 4 2p ECM"
                },
                {
                    "value": 5,
                    "name": "App 5 2p 3w ECM"
                },
                {
                    "value": 6,
                    "name": "App 6 2p heater"
                }
            ]
        },
        {
            "id": "occFunction",
            "name": "OCC Function",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Occ open (SP)"
                },
                {
                    "value": 1,
                    "name": "Occ closed (SP)"
                },
                {
                    "value": 2,
                    "name": "Occ open (fan/valve)"
                },
                {
                    "value": 3,
                    "name": "Occ closed (fan/valve)"
                },
                {
                    "value": 4,
                    "name": "DewPt closed"
                },
                {
                    "value": 5,
                    "name": "DewPt open"
                },
                {
                    "value": 6,
                    "name": "Filter closed"
                },
                {
                    "value": 7,
                    "name": "Filter open"
                },
                {
                    "value": 8,
                    "name": "NTC changeover"
                },
                {
                    "value": 9,
                    "name": "ECM fan"
                },
                {
                    "value": 10,
                    "name": "NTC control"
                }
            ]
        },
        {
            "id": "changeoverCoolThr",
            "name": "ChgOver Cool Thr",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "changeoverHeatThr",
            "name": "ChgOver Heat Thr",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "powerRecovery",
            "name": "Power Recovery",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Last status"
                },
                {
                    "value": 1,
                    "name": "On"
                },
                {
                    "value": 2,
                    "name": "Off"
                }
            ]
        },
        {
            "id": "deltaT1",
            "name": "Delta T1",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "deltaT2",
            "name": "Delta T2",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "deltaT3",
            "name": "Delta T3",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "frostProtStatus",
            "name": "Frost Running",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "occStatusSetpoint",
            "name": "Occ Status SP",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "occStatusFanValve",
            "name": "Occ Status FV",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "dewPointStatus",
            "name": "Dew Point",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "filterAlarm",
            "name": "Filter Alarm",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "changeoverNtcTemp",
            "name": "ChgOver NTC T",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "changeoverModeFlag",
            "name": "ChgOver Mode",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Not reached"
                },
                {
                    "value": 1,
                    "name": "Heating"
                },
                {
                    "value": 2,
                    "name": "Cooling"
                }
            ]
        },
        {
            "id": "powerModuleStatus",
            "name": "Pwr Module Status",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS"
        },
        {
            "id": "heatMinUnocc",
            "name": "Heat Min Unocc",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "heatMaxUnocc",
            "name": "Heat Max Unocc",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "coolMinUnocc",
            "name": "Cool Min Unocc",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "coolMaxUnocc",
            "name": "Cool Max Unocc",
            "value": "",
            "unit": "°C",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "fanOffDelayTime",
            "name": "Fan Off Delay",
            "value": "",
            "unit": "min",
            "access_mode": "R",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_input_object",
            "bacnet_unit_type_id": 72,
            "bacnet_unit_type": "UNITS_MINUTES"
        },
        {
            "id": "additionalFanMode",
            "name": "Add Fan Mode",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Off at target"
                },
                {
                    "value": 1,
                    "name": "Run after target"
                },
                {
                    "value": 2,
                    "name": "Continuous"
                }
            ]
        },
        {
            "id": "intTempSensorError",
            "name": "Int Sensor Err",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "No error"
                },
                {
                    "value": 1,
                    "name": "Detection"
                },
                {
                    "value": 2,
                    "name": "Initialization"
                },
                {
                    "value": 3,
                    "name": "Measurement"
                }
            ]
        },
        {
            "id": "extTempSensorError",
            "name": "Ext Sensor Err",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "No error"
                },
                {
                    "value": 1,
                    "name": "Open circuit"
                },
                {
                    "value": 2,
                    "name": "Short circuit"
                },
                {
                    "value": 3,
                    "name": "Internal module"
                },
                {
                    "value": 4,
                    "name": "Measurement"
                }
            ]
        },
        {
            "id": "uiLanguage",
            "name": "UI Language",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "English"
                },
                {
                    "value": 1,
                    "name": "French"
                },
                {
                    "value": 2,
                    "name": "German"
                },
                {
                    "value": 3,
                    "name": "Spanish"
                }
            ]
        },
        {
            "id": "lorawanRegion",
            "name": "LoRaWAN Region",
            "value": "",
            "unit": "",
            "access_mode": "R",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_input_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "EU868"
                },
                {
                    "value": 1,
                    "name": "AS923"
                },
                {
                    "value": 2,
                    "name": "AU915"
                },
                {
                    "value": 3,
                    "name": "US915"
                }
            ]
        },
        {
            "id": "setKeepAlive",
            "name": "Set KeepAlv",
            "value": "",
            "unit": "min",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 72,
            "bacnet_unit_type": "UNITS_MINUTES"
        },
        {
            "id": "setTargetTemperature",
            "name": "Set Target T",
            "value": "",
            "unit": "°C",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "setTargetTemperatureStep",
            "name": "Set T Step",
            "value": "",
            "unit": "°C",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "setJoinRetryPeriod",
            "name": "Set JoinRt",
            "value": "",
            "unit": "min",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 72,
            "bacnet_unit_type": "UNITS_MINUTES"
        },
        {
            "id": "setValveOpenCloseTime",
            "name": "Set Valve OC",
            "value": "",
            "unit": "s",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 73,
            "bacnet_unit_type": "UNITS_SECONDS"
        },
        {
            "id": "setDisplayRefreshPeriod",
            "name": "Set DispRefr",
            "value": "",
            "unit": "h",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 71,
            "bacnet_unit_type": "UNITS_HOURS"
        },
        {
            "id": "setExtSensorTemperature",
            "name": "Set Ext T",
            "value": "",
            "unit": "°C",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "setCoolingSetpointUnocc",
            "name": "Set CoolSP U",
            "value": "",
            "unit": "°C",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "setHeatingSetpointUnocc",
            "name": "Set HeatSP U",
            "value": "",
            "unit": "°C",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "setTempCompensation",
            "name": "Set T Comp",
            "value": "",
            "unit": "°C",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "setEcmStartUpTime",
            "name": "Set ECM Start",
            "value": "",
            "unit": "s",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 73,
            "bacnet_unit_type": "UNITS_SECONDS"
        },
        {
            "id": "setDeltaT1",
            "name": "Set Delta T1",
            "value": "",
            "unit": "°C",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "FLOAT",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 62,
            "bacnet_unit_type": "UNITS_DEGREES_CELSIUS"
        },
        {
            "id": "setFanOffDelayTime",
            "name": "Set FanOffDly",
            "value": "",
            "unit": "min",
            "access_mode": "W",
            "data_type": "NUMBER",
            "value_type": "UINT8",
            "bacnet_type": "analog_output_object",
            "bacnet_unit_type_id": 72,
            "bacnet_unit_type": "UNITS_MINUTES"
        },
        {
            "id": "setUplinkType",
            "name": "Set Uplink",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Unconfirmed"
                },
                {
                    "value": 1,
                    "name": "Confirmed"
                }
            ]
        },
        {
            "id": "setExtAutoTempControl",
            "name": "Set ExtCtrl",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Off"
                },
                {
                    "value": 1,
                    "name": "On"
                }
            ]
        },
        {
            "id": "setCurrentTempVisibility",
            "name": "Set T Visible",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Hide"
                },
                {
                    "value": 1,
                    "name": "Show"
                }
            ]
        },
        {
            "id": "setHumidityVisibility",
            "name": "Set RH Visible",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Hide"
                },
                {
                    "value": 1,
                    "name": "Show"
                }
            ]
        },
        {
            "id": "setEcmRelay",
            "name": "Set ECM Relay",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Off"
                },
                {
                    "value": 1,
                    "name": "On"
                }
            ]
        },
        {
            "id": "setFrostProtection",
            "name": "Set FrostProt",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Off"
                },
                {
                    "value": 1,
                    "name": "On"
                }
            ]
        },
        {
            "id": "setAutoChangeover",
            "name": "Set ChgOver",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Off"
                },
                {
                    "value": 1,
                    "name": "On"
                }
            ]
        },
        {
            "id": "setDeviceStatus",
            "name": "Set Device",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Off"
                },
                {
                    "value": 1,
                    "name": "On"
                }
            ]
        },
        {
            "id": "restartDevice",
            "name": "Restart Dev",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "setKeysLock",
            "name": "Set KeysLock",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "None"
                },
                {
                    "value": 1,
                    "name": "All"
                },
                {
                    "value": 2,
                    "name": "OnOff+Mode"
                },
                {
                    "value": 3,
                    "name": "OnOff"
                },
                {
                    "value": 4,
                    "name": "All except OnOff"
                },
                {
                    "value": 5,
                    "name": "Mode"
                }
            ]
        },
        {
            "id": "setFanSpeed",
            "name": "Set FanSpeed",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Auto"
                },
                {
                    "value": 1,
                    "name": "Speed 1"
                },
                {
                    "value": 2,
                    "name": "Low"
                },
                {
                    "value": 3,
                    "name": "Speed 3"
                },
                {
                    "value": 4,
                    "name": "Medium"
                },
                {
                    "value": 5,
                    "name": "Speed 5"
                },
                {
                    "value": 6,
                    "name": "High"
                }
            ]
        },
        {
            "id": "setFanSpeedLimit",
            "name": "Set FanLimit",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Low/Med/High"
                },
                {
                    "value": 1,
                    "name": "Low/Med"
                },
                {
                    "value": 2,
                    "name": "Low"
                },
                {
                    "value": 3,
                    "name": "Deactivated"
                }
            ]
        },
        {
            "id": "setOperationalMode",
            "name": "Set OperMode",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Ventilation"
                },
                {
                    "value": 1,
                    "name": "Heating"
                },
                {
                    "value": 2,
                    "name": "Cooling"
                }
            ]
        },
        {
            "id": "setAllowedOperModes",
            "name": "Set Allowed",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Vent/Heat/Cool"
                },
                {
                    "value": 1,
                    "name": "Vent/Heat"
                },
                {
                    "value": 2,
                    "name": "Vent/Cool"
                }
            ]
        },
        {
            "id": "setFanSpeedUnocc",
            "name": "Set FanUnocc",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Low"
                },
                {
                    "value": 1,
                    "name": "Automatic"
                },
                {
                    "value": 2,
                    "name": "Do not change"
                }
            ]
        },
        {
            "id": "setApplication",
            "name": "Set App",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "App 0 2p 3sp"
                },
                {
                    "value": 1,
                    "name": "App 1 2p 3w 3sp"
                },
                {
                    "value": 2,
                    "name": "App 2 4p 3w 3sp"
                },
                {
                    "value": 3,
                    "name": "App 3 4p ECM"
                },
                {
                    "value": 4,
                    "name": "App 4 2p ECM"
                },
                {
                    "value": 5,
                    "name": "App 5 2p 3w ECM"
                },
                {
                    "value": 6,
                    "name": "App 6 2p heater"
                }
            ]
        },
        {
            "id": "setOccFunction",
            "name": "Set OccFunc",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Occ open (SP)"
                },
                {
                    "value": 1,
                    "name": "Occ closed (SP)"
                },
                {
                    "value": 2,
                    "name": "Occ open (fan/valve)"
                },
                {
                    "value": 3,
                    "name": "Occ closed (fan/valve)"
                },
                {
                    "value": 4,
                    "name": "DewPt closed"
                },
                {
                    "value": 5,
                    "name": "DewPt open"
                },
                {
                    "value": 6,
                    "name": "Filter closed"
                },
                {
                    "value": 7,
                    "name": "Filter open"
                },
                {
                    "value": 8,
                    "name": "NTC changeover"
                },
                {
                    "value": 9,
                    "name": "ECM fan"
                },
                {
                    "value": 10,
                    "name": "NTC control"
                }
            ]
        },
        {
            "id": "setPowerRecovery",
            "name": "Set PwrRec",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Last status"
                },
                {
                    "value": 1,
                    "name": "On"
                },
                {
                    "value": 2,
                    "name": "Off"
                }
            ]
        },
        {
            "id": "setAdditionalFanMode",
            "name": "Set AddFan",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Off at target"
                },
                {
                    "value": 1,
                    "name": "Run after target"
                },
                {
                    "value": 2,
                    "name": "Continuous"
                }
            ]
        },
        {
            "id": "setUiLanguage",
            "name": "Set Language",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "ENUM",
            "value_type": "UINT8",
            "bacnet_type": "multistate_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "English"
                },
                {
                    "value": 1,
                    "name": "French"
                },
                {
                    "value": 2,
                    "name": "German"
                },
                {
                    "value": 3,
                    "name": "Spanish"
                }
            ]
        },
        {
            "id": "setTemperatureRange",
            "name": "Set T Range",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "TEXT",
            "value_type": "STRING",
            "bacnet_type": "character_string_value_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "max_length": 128
        },
        {
            "id": "setHeatingCoolingTargetTempRanges",
            "name": "Set HC Ranges",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "TEXT",
            "value_type": "STRING",
            "bacnet_type": "character_string_value_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "max_length": 128
        },
        {
            "id": "setTargetTempRangesUnoccupied",
            "name": "Set HC Rng Unocc",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "TEXT",
            "value_type": "STRING",
            "bacnet_type": "character_string_value_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "max_length": 128
        },
        {
            "id": "setWatchDogParams",
            "name": "Set WD Pms",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "TEXT",
            "value_type": "STRING",
            "bacnet_type": "character_string_value_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "max_length": 128
        },
        {
            "id": "setFrostProtectionSettings",
            "name": "Set Frost Set",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "TEXT",
            "value_type": "STRING",
            "bacnet_type": "character_string_value_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "max_length": 128
        },
        {
            "id": "setChangeoverThresholds",
            "name": "Set ChgOver Thr",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "TEXT",
            "value_type": "STRING",
            "bacnet_type": "character_string_value_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "max_length": 128
        },
        {
            "id": "setDeltaTemperature2and3",
            "name": "Set Delta T23",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "TEXT",
            "value_type": "STRING",
            "bacnet_type": "character_string_value_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "max_length": 128
        },
        {
            "id": "setEcmVoltageRange",
            "name": "Set ECM Volt",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "TEXT",
            "value_type": "STRING",
            "bacnet_type": "character_string_value_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "max_length": 128
        },
        {
            "id": "sendCustomHexCommand",
            "name": "Send HexCmd",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "TEXT",
            "value_type": "STRING",
            "bacnet_type": "character_string_value_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "max_length": 242
        },
        {
            "id": "getDeviceVersions",
            "name": "Get DevVers",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getTargetTemperatureStep",
            "name": "Get T Step",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getKeepAliveTime",
            "name": "Get KeepAlv",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getKeysLock",
            "name": "Get KeysLock",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getTemperatureRange",
            "name": "Get T Range",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getHeatingCoolingTargetTempRanges",
            "name": "Get HC Ranges",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getJoinRetryPeriod",
            "name": "Get JoinRt",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getUplinkType",
            "name": "Get Uplink",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getWatchDogParams",
            "name": "Get WD Pms",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getTargetTemperature",
            "name": "Get Target T",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getValveOpenCloseTime",
            "name": "Get Valve OC",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getDisplayRefreshPeriod",
            "name": "Get DispRefr",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getExtAutoTempControl",
            "name": "Get ExtCtrl",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getExtSensorTemperature",
            "name": "Get Ext T",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getCurrentTempVisibility",
            "name": "Get T Visible",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getHumidityVisibility",
            "name": "Get RH Visible",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getFanSpeed",
            "name": "Get FanSpeed",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getFanSpeedLimit",
            "name": "Get FanLimit",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getEcmVoltageRange",
            "name": "Get ECM Volt",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getEcmStartUpTime",
            "name": "Get ECM Start",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getEcmRelay",
            "name": "Get ECM Relay",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getFrostProtection",
            "name": "Get FrostProt",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getFrostProtectionSettings",
            "name": "Get Frost Set",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getOperationalMode",
            "name": "Get OperMode",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getAllowedOperModes",
            "name": "Get Allowed",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getCoolingSetpointUnocc",
            "name": "Get CoolSP U",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getHeatingSetpointUnocc",
            "name": "Get HeatSP U",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getTempCompensation",
            "name": "Get T Comp",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getFanSpeedUnocc",
            "name": "Get FanUnocc",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getAutoChangeover",
            "name": "Get ChgOver",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getApplication",
            "name": "Get App",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getOccFunction",
            "name": "Get OccFunc",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getChangeoverThresholds",
            "name": "Get ChgOver Thr",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getDeviceStatus",
            "name": "Get Device",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getPowerRecovery",
            "name": "Get PwrRec",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getDeltaT1",
            "name": "Get Delta T1",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getDeltaT2and3",
            "name": "Get Delta T23",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getFrostProtStatus",
            "name": "Get Frost Run",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getOccStatusSetpoint",
            "name": "Get Occ SP",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getOccStatusFanValve",
            "name": "Get Occ FV",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getDewPointStatus",
            "name": "Get DewPoint",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getFilterAlarm",
            "name": "Get Filter",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getChangeoverMode",
            "name": "Get ChgOver M",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getPowerModuleStatus",
            "name": "Get PwrModule",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getTargetTempRangesUnocc",
            "name": "Get HC Rng U",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getFanOffDelayTime",
            "name": "Get FanOffDly",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getAdditionalFanMode",
            "name": "Get AddFan",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getIntTempSensorError",
            "name": "Get IntSensErr",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getExtTempSensorError",
            "name": "Get ExtSensErr",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getUiLanguage",
            "name": "Get Language",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        },
        {
            "id": "getLoRaWANRegion",
            "name": "Get Region",
            "value": "",
            "unit": "",
            "access_mode": "W",
            "data_type": "BOOL",
            "value_type": "UINT8",
            "bacnet_type": "binary_output_object",
            "bacnet_unit_type_id": 95,
            "bacnet_unit_type": "UNITS_NO_UNITS",
            "values": [
                {
                    "value": 0,
                    "name": "Idle"
                },
                {
                    "value": 1,
                    "name": "Run"
                }
            ]
        }
    ]
}

```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.mclimate.eu/mclimate-lorawan-devices/devices/mclimate-fan-coil-thermostat-fct/decoding-and-bacnet-object-mapping/bacnet-codec-and-definition-files/milesight.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
