Date post: | 18-Jan-2015 |
Category: |
Technology |
Upload: | matteo-collina |
View: | 8,091 times |
Download: | 6 times |
@matteocollinamatteocollina.com
Better Software - Florence 2012/09/26
Making things that work with us!
Smartphones are changing the world
How many people will own a smartphone by 2014
1.000.000.000
Did you see it coming
http://www.flickr.com/photos/12738000@N00/360231193/
Stevedid.
http://www.flickr.com/photos/noppyfoto/6216399465/
Thanks.
http://www.flickr.com/photos/noppyfoto/6216399465/
They didn’t!
...
What's next(hint: it's a big number)
50.000.000.000
1.000.000.000
50.000.000.000
"Things"
50.000.000.000interconnected
"things"by
2020
http://www.flickr.com/photos/adactio/2337914481
Social Web Of Things Video
http://www.youtube.com/watch?v=i5AuzQXBsG4
Let's experiment
http://www.flickr.com/photos/jurvetson/2798315677
Monitor my housetemperature
Goal:
I want to chat with my house
>: hi househi matteo
>: what's the temperature?36
>: 4 8 15 16 23 42
If you don’t understand this, you are not a geek!
Hubot © 2012 GitHub Inc. All rights
Enter Hubot
Hubot © 2012 GitHub Inc. All rights
A programmable robotthat is controlled through chat
We can supercharge our house with hubot
module.exports = (robot) ->
robot.respond /what’s the temperature?/i, (msg) -> msg.http("http://mchouse.it/temperature") .header("Accept", "application/json") .get() (err, res, body) -> msg.send JSON.parse(body)
We can supercharge our house with hubot
How
In order to ask our temp to hubot, we need to:
1. sense the temp2. get the temp on the web3. build a web API
From Hubot, I want to do the equivalent of:
>: curl http://mchouse.it/temp
What about JSON
We are building an API
In Italy,“API” means
“bees”http://www.flickr.com/photos/theseanster93/4056815767
What do we need to sense my house temperature
Arduino is an open source microcontroller, that you can use to hack things
http://www.flickr.com/photos/mattrichardson/5029708468/
TMP36
TMP36
We add a sensor to an Arduino
TMP36
We add an ethernet shield to connect to the Internet
http://www.flickr.com/photos/snootlab/6052465980/
What protocol do we use to push our temperature
to our API?
HTTP POST
http://www.flickr.com/photos/clearlyambiguous/48185613/
HTTP is slow and safe
We need a fast, binary protocol
http://www.flickr.com/photos/grrphoto/305649629
likes binary
What if we need to interconnect our things?
To build a social web of things we need to react to events.
We need a publish/subscribe pattern.
HTTP
Devices need:• binary protocol
• publish/subscribe
Binary vs REST“Things” should interact with our lives, and all the technology should be built to make them easy to use.
M2M protocols are ad-hoc, and researchers and businesses focus on low level problems.
• binary protocol
• publish/subscribe
• topics as the naming system
• royalty free
• open source implementations
• devices exposed to the web
• REST architecture
• URIs as the naming system
• syndication
MQTT is the state of art protocol for the Internet of Things
Mosquitto
Really Small Message Broker
• the base element of the protocol is a topic
• devices and other systems can publish or subscribe to topics
How to use
on
Step 1: download PubSubClient, the library for
on Arduino: Setup
String server = String("qest.me");
PubSubClient client = PubSubClient(server, 1883, callback);
if (!client.connected()) { client.connect("arduino");}client.loop();
char s[10];itoa(get_temperature(), s, 10);client.publish("temp", s);
on Arduino: publishing
if (!client.connected()) { client.connect("arduino");}client.loop();
char s[10];itoa(get_temperature(), s, 10);client.publish("temp", s);
on Arduino: publishing
This is called a topic, and it is where we publish
things on MQTT.
speaks
, Hubot speak HTTP
speaks
, Hubot speak HTTP
Communication
QESTDiscover
qest.me
• MQTT broker
• REST interface
• HTTP semantics
• no QoS
• built in node.js
• crafted by me
QEST
REST Server
Redis
MQTT Server
QEST
Data Layer
HTTP Clients MQTT Clients
QEST• retains every message received
: MQTT to REST
curl -H "Accept: txt" \ http://qest.me/topics/temp
client.publish("temp", "30");
• every topic has its own URI: /topics/<NAME>
QEST• transform every HTTP PUT received to a
MQTT message
: REST to MQTT
void callback(char* topic, byte* payload, int length) { ...}PubSubClient(server, 1883, callback);client.subscribe("temp");
curl -X PUT -d '{ "housetemp": 42 }' \-H "Content-Type: application/json" \http://qest.me/topics/temp
• devices can listen directly to MQTT topics
Web App
DeviceSC
LS
DA
AR
EF
GN
D
IOR
EF
RE
SE
T3V
3P
WM
PW
MP
WM
L
TXRX ON
ICSP
PW
MP
WM
PW
M TX RX
31
21
11
01
9 8DIGITAL
7 6 5 4 3 2 1 0
1
5V GndPOWER
www.arduino.cc
ANALOG INVin 0 1 2 3 4 5
Arduino UNO
IoTBroker
QEST
state-of-artapproach to IoT apps
QEST-basedsolution to IoT apps
Bridge
Web App
DeviceSC
LS
DA
AR
EF
GN
D
IOR
EF
RE
SE
T3V
3P
WM
PW
MP
WM
L
TXRX ON
ICSP
PW
MP
WM
PW
M TX RX
31
21
11
01
9 8DIGITAL
7 6 5 4 3 2 1 0
1
5V GndPOWER
www.arduino.cc
ANALOG INVin 0 1 2 3 4 5
Arduino UNO
QEST : Scalability
Redis
HTTP/MQTT Clients
REST Server MQTT Server
QESTData Layer
...
Load Balancer
REST Server MQTT Server
QESTData Layer
JavaScript Apps are often a mess
We mix logic with presentation with persistance.
Is QEST different?http://www.flickr.com/photos/mpirotta/4944504834
Do you like Spaghetti Code?
Built BDD-style, with Cucumber-js and mocha
Continuous Integration based on Travis-CI
Written in CoffeeScript
Patches are welcome!
http://www.flickr.com/photos/mpirotta/4944504834
QEST:
http://www.flickr.com/photos/oneaustin/1261907803
Let’s ask something to my house!
Hubot © 2012 GitHub Inc. All rights
Hubot Integrationmodule.exports = (robot) ->
robot.respond /qest check ([a-z0-9A-Z]+)/i, (msg) -> topic = msg.match[1] if topic? msg.http("http://qest.me/topics/#{topic}") .header("Accept", "application/json") .get() (err, res, body) -> msg.send JSON.parse(body) else msg.send "No topic specified"
• What devices can a user monitor?
• What devices can 'listen' to the state of other devices?
• Who can access the devices state?
• Is the communication secure?
Security Issues
We need to interconnect UsersSocial profiles tothe Devices!
We need OAuthfor Devices!
I’m working on
it!!
QESTtry
qest.me
TL;DR• The Internet of Things
will be big
• Devices need binary and pub/sub protocols
• Devs need HTTP API
• QEST does both
Matteo Collina
Software Engineer
Ph.D. Student
@matteocollina matteocollina.com
www.mavigex.comwww.wemobi.it
Credits• Font Awesome for the
Icons.
• Flickr for LOTS of CC images :).
• Balsamiq Mockup for the iPhone Mockup
Thank You!
http://www.flickr.com/photos/alexindigo/1606826416
Any Questions?