Git Product home page Git Product logo

grow-iot's Introduction

Grow-IoT

Backers on Open Collective Sponsors on Open Collective Gitter BSD license Build Status

The Grow-IoT project is managed as a mono-repo with a bunch of seperately published packages such as:

See our basic Raspberry pi example to get started with devices.

Installing Grow-IoT

You need to install Meteor first (if you haven't already).

You will also need to install yarn, which we use to manage all the packages that comprise Grow-IoT!

You will also need to install yarn, which we use to manage all the packages that comprise Grow-IoT! See the yarn website for platform specific installation instructions.

Then clone the repo and enter the new directory:

git clone https://github.com/CommonGarden/Grow-IoT
cd Grow-IoT

Finally install the needed software dependencies:

yarn

Start the Grow-IoT server with the meteor command:

meteor

And that's it! Visit http://localhost:3000 with your browser of choice; you should now have the application running.

Connecting devices (or virtual things)

Create a new device (click the '+' button) and create a device. Enter "test" for both the uuid and token. Then run the mock device driver (in a seperate terminal):

node packages/Grow.js/examples/test-grow-hub.js

You can find the ui component for this device in imports/app/components/things/Device/Device.jsx.

Connecting sensors and actuators

In the packages directory, we've started 2 libraries to help you connect sensors and actuators and create grow systems out of them.

  • Thing.js: A general purpose internet of things library... basically a fancy event emitter
  • Grow.js: extends the Thing class with a bunch of useful things for growers like scheduling, registering listeners and alerts, etc.

Hardware examples live in those packages' examples folder. Corresponding UI components live in imports/things/.

See Thing.js for more info on creating and connecting devices.

Adding custom components

To do so:

  1. Make a new CustomComponent.jsx file in imports/things/' or npm install package-name if the component is published on npm.
  2. Open imports/app/components/things/index.js.
  3. import CustomComponent from './CustomComponent'
  4. Lastly, add CustomComponent to the exported components object.

Example devices and grow systems:

Organization

In the repo you'll find the following directories and files:

File/Folder Provides
.meteor Meteor stuff, well documented in other places.
.sandstorm Sandstorm.io stuff
ai AI and Machine learning code
client Imports things and starts the React app.
docs Project documentation
imports API, App, and thing web component examples live here
packages Grow.js, Thing.js, and other standalone packages live here.
public Fonts and other static, public assets live here.
tests Unit and Thread conformance tests
server Imports the server code.
test Tests

Our wiki also contains a growing assortment of useful info, including:

Roadmap

There's a lot to do.

License

Grow-IoT is released under the 2-Clause BSD License, sometimes referred to as the "Simplified BSD License" or the "FreeBSD License".

grow-iot's People

Contributors

anaclair avatar arcalinea avatar aruntk avatar bathtimefish avatar camillevilla avatar dreossi avatar elsehow avatar gitter-badger avatar jakehartnell avatar jakemh avatar jermspeaks avatar mitar avatar newswim avatar xdamman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

grow-iot's Issues

Add getting started documentation

We need to add documentation for getting the server up and running and connecting devices.

@anaclair or @juliagra you may want to contribute what you can to getting up and running (covering meteor installation, cloning the git repo, etc.

Documentation is a never ending effort, so we'll limit the scope of this issue to getting started documentation

Remove Device

Should be available as an option from the detail view for now.

Claim devices V1

Claiming and registering IoT devices is a difficult problem, so the first version is to allow us to begin to address user interface and other issues: devices register themselves with common garden and users claim a device by typing in the UUID.

Add metadata to Device documents.

Devices need metadata. Perhaps we should transfer this metadata when the device registers? I.e. it registers with some basic information about itself.

Add license to repo

It's mentioned at the bottom of the readme but it should be its own file in the repo.

Rename device

As a user I would like to be able to rename a device.

Add user account page

A page for the user to manager there account such as notifications and changing email / password.

Document connecting devices

This is sort of important, as otherwise it would just be an IoT interface. This works, but it needs to be documented and examples need to be linked to.

Improve detail view UI

When looking at the device detail view there should be name, current value and a list of datapoints if a sensor, buttons for actions if an actuator.

Reset Password flow

Along with login and registration, the reset password flow is another basic part of the app we need.

Support taking images on mobile

The internet of things is more than just connected devices. It can also be things like plants for example! As such, images are a useful dataset.

Clean up styles around accounts and login

The login and forgot password screens could use some extra styling so that things are spaced nicely.

The logo is out of place for some reason when not logged in.

Also, the validation messages are a little to weird... we should replace them with something more normal.

Add Empty State

If there are no devices listed there should be an empty state with a call to get started by adding devices.

Grow file creator (V1)

This will generate a new grow file template. For example:

{
    "thing": {
        "type": "grow-file",
        "name": "Saffron Plant",
        "latin-name": "Crocus sativus",
        "description": "The Saffron plant likes well drained soils and full sun.",
        "model": {
            "events": {
                "crons-updated": null,
                "harvest": {
                    "description": "To harvest the Saffron spice, remove the 3 stamens.",
                    "imageURL": "https://example.com/example.jpg"
                },
            },
            "properties": {
                "min-temp": {
                    "value": 40,
                    "unit": "f"
                },
                "max-temp": {
                    "value": 110,
                    "unit": "f"
                },
                "time-to-grow": {
                    "value": 50,
                    "unit": "f"
                },
                "ideal-light": "Full Sun",
                "crons": {
                    "lightsOn": "00 09 * * *",
                    "lightsOff": "00 19 * * *",
                    "waterPlants": {
                        "cron": "00 11,17 * * *",
                        "duration": 20000
                    }
                }
            },
            "actions": [
                {
                    "name": "update-grow-file",
                    "valid": {
                        "crons": {
                            "lightsOn": "Cron",
                            "lightsOff": "Cron",
                            "waterPlants": {
                                "cron": "Cron",
                                "duration": "Integer"
                            }
                        }
                    }
                }
            ]
        }
    }
}

Get email working

This has already been started, but there is work left to do and it needs to be tested.

Visualize datapoints for sensors

Show a live updating chart. Eventually it would be really cool if we could see data over months or the last 30 minutes... visualizing information coming from devices is a never ending issue, so for the scope of this ticket, a simple live updating chart will do nicely.

Rename repository to Meteor-IoT

So, I do want to build a grow app but at this stage we're basically building more general IoT oriented technology that will handle:

  • Registering and claiming device
  • Receiving and sending messages to devices.
  • Adding basic permissions for devices (i.e. is this an open device that anyone can read, or owned and controlled only by a specific user, etc.)
  • Providing a basic UI

As such, I think it makes sense to rename the repository Meteor-IoT or something with a more general IoT focus.

Swap out Sass for Stylus

Stylus, while a cool project, is a lot less popular than SASS, and do to multiple people being confused where the style-sheets were... we should swap Stylus out for SASS. IMHO, not much is gained by using Stylus over SASS, except confusing people.

Bootstrap up

There are still some material design classes hanging around in the templates. We're using bootstrap.

Force Login

If a user is not logged in the should be redirected to the login/signup page.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.