So, I’m using the UI editor for automations and it looks like when I set to to unavailable, the config/automations.yaml has it saved as:
- entity_id: switch.garage_freezer_power
for: 00:01:00
platform: state
to: unavailable
That doesn’t appear to trigger it. But if you put the string unavailable in quotes, then it works. You can’t do this using the editor, so you have to edit the file manually. Of course every time any automation is saved you have to go back and do it again.
Sorry, that doesn’t make sense. unavailable is not a YAML reserved word, so it doesn’t have to be quoted (like, e.g., on and off do.) I suspect your issue has more to do with not reloading the automations after editing the YAML file, or some weird interaction between the Automation Editor UI and the YAML file. (I don’t use the UI so can’t speak to that.) I guarantee you it will work with unavailablenot quoted.
EDIT: FWIW, I just tested it and it works fine without quotes.
I can also add that I have used unavailable in automations successfully, entered using yaml (I don’t like the UI editor either) however after looking back at the old code (it’s an old automation I no longer use) I did have ‘unavailable’ in quotes. Not to say that it needed to be, but that was how I had it and it did work.
@pnbruckner I agree it doesn’t make sense, but that’s the behavior of my system right now. If I use the UI editor it does not quote unavailable and it doesn’t work.
I created a package for my custom yaml, placed the exact same automation in there, quoted it so it was 'unavailable' and it works fine now.
So, like you said, maybe some weird interaction between the UI and the file.
FWIW, I just tried it with the Automation Editor, too. Here’s what I created:
And here’s what was written to automations.yaml:
- id: '1593564962691'
alias: New Automation
description: ''
trigger:
- entity_id: sensor.xyz
for: 00:01:00
platform: state
to: unavailable
condition: []
action:
- data:
message: test
service: persistent_notification.create
Notice no quotes.
Then I went to the STATES page and created sensor.xyz with a state of 1. Then I changed it’s state to unavailable. Then I waited one minute, and sure enough, the automation triggered and I got the persistent notification.
I can’t explain it, but it may have something to do with the fact that my device actually becomes “unavailable” - it is a Wifi switch that loses its Wifi periodically. So if you go look at the device in HA you see some errors, though the switch state clearly says “unavailable”.
With custom automation in a package, where the automation includes a quoted version of the word ('unavailable') it seems to be working. So I’m all set.
Glad you have it working. Doesn’t really matter to me if you quote or don’t quote the word in your YAML code. I’m only trying to do my part to minimize misinformation, and if there is a real problem, try to get to the bottom of it so it can be addressed.
I hate to raise an old thread from the dead, so apologies. However, I am on v2021.4.6 and still having this problem. I have 3 chromecast audios that constantly drop off the network so I have a controlled outlet to flap them on/off. Using the UI/automations.yaml the ‘unavailable’ state absolutely does not work for me as a trigger.
I moved the automation to a custom package and used quotes around the state ‘unavailable’ which then it works fine. I have a fair amount of automations as well, so i’m pretty comfortable making them, however this one seems like a genuine bug.
Here is my automation; I just tested it by unplugging the chromecast physically and waiting for it to go ‘unavailable’. This does not work in the GUI/automations.yaml, but now since I put it in a package and put quotes around unavailable, it works fine.
automation:
alias: Chromecasts - Reboot
description: Reboot the chromecast audio devices when they become unavailable
trigger:
- platform: state
entity_id: media_player.kitchen_ceiling
to: "unavailable"
- platform: state
entity_id: media_player.master_bedroom_speaker
to: "unavailable"
- platform: state
entity_id: media_player.patio_speaker
to: "unavailable"
condition:
- condition: state
entity_id: input_boolean.automations
state: "on"
- condition: not
conditions:
- condition: state
entity_id: media_player.kitchen_ceiling
state: playing
- condition: not
conditions:
- condition: state
entity_id: media_player.master_bedroom_speaker
state: playing
- condition: not
conditions:
- condition: state
entity_id: media_player.patio_speaker
state: playing
action:
- service: switch.turn_off
target:
entity_id: switch.chromecasts
- delay:
hours: 0
minutes: 0
seconds: 30
milliseconds: 0
- service: switch.turn_on
target:
entity_id: switch.chromecasts
mode: single
this would chekc when the TV is OFF, but we want the reverse usually. What I have done is just list all the states the ChromeCast can be in as state: [“on”, “off”, “idle”, “playing”] as per the docs, the state can be a list.
That covers it and is basically the equivalent of ‘not unavailable’, which can’t seem to be reproducible with the jinja template.