---
# System prepended metadata

title: IDAM Software Specification
tags: [Acer]

---

---
tags: 'Acer'
---
IDAM Software Specification
===
[TOC]
# RS485 / ModBus
* Max device number : 32
* Max variables number: 32
* Baudrate: 9600

# Uplink Type
* Payload Type
    * 0: Old LoRaWAN format
    * 1: GPS upload format
    * 2: New LoRaWAN / NBIoT format
    * 3: New WiFi / LTE 4G Format
    * 4: BlueTooth Meter format
    * 5: P2P format
    * 6: NEMA AC Command Ack
    * 7: P2P JOIN format
    * 8: P2P Meter Report format
    * 9: Data Encryption
    * 10: Meter Ack
    * 11: P2P JOIN RESPONSE 2 format 
    * 12: LoRaWAn Meter value upload
    * 13: Taiwan Water P2P JOIN format
    * 14: Taiwan Water P2P JOIN Response 2 format
    * 15: Taiwan Water P2P Meter Report format
    * 16: Taiwan Water P2P Meter Report Response format
    * 17: Taiwan Water P2P Image Upload format
    * 18: Taiwan Water P2P Image Upload Response format




## LoRaWAN
  Since the payload limitation is 32 Byte, we will make each payload by the follow format:
   * Bytes 0: UUID ( Not used for now, reserved for P2P usage )
   * Bytes 1: PayloadType ( 0: old 1: GPS  2:new )
   * Bytes 2: The start variable index of this payload.
   * Bytes 3: The variable numbers of this payload.
   * Bytes 4~7: the first variable's value in FLOAT32 format.
   * Bytes 8~11: the second variable's value in FLOAT32 format.
   * Bytes 12~15: ...

   Here's the data structure definition in C.

if payloadType == 2 :  ( Report Data )
```
typedef struct
{
    UINT8   UUID;
    UINT8   payloadType=2;
    UINT8   startIndex;
    UINT8   varNumber;
    FLOAT32 variables[varNumber];
} STC_LORAWAN_SEND_PACKAGE;
```

if payloadType == 3 :  ( Report UUID )

```
typedef struct
{
    UINT8   UUID;
    UINT8   payloadType=3;
    UINT8   UUID[24];
}
```

## WiFi /LTE 4G
### Upload Device Information
JSON structure
```
Header:  Key=> AuthToken  Value=> the token
{
    "AuthToken": "B7JZW6u6Mnl4efkc12ZjlYGbI1B4H28a",
    "[deviceUUID]": {
       "command": "updateDeviceInfo",
       "deviceInfo": {
           "devCnt":1,
           "varCnt":2,
           "dev0": {
               "devModbusID":1,
               "baudrate":9600,
               "modbusType":0,
               "devname":"New Device",
               "var0": {
                   "devIndex":0,
                   "type": 6,   // type: from 0 ~ 6
                   "addr": 0,
                   "name": "New Variable",
                   "max": 0,
                   "min": 0,
                   unit": "m/s",
                   "scale": 100
               }
               "var1": {
                   ...
               }
           }
       },
      "uplinkType": 3,   // uplinkType: from 0 ~ 4
      "name": "Acer Being Communication SB",
      "loraAppKey": "",
      "loraEDUI": ""
    }
}
```
Read data example
```
{
	"38ff464d4e363b28626445": {
		"command": "updateDeviceInfo",
		"deviceInfo": {
			"devCnt": 3,
			"varCnt": 5,
			"dev0": {
				"devModbusID": 1,
				"baudrate": 9600,
				"modbusType": 0,
				"devname": "New Device",
				"var0": {
					"devIndex": 0,
					"type": 6,
					"addr": 0,
					"name": "New Variable",
					"max": 0,
					"min": 0,
					"unit": "",
					"scale": 1
				}
			},
			"dev1": {
				"devModbusID": 1,
				"baudrate": 9600,
				"modbusType": 0,
				"devname": "New Device",
				"var1": {
					"devIndex": 1,
					"type": 6,
					"addr": 1,
					"name": "New Variable",
					"max": 0,
					"min": 0,
					"unit": "",
					"scale": 1
				},
				"var2": {
					"devIndex": 2,
					"type": 6,
					"addr": 2,
					"name": "New Variable",
					"max": 0,
					"min": 0,
					"unit": "",
					"scale": 1
				}
			},
			"dev2": {
				"devModbusID": 2,
				"baudrate": 9600,
				"modbusType": 0,
				"devname": "New Device",
				"var3": {
					"devIndex": 3,
					"type": 6,
					"addr": 3,
					"name": "New Variable",
					"max": 0,
					"min": 0,
					"unit": "",
					"scale": 1
				},
				"var4": {
					"devIndex": 4,
					"type": 6,
					"addr": 4,
					"name": "New Variable",
					"max": 0,
					"min": 0,
					"unit": "",
					"scale": 1
				}
			}
		},
		"uplinkType": 3,
		"name": "Acer Being Communication SB",
		"loraAppKey": "",
		"loraEDUI": ""
	}
}
```

Variable Type: from 0 to 6
* 0: INT8
* 1: UINT8
* 2: INT16
* 3: UINT16
* 4: INT32
* 5: UINT32
* 6: FLOAT32

Uplink Type: from 0 to 4
* 0: LORAWAN
* 1: LORA_P2P
* 2: LET4G
* 3: WIFI
* 4: NBIoT

### UPload Device Variables
JSON Structure
```
{
    "UUID": "xxxxxxxx" ,
    "vars": {
        "var0": xxx,
        "var1": xxx,
        ....
    }
}
```
Real data example
```
{
    "UUID": "38ff464d4e363b28626445" ,
    "vars": {
        "var0": 2.4,
        "var1": 5.2,
    }
}
```

## NBIOT
The data format is same as LoRaWAN.
But encode with Base64.

# Downlink
## LoRaWAN
```
Command 0 :
typedef struct
{
    UINT8      commandType;
    UINT8      startIndex;
    UINT8      variableNumber;
    UINT32     value; 
    ( Dynamic )
}
```

```
Command 1 :
typedef struct
{
    UINT8      commandType;
    UINT8      *modbusCmdArray;
}
```

commmandType: 
    * 0 : Value Update
    * 1 : Bypass modbus command
    * 2 : Device Name update
    * 3 : Port update
    * 4 : ... 
    
## WiFi / 4G
```
{
    "CommandType": 0,
    "modbusID" : 5,
    "registerAddress" : 0x20 or 32,
    "varType": 0 -> INT8 ,
    "value" : 1.232
}
```
## NBIOT
The data format is same as LoRaWAN.
But encode with Base64.


# IDAM for Water Cabinet ( Water Quality )
* LoRaWAN Module Device ID: 38ffdb054d4e353927830743
* LoRaWAN Module APP Key:   2b7e151628aed2a6abf7158809cf4f3c
* Data Format:
    * like normal IDAM data format
    * index 0: PH Value  ( Unit: none )
    * index 1: DO Value  ( Unit: % )
    * index 2: Temperature Value ( Unit: °C )
    * index 3: EC Value ( Unit: mS/cm )
    * index 4: Turbidity Value ( Unit: NTU )

# IDAM for Addon Meter
* LoRaWAN Module Device ID: 38ffd7054d4e353928620943
* LoRaWAN Module APP Key:   2b7e151628aed2a6abf7158809cf4f3c
* Data Format:
    * Byte 0 ~ Byte 5 :  Bluetooth Module MAC Address
    * Byte 6 ~ Byte 9 :  Meter Value ( FLOAT32 little endian )
