GithubHelp home page GithubHelp logo

robostats's Introduction

Robostats

Robotstats is a platform to gather and display statistics for robots and other connected devices.

Robostats can also be used as a remote control to send signals to connected devices of the same kind, when a device receives this signal it can alter its behaviour and provide feedback.

general

You may see a development preview at dev.robostats.io. Use [email protected] / pass to enter, we didn't have any security precautions, so please don't hack us :-).

The API

api

The Robostats API provides tools for creating categories for your devices (or robot classes). Each class has its own API key, connected devices can use this API key to register themselves (as a robot instance).

A robot instance must create a session before adding events, a session is like a bucket to store actual device logs.

Different devices may produce different events and event values, that's why we use MongoDB as permanent storage, its ability to save schemaless documents can be used to store many different kinds of logs.

Client package

There is also a client package for Robostats that can be used as an example to communicate with the API.

Panel for analytics

frontend

The analytics panel provides an overview of all registered devices, organized by it's class. It allows users to register new device classes and get the generated api key for each class.

web-1

Selecting a device class users can drill down to a specific device, it's session (any period of activity) and finally, to a graph that shows all the events generated from that drone in a particular sesion.

web-2

web-3

Remote control

The remove control as not finished on time, we left it here as a reference for future implementation.

remote-control

The remote control is an application for Robostats that can be used to send signals to connected devices. Robostats only acts as a distribution hub for these commands.

The WIP implementation of the remote controller was an Android app.

android-1

You could use the app to log in into your account.

android-2

Using the remote control, you could choose a device class and send commands to all connected instances. These commands could vary, but we we're playing with a standard game-like pad.

android-3

Internal documentation

If you're interested on hacking the platform, you may want to read these resources:

License

Copyright 2015. The robostats authors.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

robostats's People

Contributors

xiam avatar alce avatar verolop avatar

Stargazers

Sandeep Sangamreddi avatar

Watchers

 avatar James Cloos avatar Casey R avatar  avatar  avatar

Forkers

ragodev

robostats's Issues

Generate graphs using http://c3js.org/

@alce Please check out http://c3js.org/, it is a great charting library based on http://d3js.org/.

Let's start with the Time Series chat: http://c3js.org/samples/timeseries.html. I'll return a document like:

{
  "steps": [ "1s", "2s", "3s", "4s", "5s" ],
  "values": {"energy_consumption": [ 0.99, 0.98, 0.96, 0.52, 0.93 ] },
   "label": {"energy_consumption": "Energy consumption"},
}

to represent changes on a column named energy_consumption over five seconds time. This document must be transformed to fit into C3's format (or any other chart library format).

Define API endpoints

For every case:

  • Display the method we're going to use (DELETE, POST, GET, etc).
  • Display the endpoint path (/users/me).
  • Display the parameters the endpoint accepts and use bold to denote which of them are required.
  • Show an example of the data returned by successful and failed calls.

Create Go structures and corresponding tests

We need independent Go modules to represent all the data related operations that the API will provide.

We'll use the MongoDB database as permanent storage system.

Also, we may require a VM to run the API.

Draft basic Android UI

Hey @Verolop,

Based on our recent discussion I'm proposing you the following use cases for the Android UI:

  • The user can login with username and password. There is no way for any user to continue without a login.
  • The user can see a list of robot classes.
  • The user can touch a robot class from the list, a touch means she is choosing the class.
  • If the user chooses a robot class, she can see the list of robot instances associated with the robot class.
  • The user can touch a robot instance, a touch means she is choosing the instance.
  • If the user chooses the instance, she can see a list of active robot sessions, but she can't choose any session from the list (it's merely informative).
  • The user can start a controller view from the robot class list and from the robot instance list.
  • The user can press left, right, up, down, action A and action B buttons on the controlller view.
  • The user can use the back button to cancel the remote controller view and return to the latest view (session or instance list).
  • The user may logout anytime.

I think that pretty much summarizes the Android functionality (the UI side, at least), what do you think?

Define general communications

Hi @alce,

As we discussed earlier, we must define a general communications protocol. We already agreed that we're going to use JSON as serialization format but we still need to know a general format for messages of the following kind:

  • Error.
  • Success.
  • Lists.
  • Paginated lists.
  • Single item.

And for actions like:

  • Deleting or removing something.
  • Getting data.
  • Editing data.

I think we actually might more actions and message types, could you take a look at this problem and define a general format according to what would be easier on the front-end side?

Thanks!

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.