SlideShare une entreprise Scribd logo
1  sur  56
Télécharger pour lire hors ligne
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”.

Contenu connexe

En vedette

Beginning IoT for Developers
Beginning IoT for DevelopersBeginning IoT for Developers
Beginning IoT for DevelopersAbhishek 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 presentationVimal 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 IoTEricsson
 
Types of ecosystem
Types of ecosystemTypes of ecosystem
Types of ecosystembhanu_
 

En vedette (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
 

Similaire à 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 DevicesAmazon 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 DayArik 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 TorontoDaniel 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 TalksAmazon 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, & ProtocolsAmazon 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 SecurityHannes 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
 
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 2018Amazon 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 DemonstrationClark Everetts
 
Programming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.ioProgramming IoT Gateways with macchina.io
Programming IoT Gateways with macchina.ioGü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 & SageMakerAmazon 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.4Timothy Spann
 

Similaire à 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
 

Dernier

2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingShane Coughlan
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesKrzysztofKkol1
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profileakrivarotava
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 

Dernier (20)

2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profile
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 

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”.