v6

package
v0.0.0-...-e6c2143 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 12, 2023 License: GPL-2.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// SockUnkonw 未知socket类型
	SockUnkonw = iota
	// SockTml 终端socket类型
	SockTml
	// SockData 数据层socket类型
	SockData
	// SockClient 客户端socket类型
	SockClient
	// SockSdcmp 串口软件socket类型
	SockSdcmp
	// SockFwdcs 前端管理socket类型
	SockFwdcs
	// SockUpgrade 升级程序socket类型
	SockUpgrade
	// SockIisi 接口socket类型
	SockIisi
	// SockVb6 VB6 socket类型
	SockVb6
	// SockUDP UDP socket类型
	SockUDP
)
View Source
const (
	// SendLevelNormal 常规发送
	SendLevelNormal = iota
	// SendLevelHigh 插队发送
	SendLevelHigh
)
View Source
const (
	// DataTypeUnknow 未知数据类型
	DataTypeUnknow = iota
	// DataTypeBytes 字节数据类型
	DataTypeBytes
	// DataTypeString 字符串数据类型
	DataTypeString
	// DataTypeBase64 base64码数据类型
	DataTypeBase64
)
View Source
const (
	// JobSend 普通数据转发任务
	JobSend = iota
	// JobDo 执行任务
	JobDo
)
View Source
const (
	// TraUnknow 未知传输方式
	TraUnknow = iota
	// TraDirect 直接传输
	TraDirect
	// Tra485 通过设备485传输
	Tra485
)
View Source
const (

	// SendGpsAT 采集gps信息
	SendGpsAT = "AT+OPENAT=GPSINFO?\r"
	// JSONData data head
	JSONData = `{"head":{"mod":2,"src":1,"ver":1,"tver":1,"tra":1,"ret":1,"cmd":""},"args":{"ip":[],"port":0,"addr":[],"cid":1},"data":{}}`
)

Variables

View Source
var (
	// SendUDPKA udp心跳数据
	SendUDPKA = gopsu.Bytes("Х")
	// Send7004 上海路灯升级准备
	Send7004 = gopsu.String2Bytes("7E-70-18-00-00-00-04-00-57-4A-33-30-30-36-42-5A-2D-31-00-00-3C-00-CC-CC-CC-CC-CC-CC-80-42", "-")
	// Send7010 从终端复位模块
	Send7010 = gopsu.String2Bytes("7e-70-05-00-00-00-10-00-03-30-b2", "-")
	// Send3e3c09 复位模块
	Send3e3c09 = gopsu.String2Bytes("3e-3c-0c-0-30-30-30-30-30-30-30-30-30-30-30-09-58-c9", "-")
	// Send3e3c01 读取模块地址
	Send3e3c01 = gopsu.String2Bytes("3e-3c-0f-0-30-30-30-30-30-30-30-30-30-30-30-01-10-01-00-25-46", "-")
	// Send6813 电表读地址
	Send6813 = gopsu.String2Bytes("fe-fe-fe-fe-68-aa-aa-aa-aa-aa-aa-68-13-0-df-16", "-")
	// Send9050 单灯读版本
	Send9050 = gopsu.String2Bytes("7e-90-3-0-0-0-50-dc-6b", "-")
	// Send5a4a 招测光照度软件版本
	Send5a4a = gopsu.String2Bytes("7e-5a-5-4a-0-0-73-12", "-")
	// Send4d00 招测线路监测阻抗基准
	Send4d00 = gopsu.String2Bytes("7e-7-0-0-4d-1-1-0-34-1f-51", "-")
	// Send1800 开机申请应答
	Send1800 = gopsu.String2Bytes("7e-5-0-0-18-0-63-45-7c", "-")
	// Send1400 终端主动报警应答
	Send1400 = gopsu.String2Bytes("7e-5-0-0-14-0-6f-85-7a", "-")
	// Send1500 线路检测主动报警应答
	Send1500 = gopsu.String2Bytes("7e-5-0-0-15-0-6e-15-7a", "-")
	// Send2b00 招测终端序列号
	Send2b00 = gopsu.String2Bytes("7e-5-0-0-2b-0-50-f5-66", "-")
	// Send2000 选测
	Send2000 = gopsu.String2Bytes("7e-5-0-0-20-0-5b-c5-63", "-")
	// Send1300 招测时间
	Send1300 = gopsu.String2Bytes("7e-5-0-0-13-0-68-75-79", "-")
	// Send3200 招测周设置1-3
	Send3200 = gopsu.String2Bytes("7e-5-0-0-32-0-49-e5-6b", "-")
	// Send5900 招测周设置4-6
	Send5900 = gopsu.String2Bytes("7e-5-0-0-59-0-22-d5-58", "-")
	// Send6900 招测周设置7-8
	Send6900 = gopsu.String2Bytes("7e-5-0-0-69-0-12-d5-43", "-")
	// Send6600 招测节假日后4段
	Send6600 = gopsu.String2Bytes("7E-5-0-0-66-0-1d-a5-44", "-")
	// Send5a00 招测终端参数
	Send5a00 = gopsu.String2Bytes("7e-5-0-0-5a-0-21-65-59", "-")
	// Send5b00 招测检测参数
	Send5b00 = gopsu.String2Bytes("7e-5-0-0-5b-0-20-f5-59", "-")
	// Send5c00 招测软件版本
	Send5c00 = gopsu.String2Bytes("7e-5-0-0-5c-0-27-5-5a", "-")
	// Send5f00 召测终端参数k7-k8
	Send5f00 = gopsu.String2Bytes("7e-5-0-0-5f-0-24-b5-5b", "-")
	// SendJY58 江阴节能主报应答
	SendJY58 = gopsu.String2Bytes("7e-16-0-0-37-7e-d0-1-58-f7-0-0-0-0-0-0-0-0-0-0-0-0-0-5f-33-81", "-")
	// SendEsu1c00 节电器主动报警应答
	SendEsu1c00 = gopsu.String2Bytes("7e-d-0-0-37-7e-80-1-1c-19-bd-0-3-35-bd", "-")
	// SendEsu1300 节电器选测
	SendEsu1300 = gopsu.String2Bytes("7e-d-0-0-37-7e-80-1-13-59-b9-0-48-75-8a", "-")
	// SendEsu2600 节电器gprs主动告警应答
	SendEsu2600 = gopsu.String2Bytes("7e-b-0-0-1b-7e-80-1-26-99-ae-0-80-b0-d5", "-")
	// SendAhhf6810 安徽合肥版本召测
	SendAhhf6810 = gopsu.String2Bytes("68-10-0-68-0-0-0-0-0-0-0-0-9-10-0-0-1-0-0-0-f7-b2-56", "-")
	// SendUpg0500 远程升级用版本招测
	SendUpg0500 = gopsu.String2Bytes("7e-fe-05-00-00-00-05-00-00-e8-9b", "-")
	// SendGps 采集gps信息
	SendGps = gopsu.String2Bytes("7e-59-4-0-0-0-4-1-cd-22", "-")
	// SendElu5d00 漏电直连读取参数
	SendElu5d00 = gopsu.String2Bytes("7e-62-02-00-5d-73-8b", "-")
	// SendERtu6900 漏电直连8路2级数据
	SendERtu6900 = gopsu.String2Bytes("7e-62-02-00-69-72-5c", "-")
	// SendIMEI 读取模块imei和iccid
	SendIMEI = gopsu.String2Bytes("3e-3c-0f-00-30-30-30-30-30-30-30-30-30-30-30-01-20-05-02-a6-48", "-")
	// SendXHLocker 咸亨门锁查状态
	SendXHLocker = gopsu.String2Bytes("7e-e0-00-00-00-00-11-00-2b-3d", "-")
	// SendYfDry 远帆除湿
	SendYfDry = gopsu.String2Bytes("01-03-00-01-00-01-d5-ca", "-")
	// SendDCRtu702b 直流终端选测
	SendDCRtu702b = gopsu.String2Bytes("7e-70-05-00-00-00-2b-00-00-01-7e", "-")
	// SendIelu0126 智能漏电选测
	SendIelu0126 = gopsu.String2Bytes("7e-01-05-00-00-00-26-00-00-56-55", "-")
	// SendWater 水浸检测
	SendWater = gopsu.Bytes(`{"CMD":"data"}`)

	// Resp0902 登录/心跳应答
	Resp0902 = gopsu.String2Bytes("68 0E 00 0E 00 68 0B 01 01 12 04 00 00 00 60 00 00 01 00 02 86 16", " ")
	// DevMap 设备字典
	DevMap = &devMap{devList: make(map[string]*Fwd)}
)

Functions

func CodePb2

func CodePb2(m *msgctl.MsgWithCtrl) []byte

CodePb2 code msgctl

func CodePb2NB

func CodePb2NB(m *msgnb.MsgNBOpen) []byte

CodePb2NB code msgctl

func DoCommand

func DoCommand(ver, tver, tra byte, addr int64, cid int32, cmd string, data []byte, br, rc byte, cid64 int64) []byte

DoCommand 将数据组装为设备指令 Args:

ver: 协议版本
tver:内部协议版本
tra:传输方式
addr:设备物理地址
cid:485方式时子设备物理地址
cmd:协议命令
data:数据
br:波特率
rc:校验位

func GetHelloMsg

func GetHelloMsg() *msgctl.MsgWithCtrl

GetHelloMsg send who is

func GetIMEIorSIM

func GetIMEIorSIM(data []string, idx int) string

GetIMEIorSIM 获取对应的imei或sim值

func GetServerTimeMsg

func GetServerTimeMsg(addr int64, t int, oneMoreByte bool, nocmd bool) []byte

GetServerTimeMsg 按服务器时间组装对时命令 Args:

t:设备时间格式1-rtu,2-slu,3-vslu,4-esu
oneMoreByte:是否携带秒字节
nocmd:是否需要组装为完整命令

func MsgCtlFromB64Str

func MsgCtlFromB64Str(s string) *msgctl.MsgWithCtrl

MsgCtlFromB64Str 从base64字符串解析pb2格式数据

func MsgCtlFromBytes

func MsgCtlFromBytes(b []byte) *msgctl.MsgWithCtrl

MsgCtlFromBytes decode MsgWithCtrl Args:

b:pb2序列化数据

func MsgFromBytes

func MsgFromBytes(b []byte, pb proto.Message) proto.Message

MsgFromBytes decode protomsg Args:

b:pb2序列化数据
pb: proto结构体

func Single2Tribytes

func Single2Tribytes(b float64) []byte

Single2Tribytes 量程转浮点参数 输入:量程,输出:幂指数,尾数高位,尾数低位

Types

type DataProcessor

type DataProcessor struct {
	// 日志
	Logger logger.Logger
	// VerInfo
	Verbose *verboseInfo
	// RemoteIP 远端ip
	RemoteIP string
	// imei
	Imei string
	// sim no
	Sim string
	// AreaCode 区域码
	AreaCode string
	// DevID 设备id
	DevID string
	// PhyID
	PhyID int64
	// LocalPort 本地监听端口
	LocalPort int
	// CheckRC 进行终端数据校验
	CheckRC bool
	// TimerNoSec 对时无秒字节
	TimerNoSec bool
	// ec1
	Ec1 byte
	// ec2
	Ec2 byte
}

DataProcessor 数据处理

func NewDP

func NewDP() *DataProcessor

NewDP 新的dp处理器

func (*DataProcessor) BuildCat1

func (dp *DataProcessor) BuildCat1(data []byte, addr int64, dev, idx, crypt, ver, afn, seq, prm int32) []byte

BuildCat1 创建命令

addr: 地址
prm: 启动标志位0-应答,1-主动下行
fun: 链路层功能码
crypt: 是否加密0 为不加密(身份认∕否认(证及密钥协商用到),调整1 代表明文加 MAC,2 代表密文加 MAC,3 密码信封(证书方式)
ver: 版本,1
afn: 应用层功能码
con: 是否需要设备应答0-不需要,1-需要
seq: 序号,中间层提供
area: 区域码

func (*DataProcessor) BuildCommand

func (dp *DataProcessor) BuildCommand(data []byte, addr int64, prm, fun, crypt, ver, afn, con, seq, pfc int32, area string) []byte

BuildCommand 创建命令

addr: 地址
prm: 启动标志位0-应答,1-主动下行
fun: 链路层功能码
crypt: 是否加密0 为不加密(身份认∕否认(证及密钥协商用到),调整1 代表明文加 MAC,2 代表密文加 MAC,3 密码信封(证书方式)
ver: 版本,1
afn: 应用层功能码
con: 是否需要设备应答0-不需要,1-需要
seq: 序号,中间层提供
area: 区域码

func (*DataProcessor) CalculateRC

func (dp *DataProcessor) CalculateRC(d []byte) byte

CalculateRC 计算校验值

func (*DataProcessor) MakeAddr

func (dp *DataProcessor) MakeAddr(addr int64, area string) []byte

MakeAddr 组装国标协议格式地址

func (*DataProcessor) ProcessCat1

func (dp *DataProcessor) ProcessCat1(d []byte) (r *Rtb)

ProcessCat1 处理cat1协议

func (*DataProcessor) ProcessCtl

func (dp *DataProcessor) ProcessCtl(b *[]byte) (lstf []*Fwd)

ProcessCtl 处理五零盛同 msgwithctrl数据

func (*DataProcessor) ProcessCtlCat1

func (dp *DataProcessor) ProcessCtlCat1(b *[]byte) (lstf []*Fwd)

ProcessCtlCat1 处理CAT1协议

func (*DataProcessor) ProcessDGSensor

func (dp *DataProcessor) ProcessDGSensor(d []byte) (r *Rtb)

ProcessDGSensor 处理灯杆传感器数据

func (*DataProcessor) ProcessGBOpen

func (dp *DataProcessor) ProcessGBOpen(d []byte) (r *Rtb)

ProcessGBOpen 处理国标协议

func (*DataProcessor) ProcessOpen

func (dp *DataProcessor) ProcessOpen(b *[]byte) (lstf []*Fwd)

ProcessOpen 处理五零盛同国标协议

func (*DataProcessor) ProcessTml

func (dp *DataProcessor) ProcessTml(d []byte) (r *Rtb)

ProcessTml 终端数据解析 Args:

	d: 原始数据
	ip:数据来源ip
	port:数据服务端口
 checkrc:是否进行数据校验

Return:

r: 处理反馈结果

func (*DataProcessor) ProcessWater

func (dp *DataProcessor) ProcessWater(d []byte) (r *Rtb)

ProcessWater 处理水浸上行数据

func (*DataProcessor) ProcessWhGBOpen

func (dp *DataProcessor) ProcessWhGBOpen(d []byte) (r *Rtb)

ProcessWhGBOpen 处理武汉国标协议

func (*DataProcessor) ProcessWhOpen

func (dp *DataProcessor) ProcessWhOpen(b *[]byte) (lstf []*Fwd)

ProcessWhOpen 处理武汉国标协议

func (*DataProcessor) ProcessYfDry

func (dp *DataProcessor) ProcessYfDry(d []byte) (r *Rtb)

ProcessYfDry 处理基于ip的设备数据

func (*DataProcessor) Reset

func (dp *DataProcessor) Reset()

Reset 复位

type Fwd

type Fwd struct {
	DataUDPAddr *net.UDPAddr // for udp only
	DataMsg     []byte       // 发送数据
	DataSrc     *[]byte      // 传递数据
	DataCmd     string       // 指令命令
	DataDst     string       // for tml, something like "wlst-rtu-1"
	DstIP       string       // 目标ip
	Area        string       // 设备区域码
	Ex          string       // 错误信息
	Src         string       // 原始数据
	Remark      string       // 备注信息,或其他想要传出的数据
	DstSIM      string       // 目标模块地址
	DstIMEI     string       // 目标imei
	DevID       string       // 设备devid
	Addr        int64        // 设备地址
	DataPT      int32        // command protect time
	DataSP      byte         // data send level 0-normal, 1-high
	DataType    byte         // 1-hex,2-string
	DstType     byte         // 0-unknow,1-tml,2-data,3-client,4-sdcmp,5-fwdcs,6-upgrade,7-iisi,8-vb,9-udp
	Tra         byte         // 1-socket, 2-485
	Job         byte         // 0-just send,1-need do something else
}

Fwd 数据解析结果需发送内容结构体

type Rtb

type Rtb struct {
	Do         []*Fwd // 需要进行的操作
	Unfinish   []byte // 未完结数据
	RemoteAddr string // 远程地址
	Ex         string // 错误信息
	Src        string // 原始数据
	CliID      uint64 // socket id
}

Rtb 数据解析结果

func ClassifyTmlData

func ClassifyTmlData(d []byte, imei, at int64, deviceID string, dataflag int32) (r *Rtb)

ClassifyTmlData 分类数据解析 Args:

	d: 原始数据
	ip:数据来源ip
	port:数据服务端口
 checkrc:是否进行数据校验

Return:

r: 处理反馈结果

func ClassifyTmlDataNB

func ClassifyTmlDataNB(rawdata, deviceID string, imei, at int64, dataflag int32) (r *Rtb)

ClassifyTmlDataNB NB数据解析 Args:

rawdata: base64原始数据

Return:

r: 处理反馈结果

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL