Turn off all devices that we manage if no one is present
This commit is contained in:
parent
bfeedece77
commit
656b040cdc
|
@ -62,3 +62,7 @@ func (c *computer) Execute(execution google.Execution, updateState *google.Devic
|
||||||
func (c *computer) GetID() string {
|
func (c *computer) GetID() string {
|
||||||
return c.macAddress
|
return c.macAddress
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *computer) TurnOff() {
|
||||||
|
// Scene does not implement this
|
||||||
|
}
|
||||||
|
|
|
@ -168,3 +168,7 @@ func (k *kettle) Execute(execution google.Execution, updatedState *google.Device
|
||||||
func (k *kettle) GetID() string {
|
func (k *kettle) GetID() string {
|
||||||
return k.Info.IEEEAdress
|
return k.Info.IEEEAdress
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (k *kettle) TurnOff() {
|
||||||
|
k.m.Publish(fmt.Sprintf("zigbee2mqtt/%s/set", k.Info.FriendlyName), 1, false, fmt.Sprintf(`{ "state": "OFF" }`))
|
||||||
|
}
|
||||||
|
|
|
@ -25,12 +25,17 @@ type DeviceInfo struct {
|
||||||
SoftwareBuildID string `json:"software_build_id"`
|
SoftwareBuildID string `json:"software_build_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type DeviceInterface interface {
|
||||||
|
google.DeviceInterface
|
||||||
|
TurnOff()
|
||||||
|
}
|
||||||
|
|
||||||
type Provider struct {
|
type Provider struct {
|
||||||
Service *google.Service
|
Service *google.Service
|
||||||
userID string
|
userID string
|
||||||
|
|
||||||
devices map[string]google.DeviceInterface
|
devices map[string]DeviceInterface
|
||||||
manualDevices map[string]google.DeviceInterface
|
manualDevices map[string]DeviceInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewProvider(m *mqtt.MQTT) *Provider {
|
func NewProvider(m *mqtt.MQTT) *Provider {
|
||||||
|
@ -41,7 +46,7 @@ func NewProvider(m *mqtt.MQTT) *Provider {
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
provider := &Provider{userID: "Dreaded_X", devices: make(map[string]google.DeviceInterface), manualDevices: make(map[string]google.DeviceInterface)}
|
provider := &Provider{userID: "Dreaded_X", devices: make(map[string]DeviceInterface), manualDevices: make(map[string]DeviceInterface)}
|
||||||
|
|
||||||
homegraphService, err := homegraph.NewService(context.Background(), option.WithCredentialsJSON(credentials))
|
homegraphService, err := homegraph.NewService(context.Background(), option.WithCredentialsJSON(credentials))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -64,8 +69,8 @@ func NewProvider(m *mqtt.MQTT) *Provider {
|
||||||
for _, device := range devices {
|
for _, device := range devices {
|
||||||
switch device.Description {
|
switch device.Description {
|
||||||
case "Kettle":
|
case "Kettle":
|
||||||
outlet := NewKettle(device, m, provider.Service)
|
kettle := NewKettle(device, m, provider.Service)
|
||||||
provider.devices[device.IEEEAdress] = outlet
|
provider.devices[device.IEEEAdress] = kettle
|
||||||
log.Printf("Added Kettle (%s) %s\n", device.IEEEAdress, device.FriendlyName)
|
log.Printf("Added Kettle (%s) %s\n", device.IEEEAdress, device.FriendlyName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,7 +82,7 @@ func NewProvider(m *mqtt.MQTT) *Provider {
|
||||||
return provider
|
return provider
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Provider) AddDevice(device google.DeviceInterface) {
|
func (p *Provider) AddDevice(device DeviceInterface) {
|
||||||
p.devices[device.GetID()] = device
|
p.devices[device.GetID()] = device
|
||||||
p.manualDevices[device.GetID()] = device
|
p.manualDevices[device.GetID()] = device
|
||||||
}
|
}
|
||||||
|
@ -138,3 +143,9 @@ func (p *Provider) Execute(_ context.Context, _ string, commands []google.Comman
|
||||||
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Provider) TurnAllOff() {
|
||||||
|
for _, device := range p.devices {
|
||||||
|
device.TurnOff()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
5
main.go
5
main.go
|
@ -52,6 +52,11 @@ func main() {
|
||||||
fmt.Printf("Presence: %t\n", present)
|
fmt.Printf("Presence: %t\n", present)
|
||||||
h.SetFlag(41, present)
|
h.SetFlag(41, present)
|
||||||
n.Presence(present)
|
n.Presence(present)
|
||||||
|
if !present {
|
||||||
|
provider.TurnAllOff()
|
||||||
|
} else {
|
||||||
|
// In the future this is were we can do things like turning on the lights in the living room
|
||||||
|
}
|
||||||
|
|
||||||
case <-h.Events:
|
case <-h.Events:
|
||||||
break
|
break
|
||||||
|
|
Reference in New Issue
Block a user