SlideShare a Scribd company logo
Integrazione del servizio Thingspeak
Integrazione del servizio Thingspeak
Mobile And Cyber-physical Systems
Augusto Ciuffoletti
12 marzo 2018
Integrazione del servizio Thingspeak
Infrastruttura IoT
• Un sistema IoT è costituito da una moltitudine di sensori
• I dati vengono memorizzati su uno o più supporti condivisi
• che possono essere forniti come servizio di cloud
• Questi sono due componenti di una infrastruttura IoT
• se vogliamo, sono gli estremi dell’infrastruttura
• Altri funzionalità essenziali sono
• l’accesso e l’analisi dei dati (big data)
• l’aggregazione e la pre-elaborazione dei dati (fog/edge
computing)
• l’integrazione in un eco-sistema di altre applicazioni
• ThingSpeak ha la sua risposta per ciascuna di queste
esigenze
Integrazione del servizio Thingspeak
ThingSpeak come infrastruttura IoT
• Accesso e analisi dei dati
• Visualizzazione, embedded visualization (chart), plugins
• Analisi con MatLab (che non abbiamo visto, ne vedremo)
• Aggregazione e pre-elaborazione
• Ancora MatLab e elaborazione sull’interfaccia Web (medie
ecc...)
• Integrazione con altri servizi come stadio intermedio
• Integrazione in un eco-sistema
• In grado di interagire con altri servizi Web
Integrazione del servizio Thingspeak
Integrazione di un servizio
• Un servizio, per essere utile, deve integrarsi con altri
servizi
• gli altri servizi possono completarlo, o aggiungere
funzionalità nuove
• Questa integrazione avviene tramite comunicazione, e
quindi usa interfacce compatibili
• Per ThingSpeak vedremo:
• Integrazione con il servizio Twitter (ThingTweet)
• Integrazione con servizi HTTP generici (ThingHTTP)
• Questi strumenti vengono innescati da ThingSpeak in due
modalità:
• con eventi temporizzati (TimeControl)
• con eventi innescati da contenuti dei canali (React)
• con eventi innescati da tweet (TweetControl)
Integrazione del servizio Thingspeak
Integrazione con Twitter: ThingTweet
• E’ necessario avere a disposizione un account Twitter
• Selezionare ThingTweet tra le App disponibili
• Premere il tasto "Collega" e autorizzate ThingTweet ad
utilizzare l’account
• Ora il server ThingSpeak può postare tweet sul vostro
account (cioè cambiare stato)
• Ora è possibile inviare un POST per modificare lo stato
dell’account twitter, usando la URL:
https://api.thingspeak.com/apps/thingtweet/1/statuses/update
• Il corpo del POST contiene la api_key del ThingTweet ed il
nuovo stato
{"api_key"="XXXX","status"="spento"}
• Lo stesso risultato si ottiene con una GET
• Attenzione: twitter non accetta due post consecutivi con lo
stesso stato. Quindi l’esempio funziona solo una volta...
• Sarà più interessante collegare questa funzione a valori
nel channel
Integrazione del servizio Thingspeak
ThingTweet POST in Python
import httplib, urllib, json, sys
if len(sys.argv) != 3: # Controllo parametri
print("nUsage: "+sys.argv[0]+" <status> <apikey>n")
exit(1)
document = {"api_key":sys.argv[2],"status":sys.argv[1]}
conn = httplib.HTTPSConnection("api.thingspeak.com") # Apro la connessione
conn.request(
"POST", # metodo HTTP
"/apps/thingtweet/1/statuses/update.json", # URL
json.JSONEncoder().encode(document), # HTTP body
{"Content-type": "application/json"} # HTTP header
)
response = conn.getresponse()
print response.status, response.reason
print response.read()
conn.close()
Integrazione del servizio Thingspeak
Laboratorio
• Creare un account twitter
• Utilizzando il browser o il programma python, inviare un
POST o GET per modificare lo stato del vostro account
twitter
Integrazione del servizio Thingspeak
Integrazioni con servizi Web: ThingHTTP
• E’ possibile integrare ThingSpeak con altri servizi Web
usando HTTP
• Quando viene invocato, una app ThingHTTP genera una
request
• ATTENZIONE: tramite ThingHTTP è possibile interagire
con ThingSpeak stesso
• ad esempio per aggiungere un nuovo valore ad un field!
Integrazione del servizio Thingspeak
Come si crea una app ThingHTTP
• Un form consente di specificare
• La URL da utilizzare nella request HTTP
• eventuali parametri di autenticazione
• il metodo da applicare (GET, POST, PUT e DELETE)
• il Content-Type della request, ed eventualmente altri
attributi
• il body, significativo nella GET e nella PUT
• una stringa da ricercare nel body della response
• Alla nuova istanze della app ThingHTTP viene assegnato
• un identificatore
• una apiKey
• Come per ThingTweet, più interessante integrare
ThingHTTP nel servizio
Integrazione del servizio Thingspeak
ThingSpeak registra eventi in un DB
• Noi vedremo come questi comandi possano controllare la
registrazione di dati in un database
• Come database utilizzeremo MongoDB, un database
NoSQL
• il nome deriva da humongous, enorme
• In breve, le caratteristiche di un database NoSQL:
• Un database è composto da collezioni:
• ad es., uno per l’anagrafica degli impiegati, uno per gli uffici
• Ogni collezione è composta da documenti, ad esempio per
descrivere un certo impiegato
• Un documento è descritto come un dato JSON
• Ad esempio {nome:"Pio",cognome:"Po",livello:4}
Integrazione del servizio Thingspeak
Database NoSQL e IoT
• I DB NoSQL sono particolarmente apprezzati in ambito IoT
• Alcune delle ragioni
• Scalabilità: un DB NoSQL riesce a gestire più informazioni
di un relazionale (v. il nome)
• Fuzzy query: le richieste approssimative sono gestite in
modo efficiente
• Eterogeneità: i documenti in una collezione non devono
necessariamente avere tutti lo stesso formato
• Agilità: database non legato al formato dei documenti
Integrazione del servizio Thingspeak
Ex-cursus: MongoDB database
• Utilizziamo un fornitore che mette a disposizione un
database MongoDB: http://mlab.com
• Creiamo un nuovo utente e facciamo login
• Accanto a "MongoDB deployments" selezioniamo Create
new
• Selezioniamo il Cloud Provider (quello che preferite, ad es.
AWS)
• Selezioniamo il Plan type (SANDBOX)
• avete a disposizione 500Mb di dati gratis
• Nella schermata successiva scegliete una regione vicina
(Irlanda per AWS)
• Nella schermata successiva definite il nome del DB (ad
esempio "example")
• Inviate l’ordine (submit) e dopo una decina di secondi il DB
è disponibile
Integrazione del servizio Thingspeak
Accesso al database
• E’ necessario definire almeno un utente per il nuovo
database:
• nella schermata del database selezionare la linguetta Users
• aggiungete un nuovo utente con Add database user
• definire username e password
• I dati in No-SQL sono organizzati in collezioni (collections)
• Torniamo sulla linguetta Collections e selezionare Add
collections
• creiamo una collezione dati
Integrazione del servizio Thingspeak
Abilitazione interfaccia REST
• In alto a destra cliccate sul vostro user (non sull’account)
• Scorrete la finestra verso il basso per trovare API Key
• Abilitate l’accesso tramite API (tasto in basso)
• Annotate la API key (generatela se necessario)
• Create una nuova finestra nel browser e visitate la URL
(sostituendo la vostra API key):
https://api.mlab.com/api/1/databases?apiKey=XXXX
• Sono tutti i vostri database (uno, example)
• Poi, le collezioni nel database example (cioè dati)
https://api.mlab.com/api/1/databases/example/collections?apiKey=XXXX
• E infine i documenti nella collezione dati
https:// ... /databases/example/collections/dati?apiKey=XXXX
Integrazione del servizio Thingspeak
Usare una API REST da programma
• La caratteristica importante di una API REST è che è
possibile utilizzarla da programma
• quindi, senza accedere tramite browser
• Il programma Python seguente accede al server e
restituisce il dato (JSON) corrispondente a tutti i database
Integrazione del servizio Thingspeak
GET in Python
import httplib, json, sys
if len(sys.argv) != 2: # Controllo parametri
print("nUsage: "+sys.argv[0]+" <apikey>n")
exit(1)
conn = httplib.HTTPSConnection("api.mlab.com") # Apro la connessione
# Invio la request
conn.request(
"GET", # metodo HTTP
"/api/1/databases?apiKey="+sys.argv[1] # HTTP header
)
response = conn.getresponse()
print response.status, response.reason
print response.read()
conn.close()
• Provate a modificare il programma per ottenere le
collezioni, ed i dati nelle collezioni
Integrazione del servizio Thingspeak
Aggiungere dati ad una collezione
• Per aggiungere un nuovo documento nella nostra
collezione possiamo usare una POST
• la URL corrisponde a quella che abbiamo già visto
nell’ultimo esempio
• è necessario specificare uno header che indichi la codifica
del contenuto application/json
• il corpo del messaggio contiene il documento che si vuole
che sia registrato nella collezione
• Il programma Python seguente utilizza la
Integrazione del servizio Thingspeak
POST in Python
import httplib, urllib, json, sys
if len(sys.argv) != 3: # Controllo parametri
print("nUsage: "+sys.argv[0]+" <data> <apikey>n")
exit(1)
document = {"text":sys.argv[1],"author":"augusto"}
conn = httplib.HTTPSConnection("api.mlab.com") # Apro la connessione
conn.request(
"POST", # metodo HTTP
"/api/1/databases/example/collections/dati?apiKey="+sys.argv[2], # URL
json.JSONEncoder().encode(document), # HTT
{"Content-type": "application/json"} # HTTP header
)
response = conn.getresponse()
print response.status, response.reason
print response.read()
conn.close()
Integrazione del servizio Thingspeak
Query su un database
• Una query viene richiesta con una GET al solito path
• Insieme alla apiKey va specificata la query,
• Nella forma più semplice, per selezionare i documenti con
un certo valore in un certo campo
• nome:valore, ...
• Ad esempio, nel browser, possiamo impostare:
https:// ... /dati?apiKey=XXXX&q={author:"augusto"}
Integrazione del servizio Thingspeak
Query in Python
import httplib, json, sys
if len(sys.argv) != 2: # Controllo parametri
print(’nUsage: ’+sys.argv[0]+’ <apikey>n’)
exit(1)
conn = httplib.HTTPSConnection(’api.mlab.com’) # Apro la connessione
# Invio la request
conn.request(
"GET", # metodo HTTP
’/api/1/databases/example/collections/dati?apiKey=’+sys.argv[1]+’&q={author:"augusto"}’
)
response = conn.getresponse()
print response.status, response.reason
print response.read()
conn.close()
Integrazione del servizio Thingspeak
ThingHTTP?
• L’applicazione ThingHTTP ci consente di interagire con il
database tramite il server ThingSpeak
• Dobbiamo ora vedere come innescare operazioni
ThingTweet e ThingHTTP controllate dal server
ThingSpeak
• In questo modo il server ThingSpeak funziona da
intermediario tra i vari servizi integrati
Integrazione del servizio Thingspeak
Laboratorio
• Provate ad creare un DB, a popolarlo con qualche record,
e a fare qualche ricerca (per uguaglianza)
• Create una app ThingHTTP che aggiunga un nuovo
documento alla vostra collezione
• compilate URL, metodo, Content-Type, e body
• annotate id e apiKey
• Innescate la app con
https://api.thingspeak.com/apps/thinghttp/send_request?api_key=XXXX
• La apiKey è quella della app ThingHTTP
Integrazione del servizio Thingspeak
Come innescare eventi
• Le ThingSpeak App che abbiamo visto realizzano delle
azioni che fanno comunicare ThingSpeak con l’esterno
• ThingTweet produce un cambiamento di stato in un account
twitter
• ThingHTTP interagisce con un servizio Web inviando una
request
• Ora è necessario far innescare queste operazioni ad eventi
di ThingSpeak
Integrazione del servizio Thingspeak
TimeControl: attivazione con una sveglia
• Ha le funzionalità tipiche di un timer
• in più l’innesco può cadere a caso in un certo intervallo di
tempo
Integrazione del servizio Thingspeak
TimeControl: la app innescata
• TimeControl può attivare quattro tipi di app:
• MATLAB analysis: non la conosciamo, serve a elaborare i
dati
• ThingHTTP: attiva una app ThingHTTP precedentemente
definita
• ThingTweet: invia
• un tweet (da definire)
• ad un account tweet collegato
• TalkBack: aggiunge
• un comando (da definire)
• in una certa posizione (priorità)
• in una delle code TalkBack definite
Integrazione del servizio Thingspeak
React: innesco legato ai dati
• Esegue un test sui dati di un canale
• Se il test è positivo, innesca una app
Integrazione del servizio Thingspeak
React: descrivere il test
• La modalità di test è molto flessibile
• Le quantità coinvolte nel test possono essere
• il valore numerico di un campo rispetto ad una soglia
• il testo contenuto in un campo per confronto con un’altra
stringa (contenuto, inizia con ecc.)
• lo stato del canale, come fosse una stringa
• la geolocalizzazione del canale (rispetto ad un punto
definito)
• Il tempo a cui viene eseguito il test può essere:
• ad intervalli regolari (definiti, 10, 20 o 30 minuti)
• all’arrivo dei dati (importante: reazione immediata)
Integrazione del servizio Thingspeak
React: la app innescata
• Simile al TimeControl, ma manca l’azione di TalkBack
quindi
• invio di un tweet oppure
• invio di una request definita in una ThingHTTP
• La app può essere invocata solo quando la condizione
passa da falsa a vera, oppure ogni volta che è verificata
• Nel tweet e nel body della ThingHTTP possono essere
inserite le cause dell’innesco
• Tra le altre:
• la stringa %%trigger%% viene sostituita con il valore usato nel
test
• la stringa %%datetime%% con l’ora e il giorno
Integrazione del servizio Thingspeak
Reagire ad un tweet: TweetControl
• ThingSpeak può ascoltare i tweet ed utilizzarli per
innescare una app ThingHTTP
• I tweet possono essere ristretti
• a quelli provenienti da un certo account
• a quelli contenenti un certo hashtag
• Nel corpo descritto nella ThingHTTP possono essere
inserite le seguenti stringhe
• la stringa %%trigger%% viene sostituita con l’hashtag
• la stringa %%status%% con l’intero tweet
Integrazione del servizio Thingspeak
TweetControl: finestra di controllo
Integrazione del servizio Thingspeak
Laboratorio
• Realizzare un channel con un field "Temperatura"
• Realizzare i feed manuali tramite browser o con un
programma Python
• Realizzazione di una React che
• invia un tweet al superamento di una soglia (ad es.
temperatura) oppure
• registra il valore della temperatura nel database mlab
• All’arrivo di un tweet con l’hashtag #CHECK lo inserisce
nel database

More Related Content

Similar to Thingspeak: integrazione

Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parte
Giuseppe Toto
 
Power bi
Power biPower bi
Power bi
Marco Pozzan
 
Data flow
Data flowData flow
Data flow
Marco Pozzan
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Eugenio Minardi
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Wellnet srl
 
Quanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless SynapseQuanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless Synapse
Marco Pozzan
 
Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)
Fabio Armani
 
Microsoft Azure per l'IT Pro
Microsoft Azure per l'IT ProMicrosoft Azure per l'IT Pro
Microsoft Azure per l'IT Pro
Marco Parenzan
 
Azure No-Sql approach: DocumentDB
Azure No-Sql approach: DocumentDBAzure No-Sql approach: DocumentDB
Azure No-Sql approach: DocumentDB
Davide Benvegnù
 
Introduzione a..django
Introduzione a..djangoIntroduzione a..django
Introduzione a..django
Luca Forzutti
 
WeWantWeb - WCF Data Services
WeWantWeb - WCF Data ServicesWeWantWeb - WCF Data Services
WeWantWeb - WCF Data Services
DomusDotNet
 
Win05 accesso ai dati in win 8
Win05   accesso ai dati in win 8Win05   accesso ai dati in win 8
Win05 accesso ai dati in win 8DotNetCampus
 
Excel development e sql 2.1
Excel development e sql   2.1Excel development e sql   2.1
Excel development e sql 2.1
Giovanni Della Lunga
 
Big data analytics quanto vale e come sfruttarlo con stream analytics e power bi
Big data analytics quanto vale e come sfruttarlo con stream analytics e power biBig data analytics quanto vale e come sfruttarlo con stream analytics e power bi
Big data analytics quanto vale e come sfruttarlo con stream analytics e power bi
Marco Pozzan
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)
Fabio Armani
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
Business Intelligence & Analytics
Business Intelligence & AnalyticsBusiness Intelligence & Analytics
Business Intelligence & Analytics
Davide Mauri
 
Presentazione Unibo
Presentazione UniboPresentazione Unibo
Presentazione Unibo
Balint Maschio
 
Code Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled RepositoryCode Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled Repository
Andrea Saltarello
 

Similar to Thingspeak: integrazione (20)

Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parte
 
Power bi
Power biPower bi
Power bi
 
Data flow
Data flowData flow
Data flow
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Quanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless SynapseQuanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless Synapse
 
Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)
 
Microsoft Azure per l'IT Pro
Microsoft Azure per l'IT ProMicrosoft Azure per l'IT Pro
Microsoft Azure per l'IT Pro
 
Presentazione
PresentazionePresentazione
Presentazione
 
Azure No-Sql approach: DocumentDB
Azure No-Sql approach: DocumentDBAzure No-Sql approach: DocumentDB
Azure No-Sql approach: DocumentDB
 
Introduzione a..django
Introduzione a..djangoIntroduzione a..django
Introduzione a..django
 
WeWantWeb - WCF Data Services
WeWantWeb - WCF Data ServicesWeWantWeb - WCF Data Services
WeWantWeb - WCF Data Services
 
Win05 accesso ai dati in win 8
Win05   accesso ai dati in win 8Win05   accesso ai dati in win 8
Win05 accesso ai dati in win 8
 
Excel development e sql 2.1
Excel development e sql   2.1Excel development e sql   2.1
Excel development e sql 2.1
 
Big data analytics quanto vale e come sfruttarlo con stream analytics e power bi
Big data analytics quanto vale e come sfruttarlo con stream analytics e power biBig data analytics quanto vale e come sfruttarlo con stream analytics e power bi
Big data analytics quanto vale e come sfruttarlo con stream analytics e power bi
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 
Business Intelligence & Analytics
Business Intelligence & AnalyticsBusiness Intelligence & Analytics
Business Intelligence & Analytics
 
Presentazione Unibo
Presentazione UniboPresentazione Unibo
Presentazione Unibo
 
Code Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled RepositoryCode Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled Repository
 

More from Augusto Ciuffoletti

An open-source testbed for IoT systems
An open-source testbed for IoT systemsAn open-source testbed for IoT systems
An open-source testbed for IoT systems
Augusto Ciuffoletti
 
0 basic
0 basic0 basic
Design and implementation of a low-cost modular sensor
Design and implementation of a low-cost modular sensorDesign and implementation of a low-cost modular sensor
Design and implementation of a low-cost modular sensor
Augusto Ciuffoletti
 
ZHAW 2016 - OCCI for monitoring
ZHAW 2016 - OCCI for monitoringZHAW 2016 - OCCI for monitoring
ZHAW 2016 - OCCI for monitoring
Augusto Ciuffoletti
 
Open Cloud Computing Interface
Open Cloud Computing InterfaceOpen Cloud Computing Interface
Open Cloud Computing Interface
Augusto Ciuffoletti
 
Laboratorio Openstack
Laboratorio OpenstackLaboratorio Openstack
Laboratorio Openstack
Augusto Ciuffoletti
 
Automated deployment of a microservice based monitoring architecture
Automated deployment of a microservice based monitoring architectureAutomated deployment of a microservice based monitoring architecture
Automated deployment of a microservice based monitoring architecture
Augusto Ciuffoletti
 
OCCI Monitoring at OGF42 - Concepts and demo
OCCI Monitoring at OGF42 - Concepts and demoOCCI Monitoring at OGF42 - Concepts and demo
OCCI Monitoring at OGF42 - Concepts and demo
Augusto Ciuffoletti
 
Extending the OCCI API with monitoring capabilities
Extending the OCCI API with monitoring capabilitiesExtending the OCCI API with monitoring capabilities
Extending the OCCI API with monitoring capabilities
Augusto Ciuffoletti
 
2013 03 occi-monitoring
2013 03 occi-monitoring2013 03 occi-monitoring
2013 03 occi-monitoring
Augusto Ciuffoletti
 
Monitoring a virtual network infrastructure - An IaaS perspective
Monitoring a virtual network infrastructure - An IaaS perspectiveMonitoring a virtual network infrastructure - An IaaS perspective
Monitoring a virtual network infrastructure - An IaaS perspective
Augusto Ciuffoletti
 
Collision avoidance using a wandering token in the PTP protocol
Collision avoidance using a wandering token in the PTP protocolCollision avoidance using a wandering token in the PTP protocol
Collision avoidance using a wandering token in the PTP protocol
Augusto Ciuffoletti
 
TIP: a course about IP convergence technology
TIP: a course about IP convergence technologyTIP: a course about IP convergence technology
TIP: a course about IP convergence technology
Augusto Ciuffoletti
 
Design of a secure "Token Passing" protocol
Design of a secure "Token Passing" protocolDesign of a secure "Token Passing" protocol
Design of a secure "Token Passing" protocol
Augusto Ciuffoletti
 
The wandering token
The wandering tokenThe wandering token
The wandering token
Augusto Ciuffoletti
 
Network Monitoring in the age of the Cloud
Network Monitoring in the age of the CloudNetwork Monitoring in the age of the Cloud
Network Monitoring in the age of the Cloud
Augusto Ciuffoletti
 
Grid Infrastructure Architecture A Modular Approach from CoreGRID
Grid Infrastructure Architecture A Modular Approach from CoreGRIDGrid Infrastructure Architecture A Modular Approach from CoreGRID
Grid Infrastructure Architecture A Modular Approach from CoreGRID
Augusto Ciuffoletti
 
Scalable concurrency control in a dynamic membership
Scalable concurrency control  in a dynamic membershipScalable concurrency control  in a dynamic membership
Scalable concurrency control in a dynamic membership
Augusto Ciuffoletti
 
Prototype Implementation of a Demand Driven Network Monitoring Architecture
Prototype Implementation of a Demand Driven Network Monitoring ArchitecturePrototype Implementation of a Demand Driven Network Monitoring Architecture
Prototype Implementation of a Demand Driven Network Monitoring Architecture
Augusto Ciuffoletti
 
IEEE1588 - Collision avoidance for Delay_Req messages in broadcast media
IEEE1588  - Collision avoidance for Delay_Req messages in broadcast mediaIEEE1588  - Collision avoidance for Delay_Req messages in broadcast media
IEEE1588 - Collision avoidance for Delay_Req messages in broadcast media
Augusto Ciuffoletti
 

More from Augusto Ciuffoletti (20)

An open-source testbed for IoT systems
An open-source testbed for IoT systemsAn open-source testbed for IoT systems
An open-source testbed for IoT systems
 
0 basic
0 basic0 basic
0 basic
 
Design and implementation of a low-cost modular sensor
Design and implementation of a low-cost modular sensorDesign and implementation of a low-cost modular sensor
Design and implementation of a low-cost modular sensor
 
ZHAW 2016 - OCCI for monitoring
ZHAW 2016 - OCCI for monitoringZHAW 2016 - OCCI for monitoring
ZHAW 2016 - OCCI for monitoring
 
Open Cloud Computing Interface
Open Cloud Computing InterfaceOpen Cloud Computing Interface
Open Cloud Computing Interface
 
Laboratorio Openstack
Laboratorio OpenstackLaboratorio Openstack
Laboratorio Openstack
 
Automated deployment of a microservice based monitoring architecture
Automated deployment of a microservice based monitoring architectureAutomated deployment of a microservice based monitoring architecture
Automated deployment of a microservice based monitoring architecture
 
OCCI Monitoring at OGF42 - Concepts and demo
OCCI Monitoring at OGF42 - Concepts and demoOCCI Monitoring at OGF42 - Concepts and demo
OCCI Monitoring at OGF42 - Concepts and demo
 
Extending the OCCI API with monitoring capabilities
Extending the OCCI API with monitoring capabilitiesExtending the OCCI API with monitoring capabilities
Extending the OCCI API with monitoring capabilities
 
2013 03 occi-monitoring
2013 03 occi-monitoring2013 03 occi-monitoring
2013 03 occi-monitoring
 
Monitoring a virtual network infrastructure - An IaaS perspective
Monitoring a virtual network infrastructure - An IaaS perspectiveMonitoring a virtual network infrastructure - An IaaS perspective
Monitoring a virtual network infrastructure - An IaaS perspective
 
Collision avoidance using a wandering token in the PTP protocol
Collision avoidance using a wandering token in the PTP protocolCollision avoidance using a wandering token in the PTP protocol
Collision avoidance using a wandering token in the PTP protocol
 
TIP: a course about IP convergence technology
TIP: a course about IP convergence technologyTIP: a course about IP convergence technology
TIP: a course about IP convergence technology
 
Design of a secure "Token Passing" protocol
Design of a secure "Token Passing" protocolDesign of a secure "Token Passing" protocol
Design of a secure "Token Passing" protocol
 
The wandering token
The wandering tokenThe wandering token
The wandering token
 
Network Monitoring in the age of the Cloud
Network Monitoring in the age of the CloudNetwork Monitoring in the age of the Cloud
Network Monitoring in the age of the Cloud
 
Grid Infrastructure Architecture A Modular Approach from CoreGRID
Grid Infrastructure Architecture A Modular Approach from CoreGRIDGrid Infrastructure Architecture A Modular Approach from CoreGRID
Grid Infrastructure Architecture A Modular Approach from CoreGRID
 
Scalable concurrency control in a dynamic membership
Scalable concurrency control  in a dynamic membershipScalable concurrency control  in a dynamic membership
Scalable concurrency control in a dynamic membership
 
Prototype Implementation of a Demand Driven Network Monitoring Architecture
Prototype Implementation of a Demand Driven Network Monitoring ArchitecturePrototype Implementation of a Demand Driven Network Monitoring Architecture
Prototype Implementation of a Demand Driven Network Monitoring Architecture
 
IEEE1588 - Collision avoidance for Delay_Req messages in broadcast media
IEEE1588  - Collision avoidance for Delay_Req messages in broadcast mediaIEEE1588  - Collision avoidance for Delay_Req messages in broadcast media
IEEE1588 - Collision avoidance for Delay_Req messages in broadcast media
 

Thingspeak: integrazione

  • 1. Integrazione del servizio Thingspeak Integrazione del servizio Thingspeak Mobile And Cyber-physical Systems Augusto Ciuffoletti 12 marzo 2018 Integrazione del servizio Thingspeak Infrastruttura IoT • Un sistema IoT è costituito da una moltitudine di sensori • I dati vengono memorizzati su uno o più supporti condivisi • che possono essere forniti come servizio di cloud • Questi sono due componenti di una infrastruttura IoT • se vogliamo, sono gli estremi dell’infrastruttura • Altri funzionalità essenziali sono • l’accesso e l’analisi dei dati (big data) • l’aggregazione e la pre-elaborazione dei dati (fog/edge computing) • l’integrazione in un eco-sistema di altre applicazioni • ThingSpeak ha la sua risposta per ciascuna di queste esigenze
  • 2. Integrazione del servizio Thingspeak ThingSpeak come infrastruttura IoT • Accesso e analisi dei dati • Visualizzazione, embedded visualization (chart), plugins • Analisi con MatLab (che non abbiamo visto, ne vedremo) • Aggregazione e pre-elaborazione • Ancora MatLab e elaborazione sull’interfaccia Web (medie ecc...) • Integrazione con altri servizi come stadio intermedio • Integrazione in un eco-sistema • In grado di interagire con altri servizi Web Integrazione del servizio Thingspeak Integrazione di un servizio • Un servizio, per essere utile, deve integrarsi con altri servizi • gli altri servizi possono completarlo, o aggiungere funzionalità nuove • Questa integrazione avviene tramite comunicazione, e quindi usa interfacce compatibili • Per ThingSpeak vedremo: • Integrazione con il servizio Twitter (ThingTweet) • Integrazione con servizi HTTP generici (ThingHTTP) • Questi strumenti vengono innescati da ThingSpeak in due modalità: • con eventi temporizzati (TimeControl) • con eventi innescati da contenuti dei canali (React) • con eventi innescati da tweet (TweetControl)
  • 3. Integrazione del servizio Thingspeak Integrazione con Twitter: ThingTweet • E’ necessario avere a disposizione un account Twitter • Selezionare ThingTweet tra le App disponibili • Premere il tasto "Collega" e autorizzate ThingTweet ad utilizzare l’account • Ora il server ThingSpeak può postare tweet sul vostro account (cioè cambiare stato) • Ora è possibile inviare un POST per modificare lo stato dell’account twitter, usando la URL: https://api.thingspeak.com/apps/thingtweet/1/statuses/update • Il corpo del POST contiene la api_key del ThingTweet ed il nuovo stato {"api_key"="XXXX","status"="spento"} • Lo stesso risultato si ottiene con una GET • Attenzione: twitter non accetta due post consecutivi con lo stesso stato. Quindi l’esempio funziona solo una volta... • Sarà più interessante collegare questa funzione a valori nel channel Integrazione del servizio Thingspeak ThingTweet POST in Python import httplib, urllib, json, sys if len(sys.argv) != 3: # Controllo parametri print("nUsage: "+sys.argv[0]+" <status> <apikey>n") exit(1) document = {"api_key":sys.argv[2],"status":sys.argv[1]} conn = httplib.HTTPSConnection("api.thingspeak.com") # Apro la connessione conn.request( "POST", # metodo HTTP "/apps/thingtweet/1/statuses/update.json", # URL json.JSONEncoder().encode(document), # HTTP body {"Content-type": "application/json"} # HTTP header ) response = conn.getresponse() print response.status, response.reason print response.read() conn.close()
  • 4. Integrazione del servizio Thingspeak Laboratorio • Creare un account twitter • Utilizzando il browser o il programma python, inviare un POST o GET per modificare lo stato del vostro account twitter Integrazione del servizio Thingspeak Integrazioni con servizi Web: ThingHTTP • E’ possibile integrare ThingSpeak con altri servizi Web usando HTTP • Quando viene invocato, una app ThingHTTP genera una request • ATTENZIONE: tramite ThingHTTP è possibile interagire con ThingSpeak stesso • ad esempio per aggiungere un nuovo valore ad un field!
  • 5. Integrazione del servizio Thingspeak Come si crea una app ThingHTTP • Un form consente di specificare • La URL da utilizzare nella request HTTP • eventuali parametri di autenticazione • il metodo da applicare (GET, POST, PUT e DELETE) • il Content-Type della request, ed eventualmente altri attributi • il body, significativo nella GET e nella PUT • una stringa da ricercare nel body della response • Alla nuova istanze della app ThingHTTP viene assegnato • un identificatore • una apiKey • Come per ThingTweet, più interessante integrare ThingHTTP nel servizio Integrazione del servizio Thingspeak ThingSpeak registra eventi in un DB • Noi vedremo come questi comandi possano controllare la registrazione di dati in un database • Come database utilizzeremo MongoDB, un database NoSQL • il nome deriva da humongous, enorme • In breve, le caratteristiche di un database NoSQL: • Un database è composto da collezioni: • ad es., uno per l’anagrafica degli impiegati, uno per gli uffici • Ogni collezione è composta da documenti, ad esempio per descrivere un certo impiegato • Un documento è descritto come un dato JSON • Ad esempio {nome:"Pio",cognome:"Po",livello:4}
  • 6. Integrazione del servizio Thingspeak Database NoSQL e IoT • I DB NoSQL sono particolarmente apprezzati in ambito IoT • Alcune delle ragioni • Scalabilità: un DB NoSQL riesce a gestire più informazioni di un relazionale (v. il nome) • Fuzzy query: le richieste approssimative sono gestite in modo efficiente • Eterogeneità: i documenti in una collezione non devono necessariamente avere tutti lo stesso formato • Agilità: database non legato al formato dei documenti Integrazione del servizio Thingspeak Ex-cursus: MongoDB database • Utilizziamo un fornitore che mette a disposizione un database MongoDB: http://mlab.com • Creiamo un nuovo utente e facciamo login • Accanto a "MongoDB deployments" selezioniamo Create new • Selezioniamo il Cloud Provider (quello che preferite, ad es. AWS) • Selezioniamo il Plan type (SANDBOX) • avete a disposizione 500Mb di dati gratis • Nella schermata successiva scegliete una regione vicina (Irlanda per AWS) • Nella schermata successiva definite il nome del DB (ad esempio "example") • Inviate l’ordine (submit) e dopo una decina di secondi il DB è disponibile
  • 7. Integrazione del servizio Thingspeak Accesso al database • E’ necessario definire almeno un utente per il nuovo database: • nella schermata del database selezionare la linguetta Users • aggiungete un nuovo utente con Add database user • definire username e password • I dati in No-SQL sono organizzati in collezioni (collections) • Torniamo sulla linguetta Collections e selezionare Add collections • creiamo una collezione dati Integrazione del servizio Thingspeak Abilitazione interfaccia REST • In alto a destra cliccate sul vostro user (non sull’account) • Scorrete la finestra verso il basso per trovare API Key • Abilitate l’accesso tramite API (tasto in basso) • Annotate la API key (generatela se necessario) • Create una nuova finestra nel browser e visitate la URL (sostituendo la vostra API key): https://api.mlab.com/api/1/databases?apiKey=XXXX • Sono tutti i vostri database (uno, example) • Poi, le collezioni nel database example (cioè dati) https://api.mlab.com/api/1/databases/example/collections?apiKey=XXXX • E infine i documenti nella collezione dati https:// ... /databases/example/collections/dati?apiKey=XXXX
  • 8. Integrazione del servizio Thingspeak Usare una API REST da programma • La caratteristica importante di una API REST è che è possibile utilizzarla da programma • quindi, senza accedere tramite browser • Il programma Python seguente accede al server e restituisce il dato (JSON) corrispondente a tutti i database Integrazione del servizio Thingspeak GET in Python import httplib, json, sys if len(sys.argv) != 2: # Controllo parametri print("nUsage: "+sys.argv[0]+" <apikey>n") exit(1) conn = httplib.HTTPSConnection("api.mlab.com") # Apro la connessione # Invio la request conn.request( "GET", # metodo HTTP "/api/1/databases?apiKey="+sys.argv[1] # HTTP header ) response = conn.getresponse() print response.status, response.reason print response.read() conn.close() • Provate a modificare il programma per ottenere le collezioni, ed i dati nelle collezioni
  • 9. Integrazione del servizio Thingspeak Aggiungere dati ad una collezione • Per aggiungere un nuovo documento nella nostra collezione possiamo usare una POST • la URL corrisponde a quella che abbiamo già visto nell’ultimo esempio • è necessario specificare uno header che indichi la codifica del contenuto application/json • il corpo del messaggio contiene il documento che si vuole che sia registrato nella collezione • Il programma Python seguente utilizza la Integrazione del servizio Thingspeak POST in Python import httplib, urllib, json, sys if len(sys.argv) != 3: # Controllo parametri print("nUsage: "+sys.argv[0]+" <data> <apikey>n") exit(1) document = {"text":sys.argv[1],"author":"augusto"} conn = httplib.HTTPSConnection("api.mlab.com") # Apro la connessione conn.request( "POST", # metodo HTTP "/api/1/databases/example/collections/dati?apiKey="+sys.argv[2], # URL json.JSONEncoder().encode(document), # HTT {"Content-type": "application/json"} # HTTP header ) response = conn.getresponse() print response.status, response.reason print response.read() conn.close()
  • 10. Integrazione del servizio Thingspeak Query su un database • Una query viene richiesta con una GET al solito path • Insieme alla apiKey va specificata la query, • Nella forma più semplice, per selezionare i documenti con un certo valore in un certo campo • nome:valore, ... • Ad esempio, nel browser, possiamo impostare: https:// ... /dati?apiKey=XXXX&q={author:"augusto"} Integrazione del servizio Thingspeak Query in Python import httplib, json, sys if len(sys.argv) != 2: # Controllo parametri print(’nUsage: ’+sys.argv[0]+’ <apikey>n’) exit(1) conn = httplib.HTTPSConnection(’api.mlab.com’) # Apro la connessione # Invio la request conn.request( "GET", # metodo HTTP ’/api/1/databases/example/collections/dati?apiKey=’+sys.argv[1]+’&q={author:"augusto"}’ ) response = conn.getresponse() print response.status, response.reason print response.read() conn.close()
  • 11. Integrazione del servizio Thingspeak ThingHTTP? • L’applicazione ThingHTTP ci consente di interagire con il database tramite il server ThingSpeak • Dobbiamo ora vedere come innescare operazioni ThingTweet e ThingHTTP controllate dal server ThingSpeak • In questo modo il server ThingSpeak funziona da intermediario tra i vari servizi integrati Integrazione del servizio Thingspeak Laboratorio • Provate ad creare un DB, a popolarlo con qualche record, e a fare qualche ricerca (per uguaglianza) • Create una app ThingHTTP che aggiunga un nuovo documento alla vostra collezione • compilate URL, metodo, Content-Type, e body • annotate id e apiKey • Innescate la app con https://api.thingspeak.com/apps/thinghttp/send_request?api_key=XXXX • La apiKey è quella della app ThingHTTP
  • 12. Integrazione del servizio Thingspeak Come innescare eventi • Le ThingSpeak App che abbiamo visto realizzano delle azioni che fanno comunicare ThingSpeak con l’esterno • ThingTweet produce un cambiamento di stato in un account twitter • ThingHTTP interagisce con un servizio Web inviando una request • Ora è necessario far innescare queste operazioni ad eventi di ThingSpeak Integrazione del servizio Thingspeak TimeControl: attivazione con una sveglia • Ha le funzionalità tipiche di un timer • in più l’innesco può cadere a caso in un certo intervallo di tempo
  • 13. Integrazione del servizio Thingspeak TimeControl: la app innescata • TimeControl può attivare quattro tipi di app: • MATLAB analysis: non la conosciamo, serve a elaborare i dati • ThingHTTP: attiva una app ThingHTTP precedentemente definita • ThingTweet: invia • un tweet (da definire) • ad un account tweet collegato • TalkBack: aggiunge • un comando (da definire) • in una certa posizione (priorità) • in una delle code TalkBack definite Integrazione del servizio Thingspeak React: innesco legato ai dati • Esegue un test sui dati di un canale • Se il test è positivo, innesca una app
  • 14. Integrazione del servizio Thingspeak React: descrivere il test • La modalità di test è molto flessibile • Le quantità coinvolte nel test possono essere • il valore numerico di un campo rispetto ad una soglia • il testo contenuto in un campo per confronto con un’altra stringa (contenuto, inizia con ecc.) • lo stato del canale, come fosse una stringa • la geolocalizzazione del canale (rispetto ad un punto definito) • Il tempo a cui viene eseguito il test può essere: • ad intervalli regolari (definiti, 10, 20 o 30 minuti) • all’arrivo dei dati (importante: reazione immediata) Integrazione del servizio Thingspeak React: la app innescata • Simile al TimeControl, ma manca l’azione di TalkBack quindi • invio di un tweet oppure • invio di una request definita in una ThingHTTP • La app può essere invocata solo quando la condizione passa da falsa a vera, oppure ogni volta che è verificata • Nel tweet e nel body della ThingHTTP possono essere inserite le cause dell’innesco • Tra le altre: • la stringa %%trigger%% viene sostituita con il valore usato nel test • la stringa %%datetime%% con l’ora e il giorno
  • 15. Integrazione del servizio Thingspeak Reagire ad un tweet: TweetControl • ThingSpeak può ascoltare i tweet ed utilizzarli per innescare una app ThingHTTP • I tweet possono essere ristretti • a quelli provenienti da un certo account • a quelli contenenti un certo hashtag • Nel corpo descritto nella ThingHTTP possono essere inserite le seguenti stringhe • la stringa %%trigger%% viene sostituita con l’hashtag • la stringa %%status%% con l’intero tweet Integrazione del servizio Thingspeak TweetControl: finestra di controllo
  • 16. Integrazione del servizio Thingspeak Laboratorio • Realizzare un channel con un field "Temperatura" • Realizzare i feed manuali tramite browser o con un programma Python • Realizzazione di una React che • invia un tweet al superamento di una soglia (ad es. temperatura) oppure • registra il valore della temperatura nel database mlab • All’arrivo di un tweet con l’hashtag #CHECK lo inserisce nel database