klink.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package klink
  2. import "github.com/gogf/gf/encoding/gjson"
  3. type PacketAction string
  4. const (
  5. DevSendAction PacketAction = "devSend" // 设备上报数据
  6. BatchDevSendAction PacketAction = "batchDevSend" // 网关批量上报设备数据
  7. CloudSendAction PacketAction = "cloudSend" // 云端给设备下发指令
  8. ReportFirmwareAction PacketAction = "reportFirmware" // 设备上报固件信息
  9. DevLoginAction PacketAction = "devLogin" // 子设备上线
  10. DevLogoutAction PacketAction = "devLogout" // 子设备下线
  11. )
  12. // DevLogin 子设备上线
  13. type DevLogin struct {
  14. Action string `json:"action"`
  15. MsgId int64 `json:"msgId"`
  16. DeviceCode string `json:"deviceCode"`
  17. Pk string `json:"pk"`
  18. SubDeviceId string `json:"subDeviceId"`
  19. Timestamp int64 `json:"timestamp"`
  20. }
  21. // DevLogout 子设备下线
  22. type DevLogout struct {
  23. Action string `json:"action"`
  24. Pk string `json:"pk"`
  25. MsgId int64 `json:"msgId"`
  26. DeviceCode string `json:"deviceCode"`
  27. SubDeviceId string `json:"subDeviceId"`
  28. Timestamp int64 `json:"timestamp"`
  29. }
  30. // DevSend 设备上报数据帧
  31. type DevSend struct {
  32. Action string `json:"action"`
  33. MsgId int64 `json:"msgId"`
  34. DeviceCode string `json:"deviceCode"`
  35. SubDeviceId string `json:"subDeviceId"`
  36. Data *DevSendData `json:"data"`
  37. Timestamp int64 `json:"timestamp"`
  38. }
  39. func (d *DevSend) Marshal() ([]byte, error) {
  40. return gjson.New(d).ToJson()
  41. }
  42. func (d *DevSend) UnMarshal(bytes []byte) error {
  43. j, err := gjson.DecodeToJson(bytes)
  44. if err != nil {
  45. return err
  46. }
  47. return j.Struct(d)
  48. }
  49. type DevSendData struct {
  50. Cmd string `json:"cmd"`
  51. Params *gjson.Json `json:"params"`
  52. }
  53. type CloudSendData struct {
  54. Cmd string `json:"cmd"`
  55. Params *gjson.Json `json:"params"`
  56. }
  57. type CloudSend struct {
  58. Action string `json:"action"`
  59. MsgId int64 `json:"msgId"`
  60. DeviceCode string `json:"deviceCode"`
  61. Timestamp int64 `json:"timestamp"`
  62. Data *CloudSendData `json:"data"`
  63. SubDeviceId string `json:"subDeviceId"`
  64. }
  65. func (c *CloudSend) Marshal() ([]byte, error) {
  66. return gjson.New(c).ToJson()
  67. }
  68. func (c *CloudSend) UnMarshal(bytes []byte) error {
  69. j, err := gjson.DecodeToJson(bytes)
  70. if err != nil {
  71. return err
  72. }
  73. return j.Struct(c)
  74. }