Anything like that could help. I was just going by the hypothesis that the automation itself was duplicated. Running the same commands but looking for the notification’s text (or part thereof) is a good idea, I agree – @cisco.
Thanks for that.
Have you already reset the push notification IDs on the respective devices where you get this issue (it’s under the companion app settings)?
Did you maybe at any point create a test automation of sorts, using the same notification message?
From the output it doesn’t look like there’s a duplicate automation, but see Edwin’s point above.
This is a guess, but perhaps something is going wrong when states are restored upon startup. It’s hard to know. With time and effort one can maybe interrogate a running HA instance by attaching a debugger.
I have one very, very risky proposal, but you’ll have to make sure you have proper backups in place (including having tested your backups).
- Shut down HA.
- Keep the automation defined in YAML.
- Remove the JSON sections you found with my commands from the internal storage files. You only need to do this for
core.entity_registry
and core.restore_state
. Don’t touch the DB (SQLite) file. Make sure you don’t break the JSON’s structure.
- Restart HA.
- Perform your test.
For example, make sure to remove everything from the opening brace to the closing one, including the trailing comma (unless it’s the last entry, in which case there will be no comma).
In core.entity_registry
you can just delete the whole line:
{"aliases":[],"area_id":null,"categories":{},"capabilities":{"id":"c39b4bb0-9a1d-475c-ac7d-ee93fbee8e69"},"config_entry_id":null,"created_at":"1970-01-01T00:00:00+00:00","device_class":null,"device_id":null,"disabled_by":null,"entity_category":null,"entity_id":"automation.handle_doorbell_alert_action","hidden_by":null,"icon":null,"id":"3df87a66232d6a3736c5df08ff286967","has_entity_name":false,"labels":[],"modified_at":"1970-01-01T00:00:00+00:00","name":null,"options":{"conversation":{"should_expose":false}},"original_device_class":null,"original_icon":null,"original_name":"Handle Doorbell Alert Action","platform":"automation","supported_features":0,"translation_key":null,"unique_id":"c39b4bb0-9a1d-475c-ac7d-ee93fbee8e69","previous_unique_id":null,"unit_of_measurement":null},
In core.restore_state
you need to delete more than one line, so make sure to get the whole block:
{
"state": {"entity_id":"automation.handle_doorbell_alert_action","state":"on","attributes":{"id":"c39b4bb0-9a1d-475c-ac7d-ee93fbee8e69","last_triggered":"2025-02-27T11:47:31.440152+00:00","mode":"single","current":0,"friendly_name":"Handle Doorbell Alert Action"},"last_changed":"2025-02-27T13:41:27.965617+00:00","last_reported":"2025-02-27T13:41:27.965617+00:00","last_updated":"2025-02-27T13:41:27.965617+00:00","context":{"id":"01JN3T82RX90NDMTHDA9815QPQ","parent_id":null,"user_id":null}},
"extra_data": null,
"last_seen": "2025-02-27T15:11:41.898760+00:00"
},
If you don’t feel comfortable with this, don’t do it, or if you have a friend or someone experienced with JSON that can hold your hand, that would be ideal. I can take no responsibility for this. 
Addendum:
If the above steps don’t help, try this recipe.
- Shut down HA.
- Remove automation defined in YAML, but keep a copy.
- Remove the JSON sections you found with my commands from the internal storage files. You only need to do this for
core.entity_registry
and core.restore_state
. Don’t touch the DB (SQLite) file. Make sure you don’t break the JSON’s structure.
- Restart HA.
- Perform your test. You should get no notification.
- Stop HA.
- Add your automation in YAML again (and for good measure give it a new ID).
- Restart.
- Test.