-
Notifications
You must be signed in to change notification settings - Fork 6
/
main.go
79 lines (64 loc) · 1.54 KB
/
main.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
package main
import (
"fmt"
"github.com/immesys/spawnpoint/spawnable"
bw2 "gopkg.in/immesys/bw2bind.v5"
"time"
)
const (
PONUM = "2.1.1.2"
)
func NewInfoPO(time int64, state bool) bw2.PayloadObject {
msg := map[string]interface{}{
"time": time,
"state": state}
po, err := bw2.CreateMsgPackPayloadObject(bw2.FromDotForm(PONUM), msg)
if err != nil {
panic(err)
}
return po
}
func main() {
bwClient := bw2.ConnectOrExit("")
params := spawnable.GetParamsOrExit()
bwClient.OverrideAutoChainTo(true)
bwClient.SetEntityFromEnvironOrExit()
baseuri := params.MustString("svc_base_uri")
poll_interval := params.MustString("poll_interval")
pollInt, err := time.ParseDuration(poll_interval)
if err != nil {
panic(err)
}
service := bwClient.RegisterService(baseuri, "s.vplug")
iface := service.RegisterInterface("vplug", "i.xbos.plug")
params.MergeMetadata(bwClient)
v := NewVplug()
iface.SubscribeSlot("state", func(msg *bw2.SimpleMessage) {
po := msg.GetOnePODF(PONUM)
if po == nil {
fmt.Println("Received actuation command without valid PO, dropping")
return
}
msgpo, err := bw2.LoadMsgPackPayloadObject(po.GetPONum(), po.GetContents())
if err != nil {
fmt.Println(err)
return
}
var data map[string]interface{}
err = msgpo.ValueInto(&data)
if err != nil {
fmt.Println(err)
return
}
v.ActuatePlug(data["state"].(bool))
})
for {
status := v.GetStatus()
timestamp := time.Now().UnixNano()
msg := NewInfoPO(
timestamp,
status)
iface.PublishSignal("info", msg)
time.Sleep(pollInt)
}
}