forked from wirenboard/wb-rules
/
main.go
66 lines (61 loc) · 1.63 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
package main
import (
wbrules "./wbrules"
"flag"
"github.com/contactless/wbgo"
"time"
)
const DRIVER_CLIENT_ID = "rules"
func main() {
brokerAddress := flag.String("broker", "tcp://localhost:1883", "MQTT broker url")
editDir := flag.String("editdir", "", "Editable script directory")
debug := flag.Bool("debug", false, "Enable debugging")
useSyslog := flag.Bool("syslog", false, "Use syslog for logging")
mqttDebug := flag.Bool("mqttdebug", false, "Enable MQTT debugging")
flag.Parse()
if flag.NArg() < 1 {
wbgo.Error.Fatal("must specify rule file/directory name(s)")
}
if *useSyslog {
wbgo.UseSyslog()
}
if *debug {
wbgo.SetDebuggingEnabled(true)
}
if *mqttDebug {
wbgo.EnableMQTTDebugLog()
}
model := wbrules.NewCellModel()
mqttClient := wbgo.NewPahoMQTTClient(*brokerAddress, DRIVER_CLIENT_ID, true)
driver := wbgo.NewDriver(model, mqttClient)
driver.SetAutoPoll(false)
driver.SetAcceptsExternalDevices(true)
engine := wbrules.NewESEngine(model, mqttClient)
gotSome := false
watcher := wbgo.NewDirWatcher("\\.js$", engine)
if *editDir != "" {
engine.SetSourceRoot(*editDir)
}
for _, path := range flag.Args() {
if err := watcher.Load(path); err != nil {
wbgo.Error.Printf("error loading script file/dir %s: %s", path, err)
} else {
gotSome = true
}
}
if !gotSome {
wbgo.Error.Fatalf("no valid scripts found")
}
if err := driver.Start(); err != nil {
wbgo.Error.Fatalf("error starting the driver: %s", err)
}
if *editDir != "" {
rpc := wbgo.NewMQTTRPCServer("wbrules", mqttClient)
rpc.Register(wbrules.NewEditor(engine))
rpc.Start()
}
engine.Start()
for {
time.Sleep(1 * time.Second)
}
}