uemis.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package drviers
  2. import (
  3. "errors"
  4. "github.com/yuguorong/go/log"
  5. )
  6. type Uemis struct {
  7. baseDevice
  8. chnExit chan bool
  9. loopserver bool
  10. }
  11. func (u *Uemis) Run() error {
  12. u.loopserver = true
  13. for u.loopserver {
  14. select {
  15. case msg := <-u.Route[1].router[0]:
  16. b := msg.([]byte)
  17. devName := ""
  18. mret := u.Route[1].iproto.ParsePacket(b, &devName)
  19. if mret != nil && devName != "" {
  20. v := mret.(map[string]interface{})
  21. dev := devName[8:]
  22. dev = u.DeviceName + "-00000000" + dev
  23. log.Info(dev, v)
  24. telemetry := u.Route[0].iproto.PackageCmd(dev, mret)
  25. u.Route[0].ibus.Send(u.Route[0].iChn, telemetry)
  26. }
  27. case <-u.chnExit:
  28. u.loopserver = false
  29. }
  30. }
  31. return nil
  32. }
  33. func (u *Uemis) Open(...interface{}) error {
  34. lenr := len(u.Route)
  35. if lenr < 1 {
  36. return errors.New("wrong route config")
  37. } else if lenr < 2 {
  38. u.SetRoute(u, "HJ212", "dtuFtpServer", "HJ212", 0)
  39. }
  40. if !u.loopserver {
  41. go u.Run()
  42. }
  43. return nil
  44. }
  45. func (u *Uemis) Close() error {
  46. u.loopserver = false
  47. u.chnExit <- true
  48. return nil
  49. }
  50. func (u *Uemis) GetDevice(s string) interface{} {
  51. return u
  52. }
  53. type SAirModel struct {
  54. Id string `json:"id"`
  55. DevName string `json:"devName"`
  56. Code string `json:"code"`
  57. Protocol string `json:"protocol"`
  58. GwDevId string `json:"gwDevId"`
  59. }
  60. type UemisDrv struct {
  61. baseDriver
  62. }
  63. func (drv *UemisDrv) GetModel() interface{} {
  64. return &[]SAirModel{}
  65. }
  66. func (drv *UemisDrv) CreateDevice(model interface{}) (int, []IDevice) {
  67. drv.baseDriver.CreateDevice(model)
  68. dev := new(Uemis)
  69. dev.loopserver = false
  70. dev.Probe(drv.Name(), drv)
  71. drv.baseDriver.DevList[drv.Name()] = dev
  72. return drv.baseDriver.CreateDevice(model)
  73. }
  74. func NewUemis(param interface{}) IDriver {
  75. drv := new(UemisDrv)
  76. return drv
  77. }
  78. func init() {
  79. driverReg["SAIR10"] = NewUemis
  80. }