08-20-2023 03:51 AM
Im trying to write a script that checks a window sensor, then does a different action depending on whether the window is open or closed. Is there a way i can write this without having two scripts. Im currently having 1 script for condition A and another for condition B. In usual coding I can use an else clause, but I am not sure how this is done in google home automation script.
08-20-2023 04:45 AM - edited 08-20-2023 04:46 AM
I don't think the script editor has an if then else clause. You can have multiple starters and actions in the same script, so you could try something like this?
Documentation:
SensorStateState | Automations Script Editor | Google Home Developers
OpenCloseState | Automations Script Editor | Google Home Developers
metadata:
name: Window sensor
description: Window sensor
automations:
# If window is open
- starters:
- type: device.state.OpenClose
device: Device Name - Room Name
state: openPercent
is: 100
actions:
# Put actions here for when window is open
# If window is closed
- starters:
- type: device.state.OpenClose
device: Device Name - Room Name
state: openPercent
is: 0
actions:
# Put actions here for when window is closed
10-09-2023 11:40 AM - edited 10-09-2023 11:41 AM
You can't have multiple starters
12-16-2023 02:10 AM - edited 03-25-2024 10:21 AM
Yes you can. I have a script with four starters for syncing two bulbs depending on each bulb's state (on/off) and it works just fine.
metadata:
name: Sync Lamps
description: Scripted automation
automations:
- starters:
- type: device.state.OnOff
state: on
is: true
device: Lamp Left - Office
actions:
- type: device.command.OnOff
on: true
devices: Lamp Right - Office
- starters:
- type: device.state.OnOff
state: on
is: false
device: Lamp Left - Office
actions:
- type: device.command.OnOff
on: false
devices: Lamp Right - Office
- starters:
- type: device.state.OnOff
state: on
is: true
device: Lamp Right - Office
actions:
- type: device.command.OnOff
on: true
devices: Lamp Left - Office
- starters:
- type: device.state.OnOff
state: on
is: false
device: Lamp Right - Office
actions:
- type: device.command.OnOff
on: false
devices: Lamp Left - Office
02-08-2024 06:32 AM
Hi David, I tried that, but got unpredictable results when the automation runs, I think it’s trying to do the two starters sequentially. Basically I’m after a script that turns lights on (if they are off) and off (if they are on). When I run the script it turns the lights on, then off 😐 on other occasions it seems to do 2 or 3 actions…
ps the reason is to minimise the growing number of automations I have, an if then else command would half the number of automations needed
regards
jim
metadata:
name: test lights
description: toggle lights, if off turn on, if on turn off
automations:
# if off turn on
- starters:
- type: device.state.OnOff
device: pendant lights - Kitchen
state: on
is: false
actions:
- type: device.command.OnOff
devices: pendant lights - Kitchen
on: true
# if on turn off
- starters:
- type: device.state.OnOff
device: pendant lights - Kitchen
state: on
is: true
actions:
- type: device.command.OnOff
devices: pendant lights - Kitchen
on: false
12-16-2023 02:12 AM - edited 12-16-2023 02:14 AM
Any success yet?
I am trying to use two conditions, too, as in the example below, but no success so far.
Starter: "Hey Google - Windows"
Condition 1: Before 1600
Action: Open all windows
Condition 2: After 1600
Action: Close all windows
Personally I think the only problem is to find the correct indents...
03-25-2024 09:58 AM - edited 03-25-2024 12:21 PM
Multiple starters work and they can be identical. Conditions can be created to effect if-then-else.
Here's an example where "OK Google, is the garage door closed?" gives different answers depending on the state of a linked Shelly DW2 door sensor.
Feels like a kludge, but it works.
automations:
- starters:
type: assistant.event.OkGoogle
eventData: query
is: Is the garage door closed
condition:
type: device.state.OpenClose
state: openPercent
is: 0
device: Garage Door Sensor - Garage
actions:
type: assistant.command.Broadcast
message: Yes, the garage door is closed
devices: Kitchen display - Kitchen
- starters:
type: assistant.event.OkGoogle
eventData: query
is: Is the garage door closed
condition:
type: device.state.OpenClose
state: openPercent
is: 100
device: Garage Door Sensor - Garage
actions:
type: assistant.command.Broadcast
message: No, the garage door is open
devices: Kitchen display - Kitchen
03-25-2024 10:16 AM
Hi Marc,
I tried it - and it works!
The little trick is that you cannot have the same command - as in your case "Is the garage door closed" - over two separate routines with different commands (one for opening, one for closing) as it will tell you that the command is already blocked by another routine.
But within the same routine it's just fine to have two actions triggered by the same command and now it's working just like intended.
Indentation is a mess in YAML as one can easily produce validation errors, but your example works like a charm!
Thanks a lot!
03-25-2024 03:19 PM - edited 03-25-2024 03:19 PM
Pat, thanks for testing, marcs approach does indeed work
03-25-2024 03:18 PM
Marc, many thanks for the explanation and code, I changed it first to tell me the state of the lights, and then changed it to invert the state instead, I now have one command that flips the lights on or off 👍😀
05-12-2024 12:53 PM - edited 05-12-2024 01:15 PM
I tried this and it worked for a bit but no longer does? Did something change
metadata:
name: Motion lighting - MB Presence
description: When motion is detected, turn on the relivent switch else turn it off
automations:
# When motion turn on switch
- starters:
- type: device.state.MotionDetection
device: Motion - Master Bedroom
state: motionDetectionEventInProgress
is: true
condition:
type: device.state.OnOff # The basic on and off functionality for any device that has binary on and off, including plugs and switches as well as many future devices.
device: (MB) Presence - Z Z Automation
state: on
is: false
actions:
- type: device.command.OnOff
devices:
- (MB) Presence - Z Z Automation
on: true
# When inactive turn off switch
- starters:
- type: device.state.MotionDetection # For devices that can detect motion.
device: Motion - Master Bedroom
state: motionDetectionEventInProgress
is: false
condition:
type: device.state.OnOff # The basic on and off functionality for any device that has binary on and off, including plugs and switches as well as many future devices.
device: (MB) Presence - Z Z Automation
state: on
is: true
actions:
- type: device.command.OnOff
devices:
- (MB) Presence - Z Z Automation
on: false
05-14-2024 10:22 AM
If it’s suddenly stopped working I’d think it’s more the device than the code. Does the device respond to simple manual commands ?
I’ve had 4 or 5 of these if else commands running daily, the biggest problem is getting google to “hear” what I speak, and not go off on some random topic