Add carwings climater (#693)
This commit is contained in:
parent
d4f8d03cb9
commit
80412100b5
1 changed files with 40 additions and 8 deletions
|
|
@ -17,6 +17,7 @@ type CarWings struct {
|
|||
region string
|
||||
session *carwings.Session
|
||||
chargeStateG func() (float64, error)
|
||||
hvacG func() (interface{}, error)
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
|
@ -47,29 +48,60 @@ func NewCarWingsFromConfig(other map[string]interface{}) (api.Vehicle, error) {
|
|||
}
|
||||
|
||||
v.chargeStateG = provider.NewCached(v.chargeState, cc.Cache).FloatGetter()
|
||||
v.hvacG = provider.NewCached(v.hvacAPI, cc.Cache).InterfaceGetter()
|
||||
|
||||
return v, nil
|
||||
}
|
||||
|
||||
// Init new carwings session
|
||||
func (v *CarWings) initSession() error {
|
||||
v.session = &carwings.Session{
|
||||
Region: v.region,
|
||||
}
|
||||
|
||||
return v.session.Connect(v.user, v.password)
|
||||
}
|
||||
|
||||
// chargeState implements the api.Vehicle interface
|
||||
func (v *CarWings) chargeState() (float64, error) {
|
||||
if v.session == nil {
|
||||
session := &carwings.Session{
|
||||
Region: v.region,
|
||||
if err := v.initSession(); err != nil {
|
||||
return 0, api.ErrNotAvailable
|
||||
}
|
||||
|
||||
if err := session.Connect(v.user, v.password); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
v.session = session
|
||||
}
|
||||
|
||||
bs, err := v.session.BatteryStatus()
|
||||
return float64(bs.StateOfCharge), err
|
||||
}
|
||||
|
||||
// hvacAPI provides hvac-status api response
|
||||
func (v *CarWings) hvacAPI() (interface{}, error) {
|
||||
if v.session == nil {
|
||||
if err := v.initSession(); err != nil {
|
||||
return 0, api.ErrNotAvailable
|
||||
}
|
||||
}
|
||||
|
||||
return v.session.ClimateControlStatus()
|
||||
}
|
||||
|
||||
// SoC implements the api.Vehicle interface
|
||||
func (v *CarWings) SoC() (float64, error) {
|
||||
return v.chargeStateG()
|
||||
}
|
||||
|
||||
// Climater implements the api.Vehicle.Climater interface
|
||||
func (v *CarWings) Climater() (active bool, outsideTemp float64, targetTemp float64, err error) {
|
||||
res, err := v.hvacG()
|
||||
if res, ok := res.(carwings.ClimateStatus); err == nil && ok {
|
||||
active = res.Running
|
||||
|
||||
targetTemp = float64(res.Temperature)
|
||||
|
||||
outsideTemp = 0 //fixed value
|
||||
|
||||
return active, outsideTemp, targetTemp, nil
|
||||
}
|
||||
|
||||
return false, 0, 0, api.ErrNotAvailable
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue