In this presentation I cover how to build solutions for the Internet of Things using the open source Nitrogen framework and Node.js client. Demos are at https://github.com/ThingLabsIo/IoTLabs (labs 4 and 6).
6. FieldGateways
ProtocolAdapters
OSSProject
CloudGateway
EventHub->IoTHub
Hot Path Analytics
Azure Stream Analytics, Azure Storm
Cold / Batch Analytics & Visualizations
Azure HDInsight, AzureML, Power BI,
Azure Data Factory
Hot Path Business Logic
PaaS V2 & Actor Framework
EnterpriseProcessConnections
BizTalkServices,NotificationHubs
Devices
Linux,Android,iOS,RTOS,Windows
Device
Connectivity
Analytics &
Operationalized Insights
Business
Connectivity
7. FieldGateways
ProtocolAdapters
OSSProject
CloudGateway
EventHub->IoTHub
Hot Path Analytics
Azure Stream Analytics, Azure Storm
Cold / Batch Analytics & Visualizations
Azure HDInsight, AzureML, Power BI,
Azure Data Factory
Hot Path Business Logic
PaaS V2 & Actor Framework
EnterpriseProcessConnections
BizTalkServices,NotificationHubs
Devices
Linux,Android,iOS,RTOS,Windows
Device
Connectivity
Analytics &
Operationalized Insights
Business
Connectivity
8. Nitrogen is an open-source, JavaScript backend
for the Internet of Things.
Nitrogen provides
Device Management
Security and permissions
Data Ingest
Command & Control
Nitrogen includes a JavaScript client library for device and web applications.
http://www.Nitrogen.io
13. Nitrogen enables sending messages or subscribing to message streams
Any device with permission can send a message to a specific device
Any device with permission can subscribe to the message stream of a device
14. The CommandManager enables interrogation and execution of commands for a
device.
CommandManager should be sub-classed for the specific implementation.
Sub-classes must override five (5) functions:
isRelevant()
isCommand()
obsoletes()
executeQueue()
start()
15. isRelevant
Should I care about the message?
isCommand
Do I need to execute the message?
obsoletes
Do I care any more? (e.g. have I already processed this)
executeQueue
Do whatever needs to be done based on the message
start
Get things going
16. Permissions enable control over which Principals can interact (or not) with other
Principals
Permission Types
admin
view
send
subscribe
Permissions enable explicit authorization control
n2 permission add --action subscribe --authorized true
--issueTo <PRINCIPAL ID>
--principalFor <PRINCIPAL ID>
But I believe the next big thing is computing coming to the ordinary things in our life and making them better.
The car is one of these ordinary things.
While it has a screen prominently displayed in each car
This is a picture of an OBD-II adapter that we custom build using to collect this CAN bus bus data and relay it to the cloud over a mobile network.
We relay this telemetry using messaging.
You can think about this like Twitter for Devices.
Each message has a type, timestamp, and a body of data.
I’m only showing location data here but there is a wide range of engine data, car occupancy, and other data that we can relay as well.
This is the high level architecture we are using to collect and process this data from clients.
Have a set of protocol adapters to land telemetry from clients
The incoming requests are auth / authz with the help of Device Registry
The data is then landed in a set of storage systems
And then fed into data pipeline where we transform it and learn from it.
All this telemetry hits an architecture that looks like the following
Depending on the client, we have a set of endpoints that we call Protocol Adapters that land the telemetry from the clients.
We authenticate and authorize the client using the connection using a separate system that we call the device registry that provisions and maintains identity for all of these connecting clients.
If the client is authorized, we then land this telemetry in a set of backend storage systems that I’ll discuss more later. The architecture we’ve built is flexible enough to enable us to plug in a set of these storage providers.