Table of Contents

Software Specification for powerplant

Work together on this Spec on: https://pad.riseup.net/p/emnTrqLdXzqy When finished change content here:

for “powerplant”/ pp_ / … Document Version <0.14>

Introduction

powerplant is an opensource webapp that allows anyone planning a garden to utilize companion planting and other permaculture practices. It provides intelligent suggestions to help the gardener by advising the best planting schedules and combinations of crops to maximize the garden's yield.

Users

More detail below.

Goal

The goal of powerplant is to help users effectively plan their garden by providing planning and maintenance suggestions which utilize permaculture principles with a focus on companion planting.

Product Scope

Software description

Powerplant …

powerplant is open-source and uses and creates data with open copyright.

Objectives

Overall Description

<pre>

                            +-----------------------+
                            |  OpenFarm.cc API      |
                            +-----------+-----------+
                                        ^
                                        |
                                        |
                                        |
                                        v
+-------------+                    +----+-----------------+             +----------------+
| Front End   +<------------------>+    Back End          +<----------->+ powerplant DB  |
+-------------+                    +----+-----------------+             +----------------+
                                        ^  
                                        |   
                                        |   
                                        |   
                                        |   
                                        v   
                            +--------------+--------+
                            |  FarmOS API           |
                            +-----------------------+
</pre>

Product Perspective

Our vision is that people are able to plan their own gardens using companion planting and other permacultures practices using our app as a central resource for information. The resources we can provide to the user will grow as the app is used more.

Context

The information that we provide is all out there, we want to provide a central source for all of it. Aid those gardening without experience and help make quick and precise descision for the more experienced gardener.

Origin

Permaculture guidelines, gardening best practices.

The permaculture ideals are:

Open Source/ Open Data.

Outcome

A year of use of this software will result in:

Product Functionality

>TODO: Add major functions that the product must perform or must let the user perform.

Must Have

Should Have

Cool to Have

TODO: Figure out where these attributes belong: Soil conditions, grow time, climate, sun direction relative to each bed, labor required for each plant, sun+water required, best season/time to plant, care frequency, nitrogen/ consumption

Minimal Viable Project

Detailed function description.

Select different Guides

User should choose between different guides (from openfarm.cc) for a crop that fits their needs

Offline and Online user experience

NEARLY the same UX (user experience) both offline and online! This is really important because people will need to use on mobile in their garden

Suggestions
Notifications

Notify users of tasks that should be done for each garden/bed/crop on a given day

Tasks and Actions
Schedule

Find optimal planting schedule for a target bed (with at least one user picked crop)

Information accessible on timeline of different stages and locations of growth (i.e. when to grow in greenhouse and transplant them outside)

User Contributions

Users can contribute in the form of editing existing cropinformation, croprelationship, and guides.

Creating Guides should link into OpenFarm directly - Create Guide.

Editing Guides should be put into powerplant “centralized improved guide” (except it is your own guide?). This avoids parallel versions of the same guide edited by different users, and instead puts all the edits in one place. Editing Cropinformation should be edited in OpenFarm directly. Croprelation should be changed in the app and put into OpenFarm.

Terminology

TODO Create Seperate page to link to

Location: Group of gardens whose permaculture zones are defined relative to a common zone 0

Garden: combination of beds in the same vicinity and permaculture zone

Bed: Section in a garden (can be a greenhouse, a pot or a patch of soil)

Crop: Specific instance of a crop that will be planted in a bed

Transplant: action of moving a crop from a pot (non-bed) to a bed

Zone/Permaculture Zone: Ordered area from 0 to 5 by frequency of visits/maintance requirement (/often also related to proximity)

Provide a Data Flow Diagram of the system to show how these functions relate to each other.

Data flow diagram for cropinformation/croprelationship data (from openfarm)

<pre>

                                                                                                  
          ```````````                           `...`                                             
        `.           .`                       `.`   `.`                                           
       ``             ``                    ```       `.`                                         
       .               .                  ```-Openfarm-..`                                       
  -````. User Interface .``````Send.```>`./.` registered?- `.```````no`````````````-              
  .    .               .                   `....-........`                         .              
  .     .`            .                      `.`     `.`                           .              
  .      +.`       ```                         `.` `.`                             .              
  .      ^  ``/|\``                              `-`                               .              
  .      .     :                                  .                                .              
  .      .     .                                  .                                .              
  .      .     .                                  .                                .              
  .      .     .                                  .                                .              

Request . . . .

  .      .     .                                 yes                               .              
  .      .     .                                  .                       `````````+.`````````    
  .      .     .````````````````````````````````  .``                    .```````````````````.    
  .    .``        Response to request          .    `.                   .                   .    
  . `Response                                  .    `.                   . no action allowed .    
  . .to Request                                .    `.                   .  `` ````` ``````` .    
  . .-`------                                  .    `.                   .                   -    
  .    ^                                       .    `.                   `````````````````````    
  .    .                                       .    `.                                            
  .    .                                       .    `.                                            
  .    .                                       -    \/                                            
  .    .                                   `````````.-                                            
  .    -`````````                       ```        `-:                                            
  .   ..        `.                     .`             .                                           
  .  .``Openfarm` .                   `. Power plant   .                                          
  .>/- `Database` .:<`````Send ```````-  Backend    `  .                                          
     .` ---:::--` .                   `.   .------:    .                                          
      .`        `.                     .`             .                                           
        `````````                       `.`         .`                                            
                                          ``````````                                              
                                                                                                  
                                                                                                 

</pre>

Users and Characteristics

Identify the various users that you anticipate will use this product.

* Hobbyist - small home garden. 20 m2 * Countryside garden - 250 - 1000 m2 * Organic farmer - 1000 m2 + * Consultant - all of the above * Anyone who wants to plan a garden by using companion planting. * People who want to use open source/ open data software.

Describe the relevant and important characteristics of each user.

* All users: consistent harvest throughout the year * Hobbyist - Not too much labor is better; organic/natural garden * Countryside garden - Same as Hobbyist, also wants to be self-sufficient * Organic farmer - Same as Hobbyist, also prioritizing lower labor. Intermixed plants means more labor. Technologically literate, want to use software to improve their yields * Consultant - Provide advice to other hobbyists/gardeners/farmers

Operating Environment

Describe the environment in which the software will operate, including the hardware platform, operating system and versions, and any other software components or applications with which it must peacefully coexist. In this part, make sure to include a simple diagram that shows the major components of the overall system, subsystem interconnections, and external interface

* Lower range laptop * Windows 10, Chrome, use in office or garden * Android x.x.x, Chrome, use in office or garden, but mainly garden * With temporary internet connection

Design and Implementation Constraints

Describe any items or issues that will limit the options available to the developers. These might include:
* hardware limitations (timing requirements, memory requirements)
* interfaces to other applications
* specific technologies
* tools
* databases to be used
* language requirements
* User Documentation

* React for front end with JSX to generate HTML * SASS for css * Need to eventually be compatible with FarmOS. * Need to eventually be compatible with Openfarm.cc. * Want to be similar to Openfarm crop database structure. * Want tasks to be similar to FarmOS Log data structure * Text + photo editors. * NodeJS as backend engine running ES6 MongoDB for database with Mongoose as ODM Express for route handling Passport for user authentication Mocha + Chai + supertest for unit testing and integration testing * Mobile-first, offline-first design (ok, maybe mobile-first, offline-second. they can't both be first)

User Documentation

TO DO: Describe what kind of manuals and what kind of help is needed for the software you will be developing.

List the user documentation components (such as user manuals, on-line help, and tutorials) that will be delivered along with the software.

Need to have user documentation. Usability will be severely limited without. Need to have in depth descriptions of how to input data, what screens should look like, how to interpret output. Need to document things before creating them.

Specific Requirements

External Interface Requirements

TO DO: Describe user interfaces, different screen images, any GUI standards, standard buttons and functions (e.g., Cancel) that will be available to the user. Define error message display standards.

GUI standards

https://material.io/guidelines/ https://medium.com/@marcintreder/the-minimum-viable-design-system-75ca1806848a

View Description

“View the prototype! (INCOMPLETE)”:https://marvelapp.com/94c4bh4 If you want to improve it contact franz@ecohackerfarm.org to get an invite.

TODO: add many many more more more more views

Hardware Interfaces

Describe the logical and physical characteristics of each interface between the software product and the hardware components of the system. This may include, the supported device types, the nature of the data and control interactions between the software and the hardware.

Software Interfaces

TO DO: Describe: the connections between the product and other specific software components (name and version), databases, operating systems (Windows? Linux? Etc…), tools, libraries and integrated commercial components.
TO DO: Identify data items or messages coming into the system and going out and describe the purpose of each.
TO DO: Describe the services needed.
TO DO: Identify data that will be shared across software components.

Communications Interfaces

TO DO:

  1. Describe the requirements associated with any communication functions required by this product, including e-mail, web browser, network server communications protocols, electronic forms.
  2. Define any pertinent message formatting.

communication standards that will be used, such as FTP or HTTP.

REST

“Auto-generated API specs”:https://github.com/Ecohackerfarm/powerplant/blob/master/docs/spec.md

API error messages have the following format:

  <pre>
  {
      status: Number,
      message: (optional) String,
      errors: (optional) {
          fieldName1: String,
          ...
      }
  }
  </pre>

@status@: HTTP status code @errors@: Object containing error messages pertinent to specific UI elements, e.g. a login request with an incorrect password would result in @{password: “Incorrect password”}@ @message@: A general description of the error, which can be displayed to the user

communication security or encryption issues, data transfer rates, and synchronization mechanisms.

Behavior Requirements

Use Case View

TO DO: Provide a use case diagram which will encapsulate the entire system and all possible actors.

Workflow Diagram

List of Use case

TODO: Add more use cases

Diagram

TODO: Create use case diagrams involving each of the possible types of users
TODO: Convince openfarm to enhance companionship model or find a suitable ruby on rails developer

Diagrams