Continue on Error as the default

You can do that.

Use an automation to monitor your system log for errors and send a notification if one occurs.

Hmm good idea, right now I have watchdogs that check if a boolean gets successfully set. Iā€™d still like a way to set continue on error on as the default for a certain automation or integration.

Hi Tom, thatā€™s true for sure. But, what I can echo from my own recent experience is itā€™d be super helpful to have a way to log and notify on ā€œmore trivialā€ errors instead of stopping the script entirely.

Similar to PHP, for example: The difference between ā€œwarningsā€ and ā€œfatal errorsā€. One tells you somethingā€™s not right and you should look at it while the other stops the script from continuing to execute. You can specify the default behavior for warnings to ā€œlog and continueā€ instead of hard-fail.

Having a way to do that either globally or on the ā€œwhole scriptā€ level would be nice.

Iā€™ve never experienced this issue until last night. Went downstairs and everything was dark when it should not have been. Checked the logs and my light schedule had stopped because an unreliable Sengled bulb had dropped off the network. Thereā€™s 20 other lights in the script; it would have been better to have those others go ahead and turn on as expected. Assume itā€™s going to continue to do this until I find, order and replace those flaky bulbs. (Aside: if anyone has a suggestion for a non-proprietary-hub zigbee bulb, Iā€™d appreciate it)

Strange thing is: Those Sengled bulbs drop off all the time; and the scripts never stopped before - odd that it decided to do it for the first time last night; havenā€™t updated HA or any integrations.

Just my two-cents on the issue; Iā€™ll add the continue on error for those bulbs on the scripts that run daily until I can get the replaced.

2 Likes

Iā€™ve been pondering this, and what Iā€™d really love is to be able to add some error handling within an automation itself.

Be able to have a try catch block, specify if a step takes too long or doesnā€™t return successfully then run an alternate code path.

The only way I seem to successfully get automations to always complete is to wrap them in a parallel block and add continue_on_error everywhere.

I dont think anyone is asking to hide the problem. I have hundreds of devices utilizing multiple protocols from cloud, zwave, zigbee, Bluetooth, etc and its a pain to make sure EVERYTHING is working for automations to execute fully.

If the HA team wants HA to become more mainstream, things like this need options and proper alerts so people can know what to do and not kill the automation dead in its tracks because of one cloud device that stopped responding or timed out.

1 Like

I would suggest something like putting any automation that fails with an exception goes into the ā€œRepairā€ section as an ā€œeasyā€ next step? My script is brokenā€¦
I sometimes notice something didnā€™t happen, dig into Traces, only to find something has stopped working for the last few days. Generally something going offline.
I understand Iā€™m responsible for better exception handling in my scripts, but it would help if the automations supported some standard mechanisms for exception handling (try-catch?).

2 Likes

+1 to this, this setting should be available in the UI and there should be an automation wide on/off default setting from UI and yaml.

3 Likes

Since updating to 2024.7, continue on error seems to be ignored

One of my locks sporadically works (thanks zwave 700 issues) and as you see in this trace screenshot, it completely stopped at that point

Throwing my 2 cents in on this. This feature is absolutely necessary and the best thing to do in my opinion. Especially if you donā€™t actually want to spend your entire life obsessing over which device is causing loads of things not to work.

It would not hide the problem when something doesnā€™t work, it would actually make it much clearer! The thing I hate about the current behaviour is that when 1 thing breaks, itā€™s not obvious which thing broke my script/automation, because maybe 5 things didnā€™t happen.

If I triggered a script and everything worked perfectly every time except 1 light or plug, itā€™d be DAMN obvious which device was at fault! And I could choose to leave that device working as well as it does, or eventually fix/replace it.

But now Iā€™m basically held hostage to spend time/money on fixing an issue or at least unnecessary effort restructuring a script to work around one device that sometimes doesnā€™t work right for seemingly no good reason. And in my experience, the moment I do that, something else chooses to go on strike, and itā€™s a never ending merry go round of moving things around when in reality I couldnā€™t care if one thing occasionally failedā€¦

2 Likes

+1, out of my roughly 100 automations I would really only want 1 or 2 to stop running if it encounters an error, continue_on_error should absolutely be the default behavior, with a stop_on_error option instead.

1 Like

+1 for Continue on Error. I just got bitten by this again last night when an automation failed due to a single Zigbee device being unavailable. I wish there was a way to allow continuing on errors by default. In my case, I would probably want this for 99% of my automations.

1 Like

I agree with this ,but the problem I face is sometimes my internet goes downā€¦ and I basically have to put ā€˜continue_on_errorā€™ which involves anything with a cloud integration.

a ā€œignore this step when there is no internet because my cloud integration wonā€™t workā€ would be rad. :slight_smile:

Understand not wanting to make this the global defaultā€“or even not wanting to make it possible to change it to be globally on.

But, being able to ignore errors for a whole script is definitely worth doing. And being able to set it via the GUI per script block is definitely needed.

And hereā€™s another middle-ground suggestion: a ā€œwrapperā€ block similar to ā€œif elseā€ that works like ā€œtry catchā€, so anything within the ā€œtryā€ block is ā€œcontinue_on_error: trueā€. This could have an option to jump to the ā€œcatchā€ block on the first error sequentially, or treat every block as ā€œcontinue_on_error: trueā€ and only execute the ā€œcatchā€ block if any errors occurred (perhaps some variable provided to the ā€œcatchā€ block would contain the first errorā€¦ Traces would ideally show any errors that occurred.

My use-case: I have almost 100 Z-wave devices, and I have a few scripts that turn everything in the house off or down at night or when leaving the house. Statistically, the odds of any device missing the message grows very high, even with a fairly healthy network. At the moment something in zwave-jsā€™s retry strategy seems to have changed so I am more often getting ZW202 failures with only 1 try (I canā€™t find where to change this)ā€¦ so my script that shuts everything off and arms the alarm fails quite often. Complicating matters, this script is actually turning off several group helpers, so it is not at all obvious which device is failing from the Traces.

EDIT: Forgot to mention that the fact that adding ā€œcontinue_on_error: trueā€ to the YAML breaks GUI editing for every block itā€™s applied to is a BIG downer and big step backward in usabilityā€¦hence why I say GUI support for that is ā€œdefinitely neededā€. Looks like this is maybe in the back of the devsā€™ minds, because a little icon appears in the editor when itā€™s enabledā€¦ still.

1 Like

I canā€™t even get continue on error to work reliably for me.

That being said, if you want continue as error everywhere:
python_scripts/update_continue_on_error.py

import yaml
import sys
import os
from datetime import datetime
from shutil import copy2
from typing import Any, Dict, List

def add_continue_on_error(data: Any) -> Any:
    if isinstance(data, dict):
        if 'action' in data:
            if isinstance(data['action'], list):
                for action in data['action']:
                    if isinstance(action, dict) and 'continue_on_error' not in action:
                        action['continue_on_error'] = True
            elif isinstance(data['action'], dict) and 'continue_on_error' not in data['action']:
                data['action']['continue_on_error'] = True
        else:
            for key, value in data.items():
                data[key] = add_continue_on_error(value)
    elif isinstance(data, list):
        return [add_continue_on_error(item) for item in data]
    return data

def represent_none(self, _):
    return self.represent_scalar('tag:yaml.org,2002:null', '')

yaml.add_representer(type(None), represent_none)

def create_backup(file_path: str) -> str:
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    backup_path = f"{file_path}.{timestamp}.backup"
    copy2(file_path, backup_path)
    return backup_path

def process_yaml(input_file: str) -> None:
    # Create a backup
    backup_file = create_backup(input_file)
    print(f"Backup created: {backup_file}")

    # Read and modify the YAML
    with open(input_file, 'r') as file:
        data = yaml.safe_load(file)

    modified_data = add_continue_on_error(data)

    # Write the modified data back to the original file
    with open(input_file, 'w') as file:
        yaml.dump(modified_data, file, default_flow_style=False, sort_keys=False)

if __name__ == "__main__":
    input_file = '/config/automations.yaml'
    process_yaml(input_file)
    print(f"Modified YAML has been written back to {input_file}")

configuration.yaml

  update_continue_on_error: "python3 python_scripts/update_continue_on_error.py"

automation:

alias: Update Continue On Error
description: ""
trigger:
  - platform: time
    at: "07:16:00"
condition: []
action:
  - metadata: {}
    data: {}
    action: shell_command.update_continue_on_error
    continue_on_error: true
mode: restart

I must say, Iā€™m in camp ā€œmake this a featureā€ as well. The ability to enable at the automation level seems like a fair compromise.

@tom_l would you mind sharing how I would set up an automation to monitor system logs for errors on automations? Is there a template you might point me to? To your point, addressing issues with hardware is ideal.

Thank you.

Iā€™m running into this as well, just like many folks. Itā€™s true - no matter how well you plan, execute, and follow procedures things will either break, go offline because you accidentally turned off / unplugged something, or whatever.

Breaking an entire automation from continuing may hide the problem, but it sure keeps things running otherwise when you have automations that do things automatically like turn on and off lighting.

Just yesterday I had a zigbee outlet fail (hardware failure, making noises) and it ended up breaking all the time triggered automations because it included a small LED lamp in a hallway as part of the automation.

Because it was one of the first devices the automation acted on, the rest of the actions failed when this device became unreachable. I knew about it when it did not turn off at night, and testing the device manually failed, so I knew it needed to be replaced. I did not want to dive into all that work last night since it was a wall outlet, but also I didnā€™t want to delete the zigbee device as I didnā€™t know how bad the automations would break when the device was non-existent vs. unreachable.

Anyway, I changed the outlet this morning and ensured that I used the same entity names for the outlets & usb port so my automations fell into place without any need to edit them. And things are back to normal now, but again Iā€™d like to have this feature easily set to on by default (the continue_on_error flag).

I have editing my time automations to include this in every action now, but having some easily set setting in HA would be a nice feature in my opinion.

Sweet Jesus please add this at a per automation level.

I do not care how sloppy it is. It is basic usability for a normie.

please vote to have this (maybe) solved this in the WTH of dec '24: WTH canā€™t continue on error be set for entire automation

1 Like