From 483b758f27e212c0684cdb6ca065c56765818e26 Mon Sep 17 00:00:00 2001 From: Ben Burwell Date: Fri, 25 May 2018 00:01:10 -0400 Subject: Run dep init --- vendor/github.com/benburwell/gohue/schedule.go | 109 +++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 vendor/github.com/benburwell/gohue/schedule.go (limited to 'vendor/github.com/benburwell/gohue/schedule.go') diff --git a/vendor/github.com/benburwell/gohue/schedule.go b/vendor/github.com/benburwell/gohue/schedule.go new file mode 100644 index 0000000..52315f9 --- /dev/null +++ b/vendor/github.com/benburwell/gohue/schedule.go @@ -0,0 +1,109 @@ +/* +* schedule.go +* GoHue library for Philips Hue +* Copyright (C) 2016 Collin Guarino (Collinux) collin.guarino@gmail.com +* License: GPL version 2 or higher http://www.gnu.org/licenses/gpl.html + */ +// http://www.developers.meethue.com/documentation/schedules-api-0 + +package hue + +import ( + "encoding/json" + "fmt" +) + +// Schedule struct defines attributes of Alarms and Timers +type Schedule struct { + Name string `json:"name"` + Description string `json:"description"` + Command struct { + Address string `json:"address"` + Body struct { + Scene string `json:"scene"` + } `json:"body"` + Method string `json:"method"` + } `json:"command"` + Localtime string `json:"localtime"` + Time string `json:"time"` + Created string `json:"created"` + Status string `json:"status"` + Autodelete bool `json:"autodelete"` + ID string +} + +// GetAllSchedules gets Alarms and Timers in a Schedule struct. +func (bridge *Bridge) GetAllSchedules() ([]Schedule, error) { + uri := fmt.Sprintf("/api/%s/schedules", bridge.Username) + body, _, err := bridge.Get(uri) + if err != nil { + return []Schedule{}, err + } + + // Each index key is the topmost element of the json array. + // Unmarshal the array, loop through each index key, and add it to the list + schedules := map[string]Schedule{} + err = json.Unmarshal(body, &schedules) + if err != nil { + return []Schedule{}, err + } + scheduleList := []Schedule{} + for key, value := range schedules { + schedule := Schedule{} + schedule = value + schedule.ID = key + scheduleList = append(scheduleList, schedule) + } + return scheduleList, nil +} + +// GetSchedule gets the attributes for an individual schedule. +// This is used to optimize time when updating the state of a schedule item. +// Note: The ID is not an index, it's a unique key generated for each schedule. +func (bridge *Bridge) GetSchedule(id string) (Schedule, error) { + uri := fmt.Sprintf("/api/%s/schedules/%s", bridge.Username, id) + body, _, err := bridge.Get(uri) + if err != nil { + return Schedule{}, err + } + + schedule := Schedule{} + err = json.Unmarshal(body, &schedule) + if err != nil { + return Schedule{}, err + } + return schedule, nil +} + +// CreateSchedule TODO: NOT TESTED, NOT FULLY IMPLEMENTED +func (bridge *Bridge) CreateSchedule(schedule Schedule) error { + uri := fmt.Sprintf("/api/%s/schedules", bridge.Username) + body, _, err := bridge.Post(uri, schedule) + if err != nil { + return err + } + + fmt.Println("CREATE SCHEDULE BODY: ", string(body)) + return nil +} + +// func (schedule *Schedule) Disable() { +// +// } +// +// func (schedule *Schedule) Enable() { +// +// } +// +// +// func (bridge *Bridge) GetSchedule(index int) (interface{}, error) { +// return []interface{}, nil +// } +// +// func (bridge *Bridge) SetSchedule(index int, schedule interface{}) error { +// return nil +// } +// +// func (bridge *Bridge) DeleteSchedule(index int) error { +// return nil +// } -- cgit v1.2.3