forked from coala/cEPs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
WEP-0001.md: Add Django Microfarm Proposal
This WEP describes the approaches and implementation of the Django Microfarm GSoC 2021 Project. Close coala#194
- Loading branch information
Showing
1 changed file
with
159 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
# Django Microfarm | ||
|
||
| Metadata | | | ||
| -------- | ---------------------------------------------| | ||
| WEP | 0001 | | ||
| Version | 1.0 | | ||
| Title | Django Microfarm | | ||
| Authors | Prashant Dodiya <mailto:pra17dod@gmail.com> | | ||
| Status | Proposed | | ||
| Type | Process | | ||
|
||
## Abstract | ||
|
||
This WEP describes the approaches and implementation of the [Django | ||
Microfarm](https://projects.coala.io/#/projects?project=django-microfarm&lang=en) | ||
GSoC 2021 project. The aim of this project is to create a tool that allows | ||
anyone to become a market gardener, given some space. As a first step, a user | ||
will merely sign up and enter the amount of space that (s)he wants to use. The | ||
system will then trigger tasks the user has to do to farm on his space | ||
efficiently. Those tasks are triggered by simple rules and may depend on weather | ||
events, date, and later also other triggers. Thus, anyone can be a market | ||
gardener, and this tool will be beneficial and easy to use. | ||
|
||
## Introduction | ||
|
||
This project is under the Sub Organization named WeField e.V. It is a German NGO | ||
that takes regenerative and climate actions on monocultural used Wasteland. This | ||
project will promote market gardening among the people. They will be growing | ||
their vegetables, fruits all by themselves. They can even sell their products as | ||
a source of passive income. To understand this project Market Gardening and | ||
No-dig Method are essential to be understood first. | ||
|
||
- Market Gardening | ||
|
||
Market gardening is both a very old way to farm and a very new and popular one. | ||
The market gardener is someone who has a small area of land. The term small can | ||
be used compared to most large commercial farms, where acres possessed can | ||
be in the tens of thousands. Typically small could mean anywhere from one to | ||
a couple of acres to 50 or over. On this land, the farmer grows whatever he or | ||
she wishes. Instead of growing it for commercial markets, produce is usually | ||
sold at places like farmer’s markets or to small local grocery stores and | ||
restaurants. Sometimes the market gardener maintains a sales site on their land | ||
and sells directly to customers from the farm. | ||
|
||
- No-Dig Gardening | ||
|
||
No-dig gardening simply means disturbing existing soil as little as possible. | ||
Here is one example. When starting a new garden bed, instead of digging or | ||
tilling the site, the gardener puts layers of cardboard over the existing grass | ||
lawn or weeds with a layer of compost or some other mulch on top and waters | ||
everything. The idea is that the smothered grass or weeds will gradually die off | ||
over weeks and months,and the cardboard decomposes, leaving a bed ready to | ||
plant. When planting in subsequent years, the existing soil is left as-is and a | ||
new layer of compost is added on top to replenish nutrients. | ||
|
||
In this project, we are making a tool that can make anyone a market gardener. | ||
Not everyone has very fertile land, and as we are aiming this for everyone, we | ||
are adapting the no-dig method for gardening. | ||
|
||
|
||
## Proposal | ||
|
||
- Project Setup | ||
|
||
I planned to use Django Rest Framework for this project because the backend is | ||
meant to be kept separate from the frontend. In the future, anyone working on | ||
the frontend will have ease working with the APIs. For Continuous Integration, I | ||
will prefer Travis CI as it is more reliable and does the job best. For the | ||
database, PostgreSQL will be a great choice. For the deployment, in my opinion, | ||
Heroku will be better as it has good support for Django apps, from my personal | ||
experience. I am comfortable with any if suggested. The user Model will be | ||
created with the following fields: Name, Password, Email, Planting Space. | ||
|
||
- Database Handling | ||
|
||
The Database is the key element. It will hold rules required for the watering | ||
tasks, mulching, etc. Also, we need custom rules for specific items. Thus, this | ||
can be achieved by making Custom Rule, Mulching Rule and Watering Rule. In | ||
Django Models, there is a concept of Foriegn Key so, the Custom Rule will hold | ||
the id of the Parent Rule and thus, we can access all the rules for an | ||
item. Below is the psuedo code of Database Structure for Watering and Mulching. | ||
``` | ||
Class Custom_Rule: | ||
string Rule_Description | ||
number For_Numerical_Value | ||
boolean For_Boolean_Value | ||
string For_String_Value | ||
Class Mulching_Rule: | ||
string Type_Of_Mulching | ||
boolean Is_Bed_New | ||
number Bed_Width | ||
number Path_Width | ||
list Custom_Rule | ||
//Functions for Mulching | ||
Ask_Every_Bed(): | ||
return Is_Bed_new | ||
Class Watering_Rule: | ||
string Plants_Name | ||
number TimeRange_To_Water | ||
number WeekRange_To_Water | ||
number TempRange_To_Water | ||
boolean Water_If_Rain_Today | ||
list Custom_Rule | ||
//Functions for Watering | ||
Ask_If_Today_Fall_In_Week_Range(): | ||
return Boolean | ||
Ask_Rain_For_Today(): | ||
return Boolean | ||
If Not Rain For Today(): | ||
return Boolean | ||
``` | ||
As the initially data is stored in csv format, we need to run a script to read | ||
the csv and fill the database tables. | ||
|
||
|
||
- Mulching | ||
|
||
We need to give the information of the Compost required for the Mulching to the | ||
user. And also about when to make the beds so that the beds are ready before the | ||
planting season. For that, there will be a python script calculation based on | ||
the rules predefined in the database. E.g., if the bed is new, then Yes. Along | ||
with the compost requirement, we need to return the number of the beds affected | ||
#SectionletterBednumber, e.g., #F1 and the compost required for one bed and the | ||
date and time to prepare beds. | ||
|
||
- Weather API and Watering | ||
|
||
The Weather API is needed to forecast the rain. If it is going to rain, then | ||
some crops don’t need watering. There are many options available. I came across | ||
one named Open Weather Map API. For more accurate predictions of the weather | ||
API, we will use GPS to get the latitude and longitude of the land because it | ||
could be on the city’s outskirts, so using the city name is not preferable. | ||
Almost all the weather API has the same functionality. If any other specific | ||
requirements occur, we will look for an API that fulfills our requirements. | ||
|
||
There will be rules specific to a type of crop predefined in the database for | ||
the watering tasks. After fetching the weather forecast then considering along | ||
with the other rules, we will tell the user whether to water the farm or not. | ||
|
||
| Area | Rule 1 | Rule 2 | Rule 3 | Rule 4 | Rule 5 | Trigger | | ||
|----------|------------|------------|-----------|-----------|-----------|-------------| | ||
| Section 1 | 08:00-12:00 | Today is between W10 - W48 | If raining today, then no | If no rain, ask forecast for the next rain | T < 12 ℃ then no and ask next day again | If the forecast predicts no rain tomorrow, yes | | ||
| Section 2 | 18:00-20:00 | Today is between W10 - W48 | If raining today, then yes | If no rain, ask forecast for the next rain | T< 8 ℃ then no and ask the next day again | If the forecast predicts no rain tomorrow, yes | | ||
|
||
- Notifications and Admin View | ||
|
||
The next step is to send mail notifications for the routine tasks, e.g., | ||
watering, opening and closing polytunnel, etc. This can be achieved with Django | ||
SMTP Emailbackend. Admin Views and Filters for the specific user can be done by | ||
using Generic Views and registering in the admin file. |