dtu_cmd.go 854 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package iotStruct
  2. import (
  3. "log"
  4. "unicode/utf8"
  5. )
  6. // DTU管理命令
  7. const (
  8. CmdRegister = iota // 注册
  9. CmdHeartBeat // 心跳
  10. CmdCollect // 采集
  11. )
  12. type DTUManageCmd struct {
  13. SN string `json:"sn"`
  14. Cmd int `json:"cmd"`
  15. Data []byte `json:"data"`
  16. }
  17. // DmcUnmarshal 解析DTU上报
  18. // 注册和心跳格式:注册包@202402200322 心跳包 $202402200322
  19. // SN长度为8-16个字符
  20. func (dmc *DTUManageCmd) DmcUnmarshal(data []byte) {
  21. size := utf8.RuneCount(data)
  22. log.Println("DTU采集:", data)
  23. // SN 长度在 8-16个字符 (注册包在9-17个字符)
  24. if size > 8 && size < 18 {
  25. if data[0] == '@' {
  26. dmc.Cmd = CmdRegister
  27. dmc.SN = string(data[1:])
  28. return
  29. } else if data[0] == '$' {
  30. dmc.Cmd = CmdHeartBeat
  31. dmc.SN = string(data[1:])
  32. return
  33. }
  34. }
  35. dmc.Data = data
  36. dmc.Cmd = CmdCollect
  37. }