---
tags: 'Acer'
---
All Smart Meter Reader NBIoT/CAT-M1 Protocols
===
[TOC]
## MeterType
0: Water Meter Camera Type
1: Water Meter Pulse Type
2: RTU Type
3: Pulse Type
4: Home Type
5: Radar Type
6: Ultrasonic Type
## Water Meter
### Camera Type Protocol
#### Register
```json=
{
UINT8 commandCode; // Always be 0x01
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; // (value*100)
UINT32 MeterType;
UINT8 protocolVersion; // Always be 2
UINT8 v0;
UINT8 v1;
UINT8 v2;
UINT8 reserved;
UINT16 CRC;
} STC_REGISTER;
```
<font color='red'>Response "Protocol Version 2"</font>
```json=
{
UINT8 commandCode; // Always be 0x02
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command;
UINT8 imageDate[6];
UINT8 secondDataServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondDataServerPort; // if disable, secondServerPort equal 0
UINT8 secondImageServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondImageServerPort; // if disable, secondServerPort equal 0
UINT8 reserved;
UINT16 CRC;
} STC_REGISTER_RESPONSE;
```
<font color='red'>Response "Protocol Version 3"</font>
```json=
{
UINT8 commandCode; // Always be 0x02
UINT8 MeterNumber[32];
UINT8 IMEI[16];
UINT8 IMSI[16];
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command;
UINT8 imageDate[6];
UINT8 secondDataServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondDataServerPort; // if disable, secondServerPort equal 0
UINT8 secondImageServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondImageServerPort; // if disable, secondServerPort equal 0
UINT8 saveBaseInfo; // 1: save base info
UINT16 CRC;
} STC_REGISTER_RESPONSE;
```
#### Commands:
|Code|Name|
|---|---|
|0x00|None|
|0x01|uploadImage|
|0x02|uploadROI|
|0x03|setParameters|
|0x04|upload fill-up data|
<B>Meter will send "request parameters" if it received command code == 0x03</B>
##### Request Parameters
```json=
{
UINT8 commandCode; // Always be 0x0b
UINT8 MeterNumber[16];
UINT16 requestVersion;
UINT8 reserved;
UINT16 CRC;
} STC_REGISTER_RESPONSE;
```
##### Response for "requestVersion=1"
```json=
{
UINT8 commandCode; // Always be 0x0C
UINT8 MeterNumber[16];
UINT16 requestVersion; // Always be 0x0000
UINT8 newMeterNumber[16]; // if no change,newMeterNumber[0] equal 0
UINT8 newRegisterIP[16]; // if no change,newRegisterIP[0] equal 0
UINT16 newRegisterPort; // if no change,newRegisterPort equal 0
FLOAT64 refferenceVolume; // if no change,refferenceValue equal -1
UINT8 digitalNumbers; // if digitalNumbers equal 0, means no change
UINT32 MeterType;
UINT8 IntegerNo;
UINT8 DecimalNo;
INT16 ROI_Angle; // if no chagne, digitalNumbers equal 0
INT32 Max_Flow; // if no change, fill -1
UINT16 xLeftTop;
UINT16 yLeftTop;
UINT16 xRightTop;
UINT16 yRightTop;
UINT16 xLeftBottom;
UINT16 yLeftBottom;
UINT16 xRightBottom;
UINT16 yRightBottom;
UINT8 OCRParameters;
UINT8 FontWidth;
UINT8 FontId;
UINT8 RoID;
UINT16 xLeftTop;
UINT16 yLeftTop;
UINT16 xRightTop;
UINT16 yRightTop;
UINT16 xLeftBottom;
UINT16 yLeftBottom;
UINT16 xRightBottom;
UINT16 yRightBottom;
UINT8 OCRParameters;
UINT8 FontWidth;
UINT8 FontId;
UINT8 RoID;
....
UINT16 command;
UINT8 imageDate[6];
UINT8 secondDataServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondDataServerPort; // if disable, secondServerPort equal 0
UINT8 secondImageServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondImageServerPort; // if disable, secondServerPort equal 0
INT16 imageShift_y; // if no change, equal -1
UINT16 CRC;
} STC_REGISTER_RESPONSE;
```
### Data Collector
##### Data Upload
###### Request
```json=
{
UINT8 commandCode; // Always be 0x03
UINT8 MeterNumber[16],
UINT8 uploadRecords;
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; ( Value*100 )
FLOAT64 Volume;
UINT8 recordTime[6]; // ( YYMMDDHHMMSS in binary )
FLOAT64 Volume;
UINT8 recordTime;
...
UINT16 CRC;
} STC_DATA_REPORT;
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x04
UINT8 MeterNumber[16];
UINT8 uploadRecords;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command; // Mask 0x01: upload image , 0x02: upload ROI
UINT8 imageDate[6];
UINT16 CRC;
} STC_DATA_REPORT_RESPONSE;
```
##### Data fill-up
###### Request
```json=
{
UINT8 commandCode; // Always be 0x0D
UINT8 MeterNumber[16],
UINT8 protocolVersion; // Always be 0x01
UINT16 CRC;
} STC_DATA_FILLUP;
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x0E
UINT8 MeterNumber[16];
UINT8 fillUpNum; // Max: 30
UINT8 fillUpDate1[4]; // new in Version 2
UINT8 fillUpDate2[4]; // new in Version 2
...
...
UINT16 CRC;
} STC_DATA_FILLUP_RESPONSE;
```
Date Format: Year,Month,Day,Hour
##### Alert Upload
AlertType:
* 0x01: No Battery
* <font color='color'> 0x02: Battery package communication error</font>
###### Request
```json=
{
UINT8 commandCode; // Always be 0x05
UINT8 MeterNumber[16];
UINT8 alertType;
FLOAT64 Volume;
INT16 Battery; // ( Value*100 )
INT16 RSRP;
INT16 RSRQ;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary )
UINT16 CRC;
}
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x06
UINT8 alertType;
UINT8 MeterNumber[16];
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command; // Mask 0x01: upload image , 0x02: upload ROI
UINT8 imageDate[6];
UINT16 CRC;
}
```
### Image Collector
#### UDP API: Upload Image
###### Request
```json=
{
UINT8 commandCode; // Always be 0x07
UINT8 MeterNumber[16];
UINT8 captureTime[6]; // ( YYMMDDHHMMSS in binary )
UINT16 width;
UINT16 height;
UINT32 totalSize;
UINT16 totalBatchNum;
UINT16 batchIndex;
UINT8 imageType; // 0: B&W 1: Gray 2: compressed B&W 3: compressed Gray
UINT8 data[dataSize]; // dataSize=totalSize/totalBatchNum.
UINT16 CRC;
}
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x08
UINT8 MeterNumber[16];
UINT8 captureTime[6]; // ( YYMMDDHHMMSS in binary )
UINT16 width;
UINT16 height;
UINT32 totalSize;
UINT16 totalBatchNum;
UINT16 batchIndex;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 imageType; // 0: B&W 1: Gray 2: compressed B&W 3: compressed Gray
UINT16 command; // Mask 0x01: upload image , 0x02: upload ROI
UINT8 imageDate[6];
UINT16 CRC;
}
```
#### UDP API: Upload ROI
###### Request Version 1
```json=
{
UINT8 commandCode; // Always be 0x09
UINT8 MeterNumber[16];
UINT8 protocolVersion; // Always be 0x01
UINT8 reserved;
UINT8 digitalNumbers;
UINT32 MeterType;
UINT8 IntegerNo;
UINT8 DecimalNo;
INT16 ROI_Angle;
INT32 Max_Flow;
INT16 imageShift_y;
UINT16 xLeftTop;
UINT16 yLeftTop;
UINT16 xRightTop;
UINT16 yRightTop;
UINT16 xLeftBottom;
UINT16 yLeftBottom;
UINT16 xRightBottom;
UINT16 yRightBottom;
UINT8 OCRParameters;
UINT8 FontWidth;
UINT8 FontId;
UINT8 RoID;
UINT16 xLeftTop;
UINT16 yLeftTop;
UINT16 xRightTop;
UINT16 yRightTop;
UINT16 xLeftBottom;
UINT16 yLeftBottom;
UINT16 xRightBottom;
UINT16 yRightBottom;
UINT8 OCRParameters;
UINT8 FontWidth;
UINT8 FontId;
UINT8 RoID;
....
UINT16 CRC;
}
```
###### Response Version 1
```json=
{
UINT8 commandCode; // Always be 0x0A
UINT8 MeterNumber[16];
UINT8 digitalNumbers;
UINT32 MeterType;
UINT8 IntegerNo;
UINT8 DecimalNo;
UINT16 command; // Mask 0x01: upload image , 0x02: upload ROI
UINT8 imageDate[6];
UINT16 CRC;
}
```
### IDAM Register
##### Get Device List
###### Protovol Versoin 0,1
```json=
{
UINT8 commandCode; // Always be 0x10
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; // (value*100)
UINT32 MeterType;
UINT8 protocolVersion; // protocolVersion=0,1
UINT8 v0;
UINT8 v1;
UINT8 v2;
UINT8 startIndex; // for odd bytes
UINT16 CRC;
}
```
###### Protocol Version 2
```json=
{
UINT8 commandCode; // Always be 0x10
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; // (value*100)
UINT32 MeterType;
UINT8 protocolVersion; // protocolVersion=2
UINT8 v0;
UINT8 v1;
UINT8 v2;
UINT8 startIndex; // for odd bytes
UINT32 p2pFrequency;
UINT16 CRC;
}
```
###### Response for protocol version 1
```json=
{
UINT8 commandCode; // Always be 0x11
UINT8 MeterNumber[16]; // UUID for IDAM
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT16 command;
UINT8 imageDate[6];
UINT32 p2pUploadOffset; // P2P upload offset
UINT8 p2pTimeSliceUnit;
UINT8 neverSleep;
UINT16 imageTimeSlice;
UINT16 earlyWakeUp;
UINT8 totalP2pDevices;
UINT8 offsetP2PID; // new in Version 1
UINT8 protocolVersion; // new in version 1
UINT8 startIndex;
UINT8 batchDeviceNum;
UINT8 MeterNumber1[16];
UINT8 MeterNumber2[16];
...
...
...
// According to meter numbers, 20 devices max for each batch
UINT16 CRC;
}
```
###### Response for protocol version 2
```json=
{
UINT8 commandCode; // Always be 0x11
UINT8 MeterNumber[16]; // UUID for IDAM
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT16 command;
UINT8 imageDate[6];
UINT32 p2pUploadOffset; // P2P upload offset
UINT8 p2pTimeSliceUnit;
UINT8 neverSleep;
UINT16 imageTimeSlice;
UINT16 earlyWakeUp;
UINT8 totalP2pDevices;
UINT8 offsetP2PID; // new in Version 1
UINT8 protocolVersion; // new in version 1
UINT8 startIndex;
UINT8 batchDeviceNum;
UINT8 MeterNumber1[16];
UINT8 MeterNumber1Command; // new in Version 2
UINT8 image1Date[6];
UINT8 MeterNumber1fillUpNum; // MAX: 5, new in Version 2
UINT8 fillUpDate11[4]; // new in Version 2
UINT8 fillUpDate12[4]; // new in Version 2
UINT8 fillUpDate13[4]; // new in Version 2
UINT8 fillUpDate14[4]; // new in Version 2
UINT8 fillUpDate15[4]; // new in Version 2
UINT8 MeterNumber2[16];
UINT8 MeterNumber2_Command; // new in Version 2
UINT8 image2Date[6];
UINT8 MeterNumber2_fillUpNum; // MAX: 5, new in Version 2
UINT8 fillUpDate21[4]; // new in Version 2
UINT8 fillUpDate22[4]; // new in Version 2
UINT8 fillUpDate23[4]; // new in Version 2
UINT8 fillUpDate24[4]; // new in Version 2
UINT8 fillUpDate25[4]; // new in Version 2
...
// According to meter numbers, 10 devices max for each batch
UINT16 CRC;
}
```
##### Multiple Data Upload
Not implement yet.
###### Request
```json=
{
UINT8 commandCode; // Maybe 0x26
UINT8 protocolVersion;
UINT8 reserved;
UINT8 meterCount;
UINT8 MeterNumber[16],
UINT8 uploadRecords;
UINT8 reserved2;
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; ( Value*100 )
FLOAT64 Volume;
UINT8 recordTime[6]; // ( YYMMDDHHMMSS in binary )
FLOAT64 Volume;
UINT8 recordTime;
...
UINT8 MeterNumber2[16],
UINT8 uploadRecords2;
UINT8 reserved22;
INT16 RSRP2;
INT16 RSRQ2;
INT16 Battery2; ( Value*100 )
FLOAT64 Volume;
UINT8 recordTime[6]; // ( YYMMDDHHMMSS in binary )
FLOAT64 Volume;
UINT8 recordTime;
UINT16 CRC;
} STC_DATA_REPORT;
```
###### Response
```json=
{
UINT8 commandCode; // // Maybe 0x27
UINT8 MeterNumber[16];
UINT8 uploadRecords;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command; // Mask 0x01: upload image , 0x02: upload ROI
UINT8 imageDate[6];
UINT16 CRC;
} STC_DATA_REPORT_RESPONSE;
```
##### upload Device Status
```json=
{
UINT8 commandCode; // Always be 0x12
UINT8 MeterNumber[16];
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; // (value*100)
UINT8 protocolVersion; // Always be 0
UINT8 neverSleep;
UINT8 time[6];
UINT8 state;
UINT8 reserved;
UINT8 deviceNum;
UINT16 deviceJoinStatus[20];
UINT16 CRC;
}
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x13
UINT8 neverSleep;
UINT8 forceSleep;
UINT8 reboot;
UINT16 CRC;
}
```
## Gas Meter
### Default Port
* Register Server Port: 2060
* Data Server Port: 2061
* Image Server Port: 2062
* Data 2 Server Port: 2063
* Image Server 2 Port: 2064
+### Pulse Type Protocol
#### Register
##### Request from device
```json=
{
UINT8 commandCode; // Always be 0x14
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; // (value*100)
UINT32 MeterType;
UINT8 protocolVersion; // Always be 0
UINT8 v0;
UINT8 v1;
UINT8 v2;
UINT16 reedSwitchType;
UINT32 initPulseCnt;
FLOAT32 volumeUnit;
UINT16 maxAlarmCnt;
UINT16 debounceTime;
UINT16 maxAlarmTime;
UINT16 deepSleepTime;
UINT16 detectTime;
UINT8 reserved;
UINT16 CRC;
} STC_REGISTER;
```
##### Response from server
```json=
{
UINT8 commandCode; // Always be 0x15
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command;
UINT8 imageDate[6];
UINT8 secondDataServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondDataServerPort; // if disable, secondServerPort equal 0
UINT8 secondImageServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondImageServerPort; // if disable, secondServerPort equal 0
UINT16 reedSwitchType;
UINT32 initPulseCnt;
FLOAT32 volumeUnit;
UINT16 maxAlarmCnt;
UINT16 debounceTime;
UINT16 maxAlarmTime;
UINT16 deepSleepTime;
UINT16 detectTime;
UINT8 reserved;
UINT16 CRC;
} STC_REGISTER_RESPONSE;
```
#### Data Collector
##### Data Upload
###### Request
```json=
{
UINT8 commandCode; // Always be 0x16
UINT8 MeterNumber[16],
UINT8 uploadRecords;
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; ( Value*100 )
FLOAT64 Volume;
UINT8 recordTime[6]; // ( YYMMDDHHMMSS in binary )
FLOAT64 Volume;
UINT8 recordTime;
...
UINT16 CRC;
} STC_DATA_REPORT;
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x17
UINT8 MeterNumber[16];
UINT8 uploadRecords;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command; // 3: setup parameter
UINT8 imageDate[6];
UINT16 reedSwitchType;
UINT32 initPulseCnt;
FLOAT32 volumeUnit;
UINT16 maxAlarmCnt;
UINT16 debounceTime;
UINT16 maxAlarmTime;
UINT16 deepSleepTime;
UINT16 detectTime;
UINT16 CRC;
} STC_DATA_REPORT_RESPONSE;
```
#### Pulse Alarm
###### Request
```json=
{
UINT8 commandCode; // Always be 0x18
UINT8 MeterNumber[16];
UINT32 errorCode; // 0: No Error ,1: CRC error ,2: No Response
UINT32 alarmCode; // bit0: Pulse 1 Alarm, bit1: Pluse 2 Alarm
FLOAT64 Volume;
INT16 Battery; // ( Value*100 )
INT16 RSRP;
INT16 RSRQ;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 reserved;
UINT16 CRC;
}
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x19
UINT8 MeterNumber[16];
UINT32 errorCode; // 0: No Error ,1: CRC error ,2: No Response
UINT32 alarmCode; // bit0: Pulse 1 Alarm, bit1: Pluse 2 Alarm
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command; // Mask 0x01: upload image , 0x02: upload ROI
UINT8 imageDate[6];
UINT8 reserved;
UINT16 CRC;
}
```+
### RTU Type Protocol
#### Register
##### Request from device
```json=
{
UINT8 commandCode; // Always be 0x1A
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; // (value*100)
UINT32 MeterType;
UINT8 protocolVersion; // Always be 0
UINT8 v0;
UINT8 v1;
UINT8 v2;
FLOAT32 pressureHighAlarmSet;
FLOAT32 pressureHighAlarmReset;
FLOAT32 pressureLowAlarmSet;
FLOAT32 pressureLowAlarmReset;
FLOAT32 temperatureHighAlarmSet;
FLOAT32 temperatureHighAlarmReset;
FLOAT32 temperatureLowAlarmSet;
FLOAT32 temperatureLowAlarmReset;
FLOAT32 caliFlowHighAlarmSet;
FLOAT32 caliFlowHighAlarmReset;
FLOAT32 caliFlowLowAlarmSet;
FLOAT32 caliFlowLowAlarmReset;
UINT8 reserved;
UINT16 CRC;
} STC_REGISTER;
```
##### Response from server
```json=
{
UINT8 commandCode; // Always be 0x1B
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command;
UINT8 imageDate[6];
UINT8 secondDataServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondDataServerPort; // if disable, secondServerPort equal 0
UINT8 secondImageServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondImageServerPort; // if disable, secondServerPort equal 0
FLOAT32 pressureHighAlarmSet;
FLOAT32 pressureHighAlarmReset;
FLOAT32 pressureLowAlarmSet;
FLOAT32 pressureLowAlarmReset;
FLOAT32 temperatureHighAlarmSet;
FLOAT32 temperatureHighAlarmReset;
FLOAT32 temperatureLowAlarmSet;
FLOAT32 temperatureLowAlarmReset;
FLOAT32 caliFlowHighAlarmSet;
FLOAT32 caliFlowHighAlarmReset;
FLOAT32 caliFlowLowAlarmSet;
FLOAT32 caliFlowLowAlarmReset;
UINT8 reserved;
UINT16 CRC;
} STC_REGISTER_RESPONSE;
```
#### Data Collector
##### Data Upload
###### Request
```json=
{
UINT8 commandCode; // Always be 0x1C
UINT8 MeterNumber[16],
UINT8 uploadRecords;
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; ( Value*100 )
FLOAT32 pressure;
FLOAT32 temperature;
FLOAT32 caliFlowRate;
FLOAT32 flowCoefficient;
FLOAT32 batteryVoltage;
FLOAT32 caliOkVolume;
FLOAT32 caliNokVolume;
FLOAT32 alertType;
UINT8 recordTime[6]; // ( YYMMDDHHMMSS in binary )
FLOAT32 pressure;
FLOAT32 temperature;
FLOAT32 caliFlowRate;
FLOAT32 flowCoefficient;
FLOAT32 batteryVoltage;
FLOAT32 caliOkVolume;
FLOAT32 caliNokVolume;
FLOAT32 alertType;
UINT8 recordTime[6]; // ( YYMMDDHHMMSS in binary )
...
UINT8 reserved;
UINT16 CRC;
} STC_DATA_REPORT;
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x1D
UINT8 MeterNumber[16];
UINT8 uploadRecords;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command; // 0: none
UINT8 imageDate[6];
FLOAT32 pressureHighAlarmSet;
FLOAT32 pressureHighAlarmReset;
FLOAT32 pressureLowAlarmSet;
FLOAT32 pressureLowAlarmReset;
FLOAT32 temperatureHighAlarmSet;
FLOAT32 temperatureHighAlarmReset;
FLOAT32 temperatureLowAlarmSet;
FLOAT32 temperatureLowAlarmReset;
FLOAT32 caliFlowHighAlarmSet;
FLOAT32 caliFlowHighAlarmReset;
FLOAT32 caliFlowLowAlarmSet;
FLOAT32 caliFlowLowAlarmReset;
UINT16 CRC;
} STC_DATA_REPORT_RESPONSE;
```
#### RTU Alarm
###### Request
```json=
{
UINT8 commandCode; // Always be 0x1E
UINT8 MeterNumber[16];
UINT32 errorCode; // 0: No Error ,1: CRC error ,2: No Response
UINT32 alarmCode; // bit0: Pulse 1 Alarm, bit1: Pluse 2 Alarm
FLOAT32 pressure;
FLOAT32 temperature;
FLOAT32 caliFlowRate;
FLOAT32 flowCoefficient;
FLOAT32 batteryVoltage;
FLOAT32 caliOkVolume;
FLOAT32 caliNokVolume;
FLOAT32 alertType;
INT16 Battery; // ( Value*100 )
INT16 RSRP;
INT16 RSRQ;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 reserved;
UINT16 CRC;
}
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x1F
UINT8 MeterNumber[16];
UINT32 errorCode; // 0: No Error ,1: CRC error ,2: No Response
UINT32 alarmCode; // bit0: Pulse 1 Alarm, bit1: Pluse 2 Alarm
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary )
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command; // Mask 0x01: upload image , 0x02: upload ROI
UINT8 imageDate[6];
UINT8 reserved;
UINT16 CRC;
}
```
# Radar Type Protocol
#### Commands:
|Code|Name|
|---|---|
|0x00|None|
|0x03|setParameters|
|0x04|upload fill-up data|
#### Register
##### Request from device
```json=
{
UINT8 commandCode; // Always be 0x20
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; // ( Value * 100 )
UINT32 MeterType;
UINT8 protocolVersion;// for CRC16 needs odd bytes
UINT8 V0;
UINT8 V1;
UINT8 V2;
FLOAT32 Lat;
FLOAT32 Lon;
UINT8 reserved;
UINT16 CRC;
} STC_REGISTER;
```
##### Response from server
```json=
{
UINT8 commandCode; // Always be 0x02
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command;
UINT8 imageDate[6];
UINT8 secondDataServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondDataServerPort; // if disable, secondServerPort equal 0
UINT8 secondImageServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondImageServerPort; // if disable, secondServerPort equal 0
UINT32 highAlarm; // percentage*100
UINT32 lowAlarm;
UINT16 valueRange;
UINT16 readCount;
UINT16 defaultRadarBattery;
UINT32 pinPassword;
UINT16 earlyWakeUp;
UINT8 reserved;
} STC_REGISTER_RESPONSE;
```
#### Data Collector
##### Data Upload
###### Request
```json=
{
UINT8 commandCode; // Always be 0x22
STRING MeterNumber[16];
UINT8 uploadRecords; // Always be 0
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; // ( value*100 )
FLOAT32 radarBattery;
FLOAT32 waterlevel;
UINT8 recordTime[6]; // ( YYMMDDHHMMSS in binary)
FLOAT32 radarBattery;
FLOAT32 waterlevel;
UINT8 recordTime[6]; // ( YYMMDDHHMMSS in binary)
...
UINT16 CRC;
} STC_DATA_REPORT;
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x23
UINT8 MeterNumber[16];
UINT8 uploadRecords;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command; // Mask 0x01: upload image , 0x02: upload ROI
UINT8 reserved[6];
UINT32 highAlarm; // percentage*100
UINT32 lowAlarm;
UINT16 valueRange;
UINT16 readCount;
UINT16 defaultRadarBattery;
UINT32 pinPassword;
UINT16 earlyWakeUp;
} STC_DATA_REPORT_RESPONSE;
```
#### Radar Alarm
###### Request
```json=
{
UINT8 commandCode; // Always be 0x24
STRING MeterNumber[16];
UINT32 errorCode;
UINT32 alarmCode;
FLOAT32 radarBattery;
FLOAT32 waterlevel;
INT16 Battery; // (value*100)
INT16 RSRP;
INT16 RSRQ;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 reserve;:
}
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x25
STRING MeterNumber[16];
UINT32 errorCode;
UINT32 alarmCode;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command;
UINT8 imageDate[6];
UINT8 reserve;
}
```
##### Data fill-up
###### Request
```json=
{
UINT8 commandCode; // Always be 0x2D
UINT8 MeterNumber[16],
UINT8 protocolVersion; // Always be 0x01
UINT16 CRC;
} STC_DATA_FILLUP;
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x2E
UINT8 MeterNumber[16];
UINT8 fillUpNum; // Max: 30
UINT8 fillUpDate1[6];
UINT8 fillUpDate2[6];
...
...
UINT16 CRC;
} STC_DATA_FILLUP_RESPONSE;
```
Date Format:
Year,Month,Day,Hour,Minute,Second
# Ultrasonic Type Protocol
#### Commands:
|Code|Name|
|---|---|
|0x00|None|
|0x03|setParameters|
|0x04|upload fill-up data|
#### Register
##### Request from device
```json=
{
UINT8 commandCode; // Always be 0x30
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; // ( Value * 100 )
UINT32 MeterType;
UINT8 protocolVersion;// for CRC16 needs odd bytes
UINT8 V0;
UINT8 V1;
UINT8 V2;
FLOAT32 Lat;
FLOAT32 Lon;
UINT8 reserved;
UINT16 CRC;
} STC_REGISTER;
```
##### Response from server
```json=
{
UINT8 commandCode; // Always be 0x31
UINT8 MeterNumber[16];
UINT8 IMEI[16];
UINT8 IMSI[16];
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command;
UINT8 imageDate[6];
UINT8 secondDataServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondDataServerPort; // if disable, secondServerPort equal 0
UINT8 secondImageServerIP[16]; // if disable, secondServerIP[0] equal 0
UINT16 secondImageServerPort; // if disable, secondServerPort equal 0
UINT32 level_highAlarm; // percentage*100
UINT32 level_lowAlarm;
UINT16 level_valueRange;
UINT32 flow_highAlarm; // percentage*100
UINT32 flow_lowAlarm;
UINT16 flow_valueRange;
UINT16 readCount;
UINT32 pinPassword;
UINT16 earlyWakeUp;
UINT8 reserved;
} STC_REGISTER_RESPONSE;
```
#### Data Collector
##### Data Upload
###### Request
```json=
{
UINT8 commandCode; // Always be 0x32
UINT8 MeterNumber[16];
UINT8 uploadRecords; // Always be 0
INT16 RSRP;
INT16 RSRQ;
INT16 Battery; // ( value*100 )
FLOAT32 waterflow;
FLOAT32 waterlevel;
FLOAT32 waterDirection;
FLOAT32 temperature;
FLOAT32 pressureLevel;
UINT8 recordTime[6]; // ( YYMMDDHHMMSS in binary)
FLOAT32 waterflow;
FLOAT32 waterlevel;
FLOAT32 waterDirection;
FLOAT32 temperature;
FLOAT32 pressureLevel;
UINT8 recordTime[6]; // ( YYMMDDHHMMSS in binary)
...
UINT16 CRC;
} STC_DATA_REPORT;
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x33
UINT8 MeterNumber[16];
UINT8 uploadRecords;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command; // Mask 0x01: upload image , 0x02: upload ROI
UINT8 reserved[6];
UINT32 level_highAlarm; // percentage*100
UINT32 level_lowAlarm;
UINT16 level_valueRange;
UINT32 flow_highAlarm; // percentage*100
UINT32 flow_lowAlarm;
UINT16 flow_valueRange;
UINT16 readCount;
UINT32 pinPassword;
UINT16 earlyWakeUp;
} STC_DATA_REPORT_RESPONSE;
```
#### Ultrasonic Alarm
###### Request
```json=
{
UINT8 commandCode; // Always be 0x34
UINT8 MeterNumber[16];
UINT32 errorCode;
UINT32 alarmCode;
FLOAT32 radarBattery;
FLOAT32 waterlevel;
FLOAT32 waterDirection;
FLOAT32 temperature;
FLOAT32 pressureLevel;
INT16 Battery; // (value*100)
INT16 RSRP;
INT16 RSRQ;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 reserve;:
}
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x35
UINT8 MeterNumber[16];
UINT32 errorCode;
UINT32 alarmCode;
UINT8 currentTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 samplingTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uplinkTime[6]; // ( YYMMDDHHMMSS in binary)
UINT8 uploadServerIP[16];
UINT16 uploadServerPort;
UINT8 imageServerIP[16];
UINT16 imageServerPort;
UINT32 samplingPeriod;
UINT32 uplinkPeriod;
UINT32 MeterType;
UINT16 command;
UINT8 imageDate[6];
UINT8 reserve;
}
```
##### Data fill-up
###### Request
```json=
{
UINT8 commandCode; // Always be 0x3D
UINT8 MeterNumber[16],
UINT8 protocolVersion; // Always be 0x01
UINT16 CRC;
} STC_DATA_FILLUP;
```
###### Response
```json=
{
UINT8 commandCode; // Always be 0x3E
UINT8 MeterNumber[16];
UINT8 fillUpNum; // Max: 30
UINT8 fillUpDate1[6];
UINT8 fillUpDate2[6];
...
...
UINT16 CRC;
} STC_DATA_FILLUP_RESPONSE;
```
Date Format: Year,Month,Day,Hour,Minute,Second
# LoRa P2P Protocol
https://hackmd.io/kf4evM3JREe_CMTVPOeRpQ