27
IoT Toolkit and Smart Object API Tutorial Introduc7on Open Source Internet of Things

IoT Toolkit and the Smart Object API Tutorial Introduction

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: IoT Toolkit and the Smart Object API Tutorial Introduction

IoT  Toolkit  and  Smart  Object  API  Tutorial  Introduc7on  

Open  Source  Internet  of  Things  

Page 2: IoT Toolkit and the Smart Object API Tutorial Introduction

IoT  2.0  –  Interoperability  

M2M  CoAP   M2M  

MQ   SOA  

M2M  HTTP  

Smart  Object  API  IoT  Toolkit  

Discovery  

Applica7ons  

Thing  Models  

Resource  Models  

•  Object  Model  •  REST  +  Event  Model  •  M2M  Abstrac<ons  

IoT  Toolkit  

Connected  Things,  Sensors,  Actuators,  Data  Sources  

Seman5c  Repository  

•  Easy  to  deploy  new  things  and  applica7ons  using  data  models  

•  Write  once  run  anywhere,  any  app  to  any  thing  via  any  M2M  

•  Network  effect  enabled  

•  Allows  for  appropriate  M2M  choice  

Page 3: IoT Toolkit and the Smart Object API Tutorial Introduction

Interoperability  Architecture  

SO  

SO  

SO  

Gateway   Server  Cloud  Endpoints  

•  Sensors  •  Devices  

Applica7on    Components    

And    Resources  

Databases  

Instances  

Classes  SRT  

• Discovery  • Persistence  • Replica7on  • Resource  Access  

• Data  Models    • Sensor  Models  • Machine  Models  • Templates  

Page 4: IoT Toolkit and the Smart Object API Tutorial Introduction

IoT  Toolkit  

•  IoT  Toolkit  is  a  reference  implementa7on  of  the  Smart  Object  API  and  related  tools  

•  REST  API  with  real-­‐7me  event  model  for  the  Internet  of  Things  

•  Lightweight  server  that  can  run  on  small  computers  e.g.  Raspberry  Pi  

•  Work  in  progress  prototype  (limited  excep7on  handling  and  simple  interfaces)  

Page 5: IoT Toolkit and the Smart Object API Tutorial Introduction

Smart  Object  API  

•  Object  Model  –  Web  Object  Encapsula7on    •  Data  Models  –  Linked  Data  descrip7ons  •  Event  Model  –  Asynchronous  M2M  and  applica7on  soUware  event  handlers  

•  REST  API  using  JSON,  XML,  RDF  representa7ons  

•  Web  standards  and  best  prac7ces  with  new  extensions  

Page 6: IoT Toolkit and the Smart Object API Tutorial Introduction

Object  Model  Web  Object  Encapsula7on    

Smart  Object  

Web  protocol  interfaces,  also  M2M  e.g.  MQTT  

Event  Model  Links  data  with  ac7ons  Pub-­‐Sub  and  event  handlers  

Encapsulates  local  soUware    components  and  handlers  

Self-­‐describing  data  model  For  Resource  Discovery    

and  Linkage  

Sensor  or  other  data    JSON,  XML,  data  feeds  

Page 7: IoT Toolkit and the Smart Object API Tutorial Introduction

Smart  Object  Structure  –  Object  Model  

Smart  Object  

Descrip7on  

ObservableProperty  

ObservableProperty…  

Agent  

Publisher  Subscriber  Handler  

PropertyOfInterest  

Descrip7on  

Observers  

Handler  Instance  Daemon  

Default  Property  

Page 8: IoT Toolkit and the Smart Object API Tutorial Introduction

REST  API  •  Python  API  –  Local  SoUware,  Agents  and  Handlers  –  Resources  (objects)  are  hierarchical  proper7es  of  other  resources  

–  self.indoorTempValue = sensors.weather.indoor_temp.get()!

•  Web  API  –  HYp  REST  Client  access  –  Resources  are  organized  in  hierarchical  path  –  GET http:my_server:8000/sensors/weather/indoor_temp!

•  Default  Property  –  Returns  a  resource  associated  with  a  higher  level  resource  –  GET  of  Smart  Object  returns  it’s  Descrip7on;  GET  of  Observable  Property  returns  it’s  Observa7on  Value  

Page 9: IoT Toolkit and the Smart Object API Tutorial Introduction

API  –  Descrip7on  (Data  Model)  

•  Contains  graphs  describing  the  resource  data  model    

•  RDF  in  many  popular  representa7ons  – create  (POST)  loads  a  graph  into  the  descrip7on  delete  (DELETE)  removes  a  graph  or  subgraph  from  the  descrip7on  

– set  (PUT)  updates  a  graph  or  subgraph  – get  (GET)  returns  a  graph  or  subgraph  

Page 10: IoT Toolkit and the Smart Object API Tutorial Introduction

API  –  Observable  Property    

•  Represents  sensor  data  or  a  data  feed  •  Can  be  JSON,  xml,  text,  or  other  content  type  – create  (POST):  make  new  observable  property  – delete  (DELETE)  remove  observable  property  – set  (PUT)  update  Observa7on  Value  or  data  feed  – get  (GET)  returns  the  current  Observa7on  Value  

Page 11: IoT Toolkit and the Smart Object API Tutorial Introduction

API  –  Observers  •  Contains  graphs  which  define  endpoints  of  event  driven  processing  

•  Publish,  Subscribe,  and  Event  Handler  paYerns  •  Reference  Implementa7on  – create  (POST)  makes  a  new  Observer    

•  Publisher,  Subscriber,  or  Handler  Class  – set  (PUT)  updates  an  Observer’s  seangs  – get  (GET)  returns  an  Observer’s  seangs  – delete  (DELETE)  removes  an  observer  graph  

Page 12: IoT Toolkit and the Smart Object API Tutorial Introduction

API  –  Agent  •  Container  for  Event  Handlers,  soUware  components  invoked  within  the  local  context  of  the  Smart  Object  

•  Observer  class  invokes  Event  Handler  code  •  Reference  Implementa7on  –  create  (POST)  makes  a  new  code  object  instance  

•  type  handler  or  daemon  –  delete  (DELETE)  removes    code  instance  –  set  (PUT)  updates  seangs  of  a  code  instance  –  get  (GET)  returns  seangs  of  a  code  instance  

Page 13: IoT Toolkit and the Smart Object API Tutorial Introduction

Weather  Sensor  Example  

•  Weather  Sensor  hardware  from  Sparkfun  •  Arduino  connects  hardware  sensors  to  gateway  via  ethernet  

•  Raspberry  Pi  gateway  runs  Smart  Object  API    •  Arduino  uses  hYp  POST  of  JSON  value  to  update  Smart  Object  Observable  Proper7es  

•  Smart  Object  built  using  python  code    

Page 14: IoT Toolkit and the Smart Object API Tutorial Introduction

Weather  sensor  example  

Sensor  (Arduino)  

Gateway  (Rpi)  

Sensor  Hardware  •  Wind  Speed  •  Wind  Direc7on  •  Rainfall  •  Temperature  •  Humidity  •  Barometer  

Reads  sensor  elements  and  creates  sensor  output    values  to  update  Smart  Object  in  the  Gateway    using  a  simple  hYp  client  

Gateway  runs  Smart  Object  API  and  exposes  HTTP    interface,  adds  descrip7onand  other  resources,    Observers  send  updates  to  cloud  server  

Local  Ethernet  

Cloud  Server  acts  as  Gateway-­‐as-­‐a-­‐Service  for  Xively  Receives  updates  from  the  gateway,  Observers    Send  periodic  updates  to  Xively  feed  

Cloud    Server  

Internet  

Client  (Xively)  

Internet  

Xively  acts  as  client  applica7on  and  receives    updates  from  the  cloud  service  ac7ng  as  GaaS  

Page 15: IoT Toolkit and the Smart Object API Tutorial Introduction

Arduino  Sketch        PString jsonObject(objectBuffer, sizeof(objectBuffer));!!   if(nextPushPoint==0) {!     nextPushPoint=1;! /* use Pstring.print to format JSON string from integer */!     jsonObject.println(daily_rain,1); ! /* PUT update to Smart Object server property using JSON */!     client.print("PUT ");!     client.print(serverPath);!     client.print(”daily_rain");!     client.println(" HTTP/1.1");!     client.println("Content-Type: application/json");!     client.print("Content-Length: ");!     client.println(jsonObject.length()-2);!     client.println("Connection: close");!     client.println();!     client.println(jsonObject);!   }!

Page 16: IoT Toolkit and the Smart Object API Tutorial Introduction

Demo  Code  for  Weather  Sensor  –  Smart  Object  and  Service  Crea7on  

   baseObject  =  SmartObject()  #  create  a  Smart  Object  to  serve  as  the  base  container  for  other  Smart  Objects  and  resources          server  =  SmartObjectService(baseObject)  #  make  an  instance  of  the  service,  baseObject  is  the  object  root          server.start(8000)  #  forks  a  server  thread  to  listen  on  port  8000          print  'hDpd  started  at',  baseObject.Proper<es.get('hDpService’)    #  top  level  object  container  for  sensors,  class  is  SmartObject  sensors  =  baseObject.create({'resourceName':  'sensors',\                                                                                  'resourceClass':  'SmartObject'})    #weather  sensor  Smart  Object  under  sensors  for  the  weather  sensor                  weather  =  sensors.create({'resourceName':  'rhvWeather-­‐01',  \                                                                        'resourceClass':  'SmartObject’}!

Page 17: IoT Toolkit and the Smart Object API Tutorial Introduction

Data  Model  –  Descrip7on    for  object  discovery  and  linkage  

     #  make  a  reference  to  the  weather  sensor  object  Descrip7on  and  build  an  example  graph  (could  use  the  built-­‐in  reference  as  well)          weather.descrip7on  =  weather.Resources.get('Descrip<on')            weather.descrip7on.set((URIRef('sensors/rhvWeather-­‐01/outdoor_temperature'),  RDFS.Resource,  Literal('sensor')))          weather.descrip7on.set((URIRef('sensors/rhvWeather-­‐01/outdoor_temperature'),  RDF.type,  Literal('temperature')))          weather.descrip7on.set((URIRef('sensors/rhvWeather-­‐01/outdoor_humidity'),  RDFS.Resource,  Literal('sensor')))          weather.descrip7on.set((URIRef('sensors/rhvWeather-­‐01/outdoor_humidity'),  RDF.type,  Literal('humidity')))          weather.descrip7on.set((URIRef('sensors/rhvWeather-­‐01/sealevel_pressure'),  RDFS.Resource,  Literal('sensor')))          weather.descrip7on.set((URIRef('sensors/rhvWeather-­‐01/sealevel_pressure'),  RDF.type,  Literal('pressure')))!

Page 18: IoT Toolkit and the Smart Object API Tutorial Introduction

Encapsula7on:  Observable  Property,  Observer,  and  Subscriber  

 sealevel_pressure  =  weather.create({'resourceName':  'sealevel_pressure',\                                                                                      'resourceClass':  'ObservableProperty'})                sealevel_pressure.Observers.create({'resourceName':'demoServiceObserver',\                                                                                          'resourceClass':  'hDpPublisher',\                                                                                          'targetURI':  'hDp://smartobjectservice.com:

             8000/sensors/rhvWeather-­‐01/sealevel_pressure'})      #  make  a  named  subscriber  resource          outdoor_humidity.Observers.create({'resourceName':  'humiditySubscriber',\                                                                                  'resourceClass':  'hDpSubscriber',\                                                                                  'observerURI':  'hDp://localhost:8000/sensors/rhvWeather-­‐01/

                         indoor_humidity',  \                                                                                  'observerName':  'humiditySubObserver'  })  

Page 19: IoT Toolkit and the Smart Object API Tutorial Introduction

Event  Model  –  Xively  Publisher  -­‐  Observer  

sealevel_pressure.Observers.create({'resourceName':  'xivelyObserver',\                                                                                        'resourceClass':  'xivelyPublisher',\                                                                                        'apiBase':  'hDps://api.xively.com/v2/feeds',\                                                                                        'feedID':  '2141862995',\                                                                                        'streamID':  'sealevel_pressure’,\                                                                      

               'apiKey’:'QYourApiKeyGoesHEresjhgrjgo56',\                                                                                        'updateInterval':  pushInterval  })    

Page 20: IoT Toolkit and the Smart Object API Tutorial Introduction

Event  Model  –  Handler  and  Callback  No7fier  

   #addHandler  class  adds  2  proper7es  values  together  and  stores  in  a  third          weather.Agent.create({'resourceName':  'addHandler',\                                                    'resourceClass':  'addHandler',\                                                    'addendLink1':'sensors/rhvWeather-­‐01/indoor_temperature',  \                                                    'addendLink2':  'sensors/rhvWeather-­‐01/indoor_temperature',  \                                                    'sumOutLink':  'sensors/rhvWeather-­‐01/outdoor_humidity'})                        #  now  create  a  callback  observer  endpoint            indoor_temperature.Observers.create({'resourceName':  'callbackTempObserver',\                                                                                    'resourceClass':  'callbackNo<fier',\                                                                                    'handlerURI':  'callback:///sensors/rhvWeather-­‐01/Agent/

                           addHandler'})  

Page 21: IoT Toolkit and the Smart Object API Tutorial Introduction

IoT  Toolkit  Project  •  Smart  Object  API  is  nominally  complete  and  stable  

•  Development  priori7es  – Web  UI  for  debug  and  demo,  simple  applica7ons  

•  Navigator,  Dashboard,  Analy7cs,  Graphs  and  Charts  – M2M  Endpoints  for  CoAP,  MQTT,  and  others  –  Test  code  for  API    –  Internal  features  development  

•  Build  SmartObject  Instances  from  Resource  Models  •  Object  Persistence  •  Data  persistence  and  storage  

Page 22: IoT Toolkit and the Smart Object API Tutorial Introduction

MQTT  Observer  •  Publish,  Subscribe,  or  Pub+Sub  using  the  mqYObserver  resource  class  

•  Prototype  opens  a  connec7on  to  a  specified  broker  for  each  endpoint  

 Observers.create({'resourceName': 'mqttTestObserver',\!

! ! ! ! ! 'resourceClass': 'mqttObserver',\! 'connection': 'smartobjectservice.com',\! 'pubTopic': ’sealevel_pressure',\! 'subTopic': None,\! 'QoS': 0,\! 'keepAlive': 60 })!

Page 23: IoT Toolkit and the Smart Object API Tutorial Introduction

MQTT  Observer  

MQTT  Broker  

REST  Endpoint  ObservableProperty  

mqYObserver  

PUT   GET  

Publish  from  data  producer  

Publish  From  REST  API  

Publish  to  Other  Subscribers  

SUB  Publish  to  REST  API    

Connects  REST  Resource  to  MQTT  Topic  Publish  and  Subscribe  

Page 24: IoT Toolkit and the Smart Object API Tutorial Introduction

MQTT  Observer  

MQTT  Broker  

REST  Endpoint  ObservableProperty  

mqYObserver  

PUT   GET  

Publish  from  data  producer  

Publish  From  REST  API  

Publish  to  Other  Subscribers  

SUB  Publish  to  REST  API    

Publisher    Publishes  REST  Resource  updates  to  the  broker  

Page 25: IoT Toolkit and the Smart Object API Tutorial Introduction

MQTT  Observer  

MQTT  Broker  

REST  Endpoint  ObservableProperty  

mqYObserver  

PUT   GET  

Publish  from  data  producer  

Publish  From  REST  API  

Publish  to  Other  Subscribers  

SUB  Publish  to  REST  API    

Subscriber    Makes  last  published  data  available  at  the  REST  endpoint  

Page 26: IoT Toolkit and the Smart Object API Tutorial Introduction

MQTT  Observer  

MQTT  Broker  

REST  Endpoint  ObservableProperty  

mqYObserver  

PUT   GET  

Publish  from  data  producer  

Publish  From  REST  API  

Publish  to  Other  Subscribers  

SUB  Publish  to  REST  API    

Pub+Sub  Repeats  data  updates  in  both  direc7ons  

Page 27: IoT Toolkit and the Smart Object API Tutorial Introduction

MQTT  Bridge  to  mul7ple  REST  endpoints  

MQTT  Broker  

REST  Endpoint  ObservableProperty  

mqYObserver  

PUT   GET  

Publish  from  data  producer  

Publish  to  Other  Subscribers  

REST  Endpoint  ObservableProperty  

mqYObserver  

PUT   GET