aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/benburwell/gohue/schedule.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/benburwell/gohue/schedule.go')
-rw-r--r--vendor/github.com/benburwell/gohue/schedule.go109
1 files changed, 109 insertions, 0 deletions
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
+// }