diff options
-rw-r--r-- | bridge.go | 39 |
1 files changed, 23 insertions, 16 deletions
@@ -9,7 +9,8 @@ import ( ) func main() { - log.Println("Test") + bridge := NewBridge("192.168.1.128") + log.Println(bridge.IPAddress) } type Bridge struct { @@ -19,15 +20,16 @@ type Bridge struct { } type BridgeInfo struct { - DeviceType string - FriendlyName string - ManufacturerURL string - ModelDescription string - ModelName string - ModelNumber string - ModelURL string - SerialNumber string - UDN string + DeviceType string `xml:"deviceType"` + FriendlyName string `xml:"friendlyName"` + Manufacturer string `xml:"manufacturer"` + ManufacturerURL string `xml:"manufacturerURL"` + ModelDescription string `xml:"modelDescription"` + ModelName string `xml:"modelName"` + ModelNumber string `xml:"modelNumber"` + ModelURL string `xml:"modelURL"` + SerialNumber string `xml:"serialNumber"` + UDN string `xml:"UDN"` } func NewBridge(ip string) *Bridge { @@ -37,31 +39,36 @@ func NewBridge(ip string) *Bridge { // TODO: other defaults here } - bridge.Info = GetBridgeInfo("192.168.1.128") // TODO: IP var + bridge.Info = GetBridgeInfo(bridge.IPAddress) // TODO: IP var return &bridge } // Go to http://<bridge_ip>/description.xml and parse the info func GetBridgeInfo(ip string) BridgeInfo { - response, error := http.Get(ip + "/description.xml") + response, error := http.Get("http://" + ip + "/description.xml") if response.StatusCode != 200 { log.Println("Bridge status error: %d", response.StatusCode) os.Exit(1) + } else if error != nil { + log.Println("Error: ", error) + os.Exit(1) } body, error := ioutil.ReadAll(response.Body) + defer response.Body.Close() if error != nil { log.Println("Error parsing bridge description XML") os.Exit(1) } - data := make(map[string]string) - error = xml.Unmarshal(body, data) + data := BridgeInfo{} + error = xml.Unmarshal(body, &data) if error != nil { log.Println("GetBridgeInfo error. Cannot parse data from description.") + log.Println(error) } - log.Println(data["FriendlyName"]) + log.Println(data) - return BridgeInfo{} // TODO: fill in + return data } |