/
main.go
61 lines (51 loc) · 1.64 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
package main
import (
"github.com/codegangsta/negroni"
"github.com/gorilla/mux"
"github.com/zdebeer99/weblib/handler"
"github.com/zdebeer99/zhome/pkg/config"
"github.com/zdebeer99/zhome/pkg/hardware"
se "github.com/zdebeer99/zhome/pkg/stateengine"
"github.com/zdebeer99/zhome/pkg/web"
"log"
)
var appConfig = config.Load()
//***
func main() {
load(appConfig)
r := mux.NewRouter()
r.PathPrefix("/html/").Handler(handler.FileServer("./static/"))
r.PathPrefix("/css/").Handler(handler.FileServer("./static/"))
r.PathPrefix("/js/").Handler(handler.FileServer("./static"))
r.Handle("/charts", handler.File("./static/html/charts/index.html"))
//r.Handle("/config", handler.File("./static/html/config/index.html"))
r.Handle("/", handler.File("./static/html/home/index.html"))
web.RegisterApi(r.PathPrefix("/api").Subrouter())
n := negroni.Classic()
n.UseHandler(r)
log.Println("Run web service. on ", appConfig.BindAddress)
n.Run(appConfig.BindAddress)
}
// load stateengine setup data.
func load(cfg *config.Config) {
se.AppConfig = cfg
state := se.State
//Register devices
for _, device := range cfg.Devices {
state.RegisterDevice(device.Name, hardware.NewDeviceComm(device.DeviceType, device.Name, device.Connection))
//Register Channels
for _, ch := range device.Channels {
state.RegisterChannel(ch.Name, device.Name, ch.Address, ch.ChannelType)
}
}
//Register Events
for _, trigger := range cfg.Triggers {
state.AddTrigger(se.Trigger(trigger))
}
//Register Schedules
for _, schedule := range cfg.Scheduler {
state.AddSchedule(schedule.Name, schedule.When, schedule.Command)
}
log.Println("Config Loaded.")
se.Start()
}