Home Assistant: add plugin source, support temp for heating switch devices (BC) (#31915)
This commit is contained in:
parent
28d36a51f0
commit
a5956a6804
4 changed files with 173 additions and 92 deletions
91
plugin/homeassistant.go
Normal file
91
plugin/homeassistant.go
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
package plugin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"github.com/evcc-io/evcc/util"
|
||||
"github.com/evcc-io/evcc/util/homeassistant"
|
||||
)
|
||||
|
||||
// HomeAssistant reads and writes Home Assistant entity states
|
||||
type HomeAssistant struct {
|
||||
conn *homeassistant.Connection
|
||||
entity string
|
||||
}
|
||||
|
||||
func init() {
|
||||
registry.AddCtx("homeassistant", NewHomeAssistantPluginFromConfig)
|
||||
}
|
||||
|
||||
// NewHomeAssistantPluginFromConfig creates a Home Assistant plugin
|
||||
func NewHomeAssistantPluginFromConfig(ctx context.Context, other map[string]any) (Plugin, error) {
|
||||
var cc struct {
|
||||
homeassistant.Config `mapstructure:",squash"`
|
||||
Entity string
|
||||
}
|
||||
|
||||
if err := util.DecodeOther(other, &cc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if cc.Entity == "" {
|
||||
return nil, errors.New("missing entity")
|
||||
}
|
||||
|
||||
conn, err := homeassistant.NewConnection(util.NewLogger("homeassistant"), cc.URI, cc.Home_, cc.Insecure)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &HomeAssistant{
|
||||
conn: conn,
|
||||
entity: cc.Entity,
|
||||
}, nil
|
||||
}
|
||||
|
||||
var _ StringGetter = (*HomeAssistant)(nil)
|
||||
|
||||
// StringGetter returns the entity state
|
||||
func (p *HomeAssistant) StringGetter() (func() (string, error), error) {
|
||||
return func() (string, error) {
|
||||
res, err := p.conn.GetState(p.entity)
|
||||
return res.State, err
|
||||
}, nil
|
||||
}
|
||||
|
||||
var _ FloatGetter = (*HomeAssistant)(nil)
|
||||
|
||||
// FloatGetter returns the entity state as float
|
||||
func (p *HomeAssistant) FloatGetter() (func() (float64, error), error) {
|
||||
return func() (float64, error) {
|
||||
return p.conn.GetFloatState(p.entity)
|
||||
}, nil
|
||||
}
|
||||
|
||||
var _ IntGetter = (*HomeAssistant)(nil)
|
||||
|
||||
// IntGetter returns the entity state as int
|
||||
func (p *HomeAssistant) IntGetter() (func() (int64, error), error) {
|
||||
return func() (int64, error) {
|
||||
return p.conn.GetIntState(p.entity)
|
||||
}, nil
|
||||
}
|
||||
|
||||
var _ BoolGetter = (*HomeAssistant)(nil)
|
||||
|
||||
// BoolGetter returns the entity state as bool
|
||||
func (p *HomeAssistant) BoolGetter() (func() (bool, error), error) {
|
||||
return func() (bool, error) {
|
||||
return p.conn.GetBoolState(p.entity)
|
||||
}, nil
|
||||
}
|
||||
|
||||
var _ BoolSetter = (*HomeAssistant)(nil)
|
||||
|
||||
// BoolSetter invokes the entity's turn_on/turn_off service
|
||||
func (p *HomeAssistant) BoolSetter(param string) (func(bool) error, error) {
|
||||
return func(enable bool) error {
|
||||
return p.conn.CallSwitchService(p.entity, enable)
|
||||
}, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue