Linee Guida per l’integrazione in Smart Data Net Versione 1.3 25/07/2014 01/05/2014 06/07/2014 Versione 1.0 Versione 1.1 25/07/2014 Versione 1.2 10/09/2014 Versione 1.3 Versione iniziale del documento Inserito capitolo 10 Riferimenti. Corretti riferimenti incrociati a tabelle e riferimenti. Modifica paragrafi: 1. Introduzione 3.1 Disponibilità dei dataset e dei flussi inviati su SDP Modificata nomenclatura (resi minuscoli) campi nei messaggi. Linee Guida per l’integrazione Sommario 1 2 3 4 INTRODUZIONE .............................................................................................................. 3 DEFINIZIONI ED ACRONIMI .............................................................................................. 4 2.1 DEFINIZIONI 4 2.2 ACRONIMI 4 3.2 PANORAMICA DI PROTOCOLLI E FORMATI 6 3.3 TIPOLOGIE DI DATO GEOGRAFICO 6 TIPOLOGIE DI INFORMAZIONI ........................................................................................... 5 2 3.1 DISPONIBILITA’ DEI DATASET E DEI FLUSSI INVIATI SU SDP 5 SPECIFICHE PER L’INVIO DI EVENTI VERSO SDP .................................................................... 8 4.1 SPECIFICHE PER L’INVIO DEI DATI ALFANUMERICI 8 4.2 5 6 8 9 14 INTEGRAZIONE DI DATI TRAMITE IMPORT VERSO SDP ............................................................ 15 SPECIFICHE PER LA FRUIZIONE DI EVENTI ESPOSTI DA SDP ...................................................... 16 6.1 STREAMING API PER LA FRUIZIONE DI EVENTI ALFANUMERICI 16 6.2 7 PROTOCOLLO PER L’INVIO DI DATI MULTIMEDIALI SPECIFICHE PER LA FRUIZIONE DI STREAM MULTIMEDIALI 17 REST API PER L’ACCESSO AI DATI DELLA SDP TRAMITE SERVIZI .............................................. 17 7.1 FORMATO DI RAPPRESENTAZIONE 17 7.2 BINDING DI TRASPORTO 17 7.3 SPECIFICHE DELLE API ESPOSTE 17 7.4 MODELLO DEI DATI RESTITUITO 18 SICUREZZA E PRIVACY .................................................................................................... 18 8.1 IDENTIFICAZIONE 18 8.2 AUTENTICAZIONE 18 8.3 ULTERIORI ASPETTI DI SICUREZZA 19 8.4 ASPETTI DI PRIVACY 19 APPENDICI ................................................................................................................... 21 9.1 PROTOCOLLO PER LA GESTIONE DEI SENSORI 21 9.2 AGGIORNAMENTI AUTOMATICI DEI SENSORI 25 9.3 SPECIFICHE DI DISCOVERY DEI DATASET ............................................................................. 26 10 RIFERIMENTI .................................................................................................................. 31 Linee Guida per l’integrazione 1 INTRODUZIONE Sono qui riportate le specifiche di integrazione con la piattaforma Regionale per l’Internet of Smart Data che interconnette applicazioni, social network, sistemi e oggetti distribuiti sul territorio raccogliendo dati e informazioni, consentendone l’elaborazione e l’analisi avanzata per fornire una mappa digitale integrata dell’ecosistema e abilitare la realizzazione di soluzioni end-toend finali. Il documento descrive le principali specifiche tecniche e le condizioni giuridico-legali necessarie per poter interoperare con la piattaforma SmartDataPlatform (SDP), sia come fornitore di dati e di flussi che come fruitore degli stessi. Si precisa in proposito che la possibilità di interoperare con la piattaforma SmartDataPlatform (SDP), sia come fornitore di dati e di flussi che come fruitore degli stessi è aperta a tutti ossia non solo ai soggetti che hanno partecipato al “Bando regionale a sostegno di progetti di ricerca industriale e/o sviluppo sperimentale di applicazioni integrate e innovative in ambito Internet of Data – IoD” decidendo di avvalersi delle funzionalità rese disponibili dalla piattaforma SDP, ma anche a tutti coloro che, essendo interessati a far parte dell’Ecosistema SmartDataNet, intendono aderirvi. L’uso della piattafoma sarà subordinato alla compilazione di apposita modulistica che sarà resa disponibile in fase di attivazione delle utenze di accesso. Tale documentazione dovrà essere pertanto letta e rispettata da tutti coloro che fruiranno della piattaforma SDP indipendentemente dal ruolo di fornitore e fruitore e dal titolo della partecipazione al progetto. Per quanto concerne le specifiche tecniche, verranno descritte le quattro modalità di integrazione previste: 1. Invio di eventi verso SDP (tipicamente da sensori, feed social (Twitter) o applicazioni) 2. Invio di dataset completi su SDP 3. Fruizione di eventi in streaming esposti da SDP 4. Fruizione dei dati presenti nella SDP tramite servizi REST Il documento descrive inoltre le specifiche necessarie per la gestione di sensori e webcam che comprendono informazioni di stato e altre informazioni di contesto (quali la localizzazione). 3 Linee Guida per l’integrazione 2 DEFINIZIONI ED ACRONIMI 2.1 DEFINIZIONI Gateway Identificatore Sensore Osservazione Il gateway è il componente che funziona da mediatore tra un sensore o una SN e Internet. Nelle piattaforme IoT viene in generale utilizzato per aggiungere tutte le funzionalità che sono richieste per l’interfacciamento alla piattaforma e che non possono essere fornite dai singoli sensori. Un codice numerico/alfanumerico in grado di identificare in modo univoco un sensore. Un sensore è un dispositivo o una componente software che invia una serie di osservazioni verso la piattaforma IoT (eventualmente attraverso la mediazione del gateway). Per osservazione si intende la rappresentazione di un fenomeno. L’osservazione fornisce la misura di una grandezza fisica con una serie di elementi di contesto (quali ad esempio tempo, posizione, accuratezza). 2.2 ACRONIMI ASN.1 BER BSON DASH DER FPS HLS IoT JSON MJPEG NOSQL SDP SN REST RTMP RTSP RTP URI UUID WSN XDR Abstract Syntax Notation One Basic Encoding Rules Binary JSON Dynamic Adaptive Streaming over HTTP Distinguished Encoding Rules Frames Per Second HTTP Live Streaming Internet of Things JavaScript Object Notation Motion JPEG No SQL Smart Data Platform Sensor Network REpresentational State Transfer Real Time Messaging Protocol Real Time Streaming Protocol Real time Transport Protocol Uniform Resource Identifier Universally Unique IDentifier Wireless Sensor Network eXternal Data Representation 4 Linee Guida per l’integrazione 3 TIPOLOGIE DI INFORMAZIONI La piattaforma SDP contiene le seguenti tipologie di dataset: • dataset contenenti eventi provenuti dai sensori • dataset contenenti eventi provenuti da Twitter • dataset contenenti messaggi provenuti da applicazioni • dataset frutto di elaborazioni realtime/offline interne alla piattaforma • dataset provenienti da Data Integration con fonti esterne (quali ad esempio opendata) 5 SDP 3.1 DISPONIBILITA’ DEI DATASET E DEI FLUSSI INVIATI SU SDP Indipendentemente dalla natura e dalla fonte di acquisizione dei dataset e dei flussi integrati su SDP, questi dovranno essere nella piena ed esclusiva disponibilità del fornitore. E’ sua esclusiva responsabilità avere infatti acquisito tutte le eventuali autorizzazioni e consensi da soggetti terzi, necessarie ed indispensabili per poter integrare in SDP dataset e flussi di dati. Il fornitore sarà quindi l’unico soggetto che risponderà di eventuali contestazioni o richieste di risarcimento danno da parte di terzi per violazione di un qualche diritto per un uso non legittimo e/o non autorizzato dei dati. Considerata inoltre la previsione del “Bando regionale a sostegno di progetti di ricerca industriale e/o sviluppo sperimentale di applicazioni integrate e innovative in ambito Internet of Data – IoD” della Regione Piemonte, in base alla quale "i dati raccolti grazie alla piattaforma regionale abilitante potranno sia aumentare il patrimonio informativo disponibile per le imprese dell’ecosistema in ottica di open data (e quindi riutilizzabile per la realizzazione di ulteriori nuove iniziative) sia arricchire il patrimonio informativo di conoscenza disponibile per la pubblica amministrazione in ottica di miglioramento delle politiche di governo e pianificazione" il fornitore ha la facoltà di decidere di mettere a disposizione di tutti i fruitori di SPD dataset e Linee Guida per l’integrazione flussi di dati rielaborazioni. utilizzati nell'ambito dei progetti nonchè loro eventuali Al fornitore che decide di esercitare questa facoltà si consiglia di adottare, a propria tutela, una o più licenze che definiscano la paternità e gli usi consentiti di dataset, flussi e loro rielaborazioni, nonchè le modalità e le condizioni che dovranno essere rispettate da terzi in caso di creazione di eventuali lavori derivati. Si ricorda che le licenze adottate da Regione Piemonte per la diffusione del proprio patrimonio informativo, in linea anche con le “Linee guida Agid per la valorizzazione del patrimonio informativo pubblico 2014”, sono consultabili a partire dal seguente indirizzo web: http://www.regione.piemonte.it/urp/opendata/ La licenza/le licenze andranno pubblicate sulla piattaforma essere chiaramente visibile a tutti i fruitori. in modo da Nell'individuare la licenza con cui mettere a disposizione dataset, flussi, loro rielaborazioni ed eventuali lavori derivati, il fornitore deve tenere conto di eventuali diritti di terzi. Il fornitore sarà, infatti, l’unico soggetto a rispondere ad eventuali contestazioni o richieste di risarcimento danni mosse da terzi per violazione dei loro diritti (L. 633/41, D. lgs. 196/03 e s.m.i.). Restano altresì nell'esclusiva responsabilità l'attendibilità di dataset, flussi e rielaborati del fornitore l'affidabilità e 3.2 PANORAMICA DI PROTOCOLLI E FORMATI Nell’immagine sottostante sono riassunti i principali protocolli in ingresso e in uscita dalla piattaforma. Nei paragrafi successivi sono dettagliate le specifiche di integrazione. 3.3 TIPOLOGIE DI DATO GEOGRAFICO Qualora l’invio delle informazioni, sia esso tramite eventi o tramite caricamento massivo di dataset, contenga informazioni geografiche che si intende trattare come tali, è opportuno che esse si riferiscano al sistema di coordinate UTMWGS84. 6 Linee Guida per l’integrazione 7 Linee Guida per l’integrazione 4 SPECIFICHE PER L’INVIO DI EVENTI VERSO SDP Vista la diversa natura e le diverse necessità di gestione delle informazioni alfanumeriche rispetto alle informazioni multimediali, verranno descritti separatamente i protocolli per l’invio dei dati in un caso rispetto all’altro. 4.1 SPECIFICHE PER L’INVIO DEI DATI ALFANUMERICI 8 Rientrano in questa categoria gli eventi provenienti dalle seguenti fonti: 1. Sensori o reti di sensori 2. Applicazioni 3. Feed Social (Twitter) Gli eventi provenienti dai Feed Social (Twitter) saranno direttamente recuperati dalla piattaforma, a fronte di una configurazione opportuna. Non vengono quindi descritte nel seguito le specifiche di interazione tra SDP e la piattaforma social. 4.1.1 Modello dei dati Viene descritto nel seguito il modello dati per le interazioni provenienti dalle applicazioni che intendono colloquiare con la piattaforma e successivamente viene descritto un modello per gli eventi provenienti dai sensori. Questa separazione nasce dall’idea che un’applicazione invia alla piattaforma Eventi di Business, mentre un sensore invia misure di grandezze fisiche. 4.1.2 Modello dei dati per le applicazioni Un’ applicazione che invia dati alfanumerici numerici alla SDP (messaggi) genera un flusso di dati. A questo flusso vengono associati alcuni meta-dati che sono rappresentati in Tabella 1. Tale flusso trasporta eventi di business omogenei e rilevanti per l’applicazione. Dato che un’ applicazione può pubblicare diversi tipi di messaggi (ossia diversi flussi) è opportuno che a ciascun flusso dati (Stream) sia associato un identificatore che è locale alla applicazione. Attributo id application description tags visibility Descrizione Tipo Identificatore del flusso (univoco solo per Stringa una applicazione) Identificatore dell’applicazione Stringa (7.1) Descrizione libera Stringa Tag utili per la ricerca Vettore stringhe Visibilità del flusso “public” “private” di Linee Guida per l’integrazione Attributo domain license disclaimer copyright components Descrizione Il nome di un progetto/consorzio/network di appartenenza del flusso Tag Creative Commons che identifica la licenza sottoposta al flusso (e. “CC0 1.0”, “CC BY 4.0”) Dichiarazione di limitazione di responsabilità Nota di copyright Un vettore che contiene la descrizione di tutte le componenti del flusso Tabella 1- Oggetto Stream Tipo Stringa Stringa Stringa Stringa Vettore oggetti Component di Nella descrizione di un flusso (Stream) è opportuno riportare un elenco di componenti (Component) che collettivamente forniscono la rappresentazione di un evento di business (Business Event). Per esempio l’evento di invio di un ordine può contenere diverse informazioni (componenti) quali identificativo dell’ordine, la quantità ordinata, il tipo di oggetto, il destinatario etc… L’approccio usato permette di associare meta dati anche alle singole componenti (Tabella 2). Attributo id event type Descrizione Identificatore della componente Nome dell’attributo Permette di risalire al dominio del dato (ad esempio numeri reali, interi positivi, enumerazione e stringhe) Tabella 2- Oggetto Component Tipo Stringa Stringa Uno tra: int, long, double, float, string, boolean L’invio dei messaggi deve permettere di ricostruire l’associazione con i metadati del flusso. Per questo motivo ogni messaggio riporta l’identificatore del flusso e del applicazione cui si riferisce. Per poter gestire ogni tipo di situazione (invio di singoli eventi complessi o invio ”batch” di eventi complessi) nell’invio di un messaggio (Message) è possibile specificare un elenco di valori (Tabella 3). Attributo stream application values Descrizione Identificatore del flusso Identificatore dell’applicazione Valori da inviare Tabella 3- Oggetto Message Tipo Stringa Stringa Vettore di oggetti Business Event 9 Linee Guida per l’integrazione Infine ogni singolo Business Event riporta i valori di tutte le componenti (Tabella 4). Attributo time Descrizione Data e ora dell’evento di business components I valori associati alle diverse componenti Tabella 4- Oggetto Business Event Tipo Stringa ([ISO8601]) Mappa associativa in cui la chiave è l’id del componente e il valore è il valore dell’attributo di interesse 4.1.3 Modello dei dati per gli eventi provenienti da sensori L’approccio è simile a quello sopra descritto, con la presenza di campi obbligatori aggiuntivi tipici di strumenti atti ad effettuare misure. Tali differenze sono evidenziate con la sottolineatura. Le classi del modello ottengono nomi specifici con la seguente mappatura: Dati provenienti da applicazioni Metadata Metadata Metadata Runtime data Runtime data Stream Component Application Message Dati provenienti da sensori Stream Component Sensor Observation Business Event Measure Un sensore che invia dati numerici alla SDP (osservazioni) genera un flusso di dati. A questo flusso vengono associati alcuni meta-dati che sono rappresentati in Tabella 5. Dato che un gateway o uno smart sensor possono pubblicare diversi tipi di misure (si pensi ad esempio una centralina meteo) è opportuno che a ciascun flusso dati (Stream) sia associato un identificatore che è locale al sensore/gateway. 10 Linee Guida per l’integrazione Attributo id sensor description tags visibility fps domain license disclaimer copyright components Descrizione Tipo Identificatore del flusso (univoco solo per Stringa un dato sensore) Identificatore del sensore Stringa (7.1) Descrizione libera Stringa Tag utili per la ricerca Vettore stringhe Visibilità del flusso “public” “private” Associando al concetto di frame una Numero singola osservazione, questo parametro (condiviso anche con i flussi multimediali) permette di dare evidenza della frequenza di acquisizione della misura Il nome di un progetto/consorzio/network Stringa di appartenenza del flusso (e. “MeteoNetwork”) Tag Creative Commons che identifica la Stringa licenza sottoposta al flusso (e. “CC0 1.0”, “CC BY 4.0”) Dichiarazione di limitazione di Stringa responsabilità Nota di copyright Stringa Un vettore che contiene la descrizione di Vettore tutte le componenti del flusso oggetti Component di 11 di Tabella 5 Oggetto Stream Nella descrizione di un flusso (Stream) è opportuno riportare un elenco di componenti (Component) che collettivamente forniscono la rappresentazione di una misura complessa (Measure). Ad esempio un accelerometro che dal punto di vista logico genera un solo flusso in cui ciascun valore è composto da tre elementi: il valore delle accelerazioni sui tre assi. Linee Guida per l’integrazione L’approccio usato permette di associare meta dati anche alle singole componenti, importante per identificare l’unità di misura e la tolleranza (Tabella 6) Attributo id unit allowance event type Descrizione Identificatore della componente (univoco solo all’interno della misura) Unità di misura Tolleranza espressa come valore assoluto dell’errore sulla misura Tipo di fenomeno misurato (e. “Wind Speed”) Permette di risalire al dominio del dato (ad esempio numeri reali, interi positivi, enumerazione e altri) Tabella 6- Oggetto Component Tipo Stringa Stringa Numero Stringa Uno tra: int, long, double, float, string, boolean L’invio delle osservazioni (valori delle misure) deve permettere di ricostruire l’associazione con i metadati del flusso. Per questo motivo ogni misura riporta l’identificatore del flusso e del sensore cui si riferisce. Per poter gestire ogni tipo di situazione (sensori real-time o data logger che si sincronizzano periodicamente) nell’invio di una osservazione (Observation) è possibile specificare un elenco di valori (Tabella 7). Attributo stream sensor values Descrizione Identificatore del flusso Identificatore del sensore Valori letti Tabella 7- Oggetto Observation Tipo Stringa Stringa Vettore di oggetti Measure Infine ogni singola misura riporta i valori di tutte le componenti (Tabella 8). Occorre notare che il campo Validity è una informazione che generalmente non deve essere fornita dal sensore, ma viene impostato dalla SDP sulla base di alcuni algoritmi di elaborazione; tuttavia è possibile che un sensore sia abbastanza intelligente da effettuare minimi controlli di validità sui valori acquisiti e rendere nota questa informazione alla SDP. 12 Linee Guida per l’integrazione Attributo time Descrizione Data e ora della misura components I valori associati alle diverse componenti validity Validità della misura Tipo Stringa ([ISO8601]) Mappa associativa in cui la chiave è l’id del componente e il valore è la misura “valid” “erroneous” “doubtful” “unknown” Tabella 8- Oggetto Measure 4.1.4 Formati di rappresentazione Per la serializzazione il protocollo oggetto di questa specifica supporta sia JSON che BSON. 4.1.5 Binding di trasporto L’invio di Observation (sensori) e Message (applicazioni) può avvenire su http e su MQTT. 4.1.6 HTTP Nell’invio, l’oggetto viene inviato come parte di una richiesta POST e la risposta del server è vuota. In presenza di invii da sensori e di aggiornamenti al firmware che interessano il gateway o lo smart sensor. In tal caso viene restituito l’oggetto descritto in 6.1 (piggybacking). HTTP/1.1 200 OK Content-type: text/json { } Version: “1.1c”, URL: “http://<host>/data.zip”, Hash: “3ea4c8f57b985435d2f2ca9b5ff99e8a”, Size: 101310, Time: “2014-05-12T06:27:36Z”, Priority: “Critical”, Requirement: “1.0” 13 Linee Guida per l’integrazione 4.1.7 MQTT In questo caso il soggetto che invia messaggi si deve connettere alla coda come publisher. Essendo questo trasporto privo di risposta, non è possibile realizzare l’ottimizzazione che in HTTP consente di ricevere eventuale informazione sulla presenza di nuovi aggiornamenti per i sensori/gateway; tuttavia in MQTT è possibile sottoscriversi ad un topic dedicato per ottenere le notifiche di aggiornamento. 4.2 PROTOCOLLO PER L’INVIO DI DATI MULTIMEDIALI In relazione ai flussi multimediali, la presente specifica si basa principalmente sulle funzionalità offerte dai prodotti disponibili sul mercato e in modo particolare dalle videocamere IP utilizzate nell’ambito della video sorveglianza pubblica e domestica. 4.2.1 Formati di codifica Nonostante vi siano innumerevoli formati per la codifica audio/video, la maggior parte delle videocamere IP supporta i formati che più economicamente è possibile trovare implementati nei microprocessori dedicati permettendo di mantenere bassi i consumi e il costo finale del prodotto: • • MPEG-4 Part 10/AVC Baseline/Main Profile (H.264) Motion JPEG 4.2.2 Protocolli di streaming I modelli più vecchi di webcam IP utilizzano unicamente il protocollo http per il trasporto di un flusso MJPEG. Il live viene realizzato attraverso un polling del client (tipicamente una applicazione Javascript in un browser) o sfruttando il modello http-push. Tutti i prodotti in grado di supportare la codifica H.264 implementano il protocollo RTSP per distribuire il flusso live verso il client. Pur esistendo protocolli di streaming innovativi e meglio integrati all’interno delle piattaforme mobile e browser (quali ad esempio HLS, DASH e RTMP) in questa specifica i flussi video devono essere messi a disposizione della piattaforma con le seguenti modalità: • • La webcam deve mettere a disposizione un server RTSP ([RTSP]) che deve essere raggiungibile dalla SDP; La webcam deve mettere a disposizione un server http che deve essere raggiungibile dalla SDP per ricevere le immagini secondo il protocollo HTTP push (4.2.1). 14 Linee Guida per l’integrazione 4.2.3 http push In generale per http-push si intende un modello attraverso il quale un server manda un contenuto non sollecitato dal client (ovvero non in risposta ad una esplicita richiesta). Essendo un modello può essere realizzato con diverse tecnologie, tuttavia ai fini della presente specifica ci si riferisce all’utilizzo di un oggetto MIME introdotto da Netscape e che quasi tutte le webcam IP supportano per distribuire i flussi MJPEG. SDP -> Webcam GET /path/to/mjpeg/stream HTTP/1.1 Webcam -> SDP HTTP/1.1 200 OK Content-Type: multipart/x-mixed-replace;boundary=--MYBOUNDARY <empty line> Ricevendo il contenuto x-mixed-raplace il client sa che non deve essere chiusa la connessione HTTP e resta in attesa di nuovi aggiornamenti della risorsa (in questo caso si tratta di immagini JPEG). Sulla base del frame rate, ogni volta che la webcam dispone di una nuova immagine, invia sulla connessione HTTP attiva il nuovo aggiornamento come descritto nell’esempio. Webcam -> SDP --MYBOUNDARY Content-Type: image/jpeg <empty line> <JPEG bytes> --MYBOUNDARY Content-Type: image/jpeg <empty line> <JPEG bytes> ... 5 INTEGRAZIONE DI DATI TRAMITE IMPORT VERSO SDP E’ possibile importare in modalità batch sulla piattaforma dataset nei formati più comuni: CSV, Excel, Dump di DB relazionali. 15 Linee Guida per l’integrazione 6 SPECIFICHE PER LA FRUIZIONE DI EVENTI ESPOSTI DA SDP Vista la diversa natura e le diverse necessità di gestione delle informazioni alfanumeriche rispetto alle informazioni multimediali, verranno descritti separatamente le specifiche per l’invio dei dati in un caso rispetto all’altro. 6.1 STREAMING API PER LA FRUIZIONE DI EVENTI ALFANUMERICI La piattaforma SDP consente la fruizione degli eventi in modalità “stream”. Diversamente dalle API REST, descritte nel capitolo successivo, che prevedono un’interazione request-response, nel caso di fruizione in modalità “stream” il fruitore si sottoscrive ad flusso di informazioni e viene notificato dalla piattaforma a fronte di un nuovo evento (modalità publish-subscribe). Esistono due tipologie di sottoscrizione: 1. Sottoscrizione di un endpoint “server”: in questo caso è necessario dichiarare preventivamente e staticamente l’endpoint sottoscritto. In questo scenario la piattaforma richiama l’endpoint fornendo le informazioni dell’evento generato sul flusso sottoscritto (Event Streaming push) . 2. Sottoscrizione di un endpoint “client”: in questo caso il fruitore è tipicamente un client “finale” e effettua una sottoscrizione richiamando un API specifica e, attende le informazioni relative ai nuovi eventi (Event Streaming API). 6.1.1 Modello dei dati Il modello dati rispecchia il modello degli eventi ricevuti dalla piattaforma, con eventuale aggiunta di campi calcolati da elaborazioni realtime eseguite sulla stessa. 6.1.2 Event Streaming push 6.1.3 JSON/XML over HTTP Il formato di rappresentazione fornito è JSON o XML. L’endpoint da richiamare deve essere censito sulla piattaforma indicandone l’url e il formato richiesto (JSON o XML). 6.1.4 Soap-Event over http Il formato di rappresentazione fornito è SOAP. L’endpoint da richiamare deve essere censito sulla piattaforma indicandone l’url. 16 Linee Guida per l’integrazione 6.1.5 Event Streaming API 6.1.6 STOMP over WebSocket Il formato di rappresentazione del payload fornito è JSON. Il protocollo di comunicazione utilizzato è WebSocket. In questo scenario la piattaforma non consentirà la pubblicazione di eventi da parte del client, ma solo la sottoscrizione e ricezione. 6.1.7 JSON over MQTT Il formato di rappresentazione del payload fornito è JSON. Il protocollo di comunicazione utilizzato è MQTT. In questo scenario la piattaforma non consentirà la pubblicazione di eventi da parte del client, ma solo la sottoscrizione e ricezione. 6.2 SPECIFICHE PER LA FRUIZIONE DI STREAM MULTIMEDIALI La piattaforma SDP espone gli stream multimediali secondo il formato webM. 7 REST API PER L’ACCESSO AI DATI DELLA SDP TRAMITE SERVIZI Nel presente capitolo sono descritte le specifiche relative alle REST API per la fruizione dei dati immagazzinati in SmartDataPlatform (SDP). Le REST API consentono la fruizione omogena di tutti i dati, permettendone inoltre la discovery. 7.1 FORMATO DI RAPPRESENTAZIONE Il formato di rappresentazione fornito è JSON o XML. E’ possibile scegliere il formato di output valorizzando opportunamente la url di richiamo. 7.2 BINDING DI TRASPORTO Le API sono esposte tramite protocollo http o https. 7.3 SPECIFICHE DELLE API ESPOSTE Le API di interrogazione consentono, dato un dataset di interesse, di ricercare e recuperare le informazioni presenti. Le specifiche implementate rispettano le specifiche OData in versione 2 per entità non aggiornabili. 17 Linee Guida per l’integrazione 7.4 MODELLO DEI DATI RESTITUITO Il modello dati rispecchia le scelte ed è compatibile con le regole previste nel portale opendata dati.piemonte.it. Particolare attenzione è stata data a recepire le best practice presenti nello standard OData. 8 SICUREZZA E PRIVACY 8.1 IDENTIFICAZIONE L’identificazione univoca dei sensori deve essere fatta utilizzando uno Universally Unique Identifier (UUID). Si tratta di un numero su 128bit che attraverso specifici algoritmi di generazione viene garantito univoco nello spazio e nel tempo ([UUID]). In particolare questo numero su 128 bit deve essere rappresentato nella sua forma canonica attraverso 32 caratteri esadecimali e minuscoli (8-4-4-4-12) come nel seguente esempio: 550e8400-e29b-41d4-a716-446655440000 8.2 AUTENTICAZIONE Tutte le comunicazioni che vanno verso la piattaforma devono contenere le informazioni che consentano alla piattaforma di autenticare la sorgente. Tale paradigma si applica quindi ai messaggi provenienti dai sensori o feed, e alle richieste effettuate tramite REST API o Streaming API. La SDP mette a disposizione l’autenticazione basic (ovvero quella basata sull’invio di username e password). In versioni successive i client potranno opzionalmente utilizzare il protocollo OAuth 2.0 ([OAUTH]). I paragrafi successivi descrivono come devono essere passate le credenziali necessarie all’autenticazione sulla base del trasporto utilizzato (MQTT e HTTP). 8.2.1 Autenticazione su MQTT L’autenticazione su MQTT avviene inserendo username e password negli appositi campi previsti dal protocollo nella fase di connessione. 8.2.2 Variante OAuth Nella variante OAuth 2.0 il sensore deve inviare unicamente il valore del token di accesso all’interno del campo destinato alla password, mentre nel campo username occorre inserire la stringa “OAuth Bearer” come indicato nell’esempio di Tabella 9. Campo Username Password Valore OAuth Bearer mF_9.B5f-4.1JqM Tabella 9- Bearer token OAuth 2.0 su MQTT 18 Linee Guida per l’integrazione 8.2.3 Autenticazione su http Su HTTP occorre utilizzare la Basic Authentication come specificato in [HTTPA]. 8.2.4 Variante OAuth Nella variante OAuth 2.0, il token deve essere inviato utilizzando l’header Authorization ([BEARER]) come nel seguente esempio. POST /path/to/endpoint HTTP/1.1 Authorization: Bearer mF_9.B5f-4.1JqM Content-type: text/json { } “stream”: “thermo_a” “sensor”: “550e8400-e29b-41d4-a716-446655440000”, “values”: [ { “time”: “2014-05-13T17:08:58+0200”, “components”: { “temp”: ”12.4” } }, { “time”: “2014-05-13T17:10:39+0200”, “components”: { “temp”: ”256” }, “validity”: “erroneous” } ... ], 8.3 ULTERIORI ASPETTI DI SICUREZZA Sia il protocollo HTTP che MQTT possono essere veicolati su SSL/TLS ([TLS]). La SDP può offrire questo protocollo nella configurazione che prevede l’autenticazione del server e la sicurezza del canale attraverso cifratura. 8.4 ASPETTI DI PRIVACY Tutti i dati che vanno verso la piattaforma e che identificano o possono identificare anche indirettamente, mediante riferimento a qualsiasi altra informazione, una “persona fisica”, sono, a tutti gli effetti di legge, dei “dati personali” ai sensi del D.Lgs. 196/2003, Codice in materia di protezione dei dati personali. In tal caso, si ricorda che al Fornitore spettano, in qualità di Titolare autonomo del trattamento dei dati forniti, tutti gli adempimenti finalizzati ad ottemperare alla normativa in materia di privacy (informative, acquisizione di consensi da parte degli interessati, eventuali nomine, notificazioni, verifiche preliminari, adozione di idonee misure di sicurezza ecc.). 19 Linee Guida per l’integrazione Non sono soggetti agli adempimenti previsti dal Codice in materia di protezione dei dati personali solo i trattamenti di dati personali “anonimi", dati che in origine, o a seguito di tecniche di anonimizzazione, non possono essere associati in modo univoco ad una persona fisica identificata o identificabile. 20 Linee Guida per l’integrazione 9 APPENDICI 9.1 PROTOCOLLO PER LA GESTIONE DEI SENSORI 9.1.1 Modello dei dati Per poter inviare dei dati o dei flussi alla SDP, è necessario che il sensore sia rappresentato all’interno della piattaforma. Il sensore è in generale un oggetto in grado di interagire direttamente con la piattaforma, attraverso le interfacce di invio dei dati (le quali sono descritte nelle sezioni 3 e 4). In Tabella 10 sono riportati i principali attributi che compongono la descrizione di un generico sensore. Occorre notare che ai fini della presente specifica, vengono volutamente omessi da tale tabella tutti gli attributi che vengono generati dalla piattaforma e che servono per la gestione del sensore stesso. Attributo id name model location description category supply management status version Descrizione Un identificatore del sensore Nome descrittivo del sensore (e. “Centralina Meteo Ciardoney”) Nome del modello (e. “Campbell GRWS100”, TrafficConter”) Posizione del sensore Tipo Stringa (7.1) Stringa “CSP Stringa Oggetto: Location (Tabella 6) Descrizione libera Stringa Categoria di appartenenza del sensore. “Gateway” “Webcam” “Smart” Serve a capire se il sensore è dotato di “Auto” alimentazione autonoma (e. batteria “Network” ricaricata con pannelli solari) o se è collegato alla rete elettrica La URI che punta all’interfaccia di Stringa (URI) amministrazione del sensore Stato del sensore “Active” “Unactive” Versione del software o del firmware Stringa Tabella 10- Modello dei dati che rappresenta un generico sensore 21 Linee Guida per l’integrazione Attributo disposition exposure positions Descrizione Permette di capire se si tratta di un dispositivo mobile o meno. Permette di capire se si tratta di un sensore installato in esterno oppure no. Elenco delle posizioni Tabella 11- Oggetto Location Attributo lat lon ele time building floor room Descrizione Latitudine in gradi Longitudine in gradi Altezza in metri Data e ora della posizione Struttura che ospita il sensore Piano in cui è collocato il sensore Stanza che ospita il sensore Tabella 12- Oggetto Position Tipo “Fixed” “Mobile” “Indoor” “Outdoor” Vettore di oggetti Position (Tabella 7) Tipo Numero reale Numero reale Numero reale Stringa ([ISO8601]) Stringa Numero intero Stringa 22 Linee Guida per l’integrazione 9.1.2 Webcam Le webcam richiedono ulteriori informazioni che sono legate alle caratteristiche con cui sono in grado di riprendere una scena (Tabella 13) Attributo Descrizione Tipo url URL che permette di accedere al Stringa (URL) flusso. (e. “rtsp://<indirizzo_ip>/stream_0”) username Utente per accesso in lettura al flusso Stringa password Password per accesso in lettura al flusso Stringa resolution Risoluzione dell’immagine Stringa (“WxH”) pan tilt zoom ptz codec type infrared Angolo orizzontale rispetto al nord in senso antiorario Angolo rispetto al piombo (asse verticale) Zoom ottico (passo di zoom) La webcam può cambiare orientamento in quanto dotata di motori oppure può avere una staffa fissa. Il codec video utilizzato dalla webcam (e. “H264”, “MJPEG”, “VP8”) Tipo di webcam Numero naturale 360) Numero naturale 180) Intero “Present” “Not-Present” (0(0- Stringa “normal” “termo” La webcam dispone di un illuminatore “present” infrarosso “not-present” Tabella 13- Attributi aggiuntivi per le webcam 9.1.3 Formato di rappresentazione Per formato di rappresentazione si intende il formalismo con cui gli oggetti descritti in questa interfaccia vengono serializzati e scambiati tra sensore/gateway e la SDP. Le applicazioni conformi alla presente specifica, devono supportare due formati di rappresentazione: • • JSON BSON 9.1.3.1 JSON JSON (JavaScript Object Notation) è un formato testuale per lo scambio di dati ([JSON]). A differenza dei linguaggi XML presenta una sintassi specificatamente orientata alla rappresentazione di strutture dati tipiche dei moderni linguaggi di programmazione. In particolare la sintassi di JSON è 23 Linee Guida per l’integrazione basata su un sottoinsieme del linguaggio di programmazione JavaScript ([ECMA]). Oltre ad essere più compatto rispetto ad XML resta allo stesso tempo leggibile dalle persone e parsificabile in modo efficiente da parte del software. Il seguente esempio mostra la rappresentazione di una centralina meteo posta sul ghiacciaio del Ciardoney. { } “id”: “550e8400-e29b-41d4-a716-446655440000”, “name”: “Centralina Meteo Ciardoney”, “model”: “Campbell GRWS100”, “location”: { “disposition”: “fixed”, “exposure”: “outdoor”, “positions”: [ { “lat”: 45.521439, “lon”: 7.407167, “ele”: 2850 } ] }, “category”: “smart”, “supply”: “auto”, “owner”: “http://www.nimbus.it/”, 9.1.3.2 BSON BSON (Binary JSON) è una specifica finalizzata a rappresentare un oggetto JSON in forma binaria, sfruttando i tipi di base che esistono nel linguaggio di programmazione C ([BSON]). Si tratta del formato utilizzato da MongoDB: un database NOSQL orientato ai documenti JSON e che usa un sotto insieme del linguaggio JavaScript per l’esecuzione di query. Rispetto ad altri formati binari standard (quali ad esempio ASN.1 DER/BER e XDR), compreso il recente Protocol Buffers di Google 1, ha caratteristiche di restare un formato privo di schema. Il formato BSON può essere utilizzato da sensori autonomi, basati su microcontrollori tipo Arduino o Microchip, dove è importante mantenere al minimo non solo la complessità del codice ma anche la sua occupazione in memoria. Un formato compatto come BSON permette anche l’uso ottimale delle code distribuite a bassa latenza per il trasporto di tali oggetti (come ad esempio MQTT). 9.1.4 Binding di trasporto 9.1.5 http La SDP mette a disposizione una API accessibile attraverso il protocollo HTTP e che permette la creazione e la manipolazione degli oggetti che 1 https://developers.google.com/protocol-buffers/ 24 Linee Guida per l’integrazione rappresentano lo stato di sensori e webcam. Il modello di questi dati è specificato nella paragrafi 5.1. Tale API segue il modello REST, dove la rappresentazione dello stato dei sensori e delle webcam si basa sul modello dei dati e sui formati di codifica descritti nei paragrafi 5.1 e 5.2 rispettivamente. Nello specifico gli oggetti verranno inviati dal server verso la piattaforma come parte di una richiesta POST, mentre i dati in lettura (dalla piattaforma verso il client) vengono restituiti come parte della risposta. 9.1.6 MQTT La SDP mette a disposizione un server MQTT che può essere utilizzato da uno smart sensor o da un gateway per annunciare i sensori e pubblicare aggiornamenti di stato. Il corpo del messaggio MQTT contiene gli oggetti descritti nel modello (5.1) i quali possono essere serializzati in forma testuale o binaria come descritto in 5.2. 9.2 AGGIORNAMENTI AUTOMATICI DEI SENSORI Smart sensor e gateway devono implementare una interfaccia che permette alla SDP di effettuare l’aggiornamento automatico del software (o del firmware). 9.2.1 Modello dei dati Il modello dei dati per la segnalazione degli aggiornamenti (Tabella 14) fornisce le informazioni che possono permettere al gateway o allo smart sensor di applicare diverse politiche di gestione degli aggiornamenti. Attributo version url hash Descrizione Versione del firmware o del software URL da cui scaricare il firmware Hash SHA1 size time priority Dimensione in byte Data e ora di pubblicazione Priorità dell’aggiornamento requires Versione minima cui è applicare l’aggiornamento Nome che identifica il modello cui si Stringa applica l’aggiornamento model Tipo String Stringa (URL) Stringa (numero esadecimale) Numero Stringa ([ISO8601]) “critical” “optional” possibile Stringa Tabella 14- Notifica di aggiornamento 25 Linee Guida per l’integrazione 9.2.2 Formato di rappresentazione Per la serializzazione il protocollo oggetto di questa specifica supporta sia JSON che BSON come descritto in 5.2. 9.2.3 Binding di trasporto I messaggi di notifica per gli aggiornamenti automatici possono essere veicolati sia su HTTP che su MQTT (vedi 5.3). 9.2.4 MQTT Quando si utilizza MQTT il sensore (o gateway) deve sottoscriversi ad uno specifico topic per ricevere l’informazione. 9.2.5 HTTP Se il sensore implementa il trasporto HTTP, deve effettuare un polling periodico ad una specifica URL che per il modello richiesto fornisce i dati relativi all’aggiornamento più recente. Per maggiore flessibilità e ottimizzazione, il sensore che invia i dati in piattaforma utilizzando il trasporto HTTP può ricevere, come parte della risposta, l’informazione sugli aggiornamenti (3.3.1). 9.2.6 Webcam La maggior parte delle webcam offre un sistema di aggiornamento del firmware, tuttavia non c’è la convergenza verso un protocollo unificato. L’indicazione di massima che viene fornita per accedere alle funzioni di aggiornamento automatico è quella di utilizzare prodotti in grado di offrire tale funzione attraverso una interfaccia web. In questi casi l’interfaccia deve essere resa raggiungibile dalla SDP in modo da poter riuscire ad effettuare in automatico gli aggiornamenti, sviluppando specifici adattatori sulla base del modello di webcam utilizzato. 9.3 SPECIFICHE DI DISCOVERY DEI DATASET 9.3.1 Introduzione La piattaforma sarà dotata di un sito divulgativo che consente la ricerca e la sottoscrizione, in un’ ottica marketplace, dei dataset disponibili. In aggiunta a tale possibilità, la piattaforma espone una serie di REST API che consentono l’esplorazione dei dataset disponibili, con un sottoinsieme di api conformi allo standard CKAN. 9.3.2 Formato di rappresentazione Il formato di rappresentazione fornito è JSON. 9.3.3 Binding di trasporto Le API sono esposte tramite protocollo HTTP. 26 Linee Guida per l’integrazione 9.3.4 Modello dei dati In accordo con la nomenclatura CKAN le classi oggetto dalle API REST di discovery sono: 9.3.5 Package Il Package corrisponde al dataset, ed è l'oggetto principale di tutto il sistema; esso rappresenta un insieme coerente di dati appartenenti alla stessa natura. Per esempio le osservazioni che giungono alla piattaforma da un insieme di sensori identici utilizzati all’interno di un progetto fanno parte di un Package. Formato: { } “id” : id, “name” : name, “title” : title, “version” : version, “url” : url, “resources” : [Resource1, Resource2, ...], “author” : author, “author_email” : author_email, “maintainer” : maintainer, “maintainer_email” : maintainer_email, “license_id” : license_id, “tags” : Tag - List, “notes” : notes, “extras” : { name : value, ... } Nella tabella sottostante sono riportati i dettagli dei vari attributi. Attributi dell'oggetto Nome attributo Tipo attributo id String name String title version url String String String resources Resource Note Identificativo del package Identificativo del package interno al portale riuso Titolo del package Versione del package Url della pagina web in cui sono descritti i metadati del package Elenco di oggetti di tipo Resource collegati al package 27 Linee Guida per l’integrazione Attributi dell'oggetto Nome attributo Tipo attributo author String author_email String maintainer String maintainer_email String license_id String tags Tag-List notes extras String String Note Proprietario del package Riferimento email del proprietario del package Gestore o responsabile della pubblicazione del package Riferimento email del gestore o responsabile della pubblicazione del package Identificativo della licenza a cui è assoggettato l'utilizzo del package (ad esempio “cc-by”) Oggetto di tipo Tag-List. Contiene i name dei Tag associati al package Ulteriori informazioni sul package Attributi aggiuntivi del package, costituiti da un elenco di coppie Name: Value, dove Name è il nome dell'attributo e Value il valore corrispondente. Il numero delle coppie non ha un limite massimo. L’informazione relativa alla provenienza del dato è presente sotto forma di tag aggiuntivo scelto tra: • sensor_data • social_data • elaborated_data • imported_data 9.3.6 Package-List Il Package-List contiene un elenco di identificativi di Package, che si riferiscono ad oggetti di tipo Package. Formato: [ Id_1, Id_2, Id_3, ... , Id_n] Id_n indica l'identificativo del Package n ed è una stringa. 9.3.7 Tag Un Tag rappresenta una parola chiave ed ha significato se riferita ad un Package. Un Package può essere relazionato a più Tag. Formato: { “name”: name } dove “name” indica il nome del Tag. 28 Linee Guida per l’integrazione 9.3.8 Tag-List Il Tag-List rappresenta un elenco di Tag, con indicazione del numero di Package relazionati con ciascuno di essi. Formato: [ [ name, n], [name, n], …...., [name, n] ] dove “name” indica il campo name del Tag e “n” indica il numero di Package relazionati con quel Tag. 9.3.9 Resource L'oggetto Resource contiene le informazioni per raggiungere il dato vero e proprio, descritto attraverso il Package. Il Resource corrisponde ad un file, un endpoint di un’ API o ad un'altra risorsa di dati disponibile on line. Un Resource è sempre collegato ad un Package (o Dataset), che può avere più Resources associati. Formato: { “id” : id, “url” : url, “format” : format, “description” : description, “hash” : hash, “package_id” : package_id } Nella tabella sottostante sono riportati i dettagli dei vari attributi. Attributi dell'oggetto Nome attributo Tipo attributo Note id String Identificativo del Resource url String Url che consente di raggiungere la location in cui la risorsa è effettivamente disponibile. format String Formato della risorsa (ad esempio zip, csv, api,...). description String Descrizione della risorsa hash String Hash package_id String Identificativo del Package a cui il Resource si riferisce 29 Linee Guida per l’integrazione 9.3.10 Specifiche delle API esposte Di seguito le API Rest che consentono l’interrogazione della piattaforma al fine di recuperare le informazioni relative ai dataset (package) disponibili (discovery). 9.3.11 Elenco Package Consente di estrarre l'elenco degli identificativi di tutti i Package presenti nel repository. Input http://{endpoint}/servizi/api/explore/package Output Il metodo restituisce in output un oggetto di tipo Package-List, ossia un elenco di identificativi di Package. 9.3.12 Package by Id Consente di estrarre le informazioni complete di un Package relativo ad uno specifico identificativo. Input http://{endpoint}/it/servizi/api/explore/package/[id] dove [Id] è l’identificativo di uno specifico Package. Output Il metodo restituisce in output un oggetto di tipo Package. 9.3.13 Package Search Consente di ricercare un elenco di identificativi di Package. Input http://{endpoint}/servizi/api/explore/package?q=[tag] Output La risposta al metodo è strutturata nel seguente modo: { “count”: Count-int, “results”:[Id_Package, Id_Package, …] } dove Count-int è il numero di Packages estratti e Id_Package è l'identificativo del Package. 9.3.14 Tag Counts Consente di estrarre l'elenco dei tag con indicazione del numero di Packages relazionati con ciascuno di essi. Input http://{endpoint}/servizi/api/explore/tag_counts Output Il metodo restituisce in output un elenco di tag seguiti dal numero di Package corrispondenti. 30 Linee Guida per l’integrazione 10 RIFERIMENTI [BEARER] [BSON] [ECMA] [ISO8601] [MQTT] [RTSP] [HTTPA] [OAUTH] [JSON] [TLS] [UUID] RFC 6750, OAuth 2.0 Bearer Token Usage, IETF, 2012 http://bsonspec.org/ ECMA 262, Linguaggio di Programmazione JavaScript Terza Edizione, 1999 ISO 8601:2004, Date and time format Terza Edizione, 2013 http://mqtt.org/ RFC 2326, Real Time Streaming Protocol (RTSP), IETF, 1998 RFC 2617, HTTP Authentication: Basic and Digest Access31 Authentication, IETF, 1999 RFC 6749, The OAuth 2.0 Authorization Framework, IETF, 2012 ECMA 404, The JSON Data Interchange Format, Ecma International, 2013 RFC 5246, Transport Layer Security (TLS) Protocol Version 1.2, 2008 X.667, Information technology - Procedures for the operation of object identifier registration authorities: Generation of universally unique identifiers and their use in object identifiers, ITU, 2012
© Copyright 2024