coap course for m2m and internet of things scenarios

Post on 28-Jan-2015

121 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

A course on CoRE-CoAP for m2m or IoT. A section on practical scenarios and another on CoAP basics. Many reference to other authors

TRANSCRIPT

Cristina Peña Alcega (@CrisisP)Carlos Ralli Ucendo (@carlosralli)

Telefónica Digital

19.12.2013

CoAP6LowPAN &Raspberry PiM2M Community

Index

DIY Scenarios & Solutions • Intro

• Scenario #1: z-wave + REST

• Scenario #2: 6LoWPAN + CoAP

I

II Behind the scenes: Constrained Application Protocol• Introduction and CoAP Architecture

• Messaging Model, Sub-layers, Reliability, Request/Response rules, and Message Format.

• Proxying and Caching

• Endpoints and URIs

• Discovery

• Multicast

• Security

• Status, advantages and limitations

• Available implementations

I. DIY Scenarios & Solutions

4M2M CommunityTelefónica Digital

01 How it all started…

Things (Devices) are getting smarter, from Class-1 to Consumer Electronics.

If a Thing is an Internet node, it’s subject of APIzation.

REST is the most successful Internet/Web API.

So we decided to start ourselves investing some 480€ to play with:

- 4 6LowPAN capable Motes (360€), 2 Raspberry PI (120€).

- Plus lots of hours of DIY “fun”!

CoRE /CoAP

5M2M CommunityTelefónica Digital

02 Is CoAP Rocket Science? No, it’s just RESTTraditional REST WEB APIs relays on HTTP-TCP-IP

CoRE/CoAP = REST APIs over UDP-IP

6M2M CommunityTelefónica Digital

03 Scenario1: Building a CoAP (IoT) Gateway

7M2M CommunityTelefónica Digital

04 Scenario1: Software Architecture

8M2M CommunityTelefónica Digital

05 Scenario1: Step 1

?

1.1) Install & compile ccoap in your laptop https://github.com/ipflavors/ccoap/tree/master/doc

9M2M CommunityTelefónica Digital

06 Scenario1: Step 2

?

1.2) Install Firefox Navigator plus Copper (CU) Plugin https://addons.mozilla.org/en-US/firefox/addon/copper-270430/

10M2M CommunityTelefónica Digital

07 Scenario1: Step 31.3) Test Firefox Copper with a CoAP server available in the Internet: coap://vs0.inf.ethz.ch:5683/

11M2M CommunityTelefónica Digital

08 Scenario1: Step 3b1.3b) GET operation (of a long resource: 5x64bytes blocks): coap://vs0.inf.ethz.ch:5683/

12M2M CommunityTelefónica Digital

09 Scenario1: Steps 4 & 5 1.4) Install z-way-server & configure z-wave devices w/ RaspberryPI. pi@raspberrypi:~$ wget -q -O - razberry.z-wave.me/install | sudo bash

To test installation: http://[IP_address]:8083

1.5) Install libcoap4.0.1 run server example in RaspberryPI. Download libcoap-4.0.1.tar.gz - http://sourceforge.net/projects/libcoap/

pi@raspberrypi:~$ tar xvzf libcoap-4.0.1.tar.gz

pi@raspberrypi:~$ cd libcoap-4.0.1

pi@raspberrypi:~$ ./configure

pi@raspberrypi:~$make

13M2M CommunityTelefónica Digital

10 Scenario1: Steps 4 & 5

1.6) Run CoAP server example in RaspberryPI.

14M2M CommunityTelefónica Digital

11 Scenario1: Step 61.6) Test against our RasPI server with Firefox Copper: coap://[2a02:9113:****:1f00:b***:****:****:***f]:5683/

15M2M CommunityTelefónica Digital

12 Scenario1: Step 6b1.6b) Discover resources of our CoAP-RasPI server with Firefox Copper: coap://[2a02:9113:****:1f00:b***:****:****:***f]:5683/

16M2M CommunityTelefónica Digital

13 Scenario1: Step 6c1.6c) GET operation (Firefox Copper): coap://[2a02:9113:****:1f00:b***:****:****:***f]:5683/

17M2M CommunityTelefónica Digital

14 Scenario1: Step 6d1.6d) OBSERVE operation (PUSH Notifications) (Firefox Copper): coap://[2a02:9113:****:1f00:b***:****:****:***f]:5683/

18M2M CommunityTelefónica Digital

15 Scenario1: Step 7

1.7) Modify server example to create CoAP resources based on z-wave dev:

- Follow IPSO Alliance Recs:http://www.ipso-alliance.org/wp-content/media/draft-ipso-app-framework-04.pdf

19M2M CommunityTelefónica Digital

16 Scenario1: Implementing all this in FI-WAREWe are updating some FI-WARE IoT Ges to support this:

- “FIGWAY” SW to export CoAP resources too.

https://github.com/telefonicaid/fiware-raspberryPI-M2M-Gateway

20M2M CommunityTelefónica Digital

17 Scenario1: A nice Project out there

?

WEBIPOI – Exports RasPI GPIO (wired) devices (CoRE & REST) http://code.google.com/p/webiopi/wiki/INTRODUCTION

21M2M CommunityTelefónica Digital

18 Scenario2: CoAP (6LowPAN) Devices!

?

…Two (or more) Contiki-supported motes

“Nooliberry” -> 6LowPAN RasPI GPIO card

Your laptop - MACOSX, Linux, Windows…

Install Instant-Contiki VM in your Laptop

App coding:- Device: expose REST Resources over CoAP- Client: consume REST Resources (CoAP or HTTP)Web development as usual! Examples:

http://www.contiki-os.org/hardware.html http://www.advanticsys.com/ http://www.zolertia.com http://www.libelium.com (own Stack / OS)

http://www.contiki-os.org/start.html

https://github.com/contiki-os/contiki/blob/master/examples/rest-example/coap-client-server-example.csc

22M2M CommunityTelefónica Digital

19 Scenario2: How it looks like?

23M2M CommunityTelefónica Digital

20 Scenario2: Who’re already on board?

“Talking at CES today, Cerf described his home's sensor network, which uses IPv6 radios and the Arch Rock PhyNet smart grid system to track information like light levels, temperature, and humidity. This is important for a wine cellar…”

II. Constrained Application Protocol

25M2M CommunityTelefónica Digital

CoAP is an application layer protocol that enables web services for even the most constrained devices and networks, while integrating with the web

architecture and HTTP.

802.15.4

6LoWPAN

UDP

CoAP

Resources

Sensor

Contiki, Tiny OS, … 8-bit microcontrollers Aprox. 100KB of RAM for code,

heap, data… No filesystem

Proxy Server Client

CoAP

CoAP HTTP HTTP

Constrained Enviroments Low-power Lossy, high packet error rates Low thtoughpunt of 10s of kbps

Internet

01 CoAP: Constrained Application Protocol

26M2M CommunityTelefónica Digital

CoAP: Designed for M2M

• CoAP implements the REST architectural style: can be transparently mapped to HTTP

• CoAP goes beyond HTTP providing: Very low over-head, avoids the need of IPv6 fragmentation Built-in discovery of services and resources Multicast support Asynchronous messages exchanges Native push notification

02

27M2M CommunityTelefónica Digital

CoAP: The Web Architecture vs CoAP Architecture

The interaction model of CoAP is similar to the client/server model of the Web. However, M2M interactions typically result in a CoAP

implementation acting in both client and server roles.

02

28M2M CommunityTelefónica Digital

CoAP: Messaging Model

• Short fixed-length binary header (4bytes)• Messages must fit in a single IP datagram

Default IP: 1280bytes, 6LoWPAN and IEEE802.15.4 127bytes

• Messages can be confirmable (CON) or non confirmable (NON).• Naturally runs over UDP and supports :

multicast IP destination addresses DTLS security

• Piggy-backed REST request/response The response to a CON message is carried in the ACK

• Request methods: GET, PUT, POST, and DELETE almost as in HTTP.

• Response methods: 2.xx (success), 4.xx (client error), 5.xx (server error).

03

29M2M CommunityTelefónica Digital

CoAP: Sub-layers

Source: Matthias Kovatsch

04

30M2M CommunityTelefónica Digital

CoAP: Unreliable Transmission

• Tipically, repeated readings from a sensor• If server lacks context to answer the request, sends Reset (RST)• Client can send the same mesage several times to ensure it

reaches the server

05

31M2M CommunityTelefónica Digital

CoAP: Observing resources without reliability

Source: Klaus Hartke

06

32M2M CommunityTelefónica Digital

CoAP: Reliable Transmission

• Normally bounded to non-reliable transport protocols, CoAP implements a lightweight reliability mechanism based on: Stop&wait retransmisssion for CON Duplicated detection for CON and NON

07

33M2M CommunityTelefónica Digital

CoAP: Observing resources with reliability

Source: Klaus Hartke

08

34M2M CommunityTelefónica Digital

CoAP: Request/Response Rules

Source: http://www.coapsharp.com

09

35M2M CommunityTelefónica Digital

CoAP: Message Format

Source: Matthias Kovatsch

10

36M2M CommunityTelefónica Digital

CoAP: Proxying and Caching

• CoAP supports caching Cacheability determined by response code An option number mask determines if it is a cache key. Max-age option indicates cache lifetime Validity checked using the Etag Option

• Caching can be at endpoint or intermediary (proxy).

• Proxy can be used to Improve performance (reduce network load) Access sleeping nodes Security reasons

• Very easy mapping CoAP (Cross-protocol-proxy)HTTP

11

37M2M CommunityTelefónica Digital

CoAP: Proxying and Caching12

38M2M CommunityTelefónica Digital

CoAP: Endpoints and URIs

• A CoAP endpoint is a source or destination of a message.• URI representations for resources:

coap-URI = "coap:" "//" <HOST> [ ":" <PORT> ] <PATH> [ "?" <QUERY> ] coaps-URI = "coaps:" "//" <HOST> [ ":" <PORT> ] <PATH> [ "?" <QUERY> ]

• HOST can be an IP address or a registered name. • PORT where CoAP server is located (default CoAP port: 5683)• Example: coap://example.com:436/sensors/temp?min=10

Host: example.com Port: 436 Path: sensors/temp Query: min=10

13

39M2M CommunityTelefónica Digital

1. Discovering the servers: If unknown, the client has to learn HOST server

2. Discovering the resources The client queries the well known URI of the server on port 5683 The server returns the list of resources in CoRE Link Format

3. Both steps can be merged, querying the well known URI of “all CoAP nodes” using multicast address FF0X:0:0:0:0:0:0:C0A7

4. Resource Directories can be used

Related spec:• RFC 5785 defines the a path prefix for "well-known locations“• RFC 5988 defines the types of web links and a registry for them• RFC 6690 defines a link format for user Web Link in CORE.

CoAP: Service and Resource Discovery

GET /.well-known/core

<sensors/temp>;sz=512;title=Temperature Sensor;ct=50,<actuators/jack>;sz=256;title=Hydraulic Jacks;ct=50

14

40M2M CommunityTelefónica Digital

• CoAP supports making requests to IP multicast groups in NON

• Leisure time• CoAP does not support yet the use of multicast with security

CoAP: RESTful Group Communication15

41M2M CommunityTelefónica Digital

CoAP: Security

• CoAP is secured using Datagram TLS (RFC6347) over UDP.• The endpoint initiates session to the server and, after the DTLS

handshake, it can send the 1st CoAP request.• All CoAP messages are sent as DTLS “application data”.• DTLS adds a limited per-datagram overhead of aprox 13 bytes.• Security info (e.g. keys, ACLs) must be provided during the

provisioning of the device. • The device can be in 1 of 4 security modes:

NoSec: DTLS is disabled. Can be combined with alternative security (e.g. IPSEC)

PreSharedKey: DTLS enabled, preshared keys authenticate peers or groups of peers.

RawPublicKey: DTLS enabled, asymmetric keys without certificate. Certificate: DTLS enabled, asymmetric keys with x.509 certificate.

• DTLS is not appropriate to group keying (multicast).

16

42M2M CommunityTelefónica Digital

CoAP: Status, Advantages and Limitations

• Proposed standard since July, 2013: draft-ietf-core-coap-18.

• Advantages: Designed for M2M, IoT Easily mapped to HTTP, compatible with Proxy infrastructures. Easy to map legacy protocols to CoAP Extensions: push notifications, discovery and Multicast.

• Limitations and work in progress: End to end secure connection required for CoAP/HTTP mapping at a

proxy using DTLS/TLS. Securing multicast communications. Semantics should be standardized. Caching of requests should also be allowed

17

43M2M CommunityTelefónica Digital

CoAP: available implementations

• Implementations Contiki-2.6: Erbium http://www.contiki-os.org/ C: libcoap http://sourceforge.net/projects/libcoap/develop .NET (C#): CoAPSharp http://www.coapsharp.com/ Python: http://sourceforge.net/projects/coapy JAVA: Californium https://github.com/mkovatsc/Californium Firefox JavaScript browser plugin: Copper

https://github.com/mkovatsc/Copper, https://addons.mozilla.org/de/firefox/addon/copper-270430/

• Proxies: Squid 3.1.9 with transparent HTTP-CoAP mapping module

http://telecom.dei.unipd.it/pages/read/90/ jcoap Proxy http://code.google.com/p/jcoap/ Californium cf-proxy https://github.com/mkovatsc/Californium

• Updated List: http://en.wikipedia.org/wiki/Constrained_Application_Protocol#Implementations

18

top related