Web HVAC per KIRIN3 da Freescale

Web HVAC per Kirin3 Freescale - Progetto Open Source da Freescale. Il firmware standard spedito con l'M52259DEMOKIT e l'M52259EVB da Freescale è il web HVAC, che permette agli utenti di visualizzare e controllare HVAC attraverso un browser web standard. Il web server utilizza un IP di default 169.254.3.3 ed assegna IP per i PC collegati sulla rete 169.254.3.x attraverso cavo Ethernet cross-over.

Web HVAC da Freescale - Introduzione

Ovviamente non è presente nessun metodo di autenticazione per cui lo sviluppatore può usufruirne liberamente. Il web server inoltre visualizza pagine web extra nel caso si inserisca una chiavetta USB con le pagine necessarie. La procedura è contenuta nel quarto progetto di laboratorio della serie di progetti demo preparati per il kit demo del microcontrollore Kirin3. Qui potete trovare la lista dei progetti:

  • Lab 1: Controller HVAC, MQX RTOS (HVAC + Console Remota + UI Locale)
  • Lab 2: MQX USB e MFS (HVAC + Console Remota + UI Locale + USB logger)
  • Lab 3: MQX RTCS Telnet e FTP (HVAC + Console Remote per RS232 e Telnet + UI Locale + USB logger + FTP server)
  • Lab 4: Web HVAC (HVAC + Console Remota + UI Locale + HTTP server + USB host/periferica di archiviazione di massa con maggiori pagine web)
  • Lab 5: Rilevamento errori utilizzando Task Aware Debugging (TAD) in CW
  • Lab 6: Bridge da Ethernet a Serial.

Dal Lab1 al Lab4, i progetti dimostrativi diventano via via più complessi.
Il progetto web HVAC (heating, ventilation, and air conditioning) vede come protagonisti MQX RTOS, RTCS TCP/IP, CMX USB host e periferica di archiviazione di massa, MFS FAT file system, Web CGI e la console di comando dalla console RS232 per mostrare il funzionamento di un Web server HVAC embedded con una tecnica di programmazione web ad-hoc. Poichè il progetto implementa la GUI con AJAX, la risposta totale del sistema è alquanto veloce. Allo stesso tempo però possiamo separare il design delle funzioni CGI dalla UI Web. Il progetto risulta semplice da mantenere e semplice da aggiornare per eventuali richieste dei clienti. Infine, Freescale offre una comoda utility per convertire le risorse HTML da una cartella ad un file C. Chiaramente dobbiamo ancora migliorare il progetto per renderlo completamente operativo all'interno di una rete esistente.

Programmazione Web
Se non avete mai usato Lynx, rimarrete impressionati dalle pagine Web presentate in modalità testuale. HTTP è un protocollo che resta in ascolto sulla porta 80 (oppure 8080) del protocollo TCP. I browsers internet (user agent) convertono le pagine ed i tag HTML nella "tela" dei browsers, cosicchè la pagina venga presentata in modalità grafica.

All'inizio, un server HTTP resta solo in ascolto sulla porta, poi ottiene le informazioni dallo user agent e le richieste dell'utente e risponde inoltrando i files richiesti. Il metodo di lavoro è diretto, ed in un web server è stato possibile utilizzare finora ogni linguaggio di programmazione con input/output standard, incluso C, script da terminale (che sono chiamati CGI, Common Gateway Interface) e linguaggi di scripting web dedicati (Perl, PHP, Python, Lua, JSP, ASP, ecc.). Nei web server embedded, C risulta essere il linguaggio preferito per implementare le funzioni CGI. Quando si realizza il design per un progetto embedded che utilizza web server, con funzioni CGI e pagine HTML che supportino i metodi GET e POST, risulta difficile separare la logica dell'applicazione dalla presentazione dell'UI. Allo stesso tempo, le performance di un web server embedded con ristretta memoria e potenza computazionale sono molto basse poichè i metodi REFRESH/GET/POST ricaricano la pagina completamente.

Questo era l'incubo di portali come MSN/Yahoo, poichè c'erano troppe connessioni concorrenti che tentavano di caricare una pagina HTML abbastanza grande con un'immenso numero di files. Per un web server la stessa situazione avrebbe risultati peggiori, perchè verrebbe sovraccaricato con molteplici connessioni.

AJAX è ampiamente diffuso perchè porta vari benefici rispetto agli approcci tradizionali. AJAX è una rivoluzione nella programmazione web basata su svariate tecnologie esistenti. AJAX è costituito da CSS, JavaScript, DOM, e XMLHTTP. La maggior parte dei siti web sono migrati ad AJAX, dal momento che offre maggior velocità nelle risposte, maggiore interazione con l'utente, struttura indipendente dai dati, presentazione dipendente dalla periferica, programmazione orientata ad oggetti, operazioni infra-domini e potenzialità mash-up. Recentemente, JSON ha ottenuto maggiore attenzione grazie alla sua struttura dati più semplice rispetto al formato XML.

La programmazione web va oltre lo scopo di questo articolo, ma risulta importante in un web server di tipo embedded.

AJAX (o JSON) può ridurre il tempo di transazione tra il browser ed il web server. Questo risulta essere il maggior beneficio per questo progetto.

Convertire HTML in C

Freescale offre una utility chiamata mktfs per convertire risorse web (inclusi HTML, CSS, JavaScript ed immagini) in un file C. Dopo aver impostato il design delle pagine HTML con il vostro programma preferito, potete avviare l'utility dal prompt dei comandi per convertire una intera directory HTML in un file C.

C:\Program Files\Freescale\Freescale MQX 3.0\demo\web_hvac\>mktfs.exe web_pages tfs_data.c 
Converting web_pages directory to file tfs_data.c ... 
Adding file hvac.html 
Adding file hvac_input.html 
Adding file ipstat.html 
Adding file mcf5225x.html 
Adding file mqx.html 
Adding file rtx.html 
Adding file tcpstat.html 
Done. 

CGI in Web Server di tipo embedded
Vi preghiamo di ricordare che è possibile convertire solo le risorse statiche in un file C di grandi dimensioni (530KB). Le funzioni interattive sono implementate nel file cgi_*.c.

Cercando *.cgi nella cartella web_pages, ho trovato i seguenti valori:

C:\Program Files\Freescale\Freescale MQX 3.0\demo\web_hvac\web_pages>grep -irn ".cgi" ./ 
./hvac.html:308:                makeRequest("hvacdata.cgi"); 
./hvac_input.html:310:          makeRequest("hvacdata.cgi"); 
./hvac_input.html:363:
./ipstat.html:333: makeRequest("ipstat.cgi"); ./rtc.html:304: makeRequest("rtcdata.cgi"); ./tcpstat.html:360: makeRequest("tcpstat.cgi");

Questi valori delle funzioni CGI sono definiti in una tabella chiamata cgi_lnk_tbl in cgi_index.c; è possibile aggiungere i vostri valori CGI per maggiori caratteristiche.

Quando il browser richiede l'intera pagina HTML, il server stamperà la tabella embedded delle stringhe definite nel file C per la pagina richiesta. I valori CGI sono definiti in una tabella. In una pagina AJAX, il JavaScript utilizza XMLHTTP per chiamare un valore CGI nel server con metodo GET o POST. I parametri del metodo GET/POST possono essere analizzati in un web server con la libreria standard STRING del C. Quando un valore CGI viene invocato da remoto, il flusso di dati in uscita viene codificato in XML. Quando l'utente richiede l'aggiornamento dei dati, il JavaScript attivo nel browser chiamerà le funzioni CGI per ottenere dati aggiornati in XML, e li presenterà nelle sezioni

specifiche.
Poichè la maggior parte delle pagine HTML non verranno caricate ripetutamente, il tempo di transazione e di risposta sono ridotti.

Connessione Ethernet RTCS

Il web HVAC da Freescale è solo un progetto dimostrativo. Per poter installare un server reale in una rete esistente, dobbiamo aggiungere più pagine per le specifiche delle applicazioni e per scopi amministrativi. È possibile ad esempio effettuare il check out di un router, funzione che è comunemente disponibile nei server. Di solito le opzioni di autenticazione di base e di connessione WAN/LAN sono caratteristiche essenziali in un server embedded.

RTCS di Freescale è uno stack completo TCP/IP, in cui sono implementati la maggior parte dei protocolli essenziali.

Queste caratteristiche posso venire definite nelle configurazioni. È molto importante controllare il manuale utente di RTCS prima di iniziare ad implementare delle caratteristiche aggiuntive. Nella maggior parte dei casi, è necessario solo riconfigurare la libreria, e poi ricostruirla per requisiti pratici. Dopo aver ricostruito la libreria RTCS, la si può collegare al progetto per aggiungere funzionalità. Per informazioni dettagliate su MQX e RTCS da Freescale, controllate la documentazione nella cartella MQX 3.0.

Ovviamente il HVAC web funziona come un server DHCP, ed è necessario rimpiazzarlo con client DHCP, IP static e PPPoE. Risulta semplice abilitare queste opzioni individualmente. In ogni caso lo sviluppatore deve aggiungere altre pagine, ed attivare queste opzioni allo stesso tempo in modo che siano selezionabili dall'utente.

Il meccanismo di autenticazione è già implementato nel sorgente. Infatti cercando HTTPD_AUTH_CALLBACK in CodeWarrior da Freescale, è possibile abilitarlo per prevenire accessi non autorizzati dalle caratteristiche riservate.

WEB Mash-up

Un web mashup è un sito o una applicazione web che utilizza contenuto da più di una sorgente per creare un servizio completamente nuovo. Possiamo trovare svariati servizi forniti da Google, Amazon e Yahoo che sfruttano questo sistema. A questo punto sorge una domanda: che tipo di servizi web sono utili per server web embedded? Di seguito trovate alcuni esempi. Si possono utilizzare API Widgets per creare visualizzazioni ed effettuare report per applicazioni che effettuano accessi a dati strutturati in un formato comune.

Si possono contattare gli amministratori web attraverso API SMS/IM. Si può utilizzare una API stop log-on per accedere al server protetto. Si possono registrare dati in fogli di calcolo online utlizzando l'API di Google Spreadsheet... Non esiste limite all'immaginazione. La maggior parte delle API Web è progettata per i web servers in internet, quindi è necessario testare il mashup Web per un web server in LAN.

Ottimizzazione di Banda

Se avete un budget ristretto per quanto riguarda la dimensione della ROM e della banda, esistono dei semplici accorgimenti per superare questi ostacoli.

Si può convertire la pagina HTML in format UNIX perchè UNIX usa una stringa di terminazione a LF singolo. Si può utilizzare una codifica locale invece della UTF-8 perchè così si utilizza meno spazio.

La maggior parte dei browsers supportano compression gzip, così si può usare gzip (in Linux, Cygwin o 7zip, Winrar e Winzip) per comprimere le risorse HTML in file zip individuali prima di convertirli in file C. In aggiunta, si possono comprimere i codici JavaScript con il JavaScript compressor, e spostare la parte comune dei codici JavaScript e CSS in file a sé stanti per ottimizzare l'utilizzo di banda (è necessario però accertarsi che il server supporti connessioni multiple).

Nel caso ci siano varie features implementate nella pagina web, potete comparare le performance prima e dopo la compressione. Alla fine delle modifiche al sistema potrete notare i miglioramenti.

I microcontrollori Kirin3 sono disponibili da Farnell

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend