forked from evcc-io/evcc
/
api_emobility.go
55 lines (45 loc) · 1.29 KB
/
api_emobility.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package porsche
import (
"errors"
"fmt"
"github.com/connectorjs/evcm/util"
"github.com/connectorjs/evcm/util/request"
"github.com/connectorjs/evcm/util/transport"
"golang.org/x/oauth2"
)
// EmobilityAPI is the Porsche Emobility API
type EmobilityAPI struct {
*request.Helper
}
// NewEmobilityAPI creates a new vehicle
func NewEmobilityAPI(log *util.Logger, identity oauth2.TokenSource) *EmobilityAPI {
v := &EmobilityAPI{
Helper: request.NewHelper(log),
}
v.Client.Transport = &transport.Decorator{
Base: &oauth2.Transport{
Source: identity,
Base: v.Client.Transport,
},
Decorator: transport.DecorateHeaders(map[string]string{
"apikey": ClientID,
}),
}
return v
}
func (v *EmobilityAPI) Capabilities(vin string) (CapabilitiesResponse, error) {
var res CapabilitiesResponse
uri := fmt.Sprintf("%s/e-mobility/vcs/capabilities/%s", ApiURI, vin)
err := v.GetJSON(uri, &res)
return res, err
}
// Status implements the vehicle status response
func (v *EmobilityAPI) Status(vin, model string) (EmobilityResponse, error) {
var res EmobilityResponse
uri := fmt.Sprintf("%s/e-mobility/de/de_DE/%s/%s?timezone=Europe/Berlin", ApiURI, model, vin)
err := v.GetJSON(uri, &res)
if err != nil && res.PcckErrorMessage != "" {
err = errors.New(res.PcckErrorMessage)
}
return res, err
}