SlideShare a Scribd company logo
Rapid IoT Prototyping
with Canopy
http://canopy.link @CanopyIoT
Presented by Greg Prisament (greg@canopy.link),
founder of Canopy.
2014 SFIoT UnConference (8/16/2014)
An end-to-end IoT software platform.
Selling Points
100% open source.
Designed for commercial use.Designed for commercial use.
Developer-friendly.
Creating a cloud-
managed product today
is expensive and
difficult…
Creating a cloud-
managed product today
is expensive and
difficult…
Complex software systems are involved.
Most platforms are proprietary and
expensive to license.
… but it doesn’t need to be that way.
What if IoT software were free,
readily-available, and easy-to-use?
Canopy makes it simple to develop
commercially-viable smart products.
We
Solve the common
system engineering
You
Focus on what your
business does best.system engineering
challenges with IoT.
Sensor data storage.
Communication protocols.
REST APIs & client libraries.
Authorization.
Security.
business does best.
Market-specific hardware.
Customer engagement.
Services and solutions.
Vertical applications.
Branding.
Key FeaturesKey Features
Enable Custom Experiences
Demonstration only. This prototype is not endorsed by anyone.
Enable Custom Experiences
Demonstration only. This prototype is not endorsed by anyone.
Canopy provides APIs
& client libraries so
you can build sexy
custom apps for your
product.
Low-latency control from anywhere.
Seriously. Any similarity to an actual product is purely coincidental.
Low-latency control from anywhere.
Seriously. Any similarity to an actual product is purely coincidental.
Low-latency control from anywhere.
Seriously. Any similarity to an actual product is purely coincidental.
Low-latency control from anywhere.
Seriously. Any similarity to an actual product is purely coincidental.
Sub-100ms response time!
Low-latency control from anywhere.
HTTP POST
Websocket
Home-spun
message-passing
system – “pigeon”
Callback triggered in
firmware code.
Sensor Monitoring
Dyson? Never heard of them.
Sensor Monitoring
Stored in cassandra
cluster.LOD-based
downsampling
for performance.
Historic
data sent in
response.
Pruning for
space.
Sensor sample read in
firmware.
Sent over
websocket
HTTP GET
Social
Activity
Maybe you should stop reading the fine print and pay attention to the presentation.
Google Docs-
like sharing and
permissions.
30s ago
MissPiggy set fan to off.
1m ago
Kermit set fan to max.
2m ago
MissPiggy set fan to off.
3m ago
Kermit set fan to max.
4m ago
Our Emphasis
Powered Appliances
We assume moderately powerful HW:
• ARM-based SoC
• Internet access over WiFi, ETH0, 3G, or 4G LTE
• Linux-based OS• Linux-based OS
• Websockets & SSL
Enable Key Activities
Monitor Control Share
Developing
forfor
Canopy
App
Protocol
Machine
Protocol
Databases
IoT software components
Firmware Server-side
software
Application(s)
ProtocolProtocol
Canopy
REST API
Canopy
Websocket
Protocol
Canopy has all that
Canopy
Embedded
Development Kit
Canopy
Cloud Service
Application
(Using Canopy
Client Libraries)
REST APIProtocol
App
Protocol
Machine
Protocol
Databases
Here,
Just make your changes
here,
here,
here, and here.
Adding a feature (without Canopy)
Firmware Server-side
software
Application(s)
ProtocolProtocol
here,
Canopy
REST API
Canopy
Websocket
Protocol
Make
change
here
See it
here.
Adding a feature with Canopy
Canopy
Cloud Service
Application
(Using Canopy
Client Libraries)
REST APIProtocol
Canopy
Embedded
Development Kit
1) Describe your device in SDDL.
2) Generate embedded Code.
The Process
3) Run it.
4) Customize it.
//////// fan.sddlfan.sddlfan.sddlfan.sddl
{{{{
""""classclassclassclass canopy.example.smartfancanopy.example.smartfancanopy.example.smartfancanopy.example.smartfan" : {" : {" : {" : {
""""control speedcontrol speedcontrol speedcontrol speed" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "int8int8int8int8“,“,“,“,
""""minminminmin----valuevaluevaluevalue" : 0," : 0," : 0," : 0,
""""maxmaxmaxmax----valuevaluevaluevalue" : 4" : 4" : 4" : 4
},},},},
Smart Device Description Language
""""sensorsensorsensorsensor temperaturetemperaturetemperaturetemperature" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“,
""""unitsunitsunitsunits" : "" : "" : "" : "degrees_cdegrees_cdegrees_cdegrees_c””””
},},},},
""""sensorsensorsensorsensor humidityhumidityhumidityhumidity" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“,
""""uiuiuiui----numericnumericnumericnumeric----displaydisplaydisplaydisplay----hinthinthinthint" : "" : "" : "" : "percentagepercentagepercentagepercentage””””
}}}}
}}}}
}}}}
A class is a collection
of sensors and
controls.
//////// fan.sddlfan.sddlfan.sddlfan.sddl
{{{{
""""classclassclassclass canopy.example.smartfancanopy.example.smartfancanopy.example.smartfancanopy.example.smartfan" : {" : {" : {" : {
""""control speedcontrol speedcontrol speedcontrol speed" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "int8int8int8int8“,“,“,“,
""""minminminmin----valuevaluevaluevalue" : 0," : 0," : 0," : 0,
""""maxmaxmaxmax----valuevaluevaluevalue" : 4" : 4" : 4" : 4
},},},},
Smart Device Description Language
controls.
""""sensorsensorsensorsensor temperaturetemperaturetemperaturetemperature" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“,
""""unitsunitsunitsunits" : "" : "" : "" : "degrees_cdegrees_cdegrees_cdegrees_c””””
},},},},
""""sensorsensorsensorsensor humidityhumidityhumidityhumidity" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“,
""""uiuiuiui----numericnumericnumericnumeric----displaydisplaydisplaydisplay----hinthinthinthint" : "" : "" : "" : "percentagepercentagepercentagepercentage””””
}}}}
}}}}
}}}}
A control is a property
that can be remotely
//////// fan.sddlfan.sddlfan.sddlfan.sddl
{{{{
""""classclassclassclass canopy.example.smartfancanopy.example.smartfancanopy.example.smartfancanopy.example.smartfan" : {" : {" : {" : {
""""control speedcontrol speedcontrol speedcontrol speed" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "int8int8int8int8“,“,“,“,
""""minminminmin----valuevaluevaluevalue" : 0," : 0," : 0," : 0,
""""maxmaxmaxmax----valuevaluevaluevalue" : 4" : 4" : 4" : 4
},},},},
Smart Device Description Language
that can be remotely
changed by the user.
""""sensorsensorsensorsensor temperaturetemperaturetemperaturetemperature" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“,
""""unitsunitsunitsunits" : "" : "" : "" : "degrees_cdegrees_cdegrees_cdegrees_c””””
},},},},
""""sensorsensorsensorsensor humidityhumidityhumidityhumidity" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“,
""""uiuiuiui----numericnumericnumericnumeric----displaydisplaydisplaydisplay----hinthinthinthint" : "" : "" : "" : "percentagepercentagepercentagepercentage””””
}}}}
}}}}
}}}}
A sensor is a property
that is sampled
periodically and can
be monitored
remotely by the user.
//////// fan.sddlfan.sddlfan.sddlfan.sddl
{{{{
""""classclassclassclass canopy.example.smartfancanopy.example.smartfancanopy.example.smartfancanopy.example.smartfan" : {" : {" : {" : {
""""control speedcontrol speedcontrol speedcontrol speed" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "int8int8int8int8“,“,“,“,
""""minminminmin----valuevaluevaluevalue" : 0," : 0," : 0," : 0,
""""maxmaxmaxmax----valuevaluevaluevalue" : 4" : 4" : 4" : 4
},},},},
Smart Device Description Language
""""sensorsensorsensorsensor temperaturetemperaturetemperaturetemperature" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“,
""""unitsunitsunitsunits" : "" : "" : "" : "degrees_cdegrees_cdegrees_cdegrees_c””””
},},},},
""""sensorsensorsensorsensor humidityhumidityhumidityhumidity" : {" : {" : {" : {
""""datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“,
""""uiuiuiui----numericnumericnumericnumeric----displaydisplaydisplaydisplay----hinthinthinthint" : "" : "" : "" : "percentagepercentagepercentagepercentage””””
}}}}
}}}}
}}}}
fan.sddl canotool gen fan.sddl
fan.h
fan.c
makefile
Generate Embedded Code
Register your device w/ the server: sudo canotool provision
Compile and run: make run
fan.sddl canotool gen fan.sddl
fan.h
fan.c
makefile
Generate Embedded Code
Contains boilerplate code.
Contains stubs.
Register your device w/ the server: sudo canotool provision
Compile and run: make run
Login to http://canopy.link to see the device.
Login to http://canopy.link to see the device.
A control panel is
automatically
generated based
on the SDDL.
The controls don’t
Login to http://canopy.link to see the device.
No sensor dataThe controls don’t
do anything yet.
No sensor data
is reported
fan.c - Stubs
#include <#include <#include <#include <canopy.hcanopy.hcanopy.hcanopy.h>>>>
staticstaticstaticstatic voidvoidvoidvoid on_change_speedon_change_speedon_change_speedon_change_speed((((CanopyContextCanopyContextCanopyContextCanopyContext canopy,canopy,canopy,canopy, int8_tint8_tint8_tint8_t value)value)value)value)
{{{{
// your code here// your code here// your code here// your code here
returnreturnreturnreturn falsefalsefalsefalse;;;;
}}}}
staticstaticstaticstatic boolboolboolbool on_report_requestedon_report_requestedon_report_requestedon_report_requested((((CanopyContextCanopyContextCanopyContextCanopyContext canopy)canopy)canopy)canopy)
{{{{
CanopyReportCanopyReportCanopyReportCanopyReport report =report =report =report = canopy_begin_reportcanopy_begin_reportcanopy_begin_reportcanopy_begin_report(canopy);(canopy);(canopy);(canopy);
//////// Your code here:Your code here:Your code here:Your code here:
// canopy_report_float32(report, “temperature", 0.0);// canopy_report_float32(report, “temperature", 0.0);// canopy_report_float32(report, “temperature", 0.0);// canopy_report_float32(report, “temperature", 0.0);
// canopy_report_float32(report, “humidity", 0.0);// canopy_report_float32(report, “humidity", 0.0);// canopy_report_float32(report, “humidity", 0.0);// canopy_report_float32(report, “humidity", 0.0);
canopy_send_reportcanopy_send_reportcanopy_send_reportcanopy_send_report(report(report(report(report););););
returnreturnreturnreturn truetruetruetrue;;;;
}}}}
sssstatictatictatictatic boolboolboolbool on_canopy_initon_canopy_initon_canopy_initon_canopy_init((((CanopyContextCanopyContextCanopyContextCanopyContext canopy)canopy)canopy)canopy)
{{{{
// your code here// your code here// your code here// your code here
}}}}
............
fan.c – Example control code
#include <#include <#include <#include <canopy.hcanopy.hcanopy.hcanopy.h>>>>
#define FAN_SLOW_PIN 18#define FAN_SLOW_PIN 18#define FAN_SLOW_PIN 18#define FAN_SLOW_PIN 18
#define FAN_MED_PIN 19#define FAN_MED_PIN 19#define FAN_MED_PIN 19#define FAN_MED_PIN 19
#define FAN_HIGH_PIN 20#define FAN_HIGH_PIN 20#define FAN_HIGH_PIN 20#define FAN_HIGH_PIN 20
staticstaticstaticstatic voidvoidvoidvoid on_change_speedon_change_speedon_change_speedon_change_speed((((CanopyContextCanopyContextCanopyContextCanopyContext canopy, int8_t value)canopy, int8_t value)canopy, int8_t value)canopy, int8_t value)
{{{{
set_gpioset_gpioset_gpioset_gpio(FAN_SLOW_PIN, (value ==(FAN_SLOW_PIN, (value ==(FAN_SLOW_PIN, (value ==(FAN_SLOW_PIN, (value == 1111));));));));
set_gpioset_gpioset_gpioset_gpio(FAN_MED_PIN, (value ==(FAN_MED_PIN, (value ==(FAN_MED_PIN, (value ==(FAN_MED_PIN, (value == 2222));));));));
set_gpioset_gpioset_gpioset_gpio(FAN_HIGH_PIN, (value ==(FAN_HIGH_PIN, (value ==(FAN_HIGH_PIN, (value ==(FAN_HIGH_PIN, (value == 3333));));));));
returnreturnreturnreturn truetruetruetrue;;;;returnreturnreturnreturn truetruetruetrue;;;;
}}}}
............
staticstaticstaticstatic boolboolboolbool on_canopy_initon_canopy_initon_canopy_initon_canopy_init((((CanopyContextCanopyContextCanopyContextCanopyContext canopy)canopy)canopy)canopy)
{{{{
init_gpioinit_gpioinit_gpioinit_gpio(FAN_SLOW_PIN,(FAN_SLOW_PIN,(FAN_SLOW_PIN,(FAN_SLOW_PIN, “out”“out”“out”“out”,,,, 0000););););
init_gpioinit_gpioinit_gpioinit_gpio(FAN_MED_PIN,(FAN_MED_PIN,(FAN_MED_PIN,(FAN_MED_PIN, “out”“out”“out”“out”,,,, 0000););););
init_gpioinit_gpioinit_gpioinit_gpio(FAN_HIGH_PIN,(FAN_HIGH_PIN,(FAN_HIGH_PIN,(FAN_HIGH_PIN, “out”“out”“out”“out”,,,, 0000););););
returnreturnreturnreturn truetruetruetrue;;;;
}}}}
............
fan.c – Example sensor code
............
#include “#include “#include “#include “pi_dht_read.hpi_dht_read.hpi_dht_read.hpi_dht_read.h””””
#define DHT_SENSOR_PIN 6#define DHT_SENSOR_PIN 6#define DHT_SENSOR_PIN 6#define DHT_SENSOR_PIN 6
............
staticstaticstaticstatic boolboolboolbool on_report_requestedon_report_requestedon_report_requestedon_report_requested((((CanopyContextCanopyContextCanopyContextCanopyContext canopycanopycanopycanopy))))
{{{{
CanopyReportCanopyReportCanopyReportCanopyReport report =report =report =report = canopy_begin_reportcanopy_begin_reportcanopy_begin_reportcanopy_begin_report(canopy);(canopy);(canopy);(canopy);
intintintint result;result;result;result;
floatfloatfloatfloat t, h;t, h;t, h;t, h;floatfloatfloatfloat t, h;t, h;t, h;t, h;
result =result =result =result = pi_dht_readpi_dht_readpi_dht_readpi_dht_read(DHT22, SENSOR_PIN, &h, &t);(DHT22, SENSOR_PIN, &h, &t);(DHT22, SENSOR_PIN, &h, &t);(DHT22, SENSOR_PIN, &h, &t);
if (result != DHT_SUCCESS)if (result != DHT_SUCCESS)if (result != DHT_SUCCESS)if (result != DHT_SUCCESS)
returnreturnreturnreturn falsefalsefalsefalse;;;;
canopy_report_float32(report,canopy_report_float32(report,canopy_report_float32(report,canopy_report_float32(report, “temperature"“temperature"“temperature"“temperature", t);, t);, t);, t);
canopy_report_float32(report,canopy_report_float32(report,canopy_report_float32(report,canopy_report_float32(report, “humidity"“humidity"“humidity"“humidity", h);, h);, h);, h);
canopy_send_reportcanopy_send_reportcanopy_send_reportcanopy_send_report(report(report(report(report););););
returnreturnreturnreturn truetruetruetrue;;;;
}}}}
............
Now the controls and sensors work!
Now the controls and sensors work!
Now the controls and sensors work!
We just made a cloud-
managed product in 15
minutes!
Building Custom Apps
I’m back baby!
https://canopy.link/device/<UUID>
Or, using alias:
REST endpoints created for each device
https://canopy.link/gregp/SmartFan
https://canopy.link/device/<UUID>
Or, using alias:
REST endpoints created for each device
https://canopy.link/gregp/SmartFan
Authentication?
Currently, cookies & BASIC AUTH
over are supported.
OAuth2.0 support is coming soon.
POST /device/<UUID>
{
“speed” : 3
}
REST: Control Device
}
POST /device/<UUID>
{
“speed” : 3
}
REST: Control Device
}
Remember that we
had “control speed” in
our fan.sddl file.
GET /device/<UUID>/humidity
200 OK
{
“samples” : [{
“t” : “2014-08-08T15:47:31”,
“v” : 0.34194
}, {
REST: Get historic sensor data
}, {
“t” : “2014-08-08T15:48:31”,
“v” : 0.34022
}, {
“t” : “2014-08-08T15:49:31”,
“v” : 0.33998
}, {
“t” : “2014-08-08T15:50:32”,
“v” : 0.33715
}]
}
GET /device/<UUID>/humidity
200 OK
{
“samples” : [{
“t” : “2014-08-08T15:47:31”,
“v” : 0.34194
}, {
Remember that we
had “sensor humidity”
in our fan.sddl file.
REST: Get historic sensor data
}, {
“t” : “2014-08-08T15:48:31”,
“v” : 0.34022
}, {
“t” : “2014-08-08T15:49:31”,
“v” : 0.33998
}, {
“t” : “2014-08-08T15:50:32”,
“v” : 0.33715
}]
}
var fan = canopy.devices[uuid];
fan.properties.speed.setTargetValue(3, {
onSuccess: function() {
Javascript: Control device
onSuccess: function() {
alert(“Fan speed set to MAX”);
}
})
var fan = canopy.devices[uuid];
var hum = fan.properties.humidity.value();
Javascript: Get current sensor value
var fan = canopy.devices[uuid];
fan.properties.humidity.fetchHistoricData({
onSuccess: function(data) {
Javascript: Get historic sensor data
for (var i = 0; i < data.length; i++) {
console.log(data[i].t);
console.log(data[i].v);
}
}
});
var fan = canopy.devices[uuid];
fan.share({
user: “beaker@muppets.com”
Javascript: Sharing a device
});
API & client library documentation at http://canopy.link
Project Status
Roadmap
Alpha Aug 31, 2014
End-to-end proof-of-concept.
Completed drafts of all specifications.
Beta Nov 31, 2014
Security.Security.
Scalability.
Completeness.
v1.0 Feb 28, 2015
Incorporate Beta feedback.
Testing.
Robustness.
Project Status
Get Involved!
Learn more
http://canopy.link
Connect with me
greg@canopy.link
Follow Canopy on Twitter
@CanopyIoT
Contributor
Sponsor
Partner
Team member
Advocate
Investor
Conclusion
• 100% open source.
• SDDL simplifies IoT product
development.
Learn more
http://canopy.link
Connect with me
greg@canopy.link
Follow Canopy on Twitter
@CanopyIoT
development.
• Developer-friendly REST API and client
libraries enable“branded”applications.
• We will work with you to integrate
Canopy into your device. Looking for
partners for“pilot”.

More Related Content

Viewers also liked

Beginning IoT for Developers
Beginning IoT for DevelopersBeginning IoT for Developers
Beginning IoT for Developers
Abhishek Kant
 
Supervisory Control and Data Acquisition (SCADA) system for Greenhouse Farm w...
Supervisory Control and Data Acquisition (SCADA) system for Greenhouse Farm w...Supervisory Control and Data Acquisition (SCADA) system for Greenhouse Farm w...
Supervisory Control and Data Acquisition (SCADA) system for Greenhouse Farm w...
Parvesh Taneja
 
basic embedded system presentation
basic embedded system presentationbasic embedded system presentation
basic embedded system presentation
Vimal Tripathi
 
Iot Presentation ( 22 Aug 2015 )
Iot Presentation ( 22 Aug 2015 )Iot Presentation ( 22 Aug 2015 )
Iot Presentation ( 22 Aug 2015 )
Adun Nanthakaew
 
Diversifying cellular for massive IoT
Diversifying cellular for massive IoTDiversifying cellular for massive IoT
Diversifying cellular for massive IoT
Ericsson
 
Types of ecosystem
Types of ecosystemTypes of ecosystem
Types of ecosystembhanu_
 

Viewers also liked (6)

Beginning IoT for Developers
Beginning IoT for DevelopersBeginning IoT for Developers
Beginning IoT for Developers
 
Supervisory Control and Data Acquisition (SCADA) system for Greenhouse Farm w...
Supervisory Control and Data Acquisition (SCADA) system for Greenhouse Farm w...Supervisory Control and Data Acquisition (SCADA) system for Greenhouse Farm w...
Supervisory Control and Data Acquisition (SCADA) system for Greenhouse Farm w...
 
basic embedded system presentation
basic embedded system presentationbasic embedded system presentation
basic embedded system presentation
 
Iot Presentation ( 22 Aug 2015 )
Iot Presentation ( 22 Aug 2015 )Iot Presentation ( 22 Aug 2015 )
Iot Presentation ( 22 Aug 2015 )
 
Diversifying cellular for massive IoT
Diversifying cellular for massive IoTDiversifying cellular for massive IoT
Diversifying cellular for massive IoT
 
Types of ecosystem
Types of ecosystemTypes of ecosystem
Types of ecosystem
 

Similar to Canopy unconference preso

The Connected Home: Managing and Innovating with Offline Devices
The Connected Home: Managing and Innovating with Offline DevicesThe Connected Home: Managing and Innovating with Offline Devices
The Connected Home: Managing and Innovating with Offline Devices
Amazon Web Services
 
C:\Alon Tech\New Tech\Embedded Conf Tlv\Prez\Sightsys Embedded Day
C:\Alon Tech\New Tech\Embedded Conf Tlv\Prez\Sightsys Embedded DayC:\Alon Tech\New Tech\Embedded Conf Tlv\Prez\Sightsys Embedded Day
C:\Alon Tech\New Tech\Embedded Conf Tlv\Prez\Sightsys Embedded Day
Arik Weinstein
 
Integrate the AWS Cloud with Responsive Xilinx Machine Learning at the Edge (...
Integrate the AWS Cloud with Responsive Xilinx Machine Learning at the Edge (...Integrate the AWS Cloud with Responsive Xilinx Machine Learning at the Edge (...
Integrate the AWS Cloud with Responsive Xilinx Machine Learning at the Edge (...
Amazon Web Services
 
Using Data Science & Serverless Python to find apartment in Toronto
Using Data Science & Serverless Python to find apartment in TorontoUsing Data Science & Serverless Python to find apartment in Toronto
Using Data Science & Serverless Python to find apartment in Toronto
Daniel Zivkovic
 
Essential Capabilities of an IoT Cloud Platform - AWS Online Tech Talks
Essential Capabilities of an IoT Cloud Platform - AWS Online Tech TalksEssential Capabilities of an IoT Cloud Platform - AWS Online Tech Talks
Essential Capabilities of an IoT Cloud Platform - AWS Online Tech Talks
Amazon Web Services
 
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols
Amazon Web Services
 
The Role of Standards in IoT Security
The Role of Standards in IoT SecurityThe Role of Standards in IoT Security
The Role of Standards in IoT Security
Hannes Tschofenig
 
Essential Capabilities of an IoT Cloud Platform - April 2017 AWS Online Tech ...
Essential Capabilities of an IoT Cloud Platform - April 2017 AWS Online Tech ...Essential Capabilities of an IoT Cloud Platform - April 2017 AWS Online Tech ...
Essential Capabilities of an IoT Cloud Platform - April 2017 AWS Online Tech ...
Amazon Web Services
 
SRV408 Deep Dive on AWS IoT
SRV408 Deep Dive on AWS IoTSRV408 Deep Dive on AWS IoT
SRV408 Deep Dive on AWS IoT
Amazon Web Services
 
The Essentials of AWS IoT Device Management (IOT326-R1) - AWS re:Invent 2018
The Essentials of AWS IoT Device Management (IOT326-R1) - AWS re:Invent 2018The Essentials of AWS IoT Device Management (IOT326-R1) - AWS re:Invent 2018
The Essentials of AWS IoT Device Management (IOT326-R1) - AWS re:Invent 2018
Amazon Web Services
 
AWS re:Invent 2016: IoT Security: The New Frontiers (IOT302)
AWS re:Invent 2016: IoT Security: The New Frontiers (IOT302)AWS re:Invent 2016: IoT Security: The New Frontiers (IOT302)
AWS re:Invent 2016: IoT Security: The New Frontiers (IOT302)
Amazon Web Services
 
Building the IOT Platform as a Service
Building the IOT Platform as a ServiceBuilding the IOT Platform as a Service
Building the IOT Platform as a ServiceJesus Rodriguez
 
IoT at Scale: Monitor and Manage Devices with AWS IoT Device Management (IOT3...
IoT at Scale: Monitor and Manage Devices with AWS IoT Device Management (IOT3...IoT at Scale: Monitor and Manage Devices with AWS IoT Device Management (IOT3...
IoT at Scale: Monitor and Manage Devices with AWS IoT Device Management (IOT3...
Amazon Web Services
 
IBM Watson & PHP, A Practical Demonstration
IBM Watson & PHP, A Practical DemonstrationIBM Watson & PHP, A Practical Demonstration
IBM Watson & PHP, A Practical Demonstration
Clark Everetts
 
Programming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.ioProgramming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.io
Günter Obiltschnig
 
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
FIWARE
 
Build Deep Learning Applications with TensorFlow & SageMaker
Build Deep Learning Applications with TensorFlow & SageMakerBuild Deep Learning Applications with TensorFlow & SageMaker
Build Deep Learning Applications with TensorFlow & SageMaker
Amazon Web Services
 
How to turn your smart home developments into a profitable and sustainable bu...
How to turn your smart home developments into a profitable and sustainable bu...How to turn your smart home developments into a profitable and sustainable bu...
How to turn your smart home developments into a profitable and sustainable bu...
mfrancis
 
Lp 2010 operation-theory
Lp 2010 operation-theoryLp 2010 operation-theory
Lp 2010 operation-theoryNguyen Duc Anh
 
Introduction to Apache NiFi 1.11.4
Introduction to Apache NiFi 1.11.4Introduction to Apache NiFi 1.11.4
Introduction to Apache NiFi 1.11.4
Timothy Spann
 

Similar to Canopy unconference preso (20)

The Connected Home: Managing and Innovating with Offline Devices
The Connected Home: Managing and Innovating with Offline DevicesThe Connected Home: Managing and Innovating with Offline Devices
The Connected Home: Managing and Innovating with Offline Devices
 
C:\Alon Tech\New Tech\Embedded Conf Tlv\Prez\Sightsys Embedded Day
C:\Alon Tech\New Tech\Embedded Conf Tlv\Prez\Sightsys Embedded DayC:\Alon Tech\New Tech\Embedded Conf Tlv\Prez\Sightsys Embedded Day
C:\Alon Tech\New Tech\Embedded Conf Tlv\Prez\Sightsys Embedded Day
 
Integrate the AWS Cloud with Responsive Xilinx Machine Learning at the Edge (...
Integrate the AWS Cloud with Responsive Xilinx Machine Learning at the Edge (...Integrate the AWS Cloud with Responsive Xilinx Machine Learning at the Edge (...
Integrate the AWS Cloud with Responsive Xilinx Machine Learning at the Edge (...
 
Using Data Science & Serverless Python to find apartment in Toronto
Using Data Science & Serverless Python to find apartment in TorontoUsing Data Science & Serverless Python to find apartment in Toronto
Using Data Science & Serverless Python to find apartment in Toronto
 
Essential Capabilities of an IoT Cloud Platform - AWS Online Tech Talks
Essential Capabilities of an IoT Cloud Platform - AWS Online Tech TalksEssential Capabilities of an IoT Cloud Platform - AWS Online Tech Talks
Essential Capabilities of an IoT Cloud Platform - AWS Online Tech Talks
 
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols
(MBL313) NEW! AWS IoT: Understanding Hardware Kits, SDKs, & Protocols
 
The Role of Standards in IoT Security
The Role of Standards in IoT SecurityThe Role of Standards in IoT Security
The Role of Standards in IoT Security
 
Essential Capabilities of an IoT Cloud Platform - April 2017 AWS Online Tech ...
Essential Capabilities of an IoT Cloud Platform - April 2017 AWS Online Tech ...Essential Capabilities of an IoT Cloud Platform - April 2017 AWS Online Tech ...
Essential Capabilities of an IoT Cloud Platform - April 2017 AWS Online Tech ...
 
SRV408 Deep Dive on AWS IoT
SRV408 Deep Dive on AWS IoTSRV408 Deep Dive on AWS IoT
SRV408 Deep Dive on AWS IoT
 
The Essentials of AWS IoT Device Management (IOT326-R1) - AWS re:Invent 2018
The Essentials of AWS IoT Device Management (IOT326-R1) - AWS re:Invent 2018The Essentials of AWS IoT Device Management (IOT326-R1) - AWS re:Invent 2018
The Essentials of AWS IoT Device Management (IOT326-R1) - AWS re:Invent 2018
 
AWS re:Invent 2016: IoT Security: The New Frontiers (IOT302)
AWS re:Invent 2016: IoT Security: The New Frontiers (IOT302)AWS re:Invent 2016: IoT Security: The New Frontiers (IOT302)
AWS re:Invent 2016: IoT Security: The New Frontiers (IOT302)
 
Building the IOT Platform as a Service
Building the IOT Platform as a ServiceBuilding the IOT Platform as a Service
Building the IOT Platform as a Service
 
IoT at Scale: Monitor and Manage Devices with AWS IoT Device Management (IOT3...
IoT at Scale: Monitor and Manage Devices with AWS IoT Device Management (IOT3...IoT at Scale: Monitor and Manage Devices with AWS IoT Device Management (IOT3...
IoT at Scale: Monitor and Manage Devices with AWS IoT Device Management (IOT3...
 
IBM Watson & PHP, A Practical Demonstration
IBM Watson & PHP, A Practical DemonstrationIBM Watson & PHP, A Practical Demonstration
IBM Watson & PHP, A Practical Demonstration
 
Programming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.ioProgramming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.io
 
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
Session 7 - Connecting to Legacy Systems, IoT and other Systems | Train the T...
 
Build Deep Learning Applications with TensorFlow & SageMaker
Build Deep Learning Applications with TensorFlow & SageMakerBuild Deep Learning Applications with TensorFlow & SageMaker
Build Deep Learning Applications with TensorFlow & SageMaker
 
How to turn your smart home developments into a profitable and sustainable bu...
How to turn your smart home developments into a profitable and sustainable bu...How to turn your smart home developments into a profitable and sustainable bu...
How to turn your smart home developments into a profitable and sustainable bu...
 
Lp 2010 operation-theory
Lp 2010 operation-theoryLp 2010 operation-theory
Lp 2010 operation-theory
 
Introduction to Apache NiFi 1.11.4
Introduction to Apache NiFi 1.11.4Introduction to Apache NiFi 1.11.4
Introduction to Apache NiFi 1.11.4
 

Recently uploaded

Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaTop 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Yara Milbes
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 

Recently uploaded (20)

Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi ArabiaTop 7 Unique WhatsApp API Benefits | Saudi Arabia
Top 7 Unique WhatsApp API Benefits | Saudi Arabia
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 

Canopy unconference preso

  • 1. Rapid IoT Prototyping with Canopy http://canopy.link @CanopyIoT Presented by Greg Prisament (greg@canopy.link), founder of Canopy. 2014 SFIoT UnConference (8/16/2014)
  • 2. An end-to-end IoT software platform.
  • 3. Selling Points 100% open source. Designed for commercial use.Designed for commercial use. Developer-friendly.
  • 4. Creating a cloud- managed product today is expensive and difficult…
  • 5. Creating a cloud- managed product today is expensive and difficult… Complex software systems are involved. Most platforms are proprietary and expensive to license.
  • 6. … but it doesn’t need to be that way. What if IoT software were free, readily-available, and easy-to-use?
  • 7. Canopy makes it simple to develop commercially-viable smart products. We Solve the common system engineering You Focus on what your business does best.system engineering challenges with IoT. Sensor data storage. Communication protocols. REST APIs & client libraries. Authorization. Security. business does best. Market-specific hardware. Customer engagement. Services and solutions. Vertical applications. Branding.
  • 9. Enable Custom Experiences Demonstration only. This prototype is not endorsed by anyone.
  • 10. Enable Custom Experiences Demonstration only. This prototype is not endorsed by anyone. Canopy provides APIs & client libraries so you can build sexy custom apps for your product.
  • 11. Low-latency control from anywhere. Seriously. Any similarity to an actual product is purely coincidental.
  • 12. Low-latency control from anywhere. Seriously. Any similarity to an actual product is purely coincidental.
  • 13. Low-latency control from anywhere. Seriously. Any similarity to an actual product is purely coincidental.
  • 14. Low-latency control from anywhere. Seriously. Any similarity to an actual product is purely coincidental. Sub-100ms response time!
  • 15. Low-latency control from anywhere. HTTP POST Websocket Home-spun message-passing system – “pigeon” Callback triggered in firmware code.
  • 17. Sensor Monitoring Stored in cassandra cluster.LOD-based downsampling for performance. Historic data sent in response. Pruning for space. Sensor sample read in firmware. Sent over websocket HTTP GET
  • 18. Social Activity Maybe you should stop reading the fine print and pay attention to the presentation. Google Docs- like sharing and permissions. 30s ago MissPiggy set fan to off. 1m ago Kermit set fan to max. 2m ago MissPiggy set fan to off. 3m ago Kermit set fan to max. 4m ago
  • 19. Our Emphasis Powered Appliances We assume moderately powerful HW: • ARM-based SoC • Internet access over WiFi, ETH0, 3G, or 4G LTE • Linux-based OS• Linux-based OS • Websockets & SSL Enable Key Activities Monitor Control Share
  • 21. App Protocol Machine Protocol Databases IoT software components Firmware Server-side software Application(s) ProtocolProtocol
  • 22. Canopy REST API Canopy Websocket Protocol Canopy has all that Canopy Embedded Development Kit Canopy Cloud Service Application (Using Canopy Client Libraries) REST APIProtocol
  • 23. App Protocol Machine Protocol Databases Here, Just make your changes here, here, here, and here. Adding a feature (without Canopy) Firmware Server-side software Application(s) ProtocolProtocol here,
  • 24. Canopy REST API Canopy Websocket Protocol Make change here See it here. Adding a feature with Canopy Canopy Cloud Service Application (Using Canopy Client Libraries) REST APIProtocol Canopy Embedded Development Kit
  • 25. 1) Describe your device in SDDL. 2) Generate embedded Code. The Process 3) Run it. 4) Customize it.
  • 26. //////// fan.sddlfan.sddlfan.sddlfan.sddl {{{{ """"classclassclassclass canopy.example.smartfancanopy.example.smartfancanopy.example.smartfancanopy.example.smartfan" : {" : {" : {" : { """"control speedcontrol speedcontrol speedcontrol speed" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "int8int8int8int8“,“,“,“, """"minminminmin----valuevaluevaluevalue" : 0," : 0," : 0," : 0, """"maxmaxmaxmax----valuevaluevaluevalue" : 4" : 4" : 4" : 4 },},},}, Smart Device Description Language """"sensorsensorsensorsensor temperaturetemperaturetemperaturetemperature" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“, """"unitsunitsunitsunits" : "" : "" : "" : "degrees_cdegrees_cdegrees_cdegrees_c”””” },},},}, """"sensorsensorsensorsensor humidityhumidityhumidityhumidity" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“, """"uiuiuiui----numericnumericnumericnumeric----displaydisplaydisplaydisplay----hinthinthinthint" : "" : "" : "" : "percentagepercentagepercentagepercentage”””” }}}} }}}} }}}}
  • 27. A class is a collection of sensors and controls. //////// fan.sddlfan.sddlfan.sddlfan.sddl {{{{ """"classclassclassclass canopy.example.smartfancanopy.example.smartfancanopy.example.smartfancanopy.example.smartfan" : {" : {" : {" : { """"control speedcontrol speedcontrol speedcontrol speed" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "int8int8int8int8“,“,“,“, """"minminminmin----valuevaluevaluevalue" : 0," : 0," : 0," : 0, """"maxmaxmaxmax----valuevaluevaluevalue" : 4" : 4" : 4" : 4 },},},}, Smart Device Description Language controls. """"sensorsensorsensorsensor temperaturetemperaturetemperaturetemperature" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“, """"unitsunitsunitsunits" : "" : "" : "" : "degrees_cdegrees_cdegrees_cdegrees_c”””” },},},}, """"sensorsensorsensorsensor humidityhumidityhumidityhumidity" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“, """"uiuiuiui----numericnumericnumericnumeric----displaydisplaydisplaydisplay----hinthinthinthint" : "" : "" : "" : "percentagepercentagepercentagepercentage”””” }}}} }}}} }}}}
  • 28. A control is a property that can be remotely //////// fan.sddlfan.sddlfan.sddlfan.sddl {{{{ """"classclassclassclass canopy.example.smartfancanopy.example.smartfancanopy.example.smartfancanopy.example.smartfan" : {" : {" : {" : { """"control speedcontrol speedcontrol speedcontrol speed" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "int8int8int8int8“,“,“,“, """"minminminmin----valuevaluevaluevalue" : 0," : 0," : 0," : 0, """"maxmaxmaxmax----valuevaluevaluevalue" : 4" : 4" : 4" : 4 },},},}, Smart Device Description Language that can be remotely changed by the user. """"sensorsensorsensorsensor temperaturetemperaturetemperaturetemperature" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“, """"unitsunitsunitsunits" : "" : "" : "" : "degrees_cdegrees_cdegrees_cdegrees_c”””” },},},}, """"sensorsensorsensorsensor humidityhumidityhumidityhumidity" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“, """"uiuiuiui----numericnumericnumericnumeric----displaydisplaydisplaydisplay----hinthinthinthint" : "" : "" : "" : "percentagepercentagepercentagepercentage”””” }}}} }}}} }}}}
  • 29. A sensor is a property that is sampled periodically and can be monitored remotely by the user. //////// fan.sddlfan.sddlfan.sddlfan.sddl {{{{ """"classclassclassclass canopy.example.smartfancanopy.example.smartfancanopy.example.smartfancanopy.example.smartfan" : {" : {" : {" : { """"control speedcontrol speedcontrol speedcontrol speed" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "int8int8int8int8“,“,“,“, """"minminminmin----valuevaluevaluevalue" : 0," : 0," : 0," : 0, """"maxmaxmaxmax----valuevaluevaluevalue" : 4" : 4" : 4" : 4 },},},}, Smart Device Description Language """"sensorsensorsensorsensor temperaturetemperaturetemperaturetemperature" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“, """"unitsunitsunitsunits" : "" : "" : "" : "degrees_cdegrees_cdegrees_cdegrees_c”””” },},},}, """"sensorsensorsensorsensor humidityhumidityhumidityhumidity" : {" : {" : {" : { """"datatypedatatypedatatypedatatype" : "" : "" : "" : "float32float32float32float32“,“,“,“, """"uiuiuiui----numericnumericnumericnumeric----displaydisplaydisplaydisplay----hinthinthinthint" : "" : "" : "" : "percentagepercentagepercentagepercentage”””” }}}} }}}} }}}}
  • 30. fan.sddl canotool gen fan.sddl fan.h fan.c makefile Generate Embedded Code Register your device w/ the server: sudo canotool provision Compile and run: make run
  • 31. fan.sddl canotool gen fan.sddl fan.h fan.c makefile Generate Embedded Code Contains boilerplate code. Contains stubs. Register your device w/ the server: sudo canotool provision Compile and run: make run
  • 32. Login to http://canopy.link to see the device.
  • 33. Login to http://canopy.link to see the device. A control panel is automatically generated based on the SDDL.
  • 34. The controls don’t Login to http://canopy.link to see the device. No sensor dataThe controls don’t do anything yet. No sensor data is reported
  • 35. fan.c - Stubs #include <#include <#include <#include <canopy.hcanopy.hcanopy.hcanopy.h>>>> staticstaticstaticstatic voidvoidvoidvoid on_change_speedon_change_speedon_change_speedon_change_speed((((CanopyContextCanopyContextCanopyContextCanopyContext canopy,canopy,canopy,canopy, int8_tint8_tint8_tint8_t value)value)value)value) {{{{ // your code here// your code here// your code here// your code here returnreturnreturnreturn falsefalsefalsefalse;;;; }}}} staticstaticstaticstatic boolboolboolbool on_report_requestedon_report_requestedon_report_requestedon_report_requested((((CanopyContextCanopyContextCanopyContextCanopyContext canopy)canopy)canopy)canopy) {{{{ CanopyReportCanopyReportCanopyReportCanopyReport report =report =report =report = canopy_begin_reportcanopy_begin_reportcanopy_begin_reportcanopy_begin_report(canopy);(canopy);(canopy);(canopy); //////// Your code here:Your code here:Your code here:Your code here: // canopy_report_float32(report, “temperature", 0.0);// canopy_report_float32(report, “temperature", 0.0);// canopy_report_float32(report, “temperature", 0.0);// canopy_report_float32(report, “temperature", 0.0); // canopy_report_float32(report, “humidity", 0.0);// canopy_report_float32(report, “humidity", 0.0);// canopy_report_float32(report, “humidity", 0.0);// canopy_report_float32(report, “humidity", 0.0); canopy_send_reportcanopy_send_reportcanopy_send_reportcanopy_send_report(report(report(report(report);););); returnreturnreturnreturn truetruetruetrue;;;; }}}} sssstatictatictatictatic boolboolboolbool on_canopy_initon_canopy_initon_canopy_initon_canopy_init((((CanopyContextCanopyContextCanopyContextCanopyContext canopy)canopy)canopy)canopy) {{{{ // your code here// your code here// your code here// your code here }}}} ............
  • 36. fan.c – Example control code #include <#include <#include <#include <canopy.hcanopy.hcanopy.hcanopy.h>>>> #define FAN_SLOW_PIN 18#define FAN_SLOW_PIN 18#define FAN_SLOW_PIN 18#define FAN_SLOW_PIN 18 #define FAN_MED_PIN 19#define FAN_MED_PIN 19#define FAN_MED_PIN 19#define FAN_MED_PIN 19 #define FAN_HIGH_PIN 20#define FAN_HIGH_PIN 20#define FAN_HIGH_PIN 20#define FAN_HIGH_PIN 20 staticstaticstaticstatic voidvoidvoidvoid on_change_speedon_change_speedon_change_speedon_change_speed((((CanopyContextCanopyContextCanopyContextCanopyContext canopy, int8_t value)canopy, int8_t value)canopy, int8_t value)canopy, int8_t value) {{{{ set_gpioset_gpioset_gpioset_gpio(FAN_SLOW_PIN, (value ==(FAN_SLOW_PIN, (value ==(FAN_SLOW_PIN, (value ==(FAN_SLOW_PIN, (value == 1111));));));)); set_gpioset_gpioset_gpioset_gpio(FAN_MED_PIN, (value ==(FAN_MED_PIN, (value ==(FAN_MED_PIN, (value ==(FAN_MED_PIN, (value == 2222));));));)); set_gpioset_gpioset_gpioset_gpio(FAN_HIGH_PIN, (value ==(FAN_HIGH_PIN, (value ==(FAN_HIGH_PIN, (value ==(FAN_HIGH_PIN, (value == 3333));));));)); returnreturnreturnreturn truetruetruetrue;;;;returnreturnreturnreturn truetruetruetrue;;;; }}}} ............ staticstaticstaticstatic boolboolboolbool on_canopy_initon_canopy_initon_canopy_initon_canopy_init((((CanopyContextCanopyContextCanopyContextCanopyContext canopy)canopy)canopy)canopy) {{{{ init_gpioinit_gpioinit_gpioinit_gpio(FAN_SLOW_PIN,(FAN_SLOW_PIN,(FAN_SLOW_PIN,(FAN_SLOW_PIN, “out”“out”“out”“out”,,,, 0000);););); init_gpioinit_gpioinit_gpioinit_gpio(FAN_MED_PIN,(FAN_MED_PIN,(FAN_MED_PIN,(FAN_MED_PIN, “out”“out”“out”“out”,,,, 0000);););); init_gpioinit_gpioinit_gpioinit_gpio(FAN_HIGH_PIN,(FAN_HIGH_PIN,(FAN_HIGH_PIN,(FAN_HIGH_PIN, “out”“out”“out”“out”,,,, 0000);););); returnreturnreturnreturn truetruetruetrue;;;; }}}} ............
  • 37. fan.c – Example sensor code ............ #include “#include “#include “#include “pi_dht_read.hpi_dht_read.hpi_dht_read.hpi_dht_read.h”””” #define DHT_SENSOR_PIN 6#define DHT_SENSOR_PIN 6#define DHT_SENSOR_PIN 6#define DHT_SENSOR_PIN 6 ............ staticstaticstaticstatic boolboolboolbool on_report_requestedon_report_requestedon_report_requestedon_report_requested((((CanopyContextCanopyContextCanopyContextCanopyContext canopycanopycanopycanopy)))) {{{{ CanopyReportCanopyReportCanopyReportCanopyReport report =report =report =report = canopy_begin_reportcanopy_begin_reportcanopy_begin_reportcanopy_begin_report(canopy);(canopy);(canopy);(canopy); intintintint result;result;result;result; floatfloatfloatfloat t, h;t, h;t, h;t, h;floatfloatfloatfloat t, h;t, h;t, h;t, h; result =result =result =result = pi_dht_readpi_dht_readpi_dht_readpi_dht_read(DHT22, SENSOR_PIN, &h, &t);(DHT22, SENSOR_PIN, &h, &t);(DHT22, SENSOR_PIN, &h, &t);(DHT22, SENSOR_PIN, &h, &t); if (result != DHT_SUCCESS)if (result != DHT_SUCCESS)if (result != DHT_SUCCESS)if (result != DHT_SUCCESS) returnreturnreturnreturn falsefalsefalsefalse;;;; canopy_report_float32(report,canopy_report_float32(report,canopy_report_float32(report,canopy_report_float32(report, “temperature"“temperature"“temperature"“temperature", t);, t);, t);, t); canopy_report_float32(report,canopy_report_float32(report,canopy_report_float32(report,canopy_report_float32(report, “humidity"“humidity"“humidity"“humidity", h);, h);, h);, h); canopy_send_reportcanopy_send_reportcanopy_send_reportcanopy_send_report(report(report(report(report);););); returnreturnreturnreturn truetruetruetrue;;;; }}}} ............
  • 38. Now the controls and sensors work!
  • 39. Now the controls and sensors work!
  • 40. Now the controls and sensors work! We just made a cloud- managed product in 15 minutes!
  • 42. https://canopy.link/device/<UUID> Or, using alias: REST endpoints created for each device https://canopy.link/gregp/SmartFan
  • 43. https://canopy.link/device/<UUID> Or, using alias: REST endpoints created for each device https://canopy.link/gregp/SmartFan Authentication? Currently, cookies & BASIC AUTH over are supported. OAuth2.0 support is coming soon.
  • 44. POST /device/<UUID> { “speed” : 3 } REST: Control Device }
  • 45. POST /device/<UUID> { “speed” : 3 } REST: Control Device } Remember that we had “control speed” in our fan.sddl file.
  • 46. GET /device/<UUID>/humidity 200 OK { “samples” : [{ “t” : “2014-08-08T15:47:31”, “v” : 0.34194 }, { REST: Get historic sensor data }, { “t” : “2014-08-08T15:48:31”, “v” : 0.34022 }, { “t” : “2014-08-08T15:49:31”, “v” : 0.33998 }, { “t” : “2014-08-08T15:50:32”, “v” : 0.33715 }] }
  • 47. GET /device/<UUID>/humidity 200 OK { “samples” : [{ “t” : “2014-08-08T15:47:31”, “v” : 0.34194 }, { Remember that we had “sensor humidity” in our fan.sddl file. REST: Get historic sensor data }, { “t” : “2014-08-08T15:48:31”, “v” : 0.34022 }, { “t” : “2014-08-08T15:49:31”, “v” : 0.33998 }, { “t” : “2014-08-08T15:50:32”, “v” : 0.33715 }] }
  • 48. var fan = canopy.devices[uuid]; fan.properties.speed.setTargetValue(3, { onSuccess: function() { Javascript: Control device onSuccess: function() { alert(“Fan speed set to MAX”); } })
  • 49. var fan = canopy.devices[uuid]; var hum = fan.properties.humidity.value(); Javascript: Get current sensor value
  • 50. var fan = canopy.devices[uuid]; fan.properties.humidity.fetchHistoricData({ onSuccess: function(data) { Javascript: Get historic sensor data for (var i = 0; i < data.length; i++) { console.log(data[i].t); console.log(data[i].v); } } });
  • 51. var fan = canopy.devices[uuid]; fan.share({ user: “beaker@muppets.com” Javascript: Sharing a device });
  • 52. API & client library documentation at http://canopy.link
  • 54. Roadmap Alpha Aug 31, 2014 End-to-end proof-of-concept. Completed drafts of all specifications. Beta Nov 31, 2014 Security.Security. Scalability. Completeness. v1.0 Feb 28, 2015 Incorporate Beta feedback. Testing. Robustness.
  • 55. Project Status Get Involved! Learn more http://canopy.link Connect with me greg@canopy.link Follow Canopy on Twitter @CanopyIoT Contributor Sponsor Partner Team member Advocate Investor
  • 56. Conclusion • 100% open source. • SDDL simplifies IoT product development. Learn more http://canopy.link Connect with me greg@canopy.link Follow Canopy on Twitter @CanopyIoT development. • Developer-friendly REST API and client libraries enable“branded”applications. • We will work with you to integrate Canopy into your device. Looking for partners for“pilot”.