Parcel, Versatility, Variables, and more!
After this round of fixes, we are again focusing our efforts on new features for developers. Our big focus in the coming months will revolve around the theme of versatility.
What is "Versatility"?
The FarmBot platform is free (as in freedom) and open. Everything about FarmBot is Versatile and no part of the system is out of a developer's reach. The developer team is working on two goals for 2019 to maximize versatility and third party plugins. For us, versatility means being able to apply FarmBot to as many problem domains as possible and being able to use FarmBot in unanticipated ways.
Versatile Farmware APIs, Better Documentation
We want to make third party software development as simple and approachable as possible. This means continuing our work on the developer portal and also providing better APIs for Farmware authors. In late January, I sent out an email to Farmware authors soliciting feedback on what I could do to make software development easier. We received a number of helpful suggestions. If you did not have a chance to participate, please reach out to us on the forum or by replying to this email- your feedback is highly appreciated.
The next release of the Farmware subsystem will offer a more stable experience with improved error reporting, simplified resource management and better GPIO support. We also plan to move the Farmware system out of the "alpha" stage this year.
A More Versatile CeleryScript
The second software development goal relates to CeleryScript and will require two additions to the CeleryScript subsystem. CeleryScript is a custom JSON message passing format and RPC protocol developed for use by FarmBot. It's the means by which sequences execute and also a means of controlling a device, both over a network and on the device. We hope to improve CeleryScript by adding two highly requested features.
Variables: The first addition to CeleryScript will provide users the ability to create variables within CeleryScript, such as adding a parameter to a sequence. For instance, if today you have a sequence called "water carrot X", with a hard-coded carrot location, under the new system, you will be able to generalize that sequence to "water a plant". You would then pass the value of the plant into the sequence as a parameter, at runtime, without requiring changes to the sequence. This is similar to how function parameters work in traditional programming languages.
Groups: Taking the idea further, the second feature will allow users to pass a list of parameters to a sequence, which is similar to a `map()` function seen in many functional programming languages. The "Water Plant" sequence could be extended to not water just one plant, but instead, a list of predefined points, such as "all carrots", "all weeds", etc..
Groups and variables will allow end-users to perform tasks seen in traditional programming languages, using concepts such as iteration, parameters and variables. For software developers, this will provide a more flexible and expressive RPC system.
If you are interested in developing 3rd party software for FarmBot, the best way to start is by reading the developer documentation. Our development team is available for questions on Github and the FarmBot forum to help you along the way. We hope you try it out, and we look forward to seeing your creations!