From cc9590cf3d74574f7825c2faad0b822460927109 Mon Sep 17 00:00:00 2001 From: Thomas Renger Date: Thu, 14 Jan 2021 13:18:36 +0100 Subject: [PATCH] Add access to homecoach API, still missing merge --- weather.go | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/weather.go b/weather.go index ad7994e..fce4795 100644 --- a/weather.go +++ b/weather.go @@ -16,7 +16,8 @@ const ( // DefaultAuthURL is netatmo auth url authURL = baseURL + "oauth2/token" // DefaultDeviceURL is netatmo device url - deviceURL = baseURL + "/api/getstationsdata" + stationURL = baseURL + "/api/getstationsdata" + homecoachURL = baseURL + "/api/gethomecoachsdata" ) // Config is used to specify credential to Netatmo API @@ -56,7 +57,7 @@ type DeviceCollection struct { // Type : Module type : // "NAMain" : for the base station // "NAModule1" : for the outdoor module -// "NAModule4" : for the additionnal indoor module +// "NAModule4" : for the additional indoor module // "NAModule3" : for the rain gauge module // "NAModule2" : for the wind gauge module // DashboardData : Data collection from device sensors @@ -89,9 +90,10 @@ type Device struct { // WindStrength : Current 5 min average wind speed @ LastMeasure (in km/h) // GustAngle : Direction of the last 5 min highest gust wind @ LastMeasure (in °) // GustStrength : Speed of the last 5 min highest gust wind @ LastMeasure (in km/h) +// FIXME health_idx // LastMeasure : Contains timestamp of last data received type DashboardData struct { - Temperature *float32 `json:"Temperature,omitempty"` // use pointer to detect ommitted field by json mapping + Temperature *float32 `json:"Temperature,omitempty"` // use pointer to detect omitted field by json mapping Humidity *int32 `json:"Humidity,omitempty"` CO2 *int32 `json:"CO2,omitempty"` Noise *int32 `json:"Noise,omitempty"` @@ -104,6 +106,7 @@ type DashboardData struct { WindStrength *int32 `json:"WindStrength,omitempty"` GustAngle *int32 `json:"GustAngle,omitempty"` GustStrength *int32 `json:"GustStrength,omitempty"` + HealthIndex *int32 `json:"health_idx,omitempty"` LastMeasure *int64 `json:"time_utc"` } @@ -112,7 +115,7 @@ func NewClient(config Config) (*Client, error) { oauth := &oauth2.Config{ ClientID: config.ClientID, ClientSecret: config.ClientSecret, - Scopes: []string{"read_station"}, + Scopes: []string{"read_station", "read_homecoach"}, Endpoint: oauth2.Endpoint{ AuthURL: baseURL, TokenURL: authURL, @@ -198,12 +201,19 @@ func processHTTPResponse(resp *http.Response, err error, holder interface{}) err // GetStations returns the list of stations owned by the user, and their modules func (c *Client) Read() (*DeviceCollection, error) { - resp, err := c.doHTTPGet(deviceURL, url.Values{"app_type": {"app_station"}}) + // resp, err := c.doHTTPGet(stationURL, url.Values{"app_type": {"app_station"}}) //dc := &DeviceCollection{} - +/* if err = processHTTPResponse(resp, err, c.Dc); err != nil { return nil, err } +*/ + resp2, err := c.doHTTPGet(homecoachURL, url.Values{"app_type": {"app_station"}}) + // dc := &DeviceCollection{} + + if err = processHTTPResponse(resp2, err, c.Dc); err != nil { + return nil, err + } return c.Dc, nil } @@ -274,6 +284,9 @@ func (d *Device) Data() (int64, map[string]interface{}) { if d.DashboardData.GustStrength != nil { m["GustStrength"] = *d.DashboardData.GustStrength } + if d.DashboardData.HealthIndex != nil { + m["HealthIndex"] = *d.DashboardData.HealthIndex + } return *d.DashboardData.LastMeasure, m }