package protocol

type Packet struct {
	Code     uint8  `json:"code"`
	Addr     uint16 `json:"addr"`
	Quantity uint16 `json:"quantity"`
	Resplen  uint   `json:"resplen"`
	Cycle    uint   `json:"cycle"` //采集周期
}

//遥测、遥信
type DataUp struct {
	SID      uint16           `json:"sid"`
	Name     string           `json:"name"`           //英文名称
	NameZh   string           `json:"namezh"`         //中文名称
	Unit     string           `json:"unit"`           //单位
	Endian   uint8            `json:"endian"`         //大小端规则,0,大端，1小端
	Type     uint8            `json:"type"`           //数据类型，0:uint; 1:int; 2:float; 3:double;4 string
	Ratio    float32          `json:"ratio"`          //比率系数
	Base     float32          `json:"base"`           //基数
	UpLimit  float32          `json:"uplimit"`        //上限，用于告警判断
	LowLimit float32          `json:"lowlimit"`       //下限，用于告警判断
	Cid      uint8            `json:"cid"`            //采集命令
	Start    uint8            `json:"start"`          //从返回的数据0字节开始算起的字节数
	Len      uint8            `json:"len"`            //数据项占几个字节
	Alarm    uint8            `json:"alarm"`          //是否告警,0,不告警；1,告警
	Duration uint8            `json:"duration"`       //持续时间才告警，防止误判
	Desc     map[uint8]string `json:"desc,omitempty"` //遥信用，状态描述，类似0表示开，1表示关之类的描述
	Bit      uint8            `json:"bit"`            //遥信用，该字节的多少位
}

//遥调、遥控
type DataDown struct {
	SID      uint16  `json:"sid"`
	Name     string  `json:"name"`
	NameZh   string  `json:"namezh"` //中文名称
	Unit     string  `json:"unit"`
	Endian   uint8   `json:"endian"`   //大小端规则,0,大端，1小端
	Type     uint8   `json:"type"`     //数据类型，0:uint; 1:int; 2:float; 3:double;4 string
	Ratio    float32 `json:"ratio"`    //比率系数
	Base     float32 `json:"base"`     //基数
	Code     uint8   `json:"code"`     //功能码
	Addr     uint16  `json:"addr"`     //地址
	Quantity uint16  `json:"quantity"` //数量
	Vallen   uint8   `json:"vallen"`   //字节数
	Maxval   float32 `json:"maxval"`
	Minval   float32 `json:"minval"`
	Desc     string  `json:"desc"`
}

type IotModel struct {
	TID      uint16              `json:"tid"`                //物模型ID
	Version  uint8               `json:"version"`            //物模型版本
	Device   string              `json:"device"`             //设备名称
	Model    string              `json:"model"`              //设备型号
	Protocol string              `json:"protocol"`           //协议类型，一般为modbus-RTU
	Packet   map[uint8]Packet    `json:"packet,omitempty"`   //cid->采集命令，下发给设备的命令
	DataUp   []DataUp            `json:"DataUp"`             //数据解析及上传至平台
	DataDown map[uint16]DataDown `json:"DataDown,omitempty"` //数据解析及下发给设备
}
