func (self *Thermostat) Event(ev *pubsub.Event) { now := ev.Timestamp.Local() // must use Local time, as schedule is in local switch ev.Topic { case "temp": // temperature device update device := services.Config.LookupDeviceName(ev) if dev, ok := self.Devices[device]; ok { temp, _ := ev.Fields["temp"].(float64) dev.Update(temp, now) self.Check(now) } case "house": // house state update state := ev.Fields["state"] self.Occupied = (state != "Empty") self.Check(now) case "command": if ev.Target() == "ch" { value, ok := ev.Fields["value"].(string) if ok { err := self.setParty(value, ev.Timestamp) if err == nil { self.Check(now) // TODO - response } else { // TODO - error response } } } } }