Institut Mines-Télécom
L’internet des objets dans la ville
Laurent TOUTAIN, Alexander PELOV Associate Professors, IMT/Télécom Bretagne
Institut Mines-Télécom
Provider oriented
3
Object LP-‐WAN Network Internet cloud
Object oriented
ObjectLP-‐WAN Network Internet cloud
semtech LoRaWAN
ObjectLP-‐WAN Network Internet cloud
Object & Provider oriented
Institut Mines-Télécom
LP-WAN is a key player
4
Source: Idate and http://iotbusinessnews.com/2013/09/18/27009-‐idate-‐forecasts-‐80-‐billion-‐things-‐connected-‐in-‐2020/
1€/year/object up to 20 years
Institut Mines-Télécom
Spectrum - ISM bands
6
2.4 GHz 2.5 GHzWi-‐Fi -‐ Bluetooth
500mW
25mW
863.0 865.6
25
868.0 868.6 869.4 869.65
0.1% 1%
10%
Institut Mines-Télécom
Coding
7
Ultra Narrow Band
Spread Spectrum
300 bit/s 12 Byte/msg 140 msg/day uplink
Noise
250 bit/s -‐ 5 kbit/s 50 bytes -‐ 230 bytes
bi-‐directional
A revolution in the making
• The Good
– Low-Power (link, device, antenna) – Low-Cost
• 8000 antennas to cover France – ISM – license-free
• Private networks
11
• The Bad – Low-‐Rate (100 bps – 200 kbps) – Very-‐high density (100k devices /
antenna) – ISM
• Interference • Duty cycle (1% or 10%), including
antennas
• The Ugly – Several competing technologies, proprietary, non-‐networking oriented
approaches – Vertical (silo) architectures – No IP / Interconnection / …. – Appendage to current networks
12
Volume• The Ugly
– Several competing technologies, proprietary, non-‐networking oriented approaches
– Vertical (silo) architectures – No IP / Interconnection / …. – Appendage to current networks
The triangle of death
Velocity
Variety
The Ugly
Dpt/Auteur13
Internet
End to end principle: • Gateway are invisible to application • Naming is uniform
L2 independence: • Evolution, universality • Abstract L2 characteristics
Cost reduction: • Interconnection • services deployment • Management:
• Objects • Networks
Durability
Internet has been designed over an unlimited bandwidth model.
Dpt/Auteur17
Caching
GET /temp GET /temp
{“temp”: 25}
{“temp”: 25}
{“temp”: 10} observe
IPv4/TCP/HTTP IPv6/UDP/CoAP
generic cache
Physical
Link
Network
Transport
Application
Network-centric perspective on IoT
Steve Deering’s hourglass showing the “waist” of the Internet
The Evolution of Layered Protocol Stacks Leads to an Hourglass-Shaped Architecture – Saamer Akhshabi, Constantine Dovrolis, Sigcomm 2011
IoT building blocks
• CoAP – Efficient transport and semantics • CBOR – Efficient data representation • CoOL – Efficient device / network
management • DTLS, COSE – Efficient security • EAP, OAuth – Efficient AAA
23
Institut Mines-Télécom
CoAP vs HTTP
25
Layer 2
IPv640 Bytes
TCP20 Bytes
HTTP header
Variable Line oriented
6LoWPAN~20 Bytes
UDP8 Bytes
CoAP4+ Bytes
Layer 2
Transport
Messages
Institut Mines-Télécom
Message header
26
type
00: CONfirmable 01: NON confirmable 10: ACK 11: RESET
token size
Token: can be seen as a connection in TCP
code
code codee
name
0.1 1 GET0.2 2 POST0.3 3 PUT0.4 4 DELETE0.5 5 PATCH0.6 6 iPATCH0.7 7 FETCH
code codee
name
2.01 Created (PUT, POST)
2.02 Deleted (DELETE)
2.03 Valid (caching)
2.04 Changed (PUT, POST)
2.05 Content (GET)
code codee name
4.00 Bad Request4.01 Unauthorized4.02 Bad Option4.03 Forbidden4.04 Not Found4.05 Method Not Allowed4.06 Not Acceptable4.12 Precondition Failed4.13 Request Entity Too Large4.15 Unsupported Content-‐Format5.01 Not Implemented5.02 Bad Gateway5.03 Service Unavailable5.04 Gateway Timeout5.05 Proxying Not Supported
message ID
Token
01version
XX class detail
Options
0xFF Data
Institut Mines-Télécom
Simple transmission
27
/light
CON 0xbeef GET /light
ACK 0xbeef 2.05 1
CON 0xbef0 POST /light 0
CON 0xbef0 POST /light 1
ACK 0xbef0 2.04
MAX_TIMEOUT *
RANDOM_FACTOR
2 * MAX_TIMEOUT *
RANDOM_FACTOR
MAX_TIMEOUT *
RANDOM_FACTOR
+-------------------+---------------+ | name | default value | +-------------------+---------------+ | ACK_TIMEOUT | 2 seconds | | ACK_RANDOM_FACTOR | 1.5 | | MAX_RETRANSMIT | 4 | +-------------------+---------------+
Institut Mines-Télécom
Message header
28
type token size
Token: can be seen as a connection in TCP
code message ID
Token
01version
XX class detail
Options
0xFF Data
Size varies from 0 (no Token) to 15 bytes
link queries and answers
Institut Mines-Télécom
Token usage
29
/co2
CON 0xbeef Token 0xBADDCAFE GET /CO2
ACK 0xbeef 0.00CON 0xfood Token 0xBADDCAFE 2.05 102
ACK 0xfood 0.00
Institut Mines-Télécom
Message headertype token size code message ID
Token
01version
XX class detail
Options
0xFF Data
∆T L V
difference from the previous type reduce the size, order the list
if ∆T > 12 one byte with (length-‐13) is inserted after Length field if ∆T > 269 two bytes (length -‐ 269) are inserted after the Length field
Length of the Value field if ∆T > 12 one byte with (length-‐13) is inserted after Length field if ∆T > 269 two bytes (length -‐ 269) are inserted after the Lth field
Types
C
Critical (1) : Error 2.04 in response to CON otherwise discard Elective (0) : silently ignored
UNoCacheKey
Institut Mines-Télécom
How to measure CH4 level
31
/CH4
CON 0xbeef Token 0xBADDCAFE GET /CH4
ACK 0xbeef Token 0xBADDCAFE 2.05 2
CON 0xbef0 GET /CH4
ACK 0xbef0 2.05 3
Institut Mines-Télécom
Observe [RFC 7641]
32
/CH4
CON 0xbeef Token 0xACCE55 GET Observe /CH4
ACK 0xbeef Token 0xACCE55 2.05 Observe 1 2
NON 0xbaba Token 0xACCE55 2.05 Observe 2 3
NON 0xbabe Token 0xACCE55 2.05 Observe 3 5
NON 0xbead Token 0xACCE55 2.05 Observe 4 3
CON 0xbead Token 0xACCE55 GET Observe 1 /CH4
ACK 0xbead Token 0xACCE55 2.05 3.5stop observe
Institut Mines-Télécom
Observe [RFC 7641]
33
/CH4
CON 0xbeef Token 0xACCE55 GET Observe /CH4?limit=4
ACK 0xbeef Token 0xACCE55 2.05 Observe 1 2
NON 0xface Token 0xACCE55 2.05 Observe 2 4
Institut Mines-Télécom
Uniform Resource Identifier (RFC 3986)
34
http s.exa.com:8080/ / ? & #1200
authority path
b 3
0 6
query fragment
uri-‐path 47
05
uri-‐query
log access from=09coap to=10://
scheme
GET
GET 0xb3 log 0x06 access 0x47 from=09 0x05 to=10
With Observe ? GET 0x60 0x53 log 0x06 access 0x47 from=09 0x05 to=10
Institut Mines-Télécom
Types
36
plain text
25
no structure
XML<?xml version="1.0" encoding="UTF-8"?> <query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2016-02-10T09:51:12Z" yahoo:lang="en-US"> <results> <channel> <title>Yahoo! Weather - Nome, AK</title> <link>http://us.rd.yahoo.com/dailynews/rss/weather/Nome__AK/*http://weather.yahoo.com/forecast/USAK0170_f.html</link> <description>Yahoo! Weather for Nome, AK</description> <language>en-us</language> <lastBuildDate>Tue, 09 Feb 2016 11:52 pm AKST</lastBuildDate> <ttl>60</ttl> <yweather:location xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" city="Nome" country="United States" region="AK"/> <yweather:units xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" distance="mi" pressure="in" speed="mph" temperature="F"/> <yweather:wind xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" chill="10" direction="360" speed="6"/> <yweather:atmosphere xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" humidity="81" pressure="30.02" rising="2" visibility="10"/> <yweather:astronomy xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" sunrise="10:19 am" sunset="6:15 pm"/> <image> <title>Yahoo! Weather</title> <width>142</width> <height>18</height> <link>http://weather.yahoo.com</link> <url>http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif</url> </image> <item> <title>Conditions for Nome, AK at 11:52 pm AKST</title> <geo:lat xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">64.5</geo:lat> <geo:long xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">-165.41</geo:long> <link>http://us.rd.yahoo.com/dailynews/rss/weather/Nome__AK/*http://weather.yahoo.com/forecast/USAK0170_f.html</link> <pubDate>Tue, 09 Feb 2016 11:52 pm AKST</pubDate> <yweather:condition xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="33" date="Tue, 09 Feb 2016 11:52 pm AKST" temp="18" text="Fair"/> <description><![CDATA[ <img src="http://l.yimg.com/a/i/us/we/52/33.gif"/><br /> <b>Current Conditions:</b><br /> Fair, 18 F<BR /> <BR /><b>Forecast:</b><BR /> Tue - Clear. High: 30 Low: 17<br /> Wed - Sunny. High: 23 Low: 9<br /> Thu - Partly Cloudy. High: 12 Low: 2<br /> Fri - Sunny. High: 6 Low: 1<br /> Sat - Mostly Cloudy. High: 18 Low: 13<br /> <br /> <a href="http://us.rd.yahoo.com/dailynews/rss/weather/Nome__AK/*http://weather.yahoo.com/forecast/USAK0170_f.html">Full Forecast at Yahoo! Weather</a><BR/><BR/> (provided by <a href="http://www.weather.com" >The Weather Channel</a>)<br/> ]]></description> <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="31" date="9 Feb 2016" day="Tue" high="30" low="17" text="Clear"/> <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="32" date="10 Feb 2016" day="Wed" high="23" low="9" text="Sunny"/> <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="30" date="11 Feb 2016" day="Thu" high="12" low="2" text="Partly Cloudy"/> <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="32" date="12 Feb 2016" day="Fri" high="6" low="1" text="Sunny"/> <yweather:forecast xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" code="28" date="13 Feb 2016" day="Sat" high="18" low="13" text="Mostly Cloudy"/> <guid isPermaLink="false">USAK0170_2016_02_13_7_00_AKST</guid> </item> </channel> </results> </query>
Structured verbose
JSON{ "query": { "count": 1, "created": "2016-02-10T09:52:50Z", "lang": "en-US", "results": { "channel": { "title": "Yahoo! Weather - Nome, AK", "link": "http://us.rd.yahoo.com/dailynews/rss/weather/Nome__AK/*http://weather.yahoo.com/forecast/USAK0170_f.html", "description": "Yahoo! Weather for Nome, AK", "language": "en-us", "lastBuildDate": "Tue, 09 Feb 2016 11:52 pm AKST", "ttl": "60", "location": { "city": "Nome", "country": "United States", "region": "AK" }, "units": { "distance": "mi", "pressure": "in", "speed": "mph", "temperature": "F" }, "wind": { "chill": "10", "direction": "360", "speed": "6" }, "atmosphere": { "humidity": "81", "pressure": "30.02", "rising": "2", "visibility": "10" }, "astronomy": { "sunrise": "10:19 am", "sunset": "6:15 pm" }, "image": { "title": "Yahoo! Weather", "width": "142", "height": "18", "link": "http://weather.yahoo.com", "url": "http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif" }, "item": { "title": "Conditions for Nome, AK at 11:52 pm AKST", "lat": "64.5", "long": "-165.41", "link": "http://us.rd.yahoo.com/dailynews/rss/weather/Nome__AK/*http://weather.yahoo.com/forecast/USAK0170_f.html", "pubDate": "Tue, 09 Feb 2016 11:52 pm AKST", "condition": { "code": "33", "date": "Tue, 09 Feb 2016 11:52 pm AKST", "temp": "18", "text": "Fair" }, "description": "\n<img src=\"http://l.yimg.com/a/i/us/we/52/33.gif\"/><br />\n<b>Current Conditions:</b><br />\nFair, 18 F<BR />\n<BR /><b>Forecast:</b><BR />\nTue - Clear. High: 30 Low: 17<br />\nWed - Sunny. High: 23 Low: 9<br />\nThu - Partly Cloudy. High: 12 Low: 2<br />\nFri - Sunny. High: 6 Low: 1<br />\nSat - Mostly Cloudy. High: 18 Low: 13<br />\n<br />\n<a href=\"http://us.rd.yahoo.com/dailynews/rss/weather/Nome__AK/*http://weather.yahoo.com/forecast/USAK0170_f.html\">Full Forecast at Yahoo! Weather</a><BR/><BR/>\n(provided by <a href=\"http://www.weather.com\" >The Weather Channel</a>)<br/>\n", "forecast": [ { "code": "31", "date": "9 Feb 2016", "day": "Tue", "high": "30", "low": "17", "text": "Clear" }, { "code": "32", "date": "10 Feb 2016", "day": "Wed", "high": "23", "low": "9", "text": "Sunny" }, { "code": "30", "date": "11 Feb 2016", "day": "Thu", "high": "12", "low": "2", "text": "Partly Cloudy" }, { "code": "32", "date": "12 Feb 2016", "day": "Fri", "high": "6", "low": "1", "text": "Sunny" }, { "code": "28", "date": "13 Feb 2016", "day": "Sat",
Structured less verbose
Institut Mines-Télécom
JSON (RFC 7159)
37
Object NotationJavaScript
Simple to parse and portable across web browsersValue : false null true Number : 12 3.1415 1e14 String : "Hello"
Array : [ 1, 2, -3, 4 ]
Object : { “lastname” : “Solo”, “firstname” : “Ben”, “pseudo” : “Kylo Ren”, “episode” : 7 }
Note: Key is a string unique in the object
Institut Mines-Télécom
JSON Example { "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor", "Thumbnail": { "Url": "http://www.example.com/image/481989943", "Height": 125, "Width": 100 }, "Animated" : false, "IDs": [116, 943, 234, 38793] } }
38
[ { "precision": "zip", "Latitude": 37.7668, "Longitude": -122.3959, "Address": "", "City": "SAN FRANCISCO", "State": "CA", "Zip": "94107", "Country": "US" }, { "precision": "zip", "Latitude": 37.371991, "Longitude": -122.026020, "Address": "", "City": "SUNNYVALE", "State": "CA", "Zip": "94085", "Country": "US" } ]
How many characters to code this number?
Institut Mines-Télécom
CBOR: Constrained Binary Object Representation [RFC7049]
39
Major V1 (V2)
3 bits 5 bits n Bytes
0 : Positive Integer
if (value <= 23) V1 = Value ; no V2 else if value is uint8_t then V1=24; V2 = value if value is uint16_t then V1=25; V2 = value if value is uint32_t then V1=26; V2 = value if value is uint64_t then V1=27; V2 = value
1 : Negative Integer
value = |value|; value--;
if (value <= 23) V1 = Value ; no V2 else if value is uint8_t then V1=24; V2 = value if value is uint16_t then V1=25; V2 = value if value is uint32_t then V1=26; V2 = value if value is uint64_t then V1=27; V2 = value
00 => 01 => … 22 => 23 => 24 =>
345 =>
-12 =>
-256 =>
000 00000 => 0x00
000 00001 => 0x01
000 10110 => 0x16
000 10111 => 0x17000 10000 => 0x18 0x18000 10001 => 0x19 0x0159
001 01011 => 0x4B
001 10001 => 0x88 0xFF
Institut Mines-Télécom
CBOR: Constrained Binary Object Representation [RFC7049]
40
Major V1 (V2)
3 bits 5 bits n Bytes
0 : Positive Integer1 : Negative Integer
2 : Byte string3 : Text string
3 5 To be
<= 23
3 24 To be, or not to be, that is the question:Whether 'tis Nobler in the mind to sufferThe Slings and Arrows of outrageous Fortune,130
3 25To be, or not to be, that is the question: Whether 'tis Nobler in the mind to suffer The Slings and Arrows of outrageous Fortune, Or to take Arms against a Sea of troubles, And by opposing end them: to die, to sleep No more; and by a sleep, to say we end The Heart ache, and the thousand Natural shocks That Flesh is heir to? 'Tis a consummation Devoutly to be wished. To die, to sleep, To sleep, perchance to Dream; aye, there's the rub, For in that sleep of death, what dreams may come, When we have shufPled off this mortal coil, Must give us pause. There's the respect That makes Calamity of so long life: For who would bear the Whips and Scorns of time, The Oppressor's wrong, the proud man's Contumely, [F: poor] The pangs of despised Love, the Law’s delay, [F: disprized] The insolence of OfPice, and the Spurns That patient merit of the unworthy takes, When he himself might his Quietus make With a bare Bodkin? Who would Fardels bear, [F: these Fardels] To grunt and sweat under a weary life, But that the dread of something after
death, The undiscovered Country, from whose bourn No Traveller returns, Puzzles the will, And makes us rather bear those ills we have, Than Ply to others that we know not of. Thus Conscience does make Cowards of us all, And thus the Native hue of Resolution Is sicklied o'er, with the pale cast of Thought, And enterprises of great pitch and moment, [F: pith] With this regard their Currents turn awry, [F: away] And lose the name of Action. Soft you now,
The fair Ophelia? Nymph, in thy Orison Be all my sins remembered.
1568
Institut Mines-Télécom
CBOR: Constrained Binary Object Representation [RFC7049]
41
Major V1 (V2)
3 bits 5 bits n Bytes
0 : Positive Integer1 : Negative Integer
2 : Byte string3 : Text string4 : Array
4 4
<= 23
Array : [ 1, 2, -3, 4 ]
01
02
22
04
if more than 23 items : next byte gives length
17 Bytes, can be compress to 10 Bytes
5 Bytes
Institut Mines-Télécom
CBOR: Constrained Binary Object Representation [RFC7049]
42
Major V1 (V2)
3 bits 5 bits n Bytes
0 : Positive Integer1 : Negative Integer
2 : Byte string3 : Text string4 : Array5 : Object list
5 4
<= 23
Object : { “lastname” : “Solo”, “firstname” : “Ben”, “pseudo” : “Kylo Ren”, “episode” : 7 }
3 8 lastname 3 4 Solo
3 9 firstname 3 3 Ben
3 6 pseudo 3 8 Kylo Ren
3 7 episode 0 7
Institut Mines-Télécom
CBOR: Constrained Binary Object Representation [RFC7049]
43
Major V1 (V2)
3 bits 5 bits n Bytes
0 : Positive Integer1 : Negative Integer
2 : Byte string3 : Text string4 : Array5 : Object list6 : Optional semantic tagging
0 Text string Standard date/time (RFC 4287) 1 multiple Epoch-‐based date/time2 Byte string big positive Integer3 Byte string big negative integer4 Array decimal fraction5 Array big float21 multiple convertion to base64url22 multiple conversion to base6423 multiple conversion to base1624 Byte string embedded CBOR 32 Text string URI33 Text string base64url34 Text string base6435 Text string regular expression36 Text string MIME message55799 multiple self describing CBOR (magic value)
Institut Mines-Télécom
CBOR: Constrained Binary Object Representation [RFC7049]
44
Major V1 (V2)
3 bits 5 bits n Bytes
0 : Positive Integer1 : Negative Integer
2 : Byte string3 : Text string4 : Array5 : Object list6 : Optional semantic tagging7 : Simple value and float
CoOL[draft-veillette-core-cool]
• From operator-grade management for networks • NETCONF/SMIv2, RESTCONF/YANG
– Used for SDNs (e.g. OpenDaylight/OpenFlow)
• To operator-grade management for IoT – CoOL: Constrained Objects’ Language
• CoAP-based RESTCONF
• YANG data modeling language – What parameters does a device poses ? What are the valid values? How are they
queried, modified? – JSON/XML/…
46
Managing devices with CoOLConstrained Non-constrained
HTTPCoAP
RESTCONF+YANG
/ietf-interfaces:interfaces/interface/ietf-ip:ipv4 Bulk
operations, Transactions,
…
32 bit ID
CoOL+YANG
NMS
CoOL - CoRE - 6/11/2015 - A. Pelov ([email protected])
CoOL
• Perform on a single resource (e.g. GET /cool) – “Fields” option contains the list of nodes selected,
encoded using a CBOR array
REQ: GET /cool Fields([14337, 18, 19]) RES: 2.05 Content (Content-Format: application/cbor) { 14337: 57, 18 : 76, 19 : 837 }
Unqualified
Qualified
CBOR
CBOR
Users: » build an open network » facilitate IoT new
usages » Develop programming
environments
Experimentation
Long Range Radio + FabLab Lo Ra Fab
ian» Partners :
» New traffics » Manage access to ISM
band » Develop Internet based
architecture » Prepare 5G for IoT
Institut Mines-Télécom
Prototyping with Arduino
53
Cortex M3
Semtech
Built-in antenna
Arduino
53
dzeta.t.eu.org
/NO2/lum
JSON tunnel over UDP
Full control over radio (~ raw socket)
Long-‐Range Radio IEEE 802.15.4 framing
HTTPS Tunnel
JSON tunnel over UDP
Full control over radio (~ raw socket)
Long-‐Range Radio IEEE 802.15.4 framing
Internet
HTTPS Tunnel
JSON tunnel over UDP
Full control over radio (~ raw socket)
Long-‐Range Radio IEEE 802.15.4 framing
Signaling protocol
POST /g
POST /n
POST /a
● IETF CoAP ● Authentication ● Key management
● Radio management
● OTA ● …
Institut Mines-Télécom
LoRa Fabian outcomes
• Teaching à Télécom Bretagne and other universities: • Student projects • Research projects • Rescom Summer school
• Maison Mix • FabLab workshops
• Standardisation • Startup
67
Next Steps
• Official mailing list – 150 subscribers (cisco, huawei, …)
• April 2016: barbof – Gap analysis – Requirements
• July 2016 : bof for working group creation – Charter, Area, chairs,…
68