Welcome to NodeWire

NodeWire is a framework for building IoT systems. It offers a reactive/dataflow programming model that enables users and programmers to automate tasks by wiring nodes to each other.

A node is the logical model of an appliance that enables it to be easily manipulated. Think of a node as a block with ports projecting at either or both sides. The ports on the left hand side are input ports and those on the right are outputs.

_images/node.png

Nodes are manipulated and monitored through their ports. When you read a port’s value, you receive a value from the node. And when you write to a port, you send a value to the node. Often ports corresponds to physical attributes such as temperature or motor speed in the connected appliance. They may also represent a logical state such as the total number of hours the appliance has been in operation.

_images/node_device.png

NodeWire offers a complete IoT stack from device level, to web and mobile applications as well as cloud services. The platform provides the same paradigm across the stack and makes it easy for teams working on different levels to speak the same language.

Objectives

The objective of NodeWire are to:

  1. Enable hobbyists to create connected devices in minutes and provide an easy path for them to go commercial.
  2. Provide a full stack that is free (as in freedom) and mostly free (as in free beer), that developers can adopt and extend.
  3. Provide easy inter-operability with other leading products and frameworks.
  4. Provide highly innovative features such as the schematic-based programming tool, zero-configuration, auto-layout and auto-networking.

NodeWire allows you to easily create nodes that runs on Arduino, NodeMCU even PCs and Macs and also various SBCs such as Raspberry Pi.

The Dashboard

NodeWire provides a cloud based dashboard. Nodes are automatically discovered and presented on the dashboard in auto-layout mode.

_images/dashboard.png

The dashboard is an application development framework that can be used to build connected applications. The dashboard uses the node paradigm and it is the first software application framework that is designed with hardware engineers in mind.

Building Nodes

A node is basically a software that implements the NodeWire interface. To build a node, all you need are 3 components: a CPU, the PlainTalk protocol, and a communications interface.

Node = Processor + PlainTalk + Communications Interface.

Architecture

The command processor, which is either run locally or part of the NodeWire cloud services, is at the centre of any NodeWire installation. Each node connects to the command processor, either directly or through a gateway. The primary job of the command processor is to receive messages and pass them to the nodes they are addressed to.

The command processor or cp also implements security protocols that restrict access to nodes. Each node has a home zone which is called it’s instance. Nodes that belong to the same instance can freely communicate with each other while those that belong to different instances can only intercommunicate after authorization.

When nodes are equipped with an IP-based connectivity module such as wifi, ethernet or gprs modem, it can connect to the cp directly. Otherwise it will have to connect through a gateway. A single gateway can serve multiple nodes at the same time.

_images/arch.png

In addition to the cp, the cloud services also offers two important functionalities. The execution engine supports event driven programming using a derivative of the python language that is highly optimized to support unlimited number of rules with minimal impact on CPU usage. Finally, the cloud also provide data storage and retrieval offering the same NodeWire paradigm as interface.

The execution-engine can also be programmed using a schematic capture tool included on the dashboard.

_images/schematic.png

Developing Applications

NodeWire also enables developers to build their own IoT applications from the group up. Developers can decide to build their own web and mobile applications to control their nodes. They can also build IoT servers that they can host either within an intranet or on the cloud. We currently support the following development tools:

  1. python
  2. ReactJS Web Apps
  3. C# on Xamarin mobile
  4. C# Windows Applications