Since the big v5.0.0 announcement a few days ago we’ve gotten a few fixes and features out the door:
There was a bug with sub-sequence execution, when the parent sequence simply stopped when it got to an Execute command. This has been resolved in OS 5.0.1
If you had already upgraded to OS 5.0.0 and are now upgrading to OS 5.0.1, you’ll see the progress indicator on the update button in the web app. Sometimes it will display as amount of data downloaded and sometimes as a percentage (depending on the GitHub server that it is being downloaded from)
Because the frontend and backend repositories were separated until v5.0.0, we had caching issues and problems with the app loading on iOS devices. Those issues have now been resolved
The jog buttons now become disabled and greyed out when FarmBot is busy doing a movement
The homepage styling has been updated to match the farmbot.io homepage
Clear labels have been added to the dropdown menus for Pin Mode on the Write and Read Pin Commands
Today we released a version 5.0.0 of the FarmBot software stack! We focused the last six weeks of development on stability, under-the-hood changes, and a grab bag of new features that make using the web app quicker. Here we go:
The largest changes to the web app are ones most people will not see. Before, we had two code repositories – one for the frontend, and one for the backend API. We originally chose this architecture because we felt it would make casual open-source contributions easier and less intimidating. However, having two repositories for the single app has only confused people, made development/self-hosting setups more difficult to get running, and hindered our abilities to develop a real-time messaging API and continuous integration toolchain. The two codebases have now been merged into a single repository named FarmBot-Web-App.
Merging the repositories has allowed us to better use code testing tools. You will now see in the repository README a few badges for the code coverage. While the coverage is still low, Gabriel, Rick, and Chris have been writing tons of tests that will allow us to ensure we don’t introduce bugs or regressions into the software. If you are “watching” the repository, you will see automated emails after every pull request showing how the coverage is improving with the new code.
Because of the above two changes, we have also been able to set up a continuous integration toolchain. This means that every time a pull request with new code is submitted, our continuous integration server “tries it out” and runs all of the tests. If it passes all the tests, we know that the code can be safely merged. The continuous integration server makes testing faster and more consistent, allowing us to begin deploying to production with smaller updates more often.
Ok, now for some things that you can actually see:
The form for creating Farm Events has been streamlined. Now by default, events will not be repeating events. If you want to make a repeating event, you can click the checkbox and then add the repeat details. Note that we don’t currently support repeating regimen events – only repeating sequence events.
Search-filterable dropdown menu for selecting a Sequence or Regimen for a Farm Event:
Regimen items are now displayed in the calendar along with the parent regimen event.
The controls widget now shows the current motor positions in addition to providing the absolute movement input fields. There are also some extra toggle switches located in the advanced menu for viewing raw and scaled encoder positions which might help some people (especially DIY builders) debug their encoders and settings. (Thanks @klimbim for the suggestion)
Search-filterable Sequences and Regimens Lists allow you to quickly find and select one for editing.
We added search-filterable dropdown menus for selecting a Sequence in an Execute command.
And for importing coordinates into the Move Absolute command.
There are new buttons for selecting/deselecting all of the available days when adding a Sequence to a Regimen.
The Farm Designer now uses Spread values from OpenFarm (how big a plant is expected to grow) when rendering the filled-in green circle on the map, allowing you to better plan out your garden layout.
Hotkeys for syncing, navigating pages, and adding plants and events. See the hotkeys menu by pressing ctrl + shift + /
We implemented a “Last Seen” feature in the Device Widget so you can see when FarmBot last connected to the cloud server.
The URL of the web browser now changes when navigating between sequences and regimens. This allows you to use the browser back and forward buttons for faster navigation, and refreshing brings you back to where you were.
The Sequence or Regimen being currently edited is now highlighted in the list.
Better empty-state formatting and messages on the Sequences and Regimens pages.
The date has been added to all status ticker messages.
The latest Arduino Firmware that is bundled with FarmBot OS v5.0.0 has many improvements:
Rotary encoders are now read more quickly. Technically speaking, Tim has moved the stepper movement code out of the interrupt and into the main loop function. This allows interrupts to run faster because the interrupt is now only responsible for reading the encoders. Please note that this has come at a very slight cost to the smoothness of movements. We will continue to improve the firmware and push the Arduino to its limits to try and get both movements and encoder readings as fast and reliable as possible.
The new firmware echoes all commands sent from the Rasberry Pi which makes communication between the two much more reliable. This addresses issues related to skipped Sequence steps.
When the bot is e-stopped then it will enter into a “safe state” where it turns off all peripherals and stops the motors. An additional toggle switch in the Motors category in the Hardware widget allows for “E-stop on movement errors”, which will also send the bot into a safe state when a movement fails to complete after its max number of retry attempts. The user will need to unlock the device from the web app to have it resume work in either situation. This feature will prevent flooding the garden when an e-stop happens while watering.
The movement retry feature has been moved from the OS into the firmware.
Unlocking the device from an e-stop no longer requires a reboot, so unlocks happen much more quickly.
Most of the changes to FarmBot OS were to support the new features and changes in the other codebases. We did however:
Lay more groundwork for the farmware plugin system, which is what the weed detection system uses.
Add download progress messages so you can see that FarmBot is downloading an update or farmware plugin. Note that you won’t actually see these messages until the next release is downloaded.
Switching to a RabbitMQ message broker – this will solve issues where FarmBots or web browsers behind a school or company firewall are blocked from using the current MQTT ports (which prevents communications). This will also allow us to add real-time messaging abilities to the web app (think: better reliablility, faster log syncing to backend, etc)
We plan to have all regimen events start at midnight, because it doesn’t make much sense to start a regimen part-way through a day.
We plan to allow you to back-schedule regimens, so you could for example transplant a three-week-old-plant into your FarmBot, back-schedule a regimen for taking care of the plant from seed, and then the first three weeks worth of items in the regimen would be skipped.
Calendar filters that allow you to more easily find events
A jump-to-today button on the calendar in case you scroll really far and want to get back to today
Some network status indicators in the Device widget and toast notifications for the app. These will help you debug connectivity issues, especially in cases where FarmBot or your web browser are behind a school or company firewall that is blocking access to the MQTT message broker.
Deploying weed detection farmware.
An ability to click-to-add plants in the farm designer so that the experience is more compatible with touchscreens and eye-tracking software (for people with disabilities), and so adding many plants at once is much faster.
While many of the features in this release make working with the app and bot faster and easier, we’re still working on addressing the tediousness discussed in the last software update. Now that we have the technical infrastructure in place for smaller updates that are more frequent, we hope to move towards weekly production pushes and more regular update posts. Stay tuned!
Thrive Upstate is a non-profit in Greenville, South Carolina that provides people with disabilities and special needs with meaningful services, opportunities, and support, so they may thrive in life, work and play. See how they are using FarmBot as an accessibility technology for horticultural therapy and to empower individuals who might not otherwise be able to grow their own food.
Hey FarmBot community! Over the past few months we’ve had our heads down working on the next batch of 250 FarmBot Genesis v1.3 kits. There’s a long list of improvements we’ve made since v1.2, and here are the two biggest:
Our new open-source custom electronics board designed specifically for FarmBot. This board combines the functionality of RAMPS and the Arduino Mega into one board with great connectors, easy to read silkscreened labels, and a few other bells and whistles. With Farmduino, wiring up FarmBot will be much faster and less error prone.
Injection Molded Parts
In v1.3, more parts are being injection molded out of a UV stabilized ABS material. Many of these new components are lighter, stronger, and/or less expensive than the ones made in the v1.2 kits, which is what allowed us to lower the cost of the v1.3 kits.
In other news: help save the bees!
Our friends over at Open Source Beehives have created an advanced beehive sensor that could help us discover what is killing the bees, open-source style!
They just hit their $20k Kickstarter goal and are pushing to get a BuzzBox in every State in the USA. You can support their efforts by adopting a BuzzBox in your State, purchasing one for your beehive, or checking out their other awesome perks: See the campaign.
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.
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!