Turn off all devices that we manage if no one is present

This commit is contained in:
Dreaded_X 2022-11-15 04:00:48 +01:00
parent bfeedece77
commit 656b040cdc
Signed by: Dreaded_X
GPG Key ID: 76BDEC4E165D8AD9
4 changed files with 30 additions and 6 deletions

View File

@ -62,3 +62,7 @@ func (c *computer) Execute(execution google.Execution, updateState *google.Devic
func (c *computer) GetID() string {
return c.macAddress
}
func (c *computer) TurnOff() {
// Scene does not implement this
}

View File

@ -168,3 +168,7 @@ func (k *kettle) Execute(execution google.Execution, updatedState *google.Device
func (k *kettle) GetID() string {
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" }`))
}

View File

@ -25,12 +25,17 @@ type DeviceInfo struct {
SoftwareBuildID string `json:"software_build_id"`
}
type DeviceInterface interface {
google.DeviceInterface
TurnOff()
}
type Provider struct {
Service *google.Service
userID string
devices map[string]google.DeviceInterface
manualDevices map[string]google.DeviceInterface
devices map[string]DeviceInterface
manualDevices map[string]DeviceInterface
}
func NewProvider(m *mqtt.MQTT) *Provider {
@ -41,7 +46,7 @@ func NewProvider(m *mqtt.MQTT) *Provider {
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))
if err != nil {
@ -64,8 +69,8 @@ func NewProvider(m *mqtt.MQTT) *Provider {
for _, device := range devices {
switch device.Description {
case "Kettle":
outlet := NewKettle(device, m, provider.Service)
provider.devices[device.IEEEAdress] = outlet
kettle := NewKettle(device, m, provider.Service)
provider.devices[device.IEEEAdress] = kettle
log.Printf("Added Kettle (%s) %s\n", device.IEEEAdress, device.FriendlyName)
}
}
@ -77,7 +82,7 @@ func NewProvider(m *mqtt.MQTT) *Provider {
return provider
}
func (p *Provider) AddDevice(device google.DeviceInterface) {
func (p *Provider) AddDevice(device DeviceInterface) {
p.devices[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
}
func (p *Provider) TurnAllOff() {
for _, device := range p.devices {
device.TurnOff()
}
}

View File

@ -52,6 +52,11 @@ func main() {
fmt.Printf("Presence: %t\n", present)
h.SetFlag(41, 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:
break