UNIVERSITÀ DI BRESCIA FACOLTÀ DI INGEGNERIA Dipartiment di Elettrnica per lʼautmazine Labratri di Rbtica Avanzata Advanced Rbtics Labratry Crs di Rbtica Mbile (Prf. Riccard Cassinis) Rirganizzazine database Saurn (Trasferire tutti i file di stat del sistema su un database MySQL) Elabrat di esame di: Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit Cnsegnat in data: 11 lugli 2011
Smmari Nel presente lavr, il team ha rimdernat tutta l infrastruttura di cmunicazine dei dati di stat dei rbt. Le infrmazini ra sn memrizzate in un server centralizzat che le cmunica a chi ne fa richiesta tramite un tunnel SSH. 1. Intrduzine Per il nrmale funzinament dei rbt e del servizi web Saurn è necessari disprre di numersi dati, generati sia dai rbt che da alcune applicazini in esecuzine su di essi. Il sistema implementat per salvare e leggere questi dati si basava sulla scrittura e lettura di file cntenuti nel file system dei singli rbt. Quest sistema presenta evidenti svantaggi in fatt di dispersine, sicurezza e dispnibilità dei dati. 2. Il prblema affrntat L biettiv del prgett è quell di implementare nuvamente quest sistema in md che peri su un database centralizzat remt. Quest database sarà installat su un calclatre appsit, cnterrà i dati di tutti i rbt, dvrà essere scalabile per cntenere nuvi rbt, e dvrà essere raggiungibile dai rbt sia dall intern che dall estern della rete del labratri. 3. La sluzine adttata È stat scelt il DBMS MySQL per la realizzazine del database. L schema ER 1 prevede tre tabelle chiamate: status, lg e images. La tabella status cntiene un recrd per ciascun rbt, e tanti campi quanti sn i dati significativi che si vglin memrizzare. La tabella lg viene utilizzata per registrare il lg dell utilizz dei prgrammi, ciascun recrd cntiene un timestamp, il nme del rbt che l ha generat, e il messaggi di lg. La tabella images cntiene i nmi delle immagini salvate durante le pattuglie, assciate ad un timestamp, al nme del rbt e alla periferica che le ha scattate. Per rendere pssibile la cnnessine al database, in md trasparente rispett alla rete a cui il rbt è cllegat, è stat scelt di usare un prt frwarding 2 tramite il servizi criptat SSH. La prta lcale 3306, sulla quale il database asclta, è stata reindirizzata alla prta sul server remt, in quest md il rbt è in grad di fare richieste al database remt esattamente cme se fsse in lcale. Quest servizi va avviat e mantenut attiv per tutt il temp necessari. A far quest ci pensan degli script chiamati rs_saurn_daemn e rs_saurn_check, che sarann trattati in dettagli più avanti. 1 2 Schema Entità-Relazini. Un inltr autmatic della prta, si legga il seguit per cnscere l implementazine scelta. 1
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit 4. Mdalità perative 4.1. Cmpnenti necessari Sul server si è installat ex-nv Debian Squeezy cn kernel 2.6.32-5-686. Il nme di hst scelt è Rsie Oltre ai servizi inclusi in Debian è stat necessari installare manualmente i servizi: ntp mysql_admin mysql_server Rispnde slamente alle richieste che prvengn da lcalhst, per questini di sicurezza. Per quest mtiv l'access da altre macchine è cnsentit slamente tramite un tunnel SSL phpmyadmin Per ptervi accedere dall'estern è stat necessari cnfigurare il server Apache in md che asclti sia sulla prta 80 che sulla prta 3307, la quale è stata resa accessibile dall'estern tramite un'pprtuna cnfigurazine del NAT. È stat necessari mdificare i file di cnfigurazine di: Demne ssh: /etc/ssh/sshd-cnfig, in md che rispnda alle prte 22 e 8025 Apache: in md che rispnda alle prta 80 e 3307 (HTTP) e 3308 (HTTPS) Sn state inserite cnfigurazini persnalizzate anche nelle tabelle di instradament 3 : Custm Service Table: SSH_Rsie - prt 8025 SSH_Mrgul - prt 8023 Inbund Services: MYSQL_Rsie - ALLOW Always - 192.0.2.5 - Any SSH_Rsie - ALLOW Always - 192.0.2.5 - Any SSH_Mrgul - ALLOW Always - 192.0.2.10 - Any 4.2. Mdalità di installazine Tutti i file di libreria necessari al funzinament dei prgrammi sn cntenuti nella cartella rs_lib. Sarà necessari creare una cartella nella hme dell utente chiamata rs_lib tramite: mkdir ~/rs_lib e cpiarvi il cntenut. 4.2.1. Installazine Database Si iptizza di essere nella directry padre di rs_lib. Creare la struttura del database Per installare il database, creare la struttura usand la query presente in: 3 Le tabelle di ruting 2
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn rs_lib/db/db-rs_lib.sql caricandla tramite phpmyadmin 4, ppure cn un qualsiasi altr applicativ di gestine del database. Una vlta creat il database, per sicurezza eliminare il file relativ alla struttura tramite: rm -R rs_lib/db Aggiunta di un rbt Per aggiungere un rbt basta inserire un nuv recrd all intern della tabella status. L unic camp che va inizializzat è la chiave primaria, vver il camp name, nel quale va inserit il nme del rbt 4.2.2. Installazine tunnel SSH Prima di cntinuare cn l installazine è necessari mdificare i seguenti file: rs_lib/ssh/rs_saurn-daemn.sh rs_lib/ssh/rs_saurn-check.sh crreggend i percrsi assluti in md da indirizzare alla cartella hme dell utente crrett. Impstazine del certificat Per l autenticazine autmatica, bisgna creare la chiave pubblica e privata del rbt e cpiare pubblica all intern del file ~/.ssh/authrized_keys sul server Rsie, in quest md, cllegament, nn viene chiesta la passwrd. Per gni rbt vann create nuve chiavi. quella al Avvi autmatic cn il sistema perativ Gli script che aprn la cnnessne SSH si trvan in ~/rs_lib/ssh/. Bisgna ra l apertura autmatica del prt frwarding all avvi del sistema perativ. Per fare il demne da utilizzare tramite: sud cp ~/rs_lib/ssh/rs_saurn-daemn.sh /etc/init.d/ sud chmd +x /etc/init.d/rs_saurn-daemn.sh sud chgrp rt /etc/init.d/rs_saurn-daemn.sh sud chwn rt /etc/init.d/rs_saurn-daemn.sh e attivarl tramite: sud update-rc.d rs_saurn-daemn.sh defaults A quest punt è pssibile eliminare ~/rs_lib/ssh/rs_saurn-daemn.sh. impstare quest cpiare N.B. Il demne, in esecuzine, crea il file /var/run/rs_saurn-daemn.pid per cntrllare il servizi. All intern del file vi è scritt l ID del prcess del demne. Cntrll autmatic di esistenza della cnnessine Per attivare il cntrll autmatic di crrett funzinament del prt frwarding, impstare il servizi crn aggiungend il cntenut di ~/rs_lib/ssh/crntab-entry a /etc/crntab tramite: sud cp /etc/crntab /etc/crntab.ld sud cat ~/rs_lib/ssh/crntab-entry >> /etc/crntab a quest punt è pssibile eliminare ~/rs_lib/ssh/crntab-entry. 4 www.phpmyadmin.net 3
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit Nte Tutte le perazini di avvi e cntrll autmatic pssn essere eseguite psizinandsi in ~/rs_lib/ssh e invcand install-daemn. Si nti che l script di installazine nn cancella rs_saurn-daemn.sh e crntab-entry autmaticamente. 4.2.3. Installazine C++ Per cmpilare un prgramma C++ cn le funzini di rs_dbinterface sn necessari, ltre ai nrmali strumenti di svilupp per C++, anche alcune librerie particlari: libmysqlcppcnn4 e libmysqlclient15-dev. Queste pssn essere facilmente installate tramite il gestre di pacchetti preferit. 4.2.4. Installazine PHP Nn sn necessari cmpnenti aggiuntivi in quant tutt il necessari è già cntenut nell installazine standard di PHP. 4.2.5. Installazine Pythn Per usare la libreria Pythn, è richiesta l'installazine del mdul pythn-mysqldb, installabile tramite il gestre dei pacchetti, ppure è pssibile usare il prgramma Setup Tls (se installat) per installare il pacchett equivalente tramite il cmand: easy_install MySQL_pythn. 4.2.6. Installazine Shell Nn sn necessari cmpnenti aggiuntivi per utilizzare le funzini Shell, in quant esse chiaman direttamente il prgramma mysql. 4.3. Mdalità dʼus La directry radice è rs_lib; essa cntiene delle sttcartelle nelle quali si trvan i file da includere nei prgetti. 4.3.1. Cn C/C++ Per pterne utilizzare le funzini di cmunicazine cn il database basta includere nel cdice dei prpri prgrammi il file rs_dbinterface.h, nel quale sn anche definiti i parametri per la cnnessine al database. Sarà pi necessari mdificare il makefile in md da cmpilare anche il file rs_dbinterface.cpp. Si nti che esempi di makefile già aggirnati per cmpilare anche quest file si pssn trvare fra i srgenti C++ distribuiti cn quest dcument, nella cartella Prgrammi. Per semplicità di realizzazine, questi makefile cercan i file rs_dbinterface.cpp e rs_dbinterface.h all intern della cartella in cui si trvan, per cmpilare cn success i prgrammi è quindi necessari creare in quella cartella una cpia un cllegament simblic ai due file. Si veda il capitl relativ alle mdifiche ai prgrammi per sapere quali file sstituire mdificare. 4.3.2. Cn PHP Per utilizzare le funzini di interfacciament al database dei rbt, è sufficiente mdificare il file cnfig.php che cntiene i parametri di cnnessine a MySQL: IP, nme utente, passwrd e nme del database. A quest punt andrà inclus il file rs_dbinterface.php in tutti gli script PHP che richiedn l interfacciament alle tabelle dei rbt. 4
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn 4.3.3. Cn Pythn La libreria è cstituita dal file ~/rs_lib/pythn/rs_dbinterface.py, nella quale sn anche definiti i parametri per la cnnessine al database. Per utilizzarla bisgna imprtarla nell script Pythn. Il metd cnsigliat è psizinarsi nella directry nella quale è presente l script Pythn e creare un cllegament simblic al file di libreria tramite: ln -s ~/rs_lib/pythn/rs_dbinterface.py All intern dell script aggiungere la riga: frm rs_dbinterface imprt * A quest punt è pssibile chiamare le funzini all intern dell script Pythn. Nte Si può effettuare un test del crrett funzinament della libreria di Pythn psizinandsi in ~/rs_lib/pythn/ e invcand: pythn rs_dbinterface_test.py Il test effettua un cntrll di crrett funzinament per le diverse classi di funzini dispnibili (in md che sian usati tutti i mduli richiesti da Pythn). Il test termina crrettamente quand la cnnessine al database viene chiusa e nn vengn riprtati messaggi di errre. 4.3.4. Cn la Shell La libreria in Shell è cstituita dal file ~/rs_lib/shell/rs_dbinterface.sh. Per pter utilizzare le funzini cntenute al su intern bisgna semplicemente aggiungere all script Shell che ne usufruirà la seguente stringa:. ~/rs_lib/shell/rs_dbinterface.sh Si suppne che i file sian installati in ~/rs_lib/, dve ~ equivale a /hme/mrgulweb/ ed è cnsigliat utilizzare il percrs asslut nde evitare che script eseguiti da altri utenti cerchin di imprtarl dalla prpria hme directry. I parametri di cnnessine sn cntenuti direttamente nel file rs_dbinterface.sh. 5
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit 4.4. Descrizine delle funzini Nte Tutte le funzini bleane, per cnvenzine, ritrnan 0 se terminan crrettamente, 1 se si è verificat un errre. Sulla Shell Tutte le funzini hann un valre di uscita che può essere: 0 se è pssibile cnnettersi al database e la query è stata eseguita crrettamente; 1 se nn è pssibile cnnettersi al database. Per verificare il valre di uscita di una funzine bisgna testare il parametr $? dp aver eseguit la funzine. I parametri vengn passati alla funzine tutti cme stringhe, e quindi cn i dppi apici: rs_functin param1 param2.. paramn I valri di ritrn delle funzini sn tutti di tip stringa. Su Pythn Si nti che Pythn, avend una tipizzazine dinamica frte, nn cnsente di specificare il tip di ritrn delle funzini. Per tutte le funzini di access a variabili di stat (quelle che inizian cn rs_set rs_get) è ritrnat direttamente l ggett del database. rs_get_prperty Ottiene il valre di un camp dal database, questa funzine è da intendersi privata ssia usata dai metdi pubblici che accedn ai singli parametri. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database param_name: cntiene una stringa che identifica in nme del camp di cui si vule cnscere il valre Valre di ritrn: una stringa cntenente il valre del parametr richiest Implementazine: C++: char * rs_get_prperty(char *rbt_name, char *param_name) Ritrna NULL se si è verificat un errre PHP: functin rs_get_prperty(string $rbt_name, string $param_name) Se si verifica un errre nella query viene invcat il die() e l script termina Pythn: nn implementata Shell: rs_get_prperty $rbt_name $param_name rs_set_prperty Se si verifica un errre ritrna una stringa vuta Impsta il valre di un camp dal database, questa funzine è da intendersi privata ssia usata dai metdi pubblici che accedn ai singli parametri. 6
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database param_name: cntiene una stringa che identifica in nme del camp di cui si vule cnscere il valre value: cntiene una stringa che definisce il nuv valre da assegnare al parametr, se il parametr è di tip numeric deve essere cmunque cnvertit in stringa timestamp_update: cntiene un valre blean che stabilisce se aggirnare ppure n il timestamp relativ a quel parametr. Nn a tutti i parametri è assciat un camp timestamp Valre di ritrn: cdice blean d uscita della funzine Implementazine: rs_cnnect C++: bl rs_set_prperty(char *rbt_name, char *param_name, char *value, bl timestamp_update) PHP: functin rs_set_prperty(string $rbt_name, string $param_name, string $value, bl $timestamp_update) Pythn: nn implementata Shell: rs_set_prperty $rbt_name $param_name $value $timestamp_update Tenta la cnnessine al database specificat tramite cstanti. nessun Valre di ritrn: cdice blean d uscita della funzine Implementazine: C++: bl rs_cnnect() PHP: functin rs_cnnect() Si cnnette a MySQL e selezina il database rbt, in cas di errre termina cn un die() segnaland l errre Pythn: rs_cnnect() Restituisce il valre di MySQLdb.cnnect() Shell: nn implementata. Nel cas di script Shell nn viene instaurata una cnnessine e discnnessine cl database. Le funzini si cnnettn al database tutte le vlte che effettuan una query attravers l pzine -e di MySQL. Quest è necessari perché l script deve instaurare una sessine nn interattiva cl server MySQL 7
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit rs_discnnect Tenta la discnnessine dal database nessun Valre di ritrn: cdice blean d uscita della funzine Implementazine: rs_get_lcked C++: bl rs_cnnect() Ritrna sempre il valre 0 PHP: functin rs_discnnect() Può anche nn essere richiamata dat che in PHP al termine di un script vengn chiuse tutte le cnnessini ai database Pythn: rs_discnnect() Restituisce il valre di MySQLdb.cnnect().clse() Shell: funzine nn implementata. Nel cas di script Shell nn viene instaurata una cnnessine e discnnessine cl database. Le funzini si cnnettn al database tutte le vlte che effettuan una query attravers l pzine -e di mysql. Quest è necessari perchè l script deve instaurare una sessine nn interattiva cl server mysql Restituisce il valre del camp lcked. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: una stringa cntenente il valre del parametr richiest Implementazine: rs_set_lcked C++: char* rs_get_lcked(char* rbt_name) Ritrna NULL se si è verificat un errre PHP: functin rs_get_lcked(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_lcked(rbt_name) Shell: rs_get_lcked $rbt_name Se si verifica un errre ritrna una stringa vuta Impsta il valre del parametr lcked, che nn ha un camp timestamp. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database ip: cntiene una stringa che rappresenta l indirizz IP del calclatre che ha l access esclusiv al rbt 8
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn Valre di ritrn: cdice d uscita della funzine Implementazine: rs_get_d_x C++: bl rs_set_lcked(char* rbt_name, char* ip) PHP: functin rs_set_lcked(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_set_lcked(rbt_name, ip) Shell: rs_set_lcked $rbt_name $ip Restituisce il valre del camp d_x. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: un flat cntenente il valre del parametr richiest Implementazine: rs_get_d_y C++: flat rs_get_d_x(char* rbt_name) All intern della prcedura viene utilizzata la funzine ati quindi il valre in uscita sarà un flat ma cn precisine intera. Ritrna NULL se si è verificat un errre PHP: functin rs_get_d_x(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_d_x(rbt_name) Shell: rs_get_d_x $rbt_name Restituisce il valre del camp d_y. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: un flat cntenente il valre del parametr richiest. Implementazine: C++: flat rs_get_d_y(char* rbt_name) All intern della prcedura viene utilizzata la funzine ati quindi il valre in uscita sarà un flat ma cn precisine intera. Ritrna NULL se si è verificat un errre PHP: functin rs_get_d_y(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_d_y(rbt_name) Shell: rs_get_d_y $rbt_name 9
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit rs_get_d_theta Restituisce il valre del camp d_theta. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: un flat cntenente il valre del parametr richiest Implementazine: rs_get_d C++: flat rs_get_d_theta(char* rbt_name) All intern della prcedura viene utilizzata la funzine ati quindi il valre in uscita sarà un flat ma cn precisine intera. Ritrna NULL se si è verificat un errre Restituisce il valre dell dmetria. PHP: functin rs_get_d_theta(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_d_theta(rbt_name) Shell: rs_get_d_theta $rbt_name rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: un vettre di tre flat cntenente il valre dell dmetria (x,y e theta) Implementazine: rs_set_d_x C++: flat rs_get_d(char* rbt_name) All intern della prcedura viene utilizzata la funzine ati quindi il valre in uscita sarà un flat ma cn precisine intera. Ritrna NULL se si è verificat un errre PHP: nn implementata Pythn: rs_get_d(rbt_name) Shell: nn implementata Impsta il valre del camp d_x, aggirna il timestamp dell dmetria. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database value: cntiene un flat che definisce i valri dell dmetria nella cmpnente x Valre di ritrn: cdice blean d uscita della funzine Implementazine: C++: bl rs_set_d_x(char* rbt_name, flat value) il valre viene lett cme flat ma scritt cme stringa nel database 10
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn PHP: nn implementata, vedi set_d() Pythn: rs_set_d_x(rbt_name, d_x) Shell: rs_set_d_x $rbt_name $value rs_set_d_y Impsta il valre del camp d_y, aggirna il timestamp dell dmetria. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database value: cntiene un flat che definisce i valri dell dmetria nella cmpnente y Valre di ritrn: cdice blean d uscita della funzine Implementazine: rs_set_d_theta C++: bl rs_set_d_y(char* rbt_name, flat value) Il valre viene lett cme flat ma scritt cme stringa nel database PHP: nn implementata, vedi set_d() Pythn: rs_set_d_y(rbt_name, d_y) Shell: rs_set_d_y $rbt_name $value Impsta il valre del camp d_theta, aggirna il timestamp dell dmetria. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database value: cntiene un flat che definisce i valri dell dmetria nella cmpnente theta Valre di ritrn: cdice blean d uscita della funzine Implementazine: C++: bl rs_set_d_theta(char* rbt_name, flat value) Il valre viene lett cme flat ma scritt cme stringa nel database PHP: nn implementata, vedi set_d() Pythn: rs_set_d_theta(rbt_name, d_theta) Shell: rs_set_d_theta $rbt_name $value 11
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit rs_set_d Impsta il valre dell dmetria, aggirna il timestamp dell dmetria. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database value: cntiene un vettre di flat che definisce i valri dell dmetria nelle cmpnenti x,y e theta Valre di ritrn: cdice blean d uscita della funzine Implementazine: C++: bl rs_set_d(char* rbt_name, flat *value) I valri vengn letti cme flat ma scritti cme stringa nel database PHP: functin rs_set_d($rbt, $d_x, $d_y, $d_theta) Pythn: rs_set_d(rbt_name, d_x, d_y, d_theta) Shell: rs_set_d rbt_name $d_x $d_y $d_theta rs_get_d_timestamp In quest cas i parametri sn d_x, d_y e d_theta e nn un vettre Restituisce il valre del timestamp d_timestamp relativ all ultima mdifica di una delle cmpnenti dell dmetria. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: una stringa cntenente il valre del parametr richiest. Implementazine: C++: char* rs_get_d_timestamp(char* rbt_name) Ritrna NULL se si è verificat un errre PHP: functin rs_get_d_timestamp(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_d_timestamp(rbt_name) Shell: rs_get_d_timestamp $rbt_name Se si verifica un errre ritrna una stringa vuta 12
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn rs_get_battery Restituisce il valre del camp battery. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: una stringa cntenente il valre del parametr richiest. Implementazine: rs_set_battery C++: char* rs_get_battery(char* rbt_name) Ritrna NULL se si è verificat un errre PHP: functin rs_get_battery(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_battery(rbt_name) Shell: rs_get_battery $rbt_name Se si verifica un errre ritrna una stringa vuta Impsta il valre del camp battery, aggirna il timestamp relativ rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database value: cntiene una stringa che definisce il valre della batteria Valre di ritrn: cdice blean d uscita della funzine Implementazine: rs_get_battery_timestamp C++: bl rs_set_battery(char* rbt_name, char* string) PHP: functin rs_set_battery(string $rbt_name, string $value) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_set_battery(rbt_name, value) Shell: rs_set_battery $rbt_name $value Restituisce il valre del timestamp battery_timestamp relativ all ultima mdifica del camp battery. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: una stringa cntenente il valre del parametr richiest Implementazine: C++: char* rs_get_battery_timestamp(char* rbt_name) 13
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit Ritrna NULL se si è verificat un errre PHP: functin rs_get_battery_timestamp(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_battery_timestamp(rbt_name) Shell: rs_get_battery_timestamp $rbt_name Se si verifica un errre ritrna una stringa vuta rs_get_last_patrl Restituisce il valre del camp last_patrl che è un timestamp. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: una stringa cntenente il valre del parametr richiest. Implementazine: rs_set_last_patrl C++: char* rs_get_last_patrl(char* rbt_name) Ritrna NULL se si è verificat un errre PHP: functin rs_get_last_patrl(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_last_patrl(rbt_name) Shell: rs_get_last_patrl $rbt_name Se si verifica un errre ritrna una stringa vuta Impsta il valre del camp last_patrl al timestamp attuale. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: il cdice blean di ritrn della funzine Implementazine: C++: bl rs_set_last_patrl(char* rbt_name) Ritrna NULL se si è verificat un errre PHP: functin rs_set_last_patrl(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_set_last_patrl(rbt_name) Shell: rs_set_last_patrl $rbt_name 14
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn rs_get_pwered Restituisce il valre del camp pwered. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: un blean cntenente il valre del parametr richiest. Implementazine: rs_set_pwered C++: bl rs_get_pwered(char* rbt_name) Ritrna NULL se si è verificat un errre PHP: functin rs_get_pwered(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_pwered(rbt_name) Shell: rs_get_pwered $rbt_name Se si verifica un errre ritrna una stringa vuta Impsta il valre del camp pwered, aggirna il timestamp relativ rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database value: cntiene un blean che cmunica se il rbt è acces spent Valre di ritrn: cdice blean d uscita della funzine Implementazine: rs_get_pwered_timestamp C++: bl rs_set_pwered(char* rbt_name, bl value) PHP: functin rs_set_pwered(string $rbt_name, string $value) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_set_pwered(rbt_name, value) Shell: rs_set_pwered $rbt_name $value Restituisce il valre del timestamp pwered_timestamp relativ all ultima mdifica del camp pwered rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: una stringa cntenente il valre del parametr richiest. Implementazine: C++: char* rs_get_pwered_timestamp(char* rbt_name) 15
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit Ritrna NULL se si è verificat un errre PHP: functin rs_get_pwered_timestamp(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_pwered_timestamp(rbt_name) Shell: rs_get_pwered_timestamp $rbt_name Se si verifica un errre ritrna una stringa vuta rs_get_stalled Restituisce il valre del camp stalled. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: un blean cntenente il valre del parametr richiest. Implementazine: rs_set_stalled C++: bl rs_get_stalled(char* rbt_name) Ritrna NULL se si è verificat un errre PHP: functin rs_get_stalled(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_stalled(rbt_name) Shell: rs_get_stalled $rbt_name Se si verifica un errre ritrna una stringa vuta Impsta il valre del camp stalled, aggirna il timestamp relativ rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database value: cntiene un blean che cmunica se il rbt è in stall Valre di ritrn: cdice blean d uscita della funzine Implementazine: C++: bl rs_set_stalled(char* rbt_name, bl value) PHP: functin rs_set_stalled(string $rbt_name, string $value) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_set_stalled(rbt_name, value) Shell: rs_set_stalled $rbt_name $value 16
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn rs_get_stalled_timestamp Restituisce il valre del timestamp stalled_timestamp relativ all ultima mdifica del camp stalled. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: una stringa cntenente il valre del parametr richiest. Implementazine: rs_get_emergency C++: char* rs_get_stalled_timestamp(char* rbt_name) Ritrna NULL se si è verificat un errre PHP: functin rs_get_stalled_timestamp(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_stalled_timestamp(rbt_name) Shell: rs_get_stalled_timestamp $rbt_name Se si verifica un errre ritrna una stringa vuta Restituisce il valre del camp emergency. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: un blean cntenente il valre del parametr richiest. Implementazine: C++: bl rs_get_emergency(char* rbt_name) Ritrna NULL se si è verificat un errre PHP: functin rs_get_emergency(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_emergency(rbt_name) Shell: rs_get_emergency $rbt_name Se si verifica un errre ritrna una stringa vuta 17
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit rs_set_emergency Impsta il valre del camp emergency, aggirna il timestamp relativ rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database value: cntiene una stringa cntenente il valre blean che indica se il rbt è in arrest di emergenza Valre di ritrn: cdice blean d uscita della funzine. Implementazine: C++: bl rs_set_emergency(char* rbt_name, bl value) PHP: functin rs_set_emergency($rbt, $value) Pythn: rs_set_emergency(rbt_name, value) Shell: rs_set_emergency $rbt_name $value rs_get_emergency_timestamp Restituisce il valre del timestamp emergency_timestamp relativ all ultima mdifica del camp emergency. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: una stringa cntenente il valre del parametr richiest. Implementazine: rs_get_dcked C++: char* rs_get_emergency_timestamp(char* rbt_name) Ritrna NULL se si è verificat un errre PHP: functin rs_get_emergency_timestamp(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_emergency_timestamp(rbt_name) Shell: rs_get_emergency_timestamp $rbt_name Se si verifica un errre ritrna una stringa vuta Restituisce il valre del camp dcked. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: un blean cntenente il valre del parametr richiest. Implementazine: C++: bl rs_get_dcked(char* rbt_name) 18
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn Ritrna NULL se si è verificat un errre PHP: functin rs_get_dcked(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_dcked(rbt_name) Shell: rs_get_dcked $rbt_name Se si verifica un errre ritrna una stringa vuta rs_set_dcked Impsta il valre del camp dcked, aggirna il timestamp relativ rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database value: cntiene un blean che cmunica se il rbt è cllegat alla dckstatin Valre di ritrn: cdice blean d uscita della funzine Implementazine: rs_get_dcked_timestamp C++: bl rs_set_dcked(char* rbt_name, bl value) PHP: functin rs_set_dcked($rbt, $value) Pythn: rs_set_dcked(rbt_name, value) Shell: rs_set_dcked $rbt_name $value Se si verifica un errre ritrna una stringa vuta Restituisce il valre del timestamp dcked_timestamp relativ all ultima mdifica del camp dcked. rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database Valre di ritrn: una stringa cntenente il valre del parametr richiest. Implementazine: C++: char* rs_get_dcked_timestamp(char* rbt_name) Ritrna NULL se si è verificat un errre PHP: functin rs_get_dcked_timestamp(string $rbt_name) In cas di errre invca il die() e segnala il tip di errre Pythn: rs_get_dcked_timestamp(rbt_name) Shell: rs_get_dcked_timestamp $rbt_name Se si verifica un errre ritrna una stringa vuta 19
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit rs_lg Inserisce un nuv recrd nella tabella di lg rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database descriptin: cntiene la stringa di lg che si vule salvare nel database Valre di ritrn: cdice blean d uscita della funzine Implementazine: rs_save_image C++: bl rs_lg(char* rbt_name, char* descriptin) PHP: functin rs_lg($rbt_name, $descriptin) Pythn: rs_lg(rbt_name, descriptin) Shell: rs_lg $rbt_name $descriptin Inserisce un nuv recrd nella tabella delle immagini rbt_name: cntiene una stringa che identifica il nme del rbt, cme descritt dal camp name del database camera_name: cntiene una stringa che identifica il nme del dispsitiv che ha scattat le ftgrafie file_name: cntiene una stringa che identifica il nme del file immagine Valre di ritrn: cdice blean d uscita della funzine Implementazine: rs_writedebug C++: bl rs_save_image(char* rbt_name, char *camera_name, char* filename) PHP: functin rs_save_image($rbt_name, $camera_name, $file_name) Pythn: rs_set_save_image(rbt_name, camera_name, file_name) Shell: rs_save_image $rbt_name $camera_name $file_name Inserisce un nuv recrd nel file di debug lcale. Questa funzine viene usata per il debug intern e quindi è da cnsiderarsi privata str: cntiene la stringa di debug da salvare nel file di debug Valre di ritrn: cdice blean d uscita della funzine Implementazine: C++: bl rs_writedebug(char *str) 20
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn rs_get_lgs Stampa 100 righe di lg nel frmat: data-ra: test lg <br/>. rbt: nme del rbt start: numer da cui partire a stampare le 100 righe di lg Valre di ritrn: cdice blean d uscita della funzine Implementazine: PHP: functin rs_get_lgs(string $nme_rbt) 21
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit 5. Lista dei file mdificati 5.1. Su Mrgul In questa sezine sn riprtati i file mdificati, raggruppati per percrs. 5.1.1. ~/Prgrammi/ ~/Prgrammi/checkdck/ tip: script Bash us: cntrlla se il rbt è cllegat alla base di ricarica; viene richiamat da mlti prgrammi ed anche dall interfaccia web di Saurn file mdificati: checkdck nte: cpiare in /usr/bin ~/Prgrammi/exitFrmDck/ tip: prgramma C++ us: fa uscire in md autmatic il rbt dalla base di ricarica file mdificati: exitfrmdck.cpp nte: cpiare l eseguibile in /usr/bin; mdificat il cmprtament riginale aggiungend una chiamata a checkdck alla fine dell esecuzine ~/Prgrammi/mrguldck/ tip: prgramma C++ us: fa rientrare il rbt nella base di ricarica utilizzand la visine file mdificati: main.cpp main.h dck_centeractin.cpp Dck_centerActin.h nte: cpiare l eseguibile in /usr/bin; mdificat il cmprtament riginale aggiungend una chiamata a checkdck all inizi dell esecuzine ~/Prgrammi/phtreprter/ tip: script bash us: scatta le ftgrafie durante la pattuglia file mdificati: phtreprter.sh nte: cpiare in /usr/bin ~/Prgrammi/phtreprter-panrama/ tip: script bash us: scatta le ftgrafie durante la pattuglia file mdificati: phtreprter-panrama.sh nte: cpiare in /usr/bin 22
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn ~/Prgrammi/patrl_map/ tip: prgramma C++ us: esegue una pattuglia file:mdificati: defines.h patrlmap.cpp dump.cpp dump.h Debug/bjects.mk Debug/subdir.mk Release/bjects.mk Release/subdir.mk nte: cpiare l eseguibile in /usr/bin ~/Prgrammi/exitFrmDck/ tip: prgramma C++ us: riprta il rbt in una psizine crretta dp aver fallit un tentativ di attracc file mdificati: main.cpp main.h nte: cpiare l eseguibile in /usr/bin ~/Prgrammi/RemteCntrlServer/ tip: prgramma C++ us: permette di guidare il rbt da remt file mdificati: main.cpp main.h VarSpeedActin.cpp VarSpeedActin.h nte: cpiare l eseguibile in /usr/bin; l applet ritrna spess un errre di cnnessine nn causat da quest prgramma. 5.1.2. ~/scripts/ All intern di questa cartella sn stati mdificati i seguenti script: autpatrlmap: avvia una pattuglia cambiastat: ritrna un valre e segnala l perazine nella tabella di lg checksetlck: cntrlla se il rbt è stat riservat 5 da qualcun emergencystp: interrmpe i mvimenti del rbt e l spegne exitdck: accende il rbt e l fa uscire dalla base ghme: fa rientrare il rbt nella base e se fallisce chiama recverdck ffrbt: spegne il rbt nrbt: accende il rbt patrlmap: avvia una pattuglia rbtparameters: definisce tutte le cstanti usate negli script unlck: elimina un eventuale blcc sul rbt 5 Ossia se è in stat di lck. 23
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit 5.1.3. ~/public_html/cgi_bin/ rbtcntrller.py: gestre RPC 6 per le azini richieste tramite il sit web 5.1.4. ~/public_html/ lg.php: visualizza i messaggi di lg estratti dalla tabella lg del database 5.2. Su Frst 5.2.1. ~/Library/WebServer/Dcuments/prtected/ mrgulinteract.html: pannell web per il cntrll di Mrgul mrgulstatus.php: visualizza un smmari del valre delle variabili di stat di Mrgul speedyinteract.html: pannell web per il cntrll di Speedy 6. Cnclusini e sviluppi futuri All stat attuale il sistema permette al rbt Mrgul di eseguire tutte le funzini per il quale è stat prgrammat utilizzand il database centrale. Tuttavia gli algritmi sn rimasti gli stessi, nn sn quindi ttimizzati per sfruttare le caratteristiche di un database. Alcuni prgrammi sn addirittura nn funzinanti, cme ad esempi la gestine dell access esclusiv 7 tramite indirizz IP. Il prim pass per miglirare il prgett è quindi quell di eseguire una reingegnerizzazine dei prgrammi che permettn il funzinament del rbt. Un altr pass imprtante è prtare queste mdifiche anche sugli altri rbt a dispsizine del labratri ed adeguare di cnseguenza l interfaccia di cntrll web del prgett Saurn. Un ulterire miglirament attuabile sarebbe quell di mdificare la gestine delle immagini dei pattugliamenti, creand un depsit centralizzat sincrnizzat cn la tabella images del database. Bibligrafia [1] MySQL Reference Manual, MySQL C API [2] Specifiche Pythn 2.7 [3] Specifiche MySQL-pythn [4] http://kimm.suminen.cm/dcs/ssh/ per la prcedura di creazine tunnel cn SSH 6 7 Remte Prcedure Call Effettuata tramite il lck, una cndizine durante la quale il rbt mette a dispsizine le sue risrse a un particlare utente. Le risrse ritrnan dispnibili quand l utente che cntrlla il rbt rilascia il lck. 24
(Trasferire tutti i file di stat del sistema su un database MySQL) Rirganizzazine database Saurn Indice SOMMARIO...1 1. INTRODUZIONE...1 2. IL PROBLEMA AFFRONTATO...1 3. LA SOLUZIONE ADOTTATA...1 4. MODALITÀ OPERATIVE...2 4.1. Cmpnenti necessari 2 4.2. Mdalità di installazine 2 4.2.1. Installazine Database...2 Creare la struttura del database...2 Aggiunta di un rbt...3 4.2.2. Installazine tunnel SSH...3 Impstazine del certificat...3 Avvi autmatic cn il sistema perativ...3 Cntrll autmatic di esistenza della cnnessine...3 Nte...4 4.2.3. Installazine C++...4 4.2.4. Installazine PHP...4 4.2.5. Installazine Pythn...4 4.2.6. Installazine Shell...4 4.3. Mdalità d us 4 4.3.1. Cn C/C++...4 4.3.2. Cn PHP...4 4.3.3. Cn Pythn...5 Nte...5 4.3.4. Cn la Shell...5 4.4. Descrizine delle funzini 6 Nte...6 Sulla Shell...6 Su Pythn...6 rs_get_prperty...6 rs_set_prperty...6 rs_cnnect...7 rs_discnnect...8 rs_get_lcked...8 rs_set_lcked...8 rs_get_d_x...9 rs_get_d_y...9 rs_get_d_theta...10 rs_get_d...10 rs_set_d_x...10 rs_set_d_y...11 rs_set_d_theta...11 rs_set_d...12 rs_get_d_timestamp...12 rs_get_battery...13 rs_set_battery...13 25
Oscar Venturini, Stefan Bennati, Giacm Negretti, Simne Frassanit rs_get_battery_timestamp... 13 rs_get_last_patrl... 14 rs_set_last_patrl... 14 rs_get_pwered... 15 rs_set_pwered... 15 rs_get_pwered_timestamp... 15 rs_get_stalled... 16 rs_set_stalled... 16 rs_get_stalled_timestamp... 17 rs_get_emergency... 17 rs_set_emergency... 18 rs_get_emergency_timestamp... 18 rs_get_dcked... 18 rs_set_dcked... 19 rs_get_dcked_timestamp... 19 rs_lg... 20 rs_save_image... 20 rs_writedebug... 20 rs_get_lgs... 21 5. LISTA DEI FILE MODIFICATI... 22 5.1. Su Mrgul 22 5.1.1. ~/Prgrammi/... 22 ~/Prgrammi/checkdck/... 22 ~/Prgrammi/exitFrmDck/... 22 ~/Prgrammi/mrguldck/... 22 ~/Prgrammi/phtreprter/... 22 ~/Prgrammi/phtreprter-panrama/... 22 ~/Prgrammi/patrl_map/... 23 ~/Prgrammi/exitFrmDck/... 23 ~/Prgrammi/RemteCntrlServer/... 23 5.1.2. ~/scripts/... 23 5.1.3. ~/public_html/cgi_bin/... 24 5.1.4. ~/public_html/... 24 5.2. Su Frst 24 5.2.1. ~/Library/WebServer/Dcuments/prtected/... 24 6. CONCLUSIONI E SVILUPPI FUTURI... 24 BIBLIOGRAFIA... 24 INDICE... 25 26