chzblamp.go 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. package protocol
  2. import (
  3. json2 "encoding/json"
  4. "time"
  5. )
  6. // 设置集中器超时时间
  7. type CHZB_Waittime struct {
  8. Waittime uint `json:"waittime"` //集中器超时时间,毫秒为单位
  9. }
  10. type Pack_CHZB_Waittime struct {
  11. Header
  12. Data CHZB_Waittime `json:"data"`
  13. }
  14. func (o *Pack_CHZB_Waittime) EnCode(id, gid string, seq uint64, wait uint) (string, error) {
  15. o.SetHeaderData(id, gid, seq)
  16. o.Data.Waittime = wait
  17. return json.MarshalToString(o)
  18. }
  19. func (o *Pack_CHZB_Waittime) DeCode(message string) error {
  20. return json.UnmarshalFromString(message, o)
  21. }
  22. // 手动开/关灯,没有PoleIDs则广播开关灯
  23. type CHZB_Switch struct {
  24. LampIDs []uint32 `json:"lampids,omitempty"` //需要控制的灯,长和zigbee末端编号,如果没有编号,则广播控制
  25. Switch uint8 `json:"switch"` //1开,0关
  26. Brightness uint8 `json:"brightness"` //亮度0~100
  27. Recovery uint `json:"recovery"` //恢复时控时间,单位秒
  28. }
  29. type Pack_CHZB_Switch struct {
  30. Header
  31. Data CHZB_Switch `json:"data"`
  32. }
  33. func (o *Pack_CHZB_Switch) EnCode(id, gid string, seq uint64, Switch, brightness uint8,
  34. recovery uint, lampIDs []uint32) (string, error) {
  35. o.SetHeaderData(id, gid, seq)
  36. o.Data.LampIDs = lampIDs
  37. o.Data.Switch = Switch
  38. o.Data.Brightness = brightness
  39. o.Data.Recovery = recovery
  40. return json.MarshalToString(o)
  41. }
  42. func (o *Pack_CHZB_Switch) DeCode(message string) error {
  43. return json.UnmarshalFromString(message, o)
  44. }
  45. // 手动恢复时控,没有PoleIDs则广播开关灯
  46. type CHZB_LampComm struct {
  47. LampIDs []uint32 `json:"lampids,omitempty"` //需要控制的灯,长和zigbee末端编号,如果没有编号,则广播控制
  48. }
  49. type Pack_CHZB_RecoveryTime struct {
  50. Header
  51. Data CHZB_LampComm `json:"data"`
  52. }
  53. func (o *Pack_CHZB_RecoveryTime) EnCode(id, gid string, seq uint64, lampIDs []uint32) (string, error) {
  54. o.SetHeaderData(id, gid, seq)
  55. o.Data.LampIDs = lampIDs
  56. return json.MarshalToString(o)
  57. }
  58. func (o *Pack_CHZB_RecoveryTime) DeCode(message string) error {
  59. return json.UnmarshalFromString(message, o)
  60. }
  61. // 开关灯时间
  62. type CHZB_OnOffTime struct {
  63. OnHour uint8 `json:"onhour"`
  64. OnMinite uint8 `json:"onminite"`
  65. OffHour uint8 `json:"offhour"`
  66. OffMinite uint8 `json:"offminite"`
  67. Brightness uint8 `json:"brightness"` //亮度0~100
  68. }
  69. func (o *CHZB_OnOffTime) SetData(onhour, onminite, offhour, offminite, brightness uint8) {
  70. o.OnHour = onhour
  71. o.OnMinite = onminite
  72. o.OffHour = offhour
  73. o.OffMinite = offminite
  74. o.Brightness = brightness
  75. }
  76. func (o *CHZB_OnOffTime) InTimeRange(t time.Time) bool {
  77. h := uint8(t.Hour())
  78. m := uint8(t.Minute())
  79. if o.OnHour > o.OffHour { //跨日情况,例如19:30~5:30,开灯时间大于关灯时间
  80. if h > o.OnHour || h < o.OffHour || (h == o.OnHour && m >= o.OnMinite) ||
  81. (h == o.OffHour && m <= o.OffMinite) {
  82. return true
  83. }
  84. } else if o.OnHour < o.OffHour { //开灯时间小于关灯时间
  85. if (h > o.OnHour && h < o.OffHour) ||
  86. (h == o.OnHour && m >= o.OnMinite) ||
  87. (h == o.OffHour && m <= o.OffMinite) {
  88. return true
  89. }
  90. } else { //开灯时间等于关灯时间
  91. if h == o.OnHour && m >= o.OnMinite && m <= o.OffMinite {
  92. return true
  93. }
  94. }
  95. return false
  96. }
  97. // 设置开关灯时间
  98. type CHZB_SetOnOffTime struct {
  99. LampIDs []uint32 `json:"lampids,omitempty"` //需要控制的灯,长和zigbee末端编号,如果没有编号,则广播控制
  100. OnOffTime []CHZB_OnOffTime `json:"onofftime"` //开关灯时间
  101. }
  102. type Pack_SetOnOffTime struct {
  103. Header
  104. Data CHZB_SetOnOffTime `json:"data"`
  105. }
  106. func (o *Pack_SetOnOffTime) EnCode(id, gid string, seq uint64, lampIDs []uint32, onofftime []CHZB_OnOffTime) (string, error) {
  107. o.SetHeaderData(id, gid, seq)
  108. o.Data.LampIDs = lampIDs
  109. o.Data.OnOffTime = onofftime
  110. return json.MarshalToString(o)
  111. }
  112. func (o *Pack_SetOnOffTime) DeCode(message string) error {
  113. return json.UnmarshalFromString(message, o)
  114. }
  115. // 设置集中器超时时间
  116. type CHZB_QueryOnOffTime struct {
  117. Poleid uint32 `json:"poleid"` //单灯ID
  118. }
  119. type Pack_CHZB_QueryOnOffTime struct {
  120. Header
  121. Data CHZB_QueryOnOffTime `json:"data"`
  122. }
  123. func (o *Pack_CHZB_QueryOnOffTime) EnCode(id, gid string, seq uint64, poleid uint32) (string, error) {
  124. o.SetHeaderData(id, gid, seq)
  125. o.Data.Poleid = poleid
  126. return json.MarshalToString(o)
  127. }
  128. func (o *Pack_CHZB_QueryOnOffTime) DeCode(message string) error {
  129. return json.UnmarshalFromString(message, o)
  130. }
  131. type CHZB_QueryOnOffTimeAck struct {
  132. StateError
  133. LampID uint32 `json:"lampid"` //单灯ID
  134. OnOffTime []CHZB_OnOffTime `json:"onofftime,omitempty"` //开关灯时间
  135. }
  136. type Pack_CHZB_QueryOnOffTimeAck struct {
  137. Header
  138. Data CHZB_QueryOnOffTimeAck `json:"data"`
  139. }
  140. func (o *Pack_CHZB_QueryOnOffTimeAck) EnCode(id, gid string, seq uint64, poleid uint32, err error, oot []CHZB_OnOffTime) (string, error) {
  141. o.SetHeaderData(id, gid, seq)
  142. o.Data.StateError.SetStateErrorData(err)
  143. o.Data.LampID = poleid
  144. o.Data.OnOffTime = oot
  145. return json.MarshalToString(o)
  146. }
  147. func (o *Pack_CHZB_QueryOnOffTimeAck) DeCode(message string) error {
  148. return json.UnmarshalFromString(message, o)
  149. }
  150. type CHZB_Lamps struct {
  151. MapLamps map[uint32]string `json:"lamps,omitempty"` //编号到灯控did
  152. }
  153. type Pack_CHZB_LampIDs struct {
  154. Header
  155. Data CHZB_Lamps `json:"data"`
  156. }
  157. func (o *Pack_CHZB_LampIDs) EnCode(id, gid string, seq uint64, mapLamps map[uint32]string) (string, error) {
  158. o.SetHeaderData(id, gid, seq)
  159. o.Data.MapLamps = mapLamps
  160. return json.MarshalToString(o)
  161. }
  162. func (o *Pack_CHZB_LampIDs) DeCode(message string) error {
  163. return json.UnmarshalFromString(message, o)
  164. }
  165. type CHZB_LampData struct {
  166. StateError
  167. Data map[uint16]float64 `json:"data,omitempty"`
  168. }
  169. type CHZB_UploadData struct {
  170. TID uint16 `json:"tid"`
  171. Data map[string]*CHZB_LampData `json:"data"`
  172. }
  173. type Pack_CHZB_UploadData struct {
  174. Header
  175. Data CHZB_UploadData `json:"data"`
  176. }
  177. func (o *Pack_CHZB_UploadData) EnCode(id, gid string, seq uint64, tid uint16, lampData map[string]*CHZB_LampData) (string, error) {
  178. o.SetHeaderData(id, gid, seq)
  179. o.Data.TID = tid
  180. o.Data.Data = lampData
  181. marshal, err := json2.Marshal(o)
  182. return string(marshal), err
  183. //return json.MarshalToString(o)
  184. }
  185. func (o *Pack_CHZB_UploadData) DeCode(message string) error {
  186. return json.UnmarshalFromString(message, o)
  187. }
  188. type CHZB_SeqLampAck struct {
  189. MapLamp map[uint32]*StateError `json:"lamp,omitempty"`
  190. }
  191. type Pack_CHZB_SeqLampAck struct {
  192. Header
  193. Data CHZB_SeqLampAck `json:"data"`
  194. }
  195. func (o *Pack_CHZB_SeqLampAck) EnCode(id, gid string, seq uint64, maplamp map[uint32]*StateError) (string, error) {
  196. o.SetHeaderData(id, gid, seq)
  197. o.Data.MapLamp = maplamp
  198. return json.MarshalToString(o)
  199. }
  200. func (o *Pack_CHZB_SeqLampAck) DeCode(message string) error {
  201. return json.UnmarshalFromString(message, o)
  202. }
  203. // 手动恢复时控,没有PoleIDs则广播开关灯
  204. type EmptyObject struct {
  205. }
  206. type Pack_CHZB_EmptyObject struct {
  207. Header
  208. Data EmptyObject `json:"data"`
  209. }
  210. func (o *Pack_CHZB_EmptyObject) EnCode(id, gid string, seq uint64) (string, error) {
  211. o.SetHeaderData(id, gid, seq)
  212. return json.MarshalToString(o)
  213. }
  214. func (o *Pack_CHZB_EmptyObject) DeCode(message string) error {
  215. return json.UnmarshalFromString(message, o)
  216. }
  217. // 查询单灯当前时间
  218. type CHZB_LampComm1 struct {
  219. LampID uint32 `json:"lampid"` //需要控制的灯,长和zigbee末端编号
  220. }
  221. type Pack_CHZB_QueryTime struct {
  222. Header
  223. Data CHZB_LampComm1 `json:"data"`
  224. }
  225. func (o *Pack_CHZB_QueryTime) EnCode(id, gid string, seq uint64, lampID uint32) (string, error) {
  226. o.SetHeaderData(id, gid, seq)
  227. o.Data.LampID = lampID
  228. return json.MarshalToString(o)
  229. }
  230. func (o *Pack_CHZB_QueryTime) DeCode(message string) error {
  231. return json.UnmarshalFromString(message, o)
  232. }
  233. // 开关灯时间
  234. type CHZB_LampTime struct {
  235. Hour uint8 `json:"hour"`
  236. Minite uint8 `json:"minite"`
  237. Second uint8 `json:"second"`
  238. }
  239. type CHZB_QueryTimeAck struct {
  240. StateError
  241. LampID uint32 `json:"lampid"` //单灯ID
  242. LampTime *CHZB_LampTime `json:"lamptime,omitempty"` //当前时间
  243. }
  244. type Pack_CHZB_QueryTimeAck struct {
  245. Header
  246. Data CHZB_QueryTimeAck `json:"data"`
  247. }
  248. func (o *Pack_CHZB_QueryTimeAck) EnCode(id, gid string, seq uint64, lampid uint32, err error, pt *CHZB_LampTime) (string, error) {
  249. o.SetHeaderData(id, gid, seq)
  250. o.Data.SetStateErrorData(err)
  251. o.Data.LampID = lampid
  252. o.Data.LampTime = pt
  253. return json.MarshalToString(o)
  254. }
  255. func (o *Pack_CHZB_QueryTimeAck) DeCode(message string) error {
  256. return json.UnmarshalFromString(message, o)
  257. }
  258. const (
  259. LE_UNKNOWN = 0 //未知,初始值
  260. LE_OK = 1000 //正常(正常开灯或熄灯状态)
  261. LE_ON = 1001 //亮灯异常(本该关灯状态)
  262. LE_ON_BRIGHTNESS = 1002 //亮灯,但亮度异常(本该开灯状态,但开灯亮度不对)
  263. LE_OFF = 1003 //熄灯异常(本该开灯,但熄灯了)
  264. )
  265. type LampAlarm struct {
  266. DID string `json:"did"` //灯控编码
  267. AlarmType uint16 `json:"type"` //告警类型
  268. StartTime string `json:"tstart"` //开始时间
  269. EndTime string `json:"tend,omitempty"` //结束时间
  270. AlarmBrightness uint8 `json:"alarmbrightness"` //告警亮度
  271. Brightness uint8 `json:"brightness"` //恢复亮度
  272. }
  273. type Pack_CHZB_LampAlarm struct {
  274. Header
  275. Data *LampAlarm `json:"data"`
  276. }
  277. func (o *Pack_CHZB_LampAlarm) EnCode(id, gid string, seq uint64, a *LampAlarm) (string, error) {
  278. o.SetHeaderData(id, gid, seq)
  279. o.Data = a
  280. return json.MarshalToString(o)
  281. }
  282. func (o *Pack_CHZB_LampAlarm) DeCode(message string) error {
  283. return json.UnmarshalFromString(message, o)
  284. }