Project Zygote Rapid prototyping for the Internet of Things

The Problem we set out to solve

“How to make interconnecting things easier?”

What IoT means to us ○ Seamless interconnection between any “IoT enabled” hardware and software components. ○ IoT is not vendor specific internet connected objects communicating between each other. ○ Logic is a part of the system - minimize human effort. ○ Can we have linux terminal style reactive programming - but with real objects? A mixture of real and virtual objects? That is when the true power of IoT is realised.

Too many “Standards” ○ Hardware : Thread, WiFi, Zigbee, BT 4.0, Z-Wave... ○ Network : 6LoWPAN, CoAP, XMPP, MQTT, STOMP... ○ App : WoT, SmartObjects, W3C-SSN, Physical web...

Current state of frameworks ○ Too old - Legacy architectural design keeps it from scaling. ○ Tied down to hardware - vendor lockin. ○ Not full stack - cloud, hardware, orchestration or analytics/visualization - no single bundle. ○ Not open source → not customizable. ○ Even full stack solutions have tightly bound components. Eg you can’t easily replace the dashboard with your own custom visualization tool.

What Zygote is ○ An end to end IoT framework that enables people to rapidly prototype and deploy their IoT application. ○ Comes bundled with Server code, hardware code, a visualization dashboard ○ Provides GUI to end users - for ease of use. API for developers - for customizability.

“CREATE IoT APPLICATIONS IN A MATTER OF MINUTES, WITH ZERO LINES OF CODE”

Framework Goals Simple and Extensible - Easy to use and customize. Hardware agnostic, protocol neutral. DRY - write a plugin for a sensor, reuse with ease. Each sensor/actuator should have a standard interface for interacting with it - irrespective of underlying protocol. ○ Any two components should be able to communicate with each other - irrespective of where they are. ○ Push and pull capabilities. Plus ability to set event trigger. ○ The environment should be scriptable- code logic should be able to manipulate data flows. We chose Javascript. ○ ○ ○ ○

ARCHITECTURE

○ Zygote Server is the cloud component of the framework, all nodes in the system connect to this component. It handles ○ Zygote Embed is the hardware component in the system. It behaves as the gateway to the local sensors/actuators and expose them to the server via WebSockets.

○ Zygote Dashboard is the tool to visualize sensor data (gauge, sparkline, etc.) and to emit user generated events or data (button, slider, etc). ○ Zygote Flowboard is the UI tool which enables the user to instantiate resources and create data flows between them. This is a layer over the REST api provided by the server, and is like the authoring tool for the whole ecosystem.

Using the framework We will use the Zygote framework to get real life temperature, light sensor data and visualize it on the browser. If the temperature hits a threshold temperature, an alert is raised on the browser

Embed + Server ○ Get the zygote package on your server and switch to the zygote-server folder - run the server script. $node server.js

This will accept incoming requests at port 3000. ○ Connect the WiFi enabled temperature, light sensor and Beaglebone Black to the WiFi router. ○ Get the package on your Beaglebone black and switch to zygote-embed directory. $node main.js :bbb :

Dashboard Create the required widgets under a panel on the dashboard.

Flow board

Without Zygote ○ Decide on the hardware platform, learn about specifics of that platform and API provided. ○ Write platform, protocol specific code. Also require knowledge of protocols used - nothing is abstracted. ○ Write server side code to collect and store the data. ○ Develop the frontend dashboard. ○ Add websocket support for streaming data. ○ If you want to add a sensor to the system - or want to change the flow, there will be downtime. ○ As the application grows, there is a lot of rigidity and redo of work while making changes.

Key Features REST - for configuring nodes and resources, WS for data flows and RPCs. REST + WS => Push and Pull ○ Resource abstraction - a generic read,write,config interface. Developers just have to use the RWC interface without worrying about how the actual communication takes place. ○ DRY - once you write a plugin, it will work for the sensor/actuator across various platforms - no more platform specific code. ○ Each resource is identified by a URL - and one node can seamlessly access resources on another node. ○

var tempRes = new Resource(“/bbb/temp/1”); //The temp sensor can be on any node! var temp = tempRes.read();



The framework is not tied down to a hardware platform or protocol used. Zygote loves everybody.

Key Features ○

○ ○

○ ○

The user can create a flow (data channel) between two or more objects. The flow can be event or time triggered and can have embedded JS code for arbitrarily logic. The framework has zero setup hassle and comes with a easy to use UI. One can start using it even without coding knowledge. The frontend of the framework (dashboard & flowboard) is completely replaceable with a user developed solution. All modules interact in a well defined manner - loosely coupled. The user can reconfigure the setup, add new nodes or flows with absolutely zero downtime. It allows programmatic control of all devices in the system. Even as a developer you need to know only JS to take full advantage.

Zygote Server ○ Handles registration of new nodes, creation + deletion of new resources on a node. POST /containers/ spec-file.json POST /bbb/gpio/ {'ep' : 'P1'}

○ Enables CRUD on resources. A call to the REST endpoint triggers a RPC via the websocket connection. POST /bbb/gpio/P1

{'value' : '1'}

○ The switching fabric routes data and events from one node to another. Eg. sensor pushing data to a gauge on the dashboard. ○ The flow module defines REST endpoints to create new flows and to delete/update old ones. Switching fabric comes into action while executing flows that involve remote resources. POST /flowboard/

flow-spec.json

Zygote Embed ○ A well defined plugin architecture to add support for new sensors and actuators. The plugin is just added to the plugins folder, and it is automatically picked up by the plugin module. ○ Each plugin has a generic read,write,configure interface, and is platform agnostic. ○ For every hardware supported there is a JSON struct defining the new hardware. It contains the pin list and pin behaviour. ○ This json spec file is used to register with the server and then connect over WS which lets the server access local resources. ○ Flow execution engine executes flows posted to the server. In case external resource interaction is required, a RPC is made to the server via the web socket.

Zygote Dashboard ○ The dashboard connects as a “soft node” to the server via websockets. The dashboard has two decoupled parts - the data component and UI component. ○ The UI component is the one user interacts with. Panels are created, and widgets are created inside them. ○ Data component talks to the server, the logic is similar to that of the zygote-embed nodes. It provides the server with access to the widgets. Just like hardware resources, widgets are associated with a URL of the form /dashboard// ○ The UI component implements an event emitter pattern, to which the data component listens to, and updates the relavent user action to the server.

Zygote Flowboard ● The key functionalities are to → create resources, develop flows, initiate/stop a flow. The whole flowboard is a UI layer over the REST API exposed by zygote server. ● On load, flowboard queries server to get info about all the nodes and displays it to the user. GET /containers/ ● The user then sees all the nodes available and can create a resource on a node. This translates to the following REST call POST ///

{'ep' : ''}

● Every resource created appears as a block, which can be dragged onto the canvas to create a flow. When the flow is to be posted to the server, the flowboard generates the required logic and posts it - POST /flowboard/ {“flow-struct” : {
Future Work ○ Implement security features - add authentication, encrypt data streams, etc. ○ Add various a realtime DB to the backend. Try RethinkDB for a pub sub model. ○ Try porting zygote to windows 10 IoT core. We have tested only linux systems so far. ○ Have a thorough fall back plan - what happens if one of the nodes crash? what if the server itself crashes? ○ Support for the mobile ecosystem.

Project Zygote - GitHub

Hardware : Thread, WiFi, Zigbee, BT 4.0, Z-Wave... ○ Network : 6LoWPAN, CoAP, XMPP, MQTT, STOMP... ○ App : WoT ... Using the framework. We will use the Zygote ... Even as a developer you need to know only JS to take full advantage.

2MB Sizes 12 Downloads 347 Views

Recommend Documents

Project 4.3 - Project Proposal - GitHub
Nov 5, 2013 - software will find the optimal meet time for all users. This component is similar to the ... enjoy each others company! Existing Approaches:.

Monkey Clicks Project - GitHub
Apr 24, 2014 - Support Google admonb ads. • Share on social media. This manual describe the Tree android application V1 from Monkey. Clicks projects ...

final project requirements - GitHub
In the course of the project, we expect you to complete the following tasks: 1) Gather ... The presentations should target a non-technical audience and serve the ...

Project 1 - GitHub
The analytical solution for this PDE is given by: ... 2 dr is the complementary error ... Show that the accuracy of the solution improves on a finer mesh (as ∆y ...

Project 2 - GitHub
Use the following explicit schemes: 1. Finite-Volume: FTCS for both convection and diffusion. 2. Finite-Volume: First order upwind for convection, FTCS for ...

Project 3 - GitHub
Discuss the following: 1. Plot the residual vs. number of iteration for each method. Use different relaxation factors for PSOR and LSOR. 2. What relaxation factor ...

Project 4 - GitHub
Project 4. Vorticity-Stream F\rnction Method. Due: Mon., Dec. 6, 2010 at 6:00 pm. Consider the incompressible laminar flow in the plane channel shown below.

micro-services sample project - GitHub
Netflix Zuul acts as the API Gateway for accessing the micro services behind the gateway. It also acts as the load balancer and the reverse proxy server which routes the request to the respective service. Microservice's stay behind reverse proxy serv

QR Reader Java Project - GitHub
QR Reader Java Project. Date: 4 July ... Open eclipse and click on File -> import -> General -> Existing projects into workspace as shown in fig. 2. ... Similarly fix problem of JRE system library if in ... ProjectFlow.pdf show complete flow of proje

Aborting the Zygote Argument
instead talk of Diana's programming Ernie to do something, or designing him with a ..... Mele, A. (1995) Autonomous Agents New York: Oxford University Press.

The summary of Tibbo Project System - GitHub
To achieve an economical basic unit price, we kept the onboard circuitry to the necessary minimum. For example, there is no built-in power supply – the boards directly accept only regulated +5V power. Real- world power processing (12V, 24V, PoE, et

Project # 6 Nora Mitchell April 18, 2017 - GitHub
Apr 18, 2017 - Mountain. ▷ 147 individuals measured (61 venusta, ... LMA (leaf mass per area). ▻ FWC (leaf water content, freshweight−dryweight.

SWE20001 Lab Team 02 Project Convert Research * The ... - GitHub
Convert code only. SharpDevelop. Microsoft Visual C++ 2008 ... Online Service. • Free. Convert code only. Other online code converters such as. Telerik Code.

Project Triforce: AFL + QEMU + kernel = CVEs! (or) How to ... - GitHub
Page 10 ...... This opens up the fuzzing of Android devices and other things built on. ARM*. • You just ... Or, port our existing work to the Android QEMU emulator.

GitHub
domain = meq.domain(10,20,0,10); cells = meq.cells(domain,num_freq=200, num_time=100); ...... This is now contaminator-free. – Observe the ghosts. Optional ...

GitHub
data can only be “corrected” for a single point on the sky. ... sufficient to predict it at the phase center (shifting ... errors (well this is actually good news, isn't it?)

Torsten - GitHub
Metrum Research Group has developed a prototype Pharmacokinetic/Pharmacodynamic (PKPD) model library for use in Stan 2.12. ... Torsten uses a development version of Stan, that follows the 2.12 release, in order to implement the matrix exponential fun

Untitled - GitHub
The next section reviews some approaches adopted for this problem, in astronomy and in computer vision gener- ... cussed below), we would question the sensitivity of a. Delaunay triangulation alone for capturing the .... computation to be improved fr

ECf000172411 - GitHub
Robert. Spec Sr Trading Supt. ENA West Power Fundamental Analysis. Timothy A Heizenrader. 1400 Smith St, Houston, Tx. Yes. Yes. Arnold. John. VP Trading.

Untitled - GitHub
Iwip a man in the middle implementation. TOR. Andrea Marcelli prof. Fulvio Risso. 1859. Page 3. from packets. PEX. CethernetDipo topo data. Private. Execution. Environment to the awareness of a connection. FROG develpment. Cethernet DipD tcpD data. P