V4.0.0 Software Update


Hi FarmBot community,

I’m happy to share that we just released v4.0.0 of FarmBot OS and deployed the last 2 month’s worth of web app progress to my.farmbot.io! Here is an overview of what’s new:

Import Plant Coordinates into Move Absolute Commands

Move Absolute commands in the sequence builder can now import coordinates from any Plant in the Farm Designer. This allows you to graphically design your garden layout and then use Sequences to perform operations according to the plant locations. For example: You can make a sequence that moves to a plant location and then waters the plant.

Note that all plants currently have a z-coordinate of 0 so you will most likely need to use the z-offset functionality in combination with the imported plant coordinates. On our roadmap is the ability to define the z-height of your soil plane. Then, all imported plant coordinates will have a default z-coordinate according to the soil height and planting depth.

Find Home in Sequences

As requested, we added a FIND HOME command to the Sequence Builder. This allows your FarmBot to programatically find the home (minimum) position and set that position as (0, 0, 0) whenever you want. We recommend as a best practice to not only MOVE ABSOLUTE to (0, 0, 0) at the end of your sequences, but then also FIND HOME to ensure locational accuracy. You might also want to FIND HOME at the beginning of tool mounting sequences. You can choose to find home for a single or all three axes.

Send Email Messages

SEND MESSAGE commands can now be configured to send you an email in addition to the status ticker and toast notification options.

The Farm Designer

You can now choose the origin of the Farm Designer map to match up its display with how you have configured your FarmBot. There are four options - one for each corner. In the image below, the bottom left corner is chosen as the origin. Coming soon will be the ability to rotate the map 90 degrees so that all possible configurations are covered.

Spread is the expected maximum size that a plant will grow. It is displayed in the farm designer as a filled-in semi transparent green circle behind each plant icon. It is shown when you click an icon, or shown for all plants when the layer is turned on from the right-side menu. Spread is useful for efficiently using the space in your garden without overcrowding any plants. Spread data will soon come from OpenFarm, though right now we are just using a default value for all crops.

The new FarmBot layer shows the locations of the tool slots as semi transparent gray circles. The name of the tool in that slot is shown upon mouseover. This layer also displays the real-time location of the FarmBot gantry and cross-slide/z-axis as a darker gray bar and circle (shown at the home position (0, 0, 0) in the image below).

Other bug fixes and improvements

  • Status ticker times are now displayed correctly
  • Dragging and dropping now works at all map zoom levels and scroll locations
  • All Arduino Pins are now available for evaluation as the variable in an IF statement
  • You can now also choose “is unknown” from the operator dropdown in an IF statement
  • Camera widget displays properly when no webcam stream is present
  • Crop image aspect ratios are now correct
  • New Invert Jog Button Toggles located in the gear menu on the Controls widget allow you to match the jog buttons to your real-life perspective when manually controlling FarmBot. Coming soon: an additional toggle to swap the X and Y jog buttons to cover all possible perspectives.
  • To reliably execute Farm Events, your FarmBot needs to know its timezone. We will guess your FarmBot’s timezone and set it for you based on your web browser’s location, though if you manage your FarmBot remotely (from a different timezone) then you should double check our guesswork by going to the Device page and finding the TIMEZONE dropdown.
  • New organization of the device parameters

New Arduino Firmware

We have further improved the rotary encoder support. We recommend these new parameter values for the rotary encoders and motors:

  • Max Speed (Steps/s): 400
  • Enable Encoders: Yes
  • Encoder Scaling: 56
  • Max Missed Steps: 5
  • Encoder Missed Step Decay: 3

While the encoders are currently best used for stall detection, we are working on the ability to use them for positioning as well. You can try the experimental support for this with the new toggle switches for “Use Encoders for Positioning”. Note this will not work reliably above 400 steps/s.

The new firmware also supports software limits (STOP AT HOME and STOP AT MAX) that will restrict movements from going beyond the maximum or minimum locations. We recommend enabling these from the Device page of the web app.

AXIS LENGTH values are now automatically set during calibration. You can also manually set the values from the device page, though they will be overwritten with every calibration.

FarmBot OS v4.0.0

The ability to import plant coordinates required a significant refactor to how plant, weed, and tool locations are defined across the entire software stack. FarmBot OS v4.0.0 is a required upgrade to be able to use the new web app features. In addition to the new importable coordinates functionality, the new OS also includes:

  • Better WiFi stability that resolves the :nxdomain issues
  • Improvements to rebooting and factory resetting
  • The new Arduino firmware

To upgrade to the new OS, simply go to the Device page and press the green UPDATE button. Note that the download and upgrade might take a while and your FarmBot may reboot a few times.

Addressing Tediousness

We understand that programming your FarmBot to take care of an entire garden is still a tedious process that requires many duplicate sequences and regimens rather than generic reusable ones. For example: each tool requires its own “pickup” sequence. And each plant requires its own “water” sequence or move absolute steps. We have a lot of ideas and features on our roadmap for how to make these things less tedious:

  • Move Absolute commands that can inherit coordinates from a parent sequence, regimen, or farm event - Currently you can manually define move absolute coordinates or import them from a tool, plant, etc. In either case, the coordinates are resolved in the sequence step. Inheriting coordinates will allow the coordinates to be resolved in the sequence itself, in a parent regimen, or in a parent farm event. This will allow sequence steps to be more generic, and only become fully defined as part of the entire sequence or when that sequence is scheduled in a farm event or used in a regimen.
  • Plant groups - Allows you to define groups of plants. There will also be some auto-generated groups for all-plants, and plants of a certain crop. This allows:
  • Looping a sequence over a group of plants or weeds - This will allow you to make one watering sequence, for example, that can be run for all of your plants.
  • Applying Regimens to a Plant or Plant Group - Currently you can schedule regimens to run on their own, and they might interact with your plants. However, the grand vision is to be able to apply a regimen to a plant, or group of plants. This will allow you to re-use all the sequences and steps needed to take care of a crop, season after season.

What Else is Next

Our next big pushes include the notes mentioned above, as well as:

  • Improving the communication between the Arduino and the Raspberry Pi by implementing a stricter messaging specification. This will help resolve some of the issues we’ve seen with “combined movements”, unexpected e-stop unlocking results, and other anomalies.
  • Displaying all Regimen Items in the Farm Events calendar
  • Implementing a “Safe State” feature so FarmBot knows what to do (and what not to do) during an E-Stop or when the encoders detect a motor stall.
  • Implementing a “Retry Movement” feature so that FarmBot can attempt to move again after a stall. If the max number of retries limit is reached, the device will likely be e-stopped and you will be notified via email. Note that this concept is still in the works and subject to change.
  • Deploying alpha weed detection farmware.
  • And of course: stability improvements and bug fixes throughout the stack.

We appreciate everyone’s support in providing us with software feedback, reporting bugs, and troubleshooting. We also appreciate everyone’s patience as we develop these new features. We understand that this release took a while since the last big one, and we’re working to speed up the time in between releases so that you can get new features and fixes faster. We look forward to hearing what you think!

How to write the defult SSID and password into raspberry Pi
Sequences, Pin Information, Status
How to quickly program sequences
Get plant ID integer to introduce it into "do while" "for..." to get coordinates
Requesting new functionality for homing command inside a sequence


It would be really helpful in general for the absolute move command if you’d be able to move axes selectively. For example, if you’d just leave Z blank, the bot would treat it as a 0 relative move; it wouldn’t change, while X and Y would move absolutely. Oftentimes I’ve found myself using absolute move and then having to copy the Z from previous moves to keep it from changing. Then if I need to change the Z earlier in the sequence, I have to change all the move actions.

I know this could be resolved by using relative moves, but then absolute moves quickly lose their usability; you’d likely use them only at the beginning of a sequence.

Any plans for selectively toggling axes per absolute move command?

Other than that: this is amazing. If all the things you mentioned as official feature for this release work (and I say so cautiously, I know software development is an endless cycle sometimes…), then this is the update everyone has been waiting for!

Do you want us to provide feedback here, or shall we open an issue on GitHub to gather all the feedback for this version?

Selectively toggle axes for move absolute commands

it very cool !this is amazing., but when i take a photo it will upload today all the photo at the same time


Everything seems to work well, except that my existing master sequence fails halfway through: FAILED TO EXECUTE MOVE_ABSOLUTE: FAILED TO MOVE TO: (400, 1030, 200). This was a sequence that has been working fine with previous versions. It is actually a sequence composed of many ‘execute’ commands for other sequences which operate on rows. I’ve changed the timeout values with no success. I can remove some of the execute sequences and the process proceeds further, but always stops after a certain amount of time.

After update 4.0 always failed to move to
Update 4.0 got a lot of errors

I found that the Encoder scaling value changed from 100 to 56 and you should play around with max missed steps, NOT timeout. If you set max missed steps to 10, do. you still get a stall alert?!


I’m having the same problem as steffan.
I played around with the max missed steps but it haven’t found a solution yet.


I was trying to change different settings, and when I put the setting for ‘MAX RETRIES’ on 100
I didn’t got the error anymore.
I hope this works for more people.


Okay I changed Retries to 20, and the sequence almost got to the end. I guess this means that I should also adjust the missed step counts and decay to make the stall detection less sensitive? I really like this Retries feature and want to keep it relatively low.


2 posts were split to a new topic: Using Custom Arduino Firmware


Hi @roryaronson, my comments:

Spread data will soon come from OpenFarm, though right now we are just using a default value for all crops.
Why then displaying a spread which is useless, please switch off in next minor update to not confuse people. Once again,
if a function is not implemented, please DO NOT try to “fool” people by pretending it could be already implemented. Simply switch it off, leave it away and do not present it to the user as long as it is not developed or implemented :wink:

Status ticker times are now displayed correctly
Old story, rare news on that - logging; please think of having maybe a verbose mode in which the bot writes many things into the rollbar. I am currently experiencing the (non) debugging possibilities when the bot finds he needs to switch itself off… please add the DATE and do not cut the messages after some lines. Up to now you do not offer any other log, therefore this is the only and most vital source for debugging messages…

If there are too many sequences already created and one wants to execute a sequence, after some sequences the drop down list is cut again in the execute sequence thingi.

Camera widget displays properly when no webcam stream is present

Is there a way of showing the live stream? Would be very helpful.

As already proposed before, it is nice to be flexible as rubber but wouldn´t it be better to have a default setup of the origin of the bot and then built in possibilities to change whatever you want? At the moment you can have the farm designer origin wherever you want, the homing direction depends on how you pinned the motor and not on a standard setup?
Please propose a standard origin and then built up on it. It makes everything much easier for the kit buyers…

To reliably execute Farm Events, your FarmBot needs to know its timezone. We will guess your FarmBot’s timezone and set it for you based on your web browser’s location, though if you manage your FarmBot remotely (from a different timezone) then you should double check our guesswork by going to the Device page and finding the TIMEZONE dropdown.

This seems to be connected to fancy translation in the web frontend as well. As this is complete denglisch in my case I would appreciate switchting the web frontend language seperately.

Encoder Scaling: 56

Why did that change from 100 to 56? For every kit built, this should be a fixed and given value, right?
Motor and Encoder stuff in general.
Again LOGGING, LOGGING, LOGGING; yesterday it happened, that the bot sent a red error message stating something like farmbot could not move to: bla, bla bla; I don´t know why that happened, which axis, which encoder which whatever. I really don´t know how one cannot program those kind of things into a log. I guess you are playing around with your serial cable and grabbing the debug messages somewhere else. Either you sent a FTDI cable along each kit including a guide on how to use it, you put all of those missing messages in the rollbar or you simply get the thing working as it should be, then one does not need to complain about it nor one does not need to read error messages… its really annoying… I am currently running with Max missed steps: 10…

While the encoders are currently best used for stall detection, we are working on the ability to use them for positioning as well.

I know that you are working hard on that, but why did you sell tools within the kit when the software is not at all able to support error free tools xchange?! Did you now finally decide to built in endstops as been stated by more or less every user which is into the matter? Why trying to pursue a concept which is “shit” regarding homing?

AXIS LENGTH values are now automatically set during calibration.

Please change them to mm, I am not the brain to think in motor steps…

Looping a sequence over a group of plants or weeds

Could you try to group (unexpand, expand feature) the sequences on the right side? I built one sequence for each seed, so it gets very chaotic…

Good direction you went in the last two month, but there is still so many stuff in alpha state, I wonder when the basic version will be fully functional without errors…


Movements are unreliable and fail througout!

I tried to nail down the error of something like:

Failed to execute move_absolute: failed to move to: (388, 620, 425)

to my motor settings and play around with max. speed and max. missed steps. I stopped when the bot was moving slowly like a slug with those paramters set:

As I cannot provide any further debug messages in which step this occurred and why, please ask your own crystal ball…

Guys you need to rework the whole thing properly, otherwise you are loosing strong supporters by demotivating
them. There is really NO use to take care of an updated version to be shipped in some weeks (?!) if you do not get the basic shit right. Sry to be this direct, but I showed a lot of patience over the last months…


i do as the picture you share above and motor get signal but motors dont move. i have no any idea tks.


Please carry on the discussion here :slight_smile:

@ardun, we’re aware of a bug where all the photos are being uploaded every time. Thank you for the report!

@all, the Max Retries feature is still in the works. It shouldn’t need to be set that high, though with the way it is working right now that is a working solution. We’ll let you know when it can be reliably set to a lower value, such as 5.

@Klimbim are you able to scroll in the dropdown list? I am able to on both a windows and a mac laptop using Chrome.

Yes, press the EDIT button on the Camera widget and enter in the URL of your webcam stream. (Note: this is for an external webcam - not the built-in FarmBot camera)

At this time we would rather not propose a standard origin, but rather have people set up their devices in the most ideal configuration given their environment.

It sounds like you’re saying the translation to your native language isn’t very good at the moment. If you’re up for it you can submit a language translation file (or edit the existing ones) using these instructions.

Yes, the calculated value for encoder scaling should have always been fixed at 56. However, in the last release, due to the limitations of the Arduino and the way in which encoder scaling was being calculated in the code, we needed to temporarily use 100 to get more reliable results. You can see the calculation for the encoder scaling constant here.

As for logging: you are welcome to get an FTDI cable to see additional logs. However, the logs you will see via FTDI are very verbose and not very useful unless you are a software developer and looking to improve the software - they are not meant for average FarmBot users, which is why we don’t send them to the frontend interface. Logging in general though is something we know we can improve, and we have a few things on our roadmap. @mdingena has discussed some ideas as well in this thread.

Homing and stall detection are working very reliably with encoders on our test machines, as well as mounting and dismounting tools from the toolbay. I have a few videos in the works explaining and showing this.

Please remember: FarmBot in its current form is an early adopter technology for makers and hackers who want to help improve this technology for everyone. Adding more components (such as endstops), developing new tools, contributing to the software, controlling other peripherals, etc are all things that we hope and encourage everyone here to try out. For example, the work that @Loveny is doing is very impressive! And we hope everyone can learn from it and become inspired.

That’s on our roadmap :slight_smile:

We’ll first implement a search filter for the sequences and regimens list so you can quickly find things. Eventually we will probably add folder-style organization, though that’s a ways away.


Hello, I would like to ask about the addition of the new function of farmbot, and I see that it does not support the new functions of the compiler. I want to add new features to the operation side. What should I do,thank you。


Hi @hx244808, please check out our Frequently Asked Question about becoming a developer for your FarmBot. This should point you in the right direction.


Hello, thank you for your reply. Thank you


it’s cool feature to loop all plants for watering. but I don’t find loop function in sequence design panel. it’s needed to select all plants one by one. I think I did wrong opetion. Can you please give me a sample kindly ? Thanks,

How to loop all plants for a senquence