Semantic ArDroid

12
Semantic ArDroid - Relazione_finale - # 25 Il progetto Semantic Android Il progetto Semantic ArDroid è stato sviluppato con l'obiettivo di rendere possibile l'utilizzo di un'applicazione per l'accesso sicuro ai dati provenienti da endpoint SPARQL, in uno scenario distribuito e con l'utilizzo dispositivi mobile (large screen/tablet). Il design architetturale ha previsto il connubio di un dispositivo hardware che fungesse da "Android Accessory" per l'autenticazione basato su Arduino UNO o Arduino MEGA Android ADK e di un tablet Android (con SDK minimo pari a 11 - Honey Comb). Il funzionamento di base Lo scenario applicativo ipotizzato in ambito progettuale è stato definito partendo dall'assunto che l'utilizzatore di tale applicazione dovesse avere la disponibilità di un tablet Android con accesso a Internet e dotato di Bluetooth e che dovesse trovarsi nelle vicinanze del dispositivo di autenticazione basato su RFID tags. Presupponendo uno scenario di questo tipo un'ipotesi potrebbe essere quella di un operatore che si sposti su un autoveicolo aziendale dotato di una presa di corrente a 12 V che possa alimentare il dispositivo d'autenticazione, oppure un veicolo che abbia già incorporato tale dispositivo. L'azienda o l'ente che fornisca tale applicazione ai propri operatori incaricati sul territorio non farebbe altro che dare ad ognuno di essi un tag di autenticazione univoco e un tablet con l'applicativo preinstallato. In tal modo, durante il corso dei normali spostamenti, l'incaricato potrà accedere al sistema aprendo l'app Semantic ArDroid sul proprio Android device e richiedendo l'autenticazione tramite comunicazione Bluetooth RFCOMM al dispositivo hardware d'autenticazione. Una volta associato tale dispositivo al tablet verrà richiesto, tramite Alert su Android e tramite segnalazione LED sull'hardware, l'autenticazione per mezzo della lettura di un tag RFID. Android provvederà poi a confrontare il valore dei 10 digit del tag con il proprio database e a permettere la successiva interrogazione degli endpoint remoti per mezzo di visualizzazioni grafiche basate su mappe o grafici di vario tipo, permettendo così all'operatore un monitoraggio costante del territorio su cui si trova ad operare tramite l'utilizzo di applicazioni semantiche. Lo Use Case Android + Arduino 24/09/2012 1/11

description

Il progetto Semantic ArDroid è stato sviluppato con l'obiettivo di rendere possibile l'utilizzo di un'applicazione per l'accesso sicuro ai dati provenienti da endpoint SPARQL, in uno scenario distribuito e con l'utilizzo dispositivi mobile (large screen/tablet). Il design architetturale ha previsto il connubio di un dispositivo hardware che fungesse da "Android Accessory" per l'autenticazione basato su Arduino UNO o Arduino MEGA Android ADK e di un tablet Android (con SDK minimo pari a 11 - Honey Comb).

Transcript of Semantic ArDroid

Page 1: Semantic ArDroid

Semantic ArDroid - Relazione_finale - # 25

Il progetto Semantic AndroidIl progetto Semantic ArDroid è stato sviluppato con l'obiettivo di rendere possibile l'utilizzo di un'applicazione per l'accesso sicuro aidati provenienti da endpoint SPARQL, in uno scenario distribuito e con l'utilizzo dispositivi mobile (large screen/tablet). Il designarchitetturale ha previsto il connubio di un dispositivo hardware che fungesse da "Android Accessory" per l'autenticazione basato su Arduino UNO o Arduino MEGA Android ADK e di un tablet Android (con SDK minimo pari a 11 - Honey Comb).

Il funzionamento di baseLo scenario applicativo ipotizzato in ambito progettuale è stato definito partendo dall'assunto che l'utilizzatore di tale applicazionedovesse avere la disponibilità di un tablet Android con accesso a Internet e dotato di Bluetooth e che dovesse trovarsi nelle vicinanzedel dispositivo di autenticazione basato su RFID tags. Presupponendo uno scenario di questo tipo un'ipotesi potrebbe essere quelladi un operatore che si sposti su un autoveicolo aziendale dotato di una presa di corrente a 12 V che possa alimentare il dispositivod'autenticazione, oppure un veicolo che abbia già incorporato tale dispositivo. L'azienda o l'ente che fornisca tale applicazione aipropri operatori incaricati sul territorio non farebbe altro che dare ad ognuno di essi un tag di autenticazione univoco e un tablet conl'applicativo preinstallato. In tal modo, durante il corso dei normali spostamenti, l'incaricato potrà accedere al sistema aprendo l'app Semantic ArDroid sul proprio Android device e richiedendo l'autenticazione tramite comunicazione Bluetooth RFCOMM al dispositivohardware d'autenticazione. Una volta associato tale dispositivo al tablet verrà richiesto, tramite Alert su Android e tramite segnalazioneLED sull'hardware, l'autenticazione per mezzo della lettura di un tag RFID. Android provvederà poi a confrontare il valore dei 10 digit del tag con il proprio database e a permettere la successiva interrogazionedegli endpoint remoti per mezzo di visualizzazioni grafiche basate su mappe o grafici di vario tipo, permettendo così all'operatore unmonitoraggio costante del territorio su cui si trova ad operare tramite l'utilizzo di applicazioni semantiche.

Lo Use Case Android + Arduino

24/09/2012 1/11

Page 2: Semantic ArDroid

1. Accensione Arduino 2. Boot app Android 3. Intent per attivazione antenna Bluetooth 1. Searching del dispositivo 2. Associazione con FireFly-B223 (passkey 1234 - baudrate 9600) 3. Android invia 's' INIZIO COMUNICAZIONE 4. Arduino invia ACK COMUNICAZIONE "INIT" 5. Accensione LED rosso fisso 6. Boolean activeCOM = TRUE 7. Messaggio a video di avvenuta associazione 4. Richiesta di autenticazione da parte dell'activity Android 1. Android invia 'a' ACTIVE MODE - Richiesta lettura tag 2. Blinking LED giallo per segnalazione inizio lettura RFID 3. ENABLE di RFID Reader - LED giallo acceso - LED RFID reader rosso 4. Attesa attiva per ricezione TAG RFID 5. Lettura per RFIDReads volte dei tag RFID 6. Invio tags code via BT 7. Attesa 'k' ACK su lettura avvenuta 8. Spegnimento LED giallo - Fine lettura RFID 9. LED verde acceso su ACK Android - 1s 5. Fine comunicazione 1. Android invia 'b' BYE "Over and Out" - passo e chiudo :) 2. Spegnimento LED ROSSO 3. Boolean activeCOM = FALSE 6. Loop

Activity Diagram

Stati BluetoothHandler (Android Service)

24/09/2012 2/11

Page 3: Semantic ArDroid

State Machine Diagram

1. NONE 2. CONNECTING 3. COMMAND 4. READ 5. ERROR

Messaggi (verso SemanticArDroidActivity)

1. MESSAGE_STATE_CHANGE 2. MESSAGE_READ 3. MESSAGE_WRITE 4. MESSAGE_DEVICE_NAME 5. MESSAGE_TOAST

Codici di segnalazione Arduino

1. 's' INIZIO COMUNICAZIONE 2. 'a' ACTIVE MODE - Richiesta lettura tag 3. 'k' ACK ACK su lettura avvenuta 4. 'b' BYE "Over and Out" - passo e chiudo :)

Il design dell'applicazione Android

24/09/2012 3/11

Page 4: Semantic ArDroid

Sequence Diagram

I risultati dello STATE DATA VISUALIZATION

- Map

1<script type="text/javascript"> 2 sgvizler.option.query.endpoint_output = 'jsonp'; 3

24/09/2012 4/11

Page 5: Semantic ArDroid

4 sgvizler.option.namespace.npdv = 'http://sws.ifi.uio.no/vocab/npd#'; 5 sgvizler.option.namespace.geo = 'http://www.w3.org/2003/01/geo/wgs84_pos#' ; 6 sgvizler.option.namespace.dbp = 'http://dbpedia.org/resource/'; 7 sgvizler.option.namespace.prod = 'http://prod.cetis.ac.uk/vocab/'; 8 sgvizler.option.namespace.jisc = 'http://www.rkbexplorer.com/ontologies/jisc#'; 910 //// Leave this as is. Ready, steady, go!11 $(document).ready(sgvizler.go());12 </script>1314<div id="sgvzl_example21" 15 data-sgvizler-endpoint="http://irm.dnv.com/ep/saio/sparql" 16 data-sgvizler-query="SELECT xsd:float(?lat) xsd:float(?long) ?label ?comment ?subject17 WHERE{18 ?subject geo:location [19 geo:lat ?lat ;20 geo:long ?long ] ;21 rdfs:label ?label ;22 rdfs:comment ?comment .23 }24 LIMIT 5025 " 26 data-sgvizler-chart="sMap" 27 data-sgvizler-loglevel="2" 28 style="width:1200px; height:500px;" 29 ></div>

La mappa che viene generata riguarda i primi 50 incidenti aerei selezionati indistintamente. L'endpoint SPARQL interrogato èaccessibile all'indirizzo http://irm.dnv.com/ep/saio/

- Area

1 sgvizler.option.query.endpoint = "http://sws.ifi.uio.no/sparql/npd"; 2 3 sgvizler.option.namespace.npdv = 'http://sws.ifi.uio.no/vocab/npd#'; 4 5 <div id="sgvzl_example3" 6 data-sgvizler-query="SELECT ?year ?Oil_millSm3 ?Gas_billSm3 ?NGL_millSm3 ?Condensate_millSm3 ?Water_millSm3 7 WHERE{ ?period a npdv:FieldProductionPeriod ; 8 npdv:hasField <http://sws.ifi.uio.no/npd/field/Ekofisk> ; 9 npdv:year ?year ;10 npdv:producedNetOilMillSm3 ?Oil_millSm3 ;11 npdv:producedNetGasBillSm3 ?Gas_billSm3 ;

24/09/2012 5/11

Page 6: Semantic ArDroid

12 npdv:producedNetNGLMillSm3 ?NGL_millSm3 ;13 npdv:producedNetCondensateMillSm3 ?Condensate_millSm3 ;14 npdv:producedWaterMillSm3 ?Water_millSm3 ;15 OPTIONAL{?period npdv:month ?month} .16 FILTER (!bound(?month))17 FILTER (xsd:int(?year) < 2011)18 } ORDER BY ?year" 19 data-sgvizler-chart="gAreaChart" 20 data-sgvizler-log="2" 21 style="width:800px; height:500px;" 22 ></div>

I dati di diagramma sono prodotti interrogando l'endpoint SPARQL del Logic and Intelligent Data research group del Department ofInformatics (University of Oslo). I dati vengono prodotti prendendo spunto da quanto prodotto per il progetto Linked Open NPDFactPages (Linked Open Data version of the Norwegian Petroleum Directorate's Fact Pages).

L'ontologia NPD è accessibile all'indirizzo: http://sws.ifi.uio.no/vocab/npd

- Pie

1 <div id="sgvzl_example1" 2 data-sgvizler-query="SELECT ?class (count(?instance) AS ?noOfInstances) 3 WHERE{ ?instance a ?class } 4 GROUP BY ?class 5 ORDER BY ?class" 6 data-sgvizler-chart="gPieChart" 7 data-sgvizler-log="0" 8 style="width:800px; height:500px;" 9 >

24/09/2012 6/11

Page 7: Semantic ArDroid

10 </div>

Anche in questo caso viene utilizzata l'ontologia NPD e vengono visualizzate le classi RDFS e le loro istanze. Viene effettuato ilconteggio, l'aggregazione e l'ordinamento.

L'hardware necessarioIl design dell'accessorio Android per l'autenticazione hardware per mezzo di tag RFID ha richiesto l'utilizzo dei seguenti componenti:

- Arduino UNO - Tre LED di segnalazione, corredati di relative resistenze - Modulo di connessione Bluetooth BlueSMiRF Silver della Sparkfun Electronics - Modulo per RFID Card reader PARALLAX

24/09/2012 7/11

Page 8: Semantic ArDroid

Specifiche modulo Bluetooth BlueSMiRF

- FCC Approved Class 2 Bluetooth Radio Modem - Extremely small radio - 0.15x0.6x1.9" - Very robust link both in integrity and transmission distance (18m) - Hardy frequency hopping scheme - operates in harsh RF environments like WiFi, 802.11g, and Zigbee - Encrypted connection -- Abilitabile tramite AT Commands - Frequency: 2.4~2.524 GHz - Operating Voltage: 3.3V-6V - Serial communications: 2400-115200bps - Operating Temperature: -40 ~ +70C - Built-in antenna

Specifiche modulo RFID reader PARALLAX

Features:

- Low-cost method for reading passive RFID EM4100 family transponder tags - 2400 baud serial interface

24/09/2012 8/11

Page 9: Semantic ArDroid

- Enable input allows module to be enabled/disabled by software - Bi-color LED for visual indication of status (GREEN not enabled, RED enabled)

Compatible tags:

- 54x85mm Rectangle Tag ISO Card: 6.3cm (2.5") +/- 10% - 50mm Round Tag World Tag 50mm: 6.8cm (2.7") +/- 10% - Blue Eye Key Fob - 25mm Disk Tag

Key Specifications:

- Reads 125 kHz Tags, EM41000 Family - Power requirements: 4.5 to 5.5 VDC - Communication: Serial at 2400 baud (8N1) - Dimensions: 2.45 x 6.25 x 0.22 in (62.2 x 82.5 x 5.57 mm) - Operating temp range: -40 to +185 °F (-40 to +85 °C)

Arduino Sketch 1#include <SoftwareSerial.h> 2#define rxPinRFID 6 3#define txPinRFID 12 // NOT REALLY USED! 4#define RFIDENABLE 7 5#define greenLED 8 6#define yellowLED 9 7#define redLED 10 8 9int val = 0; 10char btval = ' '; 11char code[10]; 12const char endString = '%'; // 37 13const String endCommand = "###"; 14int bytesread = 0; 15const int RFIDReads = 4; 16boolean activeCOM = false; 17boolean waitingACK = false; 18SoftwareSerial RFID = SoftwareSerial(rxPinRFID,txPinRFID); 1920void setup() 21{ 22 Serial.begin(9600); // Hardware serial for Monitor 2400bps 23 24 pinMode(RFIDENABLE,OUTPUT); // Set digital pin 2 as OUTPUT to connect it to the RFID /ENABLE pin 25 digitalWrite(RFIDENABLE, HIGH); 26 RFID.begin(2400); 27 28 //LEDS 29 pinMode(greenLED, OUTPUT);30 pinMode(yellowLED, OUTPUT); 31 pinMode(redLED, OUTPUT); 32} 33 34void loop() 35{ 36 if(Serial.available() > 0) { 37 btval = Serial.read(); 38 if(btval == 's' && activeCOM == false) { // START COMMUNICATION 39 digitalWrite(redLED, HIGH);40 Serial.print("INIT"); 41 Serial.print(endCommand); 42 activeCOM = true; 43 } 44 45 if(btval == 'a' && activeCOM==true && waitingACK==false) { // ACTIVE MODE 46 digitalWrite(RFIDENABLE,LOW); 47

24/09/2012 9/11

Page 10: Semantic ArDroid

48 for(int j=0; j<3; j++) { 49 digitalWrite(yellowLED, HIGH);50 delay(500); 51 digitalWrite(yellowLED, LOW); 52 delay(500); 53 } 54 digitalWrite(yellowLED, HIGH); 55 56 int readingCount = 0; 57 while (readingCount < RFIDReads){ 58 /* Start RFID READING*/ 59 if(RFID.available() > 0) {60 delay(100); 61 if((val = RFID.read()) == 10) 62 { // check for header 63 bytesread = 0; 64 while(bytesread<10) 65 { // read 10 digit code 66 val = RFID.read(); 67 if((val == 10)||(val == 13)) 68 { // if header or stop bytes before the 10 digit reading 69 break; // stop reading 70 } 71 code[bytesread] = val; // add the digit 72 bytesread++; // ready to read next digit 73 } 74 75 if(bytesread == 10) 76 { // if 10 digit read is complete 77 readingCount++; // Increase Reading Counter 78// Serial.print("TAG code " + (String)readingCount + " is : "); // possibly a good TAG 79 Serial.print(code); // print the TAG code 80 Serial.print(endString); 81 } 82 bytesread = 0; 83 delay(250); // wait for a second 84 } 85 } 86 /* END RFID READING */ 87 } // RFIDReads DONE! 88 Serial.print(endCommand); 89 RFID.flush(); //Flushing the SoftwareSerial Buffer! 90 digitalWrite(RFIDENABLE, HIGH); // disable RFID reader 91 waitingACK = true; 92 } // END ActiveMode 93 94 if(btval == 'k' && activeCOM==true && waitingACK==true) { //ACK 95 waitingACK = false; 96 digitalWrite(yellowLED, LOW); 97 digitalWrite(greenLED,HIGH); 98 delay(3000); 99 digitalWrite(greenLED,LOW);100 }101102 if(btval == 'b' && activeCOM == true) { 103 activeCOM = false;104 digitalWrite(redLED, LOW);105 }106 } // END Serial.available > 0 107}

Configurazione iniziale del modulo Bluetooth per la comunicazione con ArduinoTODO TUTORIAL PER IL COMMAND MODE e invio AT COMMANDS

24/09/2012 10/11

Page 11: Semantic ArDroid

FileArDroid_OneHWSerial_bb.jpg 103,1 KB 23/07/2012 Alfredo TorreStateMachineDiagram.png 22,9 KB 23/07/2012 Alfredo TorreSequenceDiagram.png 33 KB 23/07/2012 Alfredo TorreActivity-Diagram.png 16,9 KB 23/07/2012 Alfredo TorreFotoArDroid.jpg 176,5 KB 23/07/2012 Alfredo Torrearea.png 33,7 KB 23/07/2012 Alfredo Torremap.png 303,7 KB 23/07/2012 Alfredo Torrepie.png 57,9 KB 23/07/2012 Alfredo TorreUseCase-utilizzo.jpeg 40,9 KB 23/07/2012 Alfredo TorreUseCase-utilizzo.png 17,3 KB 23/07/2012 Alfredo Torrebluesmirf.jpg 35,6 KB 23/07/2012 Alfredo Torreparallax.jpg 13,6 KB 23/07/2012 Alfredo Torrenpd.jpg 16 KB 24/07/2012 Alfredo Torre

24/09/2012 11/11