/
device.go
125 lines (97 loc) · 2.26 KB
/
device.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package core
import (
"encoding/json"
m "github.com/e154/smart-home/models"
. "github.com/e154/smart-home/models/devices"
)
type Device struct {
dev *m.Device
node *Node
}
// run command
func (d *Device) RunCommand(name string, args []string) (result *DevCommandResponse) {
request := &DevCommandRequest{
Name: name,
Args: args,
}
result = &DevCommandResponse{}
data, err := json.Marshal(request)
if err != nil {
result.Error = err.Error()
return
}
nodeResult, err := d.node.Send(d.dev, data)
if err != nil {
result.Error = err.Error()
return
}
if nodeResult.Response == nil || len(nodeResult.Response) == 0 {
result.Error = "return nil result from response"
return
}
if err = json.Unmarshal(nodeResult.Response, result); err != nil {
result.Error = err.Error()
return
}
//debug.Println(nodeResult)
result.Time = nodeResult.Time
return
}
func (d *Device) SmartBus(command []byte) (result *DevSmartBusResponse) {
request := &DevSmartBusRequest{
Command: command,
}
result = &DevSmartBusResponse{}
data, err := json.Marshal(request)
if err != nil {
result.Error = err.Error()
return
}
nodeResult, err := d.node.Send(d.dev, data)
if err = json.Unmarshal(nodeResult.Response, result); err != nil {
result.Error = err.Error()
return
}
//debug.Println(nodeResult)
//debug.Println(result)
result.Time = nodeResult.Time
return
}
func (d *Device) ModBus(f string, address, count uint16, command []uint16) (result *DevModBusResponse) {
if d.dev.Type == DevTypeModbusRtu && d.node.stat.Thread == 0 {
result = &DevModBusResponse{
BaseResponse: BaseResponse{
Error: "no serial device",
},
}
return
}
request := &DevModBusRequest{
Function: f,
Address: address,
Count: count,
Command: command,
}
result = &DevModBusResponse{}
data, err := json.Marshal(request)
if err != nil {
result.Error = err.Error()
log.Error(err.Error())
return
}
nodeResult, err := d.node.Send(d.dev, data)
if err != nil {
result.Error = err.Error()
//log.Error(err.Error())
return
}
if err = json.Unmarshal(nodeResult.Response, result); err != nil {
result.Error = err.Error()
log.Error(err.Error())
return
}
//debug.Println(nodeResult)
//debug.Println(result)
result.Time = nodeResult.Time
return
}