An e-stop command for sequences

It would be nice to have the ability to issue an e-stop/unlock from a sequence. One case would be for testing if a tool is already attached at the beginning of a sequence.

At some point today FB lost its mind in the middle of watering. The next scheduled event begins with picking up the watering tool, which it already had. Since there’s no way to determine which tool it has or stop it if a tool is attached, it would have begun the event with a train wreck.

  • I’d like this feature
  • Not interested in this feature.

0 voters

What would the E-STOP solve here? The way I see it, it wouldn’t solve anything because the E-STOP would trigger and you’re still stuck with a watering tool already mounted. This smells like an XY Problem.

Instead, it would be better if you could modify your sequences to do the following:

  • Watering sequence begins
  • Check if watering tool is mounted
  • If not mounted, pick up watering tool first
  • Continue with the rest of watering sequence

An e-stop would prevent FB from damaging itself. While I would prefer to have improved error handling and a method to detect which tool is mounted, the ability to execute an e-stop would be a simple and effective way to stop FB from doing something harmful.

The example I provided was simply meant as an example of a scenario where being able to perform an e-stop would be useful. I imagine there are other situations where that could be true as well.

I do intend to discuss how others get around these issues. I was planning to do that in one of the other sections, not as part of my feature request.

There is a way to atleast determine if any tool is already mounted. So you can check in an IF statement before picking up any tool if there is already something mounted.
You can also check which tool is mounted if you set up a pin for each tool at the tool mount. See this section in the docs.

I think an E-STOP is made for emergency incidents and is intended to give the user a possibility to stop any movement or process immediately and protect the person and hardware from any kind of damage. Triggering an E-STOP through a sequence would only help to stop the Farmbot from starting upcoming Farm-events.

Sure, having some kind of error handling and error messages would be great and is definitely on the timeline. But there are also many other important things needed to be done first.

Please don’t get us wrong, were glad that you brought in your idea for a new feature. We’re just not seeing this as a proper solution to your example, or any other needs for that right now. But maybe other people were experiencing issues where this feature would have helped?

I realize I can determine that a tool is mounted by checking pin 63. This allows me to start my sequence with something like this:

If pin 63 = 1
    Execute "mount watering tool"
    what? [This would be a great place to e-stop]

However, at this point the remaining commands in the sequence would continue to execute

Move to plant 1
Water plant
Move to plant 2
Water plant

Turning FarmBot into GinsuBot™.

I could make the IF STATEMENT the only command in the sequence and THEN execute a more complex sequence that includes picking up the tool and doing all the other steps, but I need a lot more error handling. Did the tool actually get picked up? Before I turn on the water is the tool still attached? And on and on… I can see this becoming a very complex nested sequence spaghetti mess.

It would stop FarmBot from executing any subsequent commands in the sequence as well as prevent upcoming farm events from running… So if it dropped the watering tool it would be prevented from slicing up the farm.

This actually supports my argument for e-stop. I’m going out of town next week and wish I could count on Farmbot not to go full-on Dalek. Robust logic and error-handling would be super sweet, but I get that it’s complicated and will take a significant effort. Having the ability to call an e-stop would at least allow us to halt everything before all hell breaks loose.

I think an Abort Sequence command would be more appropriate here, even just in name.

If you could abort a sequence, no subsequent steps in the sequence will be followed. In addition to an Abort Sequence command, we would also need an Abort All Sequences command, since it’s possible to nest sequences. Abort All Sequences would abort the current sequence, and any parent sequences that called it, essentially resulting in an E-STOP (but still leaving the FarmBot available for next Farm Events and such, so it’s not really and E-STOP).

Strong vote from my side for this feature!!!

I just wrote a new feature request, when the nice forum search showed me this thread.

So I need an e-stop to be triggered inside a sequence. If the bot should work autonomously I would like to stop everything if the read tool pin is not showing 0 after mounting a tool. This is an additional security level to stop everything the bot is doing if the mounting of a tool fails (for whatever reason).

Would this be a big hurdle to tackle? You could implement an additional tick box in the send message block?!