Amazing work, Farmbot team! Awesome platform!
I finally have a stable copy of PowerLoop Farmware for everybody to try.
I’d love everybody’s feedback, feature requests and bug reports.
PowerLoop Farmware for Farmbot OS
Loop your Farmbot by plants with search filters, or by automatic waypoint calculation to cover Plant search results grid area. Features include executing sequences and saving meta data.
Tutorials and installation information; see README at https://github.com/amerkay/powerloop
PowerLoop taking a Selfie of my Farmbot garden, automatically choosing steps where the photos includes plants (with their radius), excluding empty shots
Travelling Salesman Solution for moving between the resulting filtered list of plants (default behaviour)
PowerLoop v1.2 Features
- Load all plants for current device from Farmbot API.
- Filter plants by plant name, Openfarm slug, age in day range. meta data key/value, and coordinates. See manifest.json.
- Sort resulting plants or Grid waypoints using simple sort(x, y), or using Travelling Salesman Greedy Algorithm by setting ‘Use Travelling Salesman Problem Greedy algorithm’ to ‘True’.
- Calculate grid coverage waypoints, using (optionally filtered) plant list as input. This is useful when you want to scan your garden with multiple photos or run the deweeding algorithm. See examples section.
- Execute list of sequences (initial, before each move, after each move, end).
- Offset X and Offset Y for each move. Can be set to
randint(i,j)to randomize the X Y offset. One use case is for repetitive tasks like watering seedlings that you don’t want to harm with the water pressure, e.g set offset
randint(-20,20)to randomize movement by +/- 2cm.
- Loop all filtered plants
- Move to plant coordinate (X, Y) with offset X, offset Y, default Z and default speed
- Save meta data key/value, if set
- Save plant_stage value, if set
- Runs before and after list of sequences, if set
- Uses official farmware_tools to contact Farmbot API and control device.
- Uses concurrent task executor to save meta data to API, to save time executing each move. More about concurrent.futures.ProcessPoolExecutor at Python docs.
Work in progress: Automatic Water Doser Farmware, that calculates how much water to dose each plant based on it’s adult size from OpenFarm API and age.