| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package dataStruct
- import (
- "log"
- "time"
- "unicode/utf8"
- )
- // DTU管理命令
- const (
- CmdRegister = iota // 注册
- CmdHeartBeat // 心跳
- CmdCollect // 采集
- )
- type DTUManageCmd struct {
- SN string `json:"sn"`
- Cmd int `json:"cmd"`
- Data []byte `json:"data"`
- }
- // DmcUnmarshal 解析DTU上报
- // 注册和心跳格式:注册包@202402200322 心跳包 $202402200322
- // SN长度为8-16个字符
- func (dmc *DTUManageCmd) DmcUnmarshal(data []byte) {
- size := utf8.RuneCount(data)
- log.Println("DTU采集:", data)
- // SN 长度在 8-16个字符 (注册包在9-17个字符)
- if size > 8 && size < 18 {
- if data[0] == '@' {
- dmc.Cmd = CmdRegister
- dmc.SN = string(data[1:])
- return
- } else if data[0] == '$' {
- dmc.Cmd = CmdHeartBeat
- dmc.SN = string(data[1:])
- return
- }
- }
- dmc.Data = data
- dmc.Cmd = CmdCollect
- }
- type DtuRegisterChanMsg struct {
- Sn string
- Value *ClientState
- }
- type DateTime struct {
- Year int
- Month time.Month
- Day int
- Hour int
- Minute int
- Second int
- }
- // DataToTimeStamp 日期转时间戳
- func (dt *DateTime) DataToTimeStamp() int64 {
- return time.Date(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, 0, time.Local).Unix()
- }
- // TimeStampToData 时间戳转日期
- func (dt *DateTime) TimeStampToData(t int64) *DateTime {
- v := time.Unix(t, 0)
- m := &DateTime{}
- m.Year = v.Year()
- m.Month = v.Month()
- m.Day = v.Day()
- m.Hour = v.Hour()
- m.Minute = v.Minute()
- m.Second = v.Second()
- return m
- }
- type MeterRef struct {
- PvRef float32
- LvRef float32
- }
|