Git Product home page Git Product logo

dnr-editor's Introduction

Distributed Node-RED (DNR) Editor

Node-RED is a visual tool for wiring the Internet of Things. The Distributed Node-RED (DNR) project extends Node-RED to support flows that can be distributed between devices. DNR works with a cluster of vanilla Node-RED instances and a coordinator called DNR Editor is used to coordinate the participating Node-RED instances.

Overall architecture: Distributed Node-RED

DNR Editor is a Node-RED flows editor modified to support the design of distributed flows. Once new flows are deployed, they are not started but distributed to participating Node RED instances in the cluster and deployed there.

A Node RED instance can be connected to a DNR cluster by installing node-red-contrib-dnr, a special Node RED node designed for DNR.

Node-red-contrib-dnr module consists of a special node called DNR Daemon node, which acts as a local agent that connects the local Node-RED instance to the DNR cluster. This node gets the DNR flows from DNR Editor, transforms it to a compatible Node-RED flow and deploys the "dnr-ized" flow to the local Node-RED instance.

A sample DNR flow that runs on several Raspberry Pis and a Cloud server:

Sample DNR Flow

The idea of DNR:

  • every device has a capability/property definition such as storage, memory or geographic location.
  • a Node-RED node can be configured so that it only run on certain devices by defining one or more constraints assocciate to it. The constraints will be matched against the device's capability/property definition.
  • if a node is not to be run on a device due to the device not meeting the required constraints, messages that are sent to it will be intercepted and finally dropped, or redirected to an external Node RED instance.
  • mechanism for all participating devices to download the distributed flow from a 'DNR Operator' (where run dnr-editor) such as a cloud server.

Quick Start

Requirements: several Raspberry Pi (participating Node-RED, just for fun, could be multiple instances of Node-RED in a single machine); a computer to run DNR Editor (the coordinator)

Setup DNR Editor

UPDATE Feb 2019: a docker container has been prepared for running dnr-editor right out of the shelf:

docker run -it -p 1818:1818 nhong/dnr-editor

Github installation: similar to Node-RED development: git clone, npm install, grunt build, and start by "node red"

Npm installation: npm install -g dnr-editor, dnr-editor -s <setting file>

DNR Editor will run by default at :1818 port.

Connect Node RED to the cluster:

UPDATE: there's a tutorial video: https://www.youtube.com/watch?v=NVhIAz2s--Q&frags=pl%2Cwn
  1. For each Node RED instance, install node-red-contrib-dnr nodes: either using GUI->Menu->Manage Pallete->Install or go to ~/.node-red and do npm install node-red-contrib-dnr
  2. Getting the Seed flow: go to DNR Editor at http://localhost:1818, GUI->Menu->DNR->Export DNR Seed->Export to clipboard
  3. Import the Seed flow on each participating Node RED: GUI->Import->Clipboard->Paste(CMD/CTRL V)->Import
  4. Configure the imported Seed flow: configure the DNR Editor's target (so that the daemon can connect to) and local Node RED's informration (credentials if local Node RED is password protected, device's name, and possibly location)
  5. Deploy the Seed flow: click Deploy.

After this, these connected devices can be seen on the Device Monitor on DNR Editor: GUI->Menu->DNR->Show devices

Device monitor

DNR Device Monitor

Sample flow

A minimal sample DNR flow:

Minimal DNR Flow

Code:

[{"id":"733a9ff3.9c766","type":"tab","label":"Flow 1"},{"id":"9d59c9cc.b67158","type":"inject","z":"733a9ff3.9c766","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":188.95140075683594,"y":86.97222900390625,"wires":[["b5a1fcec.5b0c4"]],"constraints":{"on my mac":{"id":"on my mac","deviceName":"nam-mba","fill":"#f404e0","text":"on my mac"}}},{"id":"b5a1fcec.5b0c4","type":"debug","z":"733a9ff3.9c766","name":"","active":true,"console":"false","complete":"false","x":401.2812042236328,"y":125.0625,"wires":[],"constraints":{"pi17":{"id":"pi17","deviceName":"pi17","fill":"#5103c6","text":"pi17"}}}]

Support

Documentation on vanilla Node-RED can be found here.

More tutorials on wiki page.

For support or questions related to DNR, please contact @mblackstock or Nam Giang at [email protected].

For more information on the initial ideas, see these presentation, presentation and assocated paper, paper.

An initial version of DNR is also available at https://github.com/mblackstock/node-red-contrib/ and at https://github.com/namgk/distributed-node-red where a single installation of modified Node-RED run on participating devices. In order to reduce the effort required to augment the vanilla Node-RED as well as to allow users to use vanilla Node-RED instead of an augmented one, a special node is created called DNR-Daemon (node-red-contrib-dnr) which downloads, converts DNR flows into flows that vanilla Node-RED can understand, and install them to the local vanilla Node RED where it run.

Acknowledgement

Node-RED is a project of the JS Foundation.

It was created by IBM Emerging Technology.

DNR Editor is an extension of Node-RED inspired by Mike Blackstock @mblackstock and created by Nam Giang [email protected]

This is a research project funded by NSERC that aims at designing a distributed application platform for the Internet of Things and Fog Computing.

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.