Lezione tenuta nel corso di Mobile and Cyber Physical Systems della Laurea Magistrale di Informatica a Pisa.
- Le App per l'integrazione con altri servizi: ThingTweet e ThingHTTPi
- Le App per l'innesco di azioni: TimeControl, TweetControl e React
- Esercizi pratici in Python
Lezione tenuta nel corso di Mobile and Cyber Physical Systems della Laurea Magistrale di Informatica a Pisa.
- Introduzione a ThingSpeak
- Pubblicazione e recupero di dati
- Pubblicazione e recupero di comandi CallBack
- Esercizi pratici in Python
Structured Streaming è il modulo di Stream Processing costruito sul motore Spark SQL. In poche parole garantisce l'esecuzione di un messaggio esattamente una volta, è scalabile e fault-tolerant. È possibile definire le analisi stream nello stesso modo in cui si definirebbe un calcolo batch sui dati usando i Dataset/DataFrame API in Scala, Java, Python or R utilizzando l'engine SQL di Spark.
Durante la sessione vedremo un'overview delle funzionalità e un esempio di di come sia possibile eseguire l'ingestion dei dati con Event Hub (Kafka enabled) eseguire un'analisi con Spark e salvare i risultati su Cosmos DB.
Come costruire un PoC IoT completo: gestione allarmi, device heartbeat, real-time. L'intera soluzione sarà costruita utilizzando la piattaforma Cloud Microsoft (Stream Analytics, Logic Apps, SQL Database, Power BI, Dynamics 365).
Il tutto in 1 ora e come sempre scrivendo meno codice possibile!
Costruire un PoC IoT completo: gestione allarmi, device heartbeat, real-time e batch analysis e integrazione con Dynamics 365. L'intera soluzione sarà costruita utilizzando la piattaforma Cloud Microsoft (Stream Analytics, Logic Apps, SQL Database, Power BI, Dynamics 365).
Il tutto in 1 ora e come sempre scrivendo meno codice possibile!
In questo speech esploreremo le REST API più interessanti e curiose pubblicamente disponibili. Dopo una introduzione utile a fissare concetti di base e prerogative, vedremo come “consumarle” con Delphi costruendo accattivanti applicazioni client.
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-serviceMarco Pozzan
Power BI Dataflow è il componente di trasformazione dei dati in Power BI. È un processo di Power Query che viene eseguito nel cloud. Bene, questa potrebbe non sembrare una funzionalità molto nuova, giusto? Quindi cosa c'è di nuovo con Dataflow? Le risposte alle vostre domande saranno nella mia sessione :-)
Lezione tenuta nel corso di Mobile and Cyber Physical Systems della Laurea Magistrale di Informatica a Pisa.
- Introduzione a ThingSpeak
- Pubblicazione e recupero di dati
- Pubblicazione e recupero di comandi CallBack
- Esercizi pratici in Python
Structured Streaming è il modulo di Stream Processing costruito sul motore Spark SQL. In poche parole garantisce l'esecuzione di un messaggio esattamente una volta, è scalabile e fault-tolerant. È possibile definire le analisi stream nello stesso modo in cui si definirebbe un calcolo batch sui dati usando i Dataset/DataFrame API in Scala, Java, Python or R utilizzando l'engine SQL di Spark.
Durante la sessione vedremo un'overview delle funzionalità e un esempio di di come sia possibile eseguire l'ingestion dei dati con Event Hub (Kafka enabled) eseguire un'analisi con Spark e salvare i risultati su Cosmos DB.
Come costruire un PoC IoT completo: gestione allarmi, device heartbeat, real-time. L'intera soluzione sarà costruita utilizzando la piattaforma Cloud Microsoft (Stream Analytics, Logic Apps, SQL Database, Power BI, Dynamics 365).
Il tutto in 1 ora e come sempre scrivendo meno codice possibile!
Costruire un PoC IoT completo: gestione allarmi, device heartbeat, real-time e batch analysis e integrazione con Dynamics 365. L'intera soluzione sarà costruita utilizzando la piattaforma Cloud Microsoft (Stream Analytics, Logic Apps, SQL Database, Power BI, Dynamics 365).
Il tutto in 1 ora e come sempre scrivendo meno codice possibile!
In questo speech esploreremo le REST API più interessanti e curiose pubblicamente disponibili. Dopo una introduzione utile a fissare concetti di base e prerogative, vedremo come “consumarle” con Delphi costruendo accattivanti applicazioni client.
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-serviceMarco Pozzan
Power BI Dataflow è il componente di trasformazione dei dati in Power BI. È un processo di Power Query che viene eseguito nel cloud. Bene, questa potrebbe non sembrare una funzionalità molto nuova, giusto? Quindi cosa c'è di nuovo con Dataflow? Le risposte alle vostre domande saranno nella mia sessione :-)
Analysts spend up to 80% of their time on data preparation delaying the time to analysis and decision making.” -Analysts spend up to 80% of their time on data preparation delaying the time to analysis and decision making.” Gartner
L'Internet of Things è una realtà e primo o dopo avrà il suo impatto significativo nelle nostre aziende.
E a quel punto, i device saranno un asset di cui gestire il lifetime, alla pari dei nostri server, reti e cloud.
Azure IoT è la piattaforma su cui possiamo sviluppare la nostra soluzione IoT e cerchiamo di comprendere cosa significa amministrare un parco device.
Alcuni temi: protocolli di comunicazione e sicurezza del device e della comunicazione. Provisioning dei device. Gestione e monitoraggio dei dispositivi. Strumenti ed API a disposizione per l'IT Pro.
I database No-SQL sono sempre più diffusi ed utilizzati nelle applicazioni. Vediamo come Microsoft ha deciso di implementare questa strategia dentro Azure con DocumentDB.
This set of design patterns are related to Enterprise Patterns. In it you can find, J2EE, Presentation, Business & Integration Patterns (such as: ApplicaCon Controller, Data Transfer Object (DTO), Business Object (BO) & Data Access Object (DAO) among others ...)
Business Intelligence e Business Analytics sono termini che ricorrono ormai quotidianemente. Cosa significano? Che valore portano in una azienda? Come si crea una soluzione di Business Intelligece e di Business Analytics? Che strumenti mette a disposizione la piattaforma Microsoft? In questa sessione andremo ad introdurre tutti gli attori, gli strumenti e le tecnologie che concorrono a realizzare tali soluzioni, vendendone alcune "dal vivo" per capire come si usano ed il grande valore aggiunto che, in una società sempre più affamata di informazioni, ma ricca solo di dati, possono portare.
Code Contracts and Generics: implementing a LINQ-enabled RepositoryAndrea Saltarello
In questa sessione vedremo come implementare il Repository pattern in modo da creare un Data Access Layer interrogabile mediante query LINQ, delegando l'effettiva esecuzione delle stesse ad O/RM quali Entity Framework e/o NHibernate.
Slides for the presentation given at the Webist 2021 conference
Abstract:
A research team that wants to validate a new IoT solution has to implement a testbed. It is a complex step
since it must provide a realistic environment, and this may require skills that are not present in the team. This
paper explores the requirements of an IoT testbed and proposes an open-source solution based on low-cost
and widely available components and technologies. The testbed implements an architecture consisting of a
collector managing several edge devices. Security levels and duty-cycle are tunable depending on the specific
application. After analyzing the testbed requirements, the paper illustrates a template that uses WiFi for the
link layer, HTTPS for structured communication, an ESP8266 board for edge units, and a RaspberryPi for the
collector.
Analysts spend up to 80% of their time on data preparation delaying the time to analysis and decision making.” -Analysts spend up to 80% of their time on data preparation delaying the time to analysis and decision making.” Gartner
L'Internet of Things è una realtà e primo o dopo avrà il suo impatto significativo nelle nostre aziende.
E a quel punto, i device saranno un asset di cui gestire il lifetime, alla pari dei nostri server, reti e cloud.
Azure IoT è la piattaforma su cui possiamo sviluppare la nostra soluzione IoT e cerchiamo di comprendere cosa significa amministrare un parco device.
Alcuni temi: protocolli di comunicazione e sicurezza del device e della comunicazione. Provisioning dei device. Gestione e monitoraggio dei dispositivi. Strumenti ed API a disposizione per l'IT Pro.
I database No-SQL sono sempre più diffusi ed utilizzati nelle applicazioni. Vediamo come Microsoft ha deciso di implementare questa strategia dentro Azure con DocumentDB.
This set of design patterns are related to Enterprise Patterns. In it you can find, J2EE, Presentation, Business & Integration Patterns (such as: ApplicaCon Controller, Data Transfer Object (DTO), Business Object (BO) & Data Access Object (DAO) among others ...)
Business Intelligence e Business Analytics sono termini che ricorrono ormai quotidianemente. Cosa significano? Che valore portano in una azienda? Come si crea una soluzione di Business Intelligece e di Business Analytics? Che strumenti mette a disposizione la piattaforma Microsoft? In questa sessione andremo ad introdurre tutti gli attori, gli strumenti e le tecnologie che concorrono a realizzare tali soluzioni, vendendone alcune "dal vivo" per capire come si usano ed il grande valore aggiunto che, in una società sempre più affamata di informazioni, ma ricca solo di dati, possono portare.
Code Contracts and Generics: implementing a LINQ-enabled RepositoryAndrea Saltarello
In questa sessione vedremo come implementare il Repository pattern in modo da creare un Data Access Layer interrogabile mediante query LINQ, delegando l'effettiva esecuzione delle stesse ad O/RM quali Entity Framework e/o NHibernate.
Slides for the presentation given at the Webist 2021 conference
Abstract:
A research team that wants to validate a new IoT solution has to implement a testbed. It is a complex step
since it must provide a realistic environment, and this may require skills that are not present in the team. This
paper explores the requirements of an IoT testbed and proposes an open-source solution based on low-cost
and widely available components and technologies. The testbed implements an architecture consisting of a
collector managing several edge devices. Security levels and duty-cycle are tunable depending on the specific
application. After analyzing the testbed requirements, the paper illustrates a template that uses WiFi for the
link layer, HTTPS for structured communication, an ESP8266 board for edge units, and a RaspberryPi for the
collector.
Slides of the presentation at IEEE WiMob/SEUNet 2017, in Rome.
We exploit an overlooked feature of the ESP8266 WiFi chip, i.e. the AT commands interpreter, to implement a sensor/actuator that meets the above specifications. To test our design, we implement a library that provides a transparent wrapper for AT commands. Hardware and software are available on bitbucket.
The document describes an OCCI extension for monitoring cloud resources from both an administrator and user perspective. It proposes representing monitoring entities like sensors and collectors as OCCI resource and link types. Sensors would aggregate and deliver measurements, while collectors produce measurements. These would be further described through mixins that detail their specific monitoring functionality. The proposal aims to provide on-demand, scalable monitoring as a service to users through a standardized and customizable OCCI interface.
The document discusses the Open Cloud Computing Interface (OCCI), which aims to provide an open standard interface for cloud computing. It describes OCCI's goals of allowing interoperability between different cloud providers and preventing vendor lock-in. The core OCCI model defines basic resource and link entity types and supports extensions for additional types and functionality. OCCI uses a RESTful API and represents entities with URIs to allow their creation, retrieval, updating and deletion. Implementations of OCCI have been made for various programming languages and cloud platforms.
Automated deployment of a microservice based monitoring architectureAugusto Ciuffoletti
The document discusses two topics: microservices and cloud monitoring. Microservices involve breaking applications into small, independent components. Cloud monitoring allows users to monitor cloud resources. The author proposes an "on demand monitoring" approach using a microservices-based infrastructure that provides scalable and configurable monitoring as a service. It automatically deploys a monitoring system that can be tailored to the user's needs and scales from simple to complex setups.
The extension of the OCCI framework to describe a monitoring infrastructure.
A demo explains how the infrastructure is generated starting from the OCCI specification.
The source of the demo (in Java) is available in the repository of the OCCI working group.
A tutorial about the API for the description of a monitoring infrastructure currently discussed inside the OCCI working group.
The slides start by giving the basic concepts, proceed with a description of the entities that implement the monitoring infrastructure, and conclude with a step by step definition of a non-trivial monitoring infrastructure.
The document discusses extending the OCCI API with monitoring capabilities. It proposes adding two new types: Collector and Sensor. The Collector would be a link that extracts operational parameters from a source resource and delivers them to a target resource. The Sensor would be a resource that processes or aggregates output from one or more Collectors, such as by filtering, interpolating, or combining monitoring data. Plugins would provide different options for parameters, transport methods, and ways to aggregate and process data.
Monitoring a virtual network infrastructure - An IaaS perspectiveAugusto Ciuffoletti
The document discusses the challenges of providing network resources as part of an Infrastructure as a Service (IaaS) cloud computing model. While IaaS has traditionally focused on storage and computing resources, the networking capabilities now exist to provision virtual network infrastructure as well. However, IaaS providers still typically only offer flat local area networks rather than composite network topologies that some users require. The key technology that enables virtual private networks is virtual bridging using VLAN tagging, which allows flexible virtual network configurations. For network monitoring in IaaS, a proxy that interacts with users is proposed to dynamically configure monitoring while maintaining provider control over network devices.
Collision avoidance using a wandering token in the PTP protocolAugusto Ciuffoletti
Slides presented during the 2010 WIGOWIN Workshop at the Department of Computer Science in Pisa - May 26.
Full paper available at http://eprints.adm.unipi.it
Algorithms based on the circulation of a unique token are often indicated in the coordination of distributed systems. We introduce the design of the token passing operation at application level, that exhibits the requirements of security, since the token is a sensitive resource, and scalability, since the token passing protocol must not implement security at expense of scalability. These
characteristics make our solution suitable for large scale distributed infrastructures.
1) The document describes a "wandering token" approach for coordinating access to shared resources among thousands of agents in a scalable way.
2) A simulation of the approach for a video on demand application showed that it protected the resource from overload while still granting regular access.
3) The wandering token circulates randomly among members, with a randomized timer governing when new tokens are generated to replace lost tokens. This provides a robust, distributed solution to coordinating access.
The paper explores network virtualization issues related with the Cloud Computing paradigm (mainly intended as IaaS). Finally, we consider this framework from a network monitoring perspective.
The paper is an outcome of the CoreGRID working group at ERCIM.
Grid Infrastructure Architecture A Modular Approach from CoreGRIDAugusto Ciuffoletti
The document discusses a modular approach to grid infrastructure architecture proposed by CoreGRID. It identifies five key functional components of a grid middleware: 1) a workflow analyzer for user interfaces and task monitoring, 2) a checkpoint manager for fault tolerance, 3) a user/account manager for authentication and accounting, 4) a resource monitor for observing resource performance, and 5) a grid information service as the backbone. These components interact through exchanging data structures published via the grid information service while addressing issues like scalability, fault tolerance and security.
The document summarizes research on scalable concurrency control in dynamic distributed systems using a multi-token approach. The approach proposes using a mesh overlay topology and random routing of tokens to control access to a shared resource among a large number of dynamic nodes. Experimental results showed the process converges quickly but with more tokens and worse performance than expected, requiring further tuning of the control loop dynamics.
Prototype Implementation of a Demand Driven Network Monitoring ArchitectureAugusto Ciuffoletti
The document summarizes a prototype implementation of an on-demand network monitoring architecture. The architecture features clients that submit monitoring requests, sensors that perform the monitoring, and agents that route requests and streams. The prototype implements the key components in Java and uses SOAP, UDP, and LDAP. It was developed over three months as a proof of concept for an on-demand approach to network monitoring at Internet scale.
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