package main import ( "log" "os" "os/signal" "syscall" ) func main() { log.SetFlags(0) flags := Flags{} flags.FromArgs() log.Printf("+++ Started Sia server version %s +++", Version()) defer log.Printf("--- Stopped Sia server version %s ---", Version()) config := GetStartupConfig(flags.ConfigPath) tx := make(chan MQTTMessage) coverMovement := NewRoute("cover/+/movement", QoS2) plugAction := NewRoute("plug/+/action", QoS2) go MQTTRun(config.MQTT, tx, coverMovement, plugAction) go HomematicRun(config.Homematic, tx) go ShellyRun(config.Shelly, tx, coverMovement) go TPLinkRun(config.TPLink, tx, plugAction) Await(syscall.SIGTERM, syscall.SIGINT) } func Await(signals ...syscall.Signal) { listener := make(chan os.Signal, 1) for _, s := range signals { signal.Notify(listener, s) } sig := <-listener log.Printf("Received OS signal '%v'\n", sig) }