July 3rd, 2019 Software Update: FarmBot OS v8 Beta, Variables, and much more

Hello FarmBot community,

Today we have a big software update for you! Some things you may have seen already because they were deployed to the app several weeks ago, some things were just deployed today, and yet other features will only be available to you if you decide to try out the FBOS v8 beta. So let’s kick it off! :soccer:

FarmBot OS v8 Beta

Today, after about 10 months of refactoring, feature development, and sweeping architectural changes, FarmBot OS v8 is ready to be beta tested. Big congratulations and thanks to @connor for all of the hard work he’s put into what’s shaping up to be our biggest release of FBOS ever!

Disclaimer: As said in the name, this is a beta release and should not be used in an unsupervised way or for mission critical gardens. There are known issues (which I’ll get to), some issues with stability, and a handful of features that are not fully implemented. We’re doing everything we can to wrap things up, but until the official stable release comes out, please keep in mind that this is a beta.

That being said, we’d love for you to give it a go and provide your constructive feedback. So here’s what’s new:

Variables

Primarily, the v8 release is built to support run-time variables. Variables allow you to create generic sequences and then pass in a variable value from another sequence, a regimen, or an event. For example, you could make a generic Water Plant sequence, and then pass in the specific Plant you want to water by using a variable that is defined in an Event. With this architecture, the single generic sequence can be used to water different plants, rather than having to create many variants of the same sequence. (Read more on how this works in the app section below)

Support for variables required a complete re-write of the software module that executes sequences, and also significant changes to the parts of FBOS that manage events and regimens. We’re launching first with support for single-location variables and one variable form per sequence/regimen/event. However, we’ve architected everything with plans to support multiple variables, variables of other types (time, value, etc), and location variables for multiple-locations which will invoke a loop-like functionality. (Again, more on that below)

Networking

We’re using a new networking library which has improved stability and is more ergonomic from a programming perspective. You’ll see an improved captive portal experience when using configurator, and FarmBot OS can now move in and out of configuration mode more quickly. Furthermore, there will be improved support for offline setups.

Configurator

Firmware selection has been moved out of configurator and into the app. With the previous system, we were constantly battling source-of-truth issues, particularly in first-boot, factory reset, and firmware switch situations. With this change we expect an increase in stability and a more streamlined configuration experience. From now on, FarmBot will always consider the firmware selection stored in the API as the source of truth for what the user wants. This may make it more difficult to use custom firmware, but please open an issue on GitHub if you need support.

For newly configured FarmBots, look out for a message in the Message Center to flash the appropriate firmware to the Arduino/Farmduino.

Other improvements

FBOS v8 now supports guaranteed log delivery. This means that if the network connection is unavailable when logs are generated, they will be stored and then uploaded to the web app when the network connection is restored.

Farmware installation records are now stored in the API. This will allow 3rd party farmwares to be re-installed automatically after a factory reset of the device, and also allows broken installations to be more easily fixed.

Known Issues

As mentioned above, FBOS v8 is currently available in beta form, and there are some issues with it that we are aware of:

  • Farmware is not fully implemented yet. This means you cannot currently use 1st or 3rd party farmware, the Run Farmware or Take Photo sequence commands, or the Take Photo button on the controls page. With the new way sequences are executed, it has been tricky to re-integrate support for farmware, but it is in the works for the official v8 release.
  • Many logs are missing, including sequence and movement logs. These will all be re-implemented soon.
  • Updating variable values in certain circumstances does not take effect. If you think you’ve run into the issue, a quick fix might be to make small changes to a parent or child resource and save. Please let us know if you experience this issue.
  • Changing the repetition rules for an event can sometimes not work. If you run into the issue, just delete the event entirely and make a new one with the desired repetition rules. Please let us know if you experience this issue.
  • Some network conditions may cause the device to become unreachable. If you experience this please let us know if any conditions on your network are out of the ordinary, and then you’ll likely just want to switch back to v7.0.1.

Trying out the FBOS v8 Beta

Again, please do not use the FBOS v8 beta on any FarmBot tending to a mission-critical garden. We are not in a position to provide quick assistance for your bot if something goes wrong when running the beta. If any of the issues noted above are deal-breakers for you, do not use the beta. Please instead be patient for us to work out the remaining issues and release a stable version.

To try out the beta, opt-in to beta updates and click the update button. Note: if anything goes wrong and you just want to go back to the stable v7.0.1 release, you’ll need to re-flash the microSD card.

How you can help

Please let us know if you run into issues. A helpful bug report includes the exact version of FBOS you are using (seen in the device page), the version of firmware you are using (eg: Farmduino v1.3), and clear steps that can be taken to reproduce the bug. For example, “I changed an event from one-off to repeating, and it didn’t work”.

Web App Updates

To compliment FBOS v8, we have a number of updates to the web app. Some of these updates (notably, the ones related to variables) will only be visible/available to use if you are using the FBOS v8 beta.

Variables

As mentioned earlier, we’re launching with support for one single-location variable per sequence/regimen/event. To create a variable, select “Location Variable - Add new” from the dropdown in a MOVE TO command:

Once you’ve done this, a variable form will appear at the top of the sequence.

From here, you have two options:

  1. You can define the variable’s value right here in the sequence with Custom Coordinates or the location of a single Plant, Tool or Seed Container, or Map Point.

  1. You can choose to have the variable’s value defined external to the sequence (in another sequence, a regimen, or an event). To do this, choose “Externally defined” in the dropdown. Note that when you choose this option, you will also need to provide a DEFAULT VALUE for the variable. If the sequence is ever run without the variable explicitly set to another value, the default value will be used.

Once you’ve made your choice, notice that the text in the MOVE TO step’s location field has updated with your selection. If you would like to use the variable in additional MOVE TO steps, you can now find the variable in the location dropdowns.

If you chose option 2 above, you’ve just made your first variable sequence! This means you can run the sequence in different ways depending on the variable value you pass into the sequence from somewhere else. Let’s see what that looks like.

There are four places that you can define the variable value external to the sequence:

  1. If you want to test your sequence with the test button, you will need to provide a value for the variable to be used during the test. Simply click the test button, select a value (if you want something different than the default value), and then click test.

  1. If you add the sequence to another sequence using an execute command, then a variable form will be shown the execute step. You can either choose a value right there, or create another variable (for the parent sequence) and define the value in the parent sequence, or external to that! Using this method, it is possible to have a set of “Russian doll” sequences that keep passing variable values further and further into the children sequences until ultimately, the value finds its way to a MOVE TO step.

  1. If you add the sequence to a regimen, then a variable form will appear at the top of the regimen. You can either choose a value right there, or choose to define the value external to the regimen, in which case you will need to make a choice in the event that runs the regimen. Notice that the value you choose will be displayed in each regimen item that the value will be passed into.

  1. If you make an event for either a sequence or a regimen that requires a variable value, then a variable form will appear in the add event panel. You will need to make a choice here, or use the default value.

And that is how you use variables! We’ve taken considerable time to design this system, and we hope you find it intuitive and powerful to use. There are some obvious limitations with this initial release though which will be our top priority to implement as soon as FBOS v8 is released in stable form. First will be support for multiple-location variables such as “All plants” and “All weeds”. This will invoke a looping-like functionality where you can run a single watering sequence to take care of, well, all your plants! Next will be support for multiple variables within one sequence/regimen/event. So for example you could pass in both a tool location and a plant location into one sequence. Farther down the road will be new variable types such as time , to be used in the wait command.

Later this month we’ll have updated documentation explaining the usage of variables in more depth and with practical examples. In the meantime, we look forward to you trying out the initial implementation and refactoring some of your duplicate sequences to be a little more variable :slight_smile:

Other updates to the web app

New farm designer settings panel

Here you’ll find all of the farm designer related settings. Our apologies that some of these settings were difficult to find before!

In addition to the new panel, we’ve also deprecated the DOUBLE DEFAULT MAP DIMENSIONS setting in favor of actual input fields that allow for any custom size map you want. Note that these fields will be grayed out if DYNAMIC MAP SIZE is enabled.

There is a new setting named CONFIRM PLANT DELETION , which you can turn off to disable browser confirmations when deleting plants.

Navigation improvements

  • The plant details and plant edit panels have been combined. Now, whenever you click a plant from the list or the map, you can immediately change its location, etc. This makes for a faster farm designer experience, especially when making changes to more than one plant.
  • Navigating to the farmware page on mobile will now display the farmware list, so that you can choose which farmware you would like to use.
  • There is now a help link in the account menu that takes you to a new page to revisit app tours and find links to documentation.
  • The More [+] dropdown in MOVE TO sequence steps will now load in an open state if there are any non-zero offsets, and a closed state if all offsets are zero. There is also a new option in the sequence editor settings menu to make advanced step options always open by default.
  • The MOVE TO command has been simplified to only show the Location field by default. X, Y, and Z coordinate fields will only be shown if Custom Coordinates is chosen for the location. This provides a more compact layout, useful for displaying more sequence steps on the screen at once.

Events

You can no longer switch from a sequence event to a regimen event. Sorry! This change was required for FarmBot OS v8. If you must switch, you’ll need to delete the event entirely and make a new one.

Gantry-mounted tool slots

You may have seen the gantry-mounted seed troughs in our launch video for FarmBot Express. To support these types of “slots” that move with the gantry, there is a new option in the tool slot settings menu to define a tool slot as “Gantry-mounted”. This will change the X coordinate value to “Gantry”, and you’ll see the slot rendered accordingly in the farm designer map.

Demo mode

As you may have seen on our website the last few days, we built out an app demo mode for prospective customers. You can try it at demo.farm.bot, but be aware that the account and any data you make will be deleted after an hour. We find this useful when you want to mess around with a throw-away account.

Account seeding

We’ve added a method to “seed” user accounts, which adds a set of resources (peripherals, tools, tool slots, sequences, plants, etc) and applies a set of settings (map size, firmware, FarmBot name, etc) based on FarmBot model. This feature can be used from a Message Center card that is shown for newly created accounts or accounts that have been reset. We have profiles available for Genesis v1.2 through v1.4, Genesis XL v1.4, and Express and Express XL v1.0. This allows people to get their account set up more quickly. Over time, we hope it will enable new FarmBot owners to begin growing a full garden in just a few clicks after making their account.

Reset user account

There is a new option on the account page to reset the user account. This is useful if you want to delete all data to start from scratch while avoiding having to fully delete your account, re-signup, and re-configure your FarmBot.

Cleanup, Bug Fixes, and other small improvements

  • We’ve removed unhelpful widget help texts.
  • Language in the logs settings menu has been improved.
  • The edit plant panel is now vertically scrollable when there is overflow on small screens.
  • App settings are now better organized.
  • Farmware control buttons are now better organized.
  • The pin number input field for peripherals and pin guards are now dropdowns.
  • A horizontal scrollbar that would briefly appear when opening and closing [+] dropdown menus (in the hardware settings widget for example) has been removed.
  • Plant age is now displayed next to the start date.
  • Plant edit buttons are now better organized.
  • New account email verification links now take users to the Message Center so they can finish setting up their device and account, and become acquainted with the app.
  • Sequence save errors are now more human-readable.
  • “Full name” has been removed from the plant details panel - it was redundant information.
  • The E-stop button has been removed from the Controls widget because it was redundant with the always-available E-stop button in the main app navigation.
  • There is now a green toast notification when the web browser reconnects to the message broker (after a disconnect).
  • The log storage limit was increased from 100 to 1000.
  • There is a new app setting to hide the Sensors and Sensor History widgets. This will be enabled by default for accounts seeded with the Express and Express XL profiles.
  • Browser chrome will now be styled black on mobile Chrome and Safari users.
3 Likes

Thank you all for all the effort!
I’ll load it up tonight and start kicking tires!

1 Like

Ran into a lot of issues after upgrading to 8.0.0rc0, had to reset the firmware every time when sync was done. This might be fixed in rc1 but since frmwares and multiple variables are not done yet, I’ll keep 7.0.1 as long as possible, even if I can’t wait to use everything that’s new :gift:

I am not sure where to post bug stuff…
I entered some info here: Using FarmbotOS beta updates
Let me (us, the FBOS V8 Beta folks) know the best place to give feedback.

Thanks for helping out @Intelbotfarmer :slight_smile: Feedback for the FarmBot OS beta is much appreciated in the thread you posted in.

A little update here:

The FarmBot OS v8 Beta is now on release candidate 18. @connor has added back many of the logs, ironed out issues with the firmware, and we’ve made some changes to Configurator to further streamline setup.

Interesting the use of multi location variables for loops :grinning:.

I think you could also implement loops using variables and recursion i.e. loop by a sequence calling itself and in that sequence incrementing/changing then testing a variable in an IF block on whether or not to stop recursing. For example; if this is the 3rd time the sequence has called itself then don’t call yourself again or if the variable has changed from true to false etc then stop recursing.

This would effectively give you traditional While or For loops. I’ve used the technique in about 3 other “shape/block” programming “languages” that lack specific loop functionality.