LEOSER WEB


 

postheadericon ARDUINO

Controllo Arduino con PHP ed Estensione Domotica, name DOMINO

Controllo Arduino con Estensione Domotica ed accesso da remoto.

Evoluzione della prina versione del controllo via web di Arduino con l'aggiunta di una estensione per Domotica e il monitoraggio dei dati da remoto;NON E' NECESSARIO NESSUNO SHIELD o SERIALPROXY.Ovviamente e' OPENSOURCE!

PREMESSA
Controllare Arduino con PHP non e' difficile; con Linux e la php_serial.class ci si mette 2 minuti. Ho trovato sul web altre classi/applicazioni C/C++ per la gestione seriale . Per il mondo windows una molto buona (win_serial) e' a pagamento, la php_serial_class, oltre ad usare ancora il mode per settare la seriale, (continua ad aprire e chiudere la porta com) in windows,funziona solo in uscita. Ci sono vari spunti in C/C++ ma, se vogliamo creare una estensione PHP, dobbiamo usare anche le librerie ZEND.
Percio' ho preferito scrivere da zero qualcosa che facesse innanzitutto questo e che, al tempo stesso, portasse tutta la "gestione" di arduino in forma grafica .
Segnalazioni bugs spunti e collaborazioni sono benvenuti.
Altra cosa non indifferente, niente piu' serial proxy e, per molte cose, niente piu' ethernet shield.Tenete comunque sempre presente che l'estensione lavora per il momento in non-overlapped; se volessimo dotare arduino di un suo programma "pensante e agente" l'estensione dovrebbe gestire l'overlapped; lo sviluppo di questa modifica sara' necessaria per l'avanzamento del progetto e conto di realizzarla al piu' presto.
Per lo sviluppo sono stati utilizzati:
Apache 2.2.1 (WAMP) PHP 5.3.0, VC++ 6, Jquery 1.9, Jquery UI, Arduino IDE 0023, Notepad++.
Ultima cosa, il mio computer e' un vecchio notebook acer con celeron D; non e' da escludere che su computer piu' potenti ci sia da mettere qualche piccolo delay sulla parte php (o tarare i timeout della porta per chi voglia ricompilare l'estensione), in corrisposndeza delle attese di risposta da parte di arduino dei pacchetti inviati.

INDICE

STATO PROGETTO

NEXT
SCADA (necessitera' l'overlapped mode nella estensione per la comunicazione seriale).
TODO
Modulo JOOMLA
Arduino+Arduino+Wire(appena mi compro un'altro arduino!)
Scrittura classe php e C++
Check periodico connessione ,arduino ready e falsi messaggi porta inesistente in apertura.
In fase di inserimento/modifica di item, controlli di non presenza del pin selezionato in schedule o controlli gia' presenti .
Pannello configurazione
Vero realtime dump dati pin (per ora e' differito di 2 minuti)
Configurazione per altri modelli di Arduino
Scrittura file di log in modo "umano"
Status dei servizi con incone per la pagina di ingresso.
Protezione accessi da remoto in controllo totale (con .htaccess o con db)
WORKING ON
Applicazioni accesso "nativo" Win Mobile.
Controllo totale da remoto
Versione Linux (PERL)
NEW
08.04.2013 FIX IMPORTANTISSIMA nel file jquery_schedule.php Donwload here
18.01.2013 (sketch) Nuovo read value di un digital pin da comando diretto (non era previsto)...uuppps!
20.12.2012 Multilinguaggio pagine web.
20.12.2012 Nuovo android.server.php per la gestione delle query remote da android.
20.12.2012 Nuovo apk per Android. In fase di testing (purtroppo solo con Android Emu e Android x86) e non ancora disponibile per il download.
20.12.2012 Nuovo layout dei menu in testa della pagina del pannello principale.
07.12.2012 Aggiunto un "countdown timer" al tempo di refresh nelle pagine di monitoring watch e schedule. Cambiato il sistema di refresh con una funzione jquery (invece del "meta refresh").
05.12.2012 Multilinguaggio Inglese/Italiano della Main page; senza reload di pagina! In fase di competamento sula pagina Core.
05.12.2012 Nuovo data entry dello schedule con aggiunta del campo Start At e Comando rapido. Lo schedule viene eseguito solo una volta all'ora inserita eseguendo il comando rapido associato.
05.12.2012 Nuovo data entry dello schedule con aggiunta degli schedule start e stop .
05.12.2012 Aggancio controllo/schedule.Il controllo puo' avviare o fermare lo schedule.
30.11.2012 Nuova board di discussione del progetto.Il progetto e' ospitato anche su SOURCEFORGE e GITHUB
30.11.2012 Nuova parte di inserimento e modifica comandi rapidi.
29.11.2012 Modifica allo schedule per inserire comandi rapidi.
28.11.2012 Nuovo README nello zip applicazione e procedura di installazione WAMP piu' esaustiva.
25.11.2012 Aggiornamento sito.
22.11.2012 Dalla pagina "core" e' possibile richiedere l'avvio o lo stop dei servizi e la chiusura della sessione.In questo modo e' l'unica pagina da tenere sempre aperta per l'accesso da remoto
21.11.2012 Nuovo pagina di start "core".Da qui vengono avviati i servizi schedule, watch e dump dati per la consultazione da esterno.
20.11.2012 Visualizzazione stato pin da remoto (differito di 2 minuti).
20.11.2012 Visualizzazione varibili di sessione da remoto (differito di 2 minuti).
20.11.2012 Nelle tabelle Schedule e Watch attivato il salvataggio dei valori nel file config.php.
20.11.2012 Nuovi programmi visualizzazione da remoto di watch e scheduler in modo grafico e testo
20.11.2012 Modifica programma scheduler e watch per salvataggio periodico dati per consultazione da remoto
20.11.2012 Accesso da postazione remota.
19.11.2012 Nel pannello messaggi aggiunto scroll nel dialogo con arduino.
17.11.2012 Possibilita' di assegnazione nome ai pin di Arduino. Max 7 caratteri.Salvataggio in file config.php
17.11.2012 Setting dei valori di default per CONTROLLI e SCHEDULER in apertura programma.
17.11.2012 Aggiunte opzioni per view,save e clear del file di log.
16.11.2012 Sistemazione layout e fix vari.*** IE , per adesso, NON E' SUPPORTATO ***.Ottimo con Firefox, discreto con Opera e Chrome.
15.11.2012 Nuovo realtime grafico dei CONTROLLI.
15.11.2012 Nuova pagina configurazione grafica (posizionamento in una mappa grafica) pin per i CONTROLLI.
14.11.2012 Salvataggio valori sessione dei CONTROLLI e degli SCHEDULE nel file config.php
04.11.2012 Nuovo campo attivazione/disattivazione controllo (al momento solo maschera).
04.11.2012 Attivato tip layer riassuntivo su ogni riga della tabella CONTROLLI e SCHEDULE.
03.11.2012 Incrementati a 10 i CONTROLLI.
03.11.2012 Aggiunto NOME CONTROLLO per gli item dei CONTROLLI.
03.11.2012 Lo SCHEDULER lavora ora solo sui pin digitali + analogici in digitale (numerazione da 0 a 19).
10.10.2012 Nuovo pannello per Domotica (SCHEDULE).Max 20 schedule
10.10.2012 Nuova pagina configurazione grafica (posizionamento in una mappa grafica) pin per Domotica.
10.10.2012 Nuova pagina per visualizzazione stato pin per Domotica
10.10.2012 Nuova pagina per visualizzazione stato pin per Domotica con autorefresh 60 secondi
FIXES
18.01.2013 Fixed errore nel tip box della tabella dello schedule dopo una modifica dati.Le date start/stop non erano visualizzate. 20.12.2012 Fix vari.
08.12.2012 Fixed errore sull'update dei file per accesso esterno degli elementi di array (null element)
30.11.2012 CRITICO Fix errori nei moduli per la mappatura grafica in domotica e watch che impediva il corretto posizionamento dei box dopo il salvataggio.Download della fix da mettere nella cartella dell'applicazione php
28.11.2012 Risistemata sintassi sito.
22.11.2012 Altri fix e bug minori.
20.11.2012 Altri fix e bug minori.
17.11.2012 Altri fix e bug minori.
16.11.2012 Sistemato onmouseover-onmouseout dalle immagini per accedere a vref, map e constrain nei controllli analogici
16.11.2012 Sitemata la visualizzazione dei digitali in pwm in modo che non ci sia scroll della pagina
13.11.2012 Fix gestione righe in tabella watch e schedule.
04.11.2012 Altri fix e bug minori.
04.11.2012 Fix apertura/chiusura porta su reload pagina.Con connessione usb la porta e' virtuale e togliendo il cavo la porta non e' piu' esistente nel sistema;questo causava un blocco del server.
03.11.2012 Fix posizionamento dei box visualizzati per NOME nei panneli di setup e display dello SCHEDULE.
10.10.2012 Lo stop del watch e' immediato.
10.10.2012 Lo stop del watch resetta i pin al valore di default.
10.10.2012 Altri fix e bug minori
RELEASE
15.11.2012 NEW ALPHA
30.09.2012 OLD BETA



GETTING STARTED

COSA SERVE
WAMP server. La mia versione e' la 2.0i(apache 2.2.11 + php 5.3.0). La puoi scaricare da QUI).Non ho ancora testato con altre versioni; per adesso usate questa.
Un servizio di DNS dinamico (per accesso da remoto al server).
Com port disponibile (nativa o usb).
Arduino ide 023 (non usate la 1 che sono cambiate alcune cose e devo riscrivere lo sketch)
Basetta sperimentale e qualche led e potenziometro, tanto per provare.

INSTALLAZIONE
0) Installa WAMP server
Con WAMP inattivo:
1) Estraete lo zip in una cartella locale
2) Create una sottocartella in wamp/www (esempio: arduino) e copiateci tutto il contenuto della cartella "arduino" dello zip.
3) Copiate il file php_simple_serial.dll nella cartella wamp/bin/php/php5.3.0/ext
4) Aprite il file php.ini che trovate nella cartella wamp/bin/php/php5.3.0
Cercate la stringa Windows Extensions Troverete a seguire una lista di estensioni.
Andate alla fine delle estensioni e aggiungete una nuova riga con questo contenuto:
extension=php_simple_serial.dll   (senza niente alla fine!)
Salvate e chiudete.
5) Ripetete la stessa cosa con il file phpForApache.ini che trovate nella stessa cartella.
6) Ora lanciate WAMP , cliccate sulla sua icona nella barra in basso a sinitra e Selezionate PHP->PHP EXTENSION; si aprira' una lista di estensioni.Cercate la php_simple_serial (dovrebbe essere non selezionata e cliccateci sopra).Wamp dovrebbe rifare il restart; se volete chiudetelo e fatelo ripartire.
7) Ora controllate che nella pagina iniziale ci sia, tra le estensioni caricate, anche la php_simple_serial.dll
8) Copiate lo sketch di arduino dove risiedono i vostri progetti (io l'ho messo in documenti/arduino/arduino_php)
9) Impostate nel file dati/config.php la com port con la quale comunicate con Arduino; di default e' la COM1.
E, come si dice, YOU HAVE DONE!

*** IMPORTANTE *** L'estensione che scaricate e' compilata per la versione php 5.3.0. Assicuratevi che WAMP abbia questa versione php e (apache 2.2.11) o procuratevi la 5.3.0 e installatela su WAMP (in rete trovate molte pagine di supporto); WAMP e' in grado di gestire versioni diverse di php.
Se volete metterci le mani e ricompilare dovete fare alcune operazione, niente di complicato, sia sul VC++ 6 che sulla parte php; le illustrero' a parte oppure contattatemi senza problemi.
Appena ho 2 minuti mettero' in linea una guida per compilare l'estensione con le librerie della verione php installata su wamp; per questo si dovranno avere i sorgenti della versione php in uso, che potete gia' iniziare a scaricare e scompattare (io ho scompattato nella cartella DISCO DI INSTALLAZIONE WAMP:\Wamp\bin\php\5.3.0_source).
C'e comunque questa ottima guida online per la compilazione con VC6 ++ .

*** IMPORTANTE 2 *** L'applicazione e' ancora in test. Il consiglio e' di non utilizzarla, al momento, per controlli dove sono coinvolte AC ma di limitarsi al pilotaggio e monitoring in DC. NON RISPONDO DI DANNEGGIAMENTI O ALTRO!



BREVE PANORAMICA

SCHEMA


IL PACCHETO DATI
E" implementato un miniprotocollo tra Applicazione Web e Arduino basata su un pacchetto composto da min 4 bytes ad un massimo di 24 e, per adesso, ci sono 4 tipi in uscita e 2 in entrata:

PACCHETTI IN USCITA (PC->ARDUINO)
- TIPO SET Usato per il set/reset di un pin

Impostazione pin 12 ad HIGH : d12#11 Impostazione pin12 a LOW : d12#10
Impostazione pin 9 ad HIGH : d9#11 Impostazione pin9 a LOW : d9#10
Impostazione pin 15 ad HIGH : d15#11 (il d15 e il pin 1 analogico) Impostazione pin 15 aLOW : d15#10

- TIPO SET CON RIPETIZIONI
E' previsto un formato particolare per le operazioni ripetitive (tipiche dei pin digitali, es. blink led). Alla struttura precedente vanno aggiunti altre 3 informazioni, delimitate con il carattere *
1) numero ripetizioni
2) valore contrario
3) delay
Esempio:
Vogliamo accendere un led 3 volte con delay 500 manderemo d12#11*3*0*500*.
d12#11 lo conosciamo gia, manda in HIGH il pin 12; i 3 asterischi delimitano i valori:

3 il numero delle ripetizioni (ciclo)
0 il valore dello stato opposto (abbiamo usato HIGH (1) per accenderlo, se volgliamo il blink dobbiamo mandarlo LOW (0))
500 il delay nel ciclo (blink + o - rapido)

- TIPO READ
Come per il precendete TIPO SET ma senza il 5° Per i digitali il bottone READ non e' presente nel pannelo in quanto il valore e' sempre visualizzato immediatamente ad ogni sua variazione. Nel PANNELLO SHORTCUT c'e' comunque la possibilita' di inviare un comando diretto ad Arduino
Per gli analogici il discorso cambia in quanto entrano in gioco i set MAP, CONSTRAIN E VREF, che vengono aggiunti al pacchetto base di lettura TIPO|PIN#SET. Il pacchetto diventa un po' piu' lungo con l'aggiunta dei seguenti nuovi valori:

MAP Valori di rimappatura della lettura (formato x1:x2=m1:m2)
CONSTRAIN Valori di constrain della lettura (formato c1:c2)
VREF Riferimento voltaggio (specificato successivamente)

Esempi:
Lettura pin Analog 0 a0#0 in effetti si potrebbe mettere solo a0# in quanto gli analog 0/5 si possono solo leggere).In questo caso non c'e invio di MAP, CONSTRAIN E VREF e quindi il valore letto sala tal quale con VREF=DEFAULT (5V)
Lettura pin ANALOG 0 con CONSTRAIN a0#0*0*0*0*0*1*20:100* MAP 0:0:0:0: VREF=1 CONSTRAIN 20:100
Il blocco map e' tutto a 0 e la parte Arduino ingnorera' il settaggio.
Lettura pin ANALOG 0 con MAP e CONSTRAIN a0#0*0*1023*0*255*1*20:100* MAP 0:1023:0:255: VREF=1 CONSTRAIN 20:100
Lettura pin Digital 12 d12#1 notare la mancanza del 5° byte, il set value

-TIPO SYSTEM
E' un tipo di comando che non esegue alcuna lettura/scrittura.

Esempio:
Chiede ad Arduino se e' up and running : *
Resetta la sessione, chiude la porta com e mette arduino in stop : e
ed altri che verranno illustrati successivamente.


PACCHETTI IN ENTRATA (ARDUINO->PC)
Arduino risponde ai comandi in 2 soli modi:
- ai comandi di read RCODE:VALORE
- ai comandi di set RCODE




DENTRO L'APPLICAZIONE

LE PARTI DELL"APPLICAZIONE
Applicazione Web E" il pannello di controllo (PHP + Jquery + Ajax) dal quale inviare i comandi , ricevere le risposte e monitorare i dati.
Sketch per Arduino
Dialoga con l"estensione php ricevendo i comandi e restituendo risultati.
Estensione PHP Media tra il server e Arduino In sintesi e" un programma C che gestisce il basso livello con la seriale (comunicazione con Arduino) trasmettendo i comandi ricevuti dal server (browser) e ricevendo le risposte da Arduino , reinstradandole verso il server (browser) L"estensione va installata su lato server (e" molto semplice).La dll, per il momento, lavora in non-overlapped; la versione overlapped sara' necessaria quando realizzero' lo SCADA.


Considerazioni
Arduino non e' un bulldozer e quindi ho pensato di farlo lavorare il meno possibile : leggere/impostare valori , comunicare/ricevere valori e comandi. In questo modo, a 115200, la performance e" piu' che buona; alla parte php i lavori "pesanti. In mezzo l"estensione non fa superlavori; prende quello che gli arriva da Arduino e lo passa al php e viceversa, oltre che gestire la porta di comunicazione e qualche situazione di errore; penso di sfruttarla un po' di piu' per alcuni controlli che per adesso fa arduino, visto che e' anche la parte piu' performante.

STRUTTURA CARTELLE E FILES
Al momento l"applicazione Web consiste nei seguenti programmi:
android_server.php Riceve i post dall'applicazione Android e rimanda pacchetti dati JSON.E' il programma che si occupera' di soddisfare le richieste inviate da dispositivi Android con l'applicazione "nativa"
arduino_ajax.php Starting point dell'applicazione di controllo, controlla l'apertura porta, la sessione e invoca il pannello php/html panel.php
change_lang.php Sistema le stringhe della lingua per jquery
clear_save_log.php Si occupa, in funzione dei parametri inviati, di cancellare o salvare il file di log
domo.php Sostituito da domo60.php
domo_map.php Si occupa del posizionamento nella mappa grafica dei vari schedule, del salvataggio e richiamo dei valori
domo60.php Si apre in una nuova pagina browser e visualizza la situazione in campo dei schedule impostati.La pagina va' in autorefresh ogni 60 secondi.
domo60_e.php Come sopra ma per accesso esterno.Ci sono altri tipi di controllo prima dell'apertura
domo60txt_e.php Come sopra ma in forma tabellare
dump.php Si apre in una nuova pagina browser e mostra lo stato degli array di sessione.La pagina va' in autorefresh ogni 10 secondi.
dumptxt_e.php Come sopra ma per accesso esterno.Ci sono altri tipi di controllo prima dell'apertura
end_panel_ajax.php Pagina di chiusura applicazione e sessione
functions_values.php Funzioni di supporto per la creazione dei contenuti dei layers informativi
include_send.php E" forse il piu' importante;si occupa di inviare dati ad arduino e di ricevere le risposte nonche' di aggiornare alcuni valori degli gli array di sessione. Chiamato sia da Ajax che da Php.
index.php CORE point per accesso all'applicazione.Apre/chiude la com port, la sessione, gestisce avvio/stop dei servizi per l'accesso esterno.E' l'unica pagina che deve essere attiva per permettere la consultazione da remoto.Chiama start_panel_ajax.php per il layout html
jquery_schedule.php E" a tutti gli effetti uno script che prepara il codice per gli schedule
jquery_rapidi.php E" a tutti gli effetti uno script che prepara il codice per i comandi rapidi; non ha pero' timers
jquery_services_e.php Contiene i "timer" dei servizi per l'accesso da esterno. Associata a index.php
jquery_survey.php E" a tutti gli effetti uno script che prepara il codice per il watchdog
panel_ajax.php Html del pannello con qualche piccolo script alla fine.Include il write_slider.php
save_load_schedwatch.php Si occupa di salvare/richiamare gli items degli schedule o dei watch in tabella
schedule.php "Demonetto" dello schedule per Domotica.Chiamato da AJAX ogni 60 sec con una setinterval. Lo chiamo demonetto perche' in efffetti non e' un vero e proprio demone;ci si avvicina, almeno come concetto. Il sistema e' ovviamente libero di effettuare operazioni mentre lui e' in esecuzione. Per il vero demone ci si pensa avanti ma non con questa versione.
start_panel_ajax.php Html del pannello di start.
survey.php "Demonetto" del watchdog.Chiamato da AJAX ogni 5 sec con una setinterval.Non ho provato valori minori a 5 sec perche' li reputo gia' soddisfacenti per questa realizzazione.Lo chiamo demonetto perche' in efffetti non e' un vero e proprio demone ma ci si avvicina, almeno come concetto.Il sistema e' ovviamente libero di effettuare operazioni mentre lui e' in esecuzione. Per il vero demone ci si pensa avanti ma non con questa versione.
system_command.php Chiamato da ajax si occupa di gestire tutte di chiamate non rivolte ai pin (di sistema) verso Arduino e verso l'estensione.
testcom.php Cerca le porte seriali disponibili sul computer .Elementare ma efficace
update_comandi_rapidi.php Tiene aggiornati gli items dei comandi rapidi dopo le azioni di Save/edit/delete.
update_array.php Chiamato da ajax si occupa di tenere aggiornati gli array di sessione dopo ogni azione compiuta sui pin.
update_data_for_external.php Chiamato da ajax si occupa di tenere aggiornati,dopo ogni azione compiuta sui pin, files dati necessari per la consultazione dati da remoto.
update_dump.php Come sopra ma per tutti gli array di sessione
update_schedule.php Salva/modifica/cancella gli item degli schedule.
update_watch.php Salva/modifica/cancella gli item dei watch.
view_log.php Visualizzazione del file di log (in nuova pagina web).Devo ancora rendere "umana" la visualizzazione.
watch.php
watch_map.php Si occupa del posizionamento nella mappa grafica dei vari watch, del salvataggio e richiamo dei valori
watch10.php Si apre in una nuova pagina browser e visualizza la situazione in campo dei watch impostati.La pagina va' in autorefresh ogni 10 secondi.
watch10_e.php Come sopra ma per accesso esterno.Ci sono altri tipi di controllo prima dell'apertura
watch10txt_e.php Come sopra ma in forma tabellare
write_slider.php E" a tutti gli effetti uno script che prepara i vari slider e che contiene le azioni necessarie per la loro gestione chiamando anche in ajax i vari php

e delle seguenti sottocartelle
img/ - immagini
script/ - librerie jquery, jquery ui
css/ - fogli di stile per il panel (derivano da Jquery UI)
dati/ - organizzata in sottocartelle con i dati, log, e altri parametri delle sessioni salvate

config.php File di configurazione dei parametri di sessione (porta com, array di sessione, ecc.ecc).
config_save.php File di configurazione "base" dei parametri di sessione (porta com, array di sessione, ecc.ecc).
data_for_external_domo.php File riportante lo stato dell'array schedule necessario alla consultazione da remoto.
data_for_external_session.php File riportante lo stato di tutti gli array di sessione necessario alla consultazione da remoto.
data_for_external_watch.php File riportante lo stato dell'array survey necessario alla consultazione da remoto.
lang_it.php File di configurazione della lingua (c'e ma ancora e' da implementare).
log.txt File di log delle operazioni.
log.txt_24.11.2012.txt Esempio di come viene salvato un file di log (da Sottopannelo Messaggi->Messaggi Arduino->save log).
map_domo.txt Coordinate dei box dei controllo schedule (domotica) salvati nella pagina map e richiamati nelle visualizzazioni in forma grafica dello schedule.
map_watch.txt Coordinate dei box dei controllo survey (watchdog) salvati nella pagina map e richiamati nelle visualizzazioni in forma grafica del survey.
status_services.php File di configurazione dei parametri di sessione fondamentali per l'accesso da remoto.Riporta lo stato di run/stop, open/close (nella forma true/false) di porta_aperta, session started, schedule running e survey running.E il file dati piu' importante per l'accesso da remoto.


Piu' ovviamente lo sketch di arduino e la dll dell'estenzione.
Vediamo parte per parte




PARTE WEB

L"applicazione e" scritta in PHP con utilizzo di Jquery, JqueryUI a Ajax per la comunicazione della pagina con php e la gestione dei vari controlli e visualizzazioni nell"ambito della stessa. E' composta da:
PAGINA DI INGRESSO(core)
PAGINA PRINCIPALE
LINK ESTERNI

CONSULTAZIONE DA REMOTO


PAGINA DI INGRESSO
E' la pagina di avvio dell'applicazione.Se qualcuno ha gia' usato la versione precedente, avra' notato che l'applicazione partiva direttamente con il PANNELLO DI CONTROLLO.
Questa nuova pagina di start e stata realizzata per permettere l'accesso dal mondo esterno al nostro server collegato ad Arduino per il monitoraggio dei dati
E' necessario che il nostro server "esca" dal mondo locale; per questo dovrete richiedere e configure un servizio di DNS DINAMICO; parecchi sono gratuiti e semplici da configurare.
Sto ancora pensando ad una soluzione "sicura" per gli accessi; per adesso e' stato testato solo in locale con il controlo dell'IP.

Oltre al bottone per la chiusura dell'applicazione (chiude porta, pulisce sessione),che porta a questa pagina:

per i 2 servizi essenziali troviamo i bottoni di start e stop
L'azione su questi bottoni determina l'accesso o meno da parte di un utente esterno ai dati relativi.In particolare ,al loro click, viene modificato il file status_services.php nella cartella dati, che e' il primo file che viene consultato quando si accede dall'esterno.Riporto brevemente il suo contenuto:
																$_SESSION['com_port_open']=true;
																$_SESSION['start']=true;
																$_SESSION['dump_running']=false;
																$_SESSION['watch_running']=true;
																$_SESSION['schedule_running']=false;
															
** nota : il dump_running e' automaticamente impostato a true dall'apertura della sessione

Ad esempio , nella configurazione esposta, da remoto si potra' consultare il watch ma non lo schedule.
Se , invece, il file fosse in questa situazione (corrisponde alla chiusura della sessione e della porta) :
																$_SESSION['com_port_open']=false;
																$_SESSION['start']=false;
																$_SESSION['dump_running']=false;
																$_SESSION['watch_running']=false;
																$_SESSION['schedule_running']=false;
															
l'utente remoto non avrebbe nessun elenco di opzioni disponibili, considerando che , in questa condizione, si darebbe accesso ad un sistema "morto".
In sostanza, se volete monitorare da remoto tutto il sistema, dovete trovarvi in usa situazione del genere:
																$_SESSION['com_port_open']=true;
																$_SESSION['start']=true;
																$_SESSION['dump_running']=true;
																$_SESSION['watch_running']=true;
																$_SESSION['schedule_running']=true;
															
che equivale a questo screenshot:

Una cosa importantissima e' utilizzare il pulsante di chiusura per uscire dall'applicazione; non facendolo, caso di richiesta di riapertura o reload,la porta risulterebbe ancora aperta dando un errore di questo tipo:

Il sistema per uscirne fuori e' la chiusura e riapertura dei servizi di Wamp:

Ovviamente questo errore puo' presentarsi anche per cavo usb non realmente connesso o per altri problemi.

Per gli accessi sto ancora lavorandoci sopra; per adesso ho individuato 4 categorie di utenti che trovate nel file dati/config.php con le relative voci correlate; lo riporto qui per comodita':

																$_SESSION['server_name']="www.arduino.home";
																$_SESSION['trusted_ip_admin']=array('127.0.0.1','10.0.0.1','192.168.0.1');
																$_SESSION['trusted_ip_external_full']=array('10.0.0.4'); ##  non ancora implementato
																$_SESSION['trusted_ip_external_monitor']=array('10.0.0.2');
																$_SESSION['trusted_ip_external_monitor_text']=array('10.0.0.3');
																$_SESSION['options']=array("Gestione Applicazione (I Servizi in RUN verranno stoppati e gestiti in applicazione!)","Monitor Watch Grafico","Monitor Watch Testo","Monitor Domo Grafico","Monitor Domo Testo","Monitor Dump Testo","Monitor Dump",);
																$_SESSION['options_prog']=array("arduino_ajax.php","watch10_e.php","watch10txt_e.php","domo60_e.php","domo60txt_e.php","dumptxt_e.php","dump_e.php");
																$_SESSION['options']=array("Gestione Applicazione (I Servizi in RUN verranno stoppati e gestiti in applicazione!)","Monitor Watch Grafico","Monitor Watch Testo","Monitor Domo Grafico","Monitor Domo Testo","Monitor Dump Testo","Monitor Dump",);
																$_SESSION['options_window_name']=array("main_app","watch","watch","domo","domo","dump","dump");
															
Ho la grossa limitazione, accedendo ad internet tramite uno smarphone, di non potere attivare un dns dinamico e quindi, al momento, non posso garantire il funzionamento fuori da una lan; in linea di principio non dovrebbero esserci problemi.
Riporto per ultimo il pannello come viene visto da remoto per un utente con accesso ai servizi sia in modo grafico che testo:



PAGINA PRINCIPALE
La pagina e' composta dal PANELLO DI CONTROLLO, sempre presente e, nella zona sottostante, da una serie di sottopannelli richiamati dai pulsanti in alto

Questi sono i bottoni (in alto a sinistra) che richiamano i vari Pannelli

E questi sono i link (in alto a destra) che aprono nuove finestre di servizio


Dei vari link ne parleremo piu' avanti.

Al centro c'e un piccolo header che riporta la situazione della porta e di Arduino (solo in apertura)



Passiamo ad una descrizione dei singoli pannelli.

PANNELLO CONTROLLO
Il pannello, sempre presente, richiama in veste grafica i singoli pin , i loro valori , le azioni che si possono intraprendere, raggruppandoli per tipo. La divisione DIGITAL/ANALOG e" puramente descrittiva in quanto sappiamo che gli analogici possono funzionare anche come digitali (prendendo valori da 14 a 19).

Vediamo in dettaglio i blocchi DIGITAL e ANALOG

BLOCCO DIGITAL


Sono rappresentati i pin digitali cosi come li troviamo su Arduino. Dall'alto in basso:

NOME PIN
STATO Lo slider permette 2 valori : Enb (ENABLE) / Dsb(DISABLE) In DISABLE le sezioni SEND e SEL non sono accessibili.(fig.0)
TIPO D oppure D - P se il pin puo" anche lavorare in PWM (su Arduino 2009 sono i pin 3/5/6/9/10/11)
SEND Invia sul pin di Arduino il set L=LOW (0) o H=HIGH (1) Se il pin e" anche PWM e lo slider TIPO e" selezionato su P, compare, al posto dello slider L - H, uno slider verticale con scala da 0 a 255 che invia, al suo movimento, il valore al pin di Arduino (fig.1)
VALORE Valore misurato al pin
LAST DATA - ORA dell'ultima operazione sul pin
SEL E" un checkbox utile per le operazioni multiple che verranno illustrate nel pannello SHORTCUT
LED (fig. 2)
Sono emulati due led che possono assumere il colore ROSSO, VERDE o GRIGIO.
LED 1: ROSSO pin disabled VERDE pin enable
LED 2: ROSSO warning watchdog o errore               VERDE/GRIGIO : attivita"/standby
HIDE (fig. 3) La colonna del pin puo" essere temporaneamente collassata ciccando sul triangolo rosso im basso. La parte collassata riporta il numero pin e il triangolo rosso in senso inverso che cliccato, riporta la colonna a dimensioni normali.


fig.0 PIN Disabled


fig.1 Slider PWM


fig.2 LED



fig.3 HIDE


BLOCCO ANALOG


Sono rappresentati i pin analogici cosi' come li troviamo su Arduino. Ricalcano in gran parte la stessa struttura di quelli digitali ad esclusione di:

3) TIPO lo slider permette 2 possibilita: A -analogico D - Digitale Ricordo che i pin analogici, se impostati come digitali, prendono il numero pin da 14 a 19. In caso di impostazione digitale il controllo diventa identico ad un digitale (vengono nascosti il bottone READ ed i selettori per Map, Constrain e Vref). Ritornando in analogico il controllo riprende la sua normale fisionomia.
4) Il bottone M permette la rimappatura (MAP) su altra scala (Arduino1:Arduino:Miovalore1:Miovalore2). Va" ricordato che Arduino utilizza l"impostazione MAP per tutti i pin e quindi , per ogni pin, e" da specificare la mappatura che verra" inviata prima del comando di lettura valore .
Se il TIPO del pin analogico e" impostato in D (digitale) il bottone non e" visibile. ((fig 0)
5) Il bottone C permette di impostare il CONSTRAIN (min:max ).
Se il TIPO del pin analogico e" impostato in D (digitale) il bottone non e" visibile.(fig. 1)
6) Il bottone V permette di impostare il VREF da utilizzare per la lettura. Ricordo Default(5v), Internal(1,1v), External.
Se il TIPO del pin analogico e" impostato in D (digitale) il bottone non e" visibile.(fig. 2)
7) READ Il bottone READ effettua la lettura al pin; se il TIPO del pin analogico e" impostato in D (digitale) il bottone non e" visibile.
8) OK Ann Conferma o annullamento valori.

Minipanel per Map,Constrain e Vref.

fig.0 Inserimento MAP


fig.1 Inserimento CONSTRAIN


fig.2 Inserimento VREF



I SOTTOPANNELLI

I pannelli selezionabili che verranno di volta in volta visualizzati sotto quello di CONTROLLO (sempre attivo) sono (per adesso) 4:


PANNELLO WATCH
Start/Stop, messaggi, gestione dei watchdog (max 10). Il WATCH permette di effettuare in background controlli e azioni/reazioni dettatti necessari al nostrao processo. I risultati di ogni controllo sono visualizzati nel riquadro MESSAGGI WATCH e visualizzati col movimento degli slider sul PANNELLO DI CONTROLLO o dalla pagina dei link esterno WATCH 10 sec. .


Come logica e' simile al pannello SCHEDULE con la differenza sostanziale che uno schedule fa eseguire ad arduino un comando ad una data/giorno/ora prestabilito mentre il watch verifica che i valori letti dai pin da arduino specificati soddisfino determinate condizioni.
Con questo pannello si possono inserire dei watchdog (max 10) per monitorare in automatico situazioni in campo.I watch possono essere impostati sia su pin analogici che pin digitali. Si possono inserire/modificare/cancellare nuovi controlli senza interrompere il watch.La scansione avviene ogni 5 sec.

MESSAGGI WATCHDOG
START avvia il processo
STOP ferma il processo. LO STOP e' immediato, senza attesa di un eventuale post AJAX circolante.
LOG se selezionato i messaggi vengono accumulati nel file di log
INSERIMENTO/MODIFICA/CANCELLAZIONE CONTROLLI(fig.0)
NOME Nome da abbinare al controllo
SAMPLING valore che esprime ogni quanto dobbiamo eseguire il watch (in secondi). Puo' prendere il valore da slider orizzontale organizzato in step di 5 secondi o si puo' digitare il valore nel textbox (valore in secondi). Si consiglia il valore minimo di 10 sec.
ABITATO Seleziona , mediante i radio, se il watch e' ablitato o meno.Il watch non e' cancellato
COLONNA CONTROLLO
TIPO PIN il pin oggetto del watch
NUMERO PIN il numero del pin oggetto del watch
OPERATORE l'operatore da utilizzare tra il valore letto al pin e il successivo VALORE COMPARAZIONE
VALORE COMPARAZIONE il valore da comparare al valore letto Se il confronto tra VALORE_LETTO|OPERATORE|VALORE COMPARAZIONE risulta VERO vengono effettuate le azioni della COLONNA AZIONE
COLONNA AZIONE
TIPO PIN il pin oggetto dell"azione.
NUMERO PIN il numero del pin oggetto dell'azione.
SET l'azione da compiere per i digitali : HIGH (1) - LOW(0) - VALUE(PWM)
RESET l'azione da compiere per confronto FALSE
CONTROLLI PRESENTI Tabella che visualizza i controlli presenti,Le colonne sono:
N progressivo del watch
NOME il nome associato al controllo.E' attivo un mouseover con un tip layer dei parametri dello schedule.
SEC tempo di sampling
HUMAN READ il comando messo in versione "umana"
Bottone cancellazione del watch. I dati presenti vengono passati alla maschera INSERIMENTO/MODIFICA/CANCELLAZIONE CONTROLLI dove si dovra' confermare la cancellazione. La tabella verra' poi sistemata in caso di conferma cancellazione
Bottone modifica del watch. I dati presenti vengono passati alla maschera INSERIMENTO/MODIFICA/CANCELLAZIONE CONTROLLI dove si dovra' salvare la nuova configurazione del watch.
SALVA CONTROLLI Salva nel file config.php i parametri dei controlli.
CARICA Carica dal file config.php i parametri dei controlli.


fig.0 Form Inserimento/Modifica/Cancellazione watch


fig.1 Tip onmouseover sul nome in tabella watch



PANNELLO SCHEDULE (DOMO)
Start/Stop, messaggi, gestione degli scheduler (max 20). Lo SCHEDULE (o DOMO) permette di effettuare in background azioni programmate per data e ora. I risultati di ogni schedule sono visualizzati nel riquadro MESSAGGI SCHEDULE e visualizzati col movimento degli slider sul PANNELLO DI CONTROLLO o dalla pagina dei link esterno SCHEDULE 60 sec.


Come logica e' simile al pannello WATCH con la differenza sostanziale che uno schedule fa eseguire ad arduino un comando ad una data/giorno/ora prestabilito mentre il watch verifica che i valori letti dai pin da arduino specificati soddisfino determinate condizioni.
Con questo pannello si possono inserire delle esecuzioni schedulate per data e ora da effettuare a piacimento per tutti o alcuni giorni della settimana (max 20).Gli schedule possono essere impostati solo su pin digitali. Si possono inserire/modificare/cancellare nuovi schedule senza interrompere il demone.La scansione avviene ogni 60 sec.

MESSAGGI SCHEDULE
START avvia il processo
STOP ferma il processo. LO STOP e' immediato, senza attesa di un eventuale post AJAX circolante.
LOG se selezionato i messaggi vengono accumulati nel file di log
INSERIMENTO/MODIFICA/CANCELLAZIONE SCHEDULE(fig.0)
NOME Nome da abbinare allo schedule
TIPO PIN e PIN Tipo e numero pin di Arduino.Il TIPO PIN e' fisso digitale e gli analogici si trovano dal 14 al 19.
DATA ATTIVITA' SCHEDULE La data di inizio e fine validita' dello schedule.La data e' selezionabile da un pop_up.(fig. 0)
ORA ATTIVITA' SCHEDULE L'ora di inizio e fine attivita' dello schedule.L'ora e' selezionabile da un pop_up. (fig. 1).E' presente un nuvo campo Start_At che permette di eseguire , alla data prestabilita, un comando rapido;dopo l'esecuzione lo schedule si ferma. Il comando e' inseribile dal sottopannello SHORTCUTS
GIORNI I giorni di validita' dello schedule,
START VALUE Per il pin selezionato, all'avviamento dello schedule, verra' inviato ad Arduino il valore impostato. (0-LOW 1-HIGH)
END VALUE Per il pin selezionato, alla chiusura dello schedule, verra' inviato ad Arduino il valore impostato. (0-LOW 1-HIGH)
WATCH START L'avvio dello schedule puo' essere forzato dalla condizione VERA del watch collegato.(fig. 0b)
WATCH STOP L'arresto dello schedule puo' essere forzato dalla condizione VERA del watch collegato.(fig. 0c)
ABILITATO Se selezionato NO lo schedule non verra' attivato al raggiungimento dei parametri di start, restando comunque nella lista degli schedule attivi.
SCHEDULE PRESENTI Tabella che visualizza gli schedule presenti,Le colonne sono:
N progressivo dello schedule
NOME Il nome associato allo schedule. E' attivo un mouseover con un tip layer dei parametri dello schedule. (fig.3)
START Ora-Min di start.
STOP Ora-Min di stop.
Bottone cancellazione dello schedule.I dati presenti vengono passati alla maschera INSERIMENTO/MODIFICA/CANCELLAZIONE SCHEDULE dove si dovra' confermare la cancellazione. La tabella verra' poi sistemata in caso di conferma cancellazione
Bottone modifica dello schedule. I dati presenti vengono passati alla maschera INSERIMENTO/MODIFICA/CANCELLAZIONE SCHEDULE dove si dovra' salvare la nuova configurazione del watch.
SALVA SCHEDULE Salva nel file config.php i parametri degli schedule.
CARICA Carica dal file config.php i parametri degli schedule.


fig.0 Form Inserimento/Modifica/Cancellazione schedule


fig.0a Form Inserimento fast command


fig.0b Inserimento watch start


fig.1 Inserimento DATA


fig.2 Inserimento ora


fig.3 Tip onmouseover sul nome in tabella schedule



PANNELLO SHORTCUT
Raggruppamento selezioni multiple, Comandi brevi per Arduino, Status seriale.


E" un pannello che semplifica alcune azioni multiple; per adesso ho pensato a queste;

SHORTCUT SELEZIONI(fig.0) I singoli bottoni permettono selezioni multiple sui pin (ricordate il checkbox SEL?).Ad esempio, se voglio mettere tutti i pin digitali a LOW (0) usero" il bottone SELECT all DIGIT. per selezionarli e poi applichero' l'azione (punto seguente) Set all DIGIT. To LOW. Il programma mandera' le stringhe di set ad Arduino per tutti i digitali.
AZIONI SU PIN SELEZIONATI Lavora con SHORTCUT SELEZIONI ed effettua l'azione segnalata nel bottoner su tutti i pin precedentemente selezionati
COMANDI RAPIDI
Enter Command Invio al volo di un comando ad arduino
COMANDI RAPIDI PRESENTI (fig.0)
Tabella che visualizza i comandi rapidi presenti.Le colonne sono:
N progressivo del comando rapido
NOME Il nome del comando rapido. Lo ritroverete nel data entry (drop down) dei dati dello schedule
Bottone cancellazione dello schedule.I dati presenti vengono passati alla maschera INSERIMENTO/MODIFICA/CANCELLAZIONE SCHEDULE dove si dovra' confermare la cancellazione. La tabella verra' poi sistemata in caso di conferma cancellazione
Bottone modifica dello schedule. I dati presenti vengono passati alla maschera INSERIMENTO/MODIFICA/CANCELLAZIONE SCHEDULE dove si dovra' salvare la nuova configurazione del watch.
Manda ad Arduino il comando.
SALVA COMANDO RAPIDO Salva nel file config.php i parametri dei comandi rapidi
CARICA Carica dal file config.php i parametri dei comandi rapidi.
INSERIMENTO/MODIFICA/CANCELLAZIONE COMANDI RAPIDI(fig.1)
NOME Nome da abbinare al comando rapido
COMANDO Il comando da inviare ad Arduino secondo il protocollo descritto all'inizio.


fig.0 Shortcut Selezioni


fig.1 Lista e Form Inserimento/Modifica/Cancellazione Comando Rapido


STATUS PORTA SERIALE Stato della seriale con possibilita' di sua apertura o chiusura
COMANDI SYSTEM
CHECK PORTA SERIALE Prova comunicazione con la ESTENSIONE
CHECK ARDUINO READY Il comando CHECK ARDUINO READY manda ad Arduino la stringa"*" e si aspetta di risposta "**" . Questo check viene sempre effettuato prima di ogni invio ad Arduino..
PAUSE ARDUINO ** TODO **
END SESSION AND STOP ARDUINO Chiusura della SESSIONE, PORTA e STOP/RUN ARDUINO . Ho messo il bottone PANIC perche' e' la "cura finale" in caso di imballamenti.



PANNELLO MESSAGGI


Messaggistica varia e Messaggistica errori.
DIALOGO CON ARDUINO Ogni comando inviato ed ogni risposta ricevuta al comando sono visualizzate qui.C'e' la possibilita' di scrivere su un file di log il dialogo, di salvare il file di log(viene dato un nome in automatico) e di cancellarlo. (fig. 0)
PANNELLO MESSAGGI Messaggi di varia natura; non usato al momento
PANNELLOo ERRORI Messaggi di errore; non usato al momento

Esempio messaggi di arduino



PANNELLO SETUP
** TODO ** L'intenzione e preparare una impostazione globale dei pin,funzioni scritte dall'utente e altro da inviare ad Arduino.



PARTE ESTENSIONE PHP - LE FUNZIONI

L'estensione php ha 5 funzioni (i return code li sto ancora sistemando!):

- OpenSS(port,baud,bits,stop, parity)
I parametri sono presi del file config.php nella directory dati/default/
Return code:
0 = porta aperta
e-95 = errore in uno dei valori passati(zend)
e-97..e-99 = errore nei parametri(Dcb)

- WriteSS(string)
Invia la stringa string di comando all'estensione
Return code:
0 = invio ok
e-95 = errore in uno dei valori passati(zend)
a-99 = errore in uno dei parametri(zend)

- ReadSS("")
Riceve i dati dall'estensione relativi alla risposta di arduino ad un comando
E' predisposto un passaggio di parametri non implementato al momento(futuro WIRE).
Return code:
0;val = ricezione ok;al return code puo' seguire un valore se la trasmissione era relativa ad una read.
e-95 = errore in uno dei valori passati(zend)
a-99 = errore in uno dei parametri(zend)

- CloseSS()
Chiude la porta
Return code:
0 = chiusura ok
e99 = errore nella chiusura

- IsOpen()
Check com port aperta
Return code:
True = porta aperta
False = porta chiusa


DOWNLOADS


Download disponibili.
- il solo sketch arduino (ricordo, ide 023).Se scarichi l'applicazione completa e' gia compreso li.
- la sola simple_serial.dll + sorgenti (ricordo, compilata per la 5.3.0), segure l'installazione descritta all'inizio, e crearvi il vostro programma php e lo sketch di arduino.Se scarichi l'applicazione completa e' gia compresa li.
- l'applicazione completa(dll+php+arduino) e cominciare ad usarla. L'APPLICAZIONE NECESSITA DI PARECCHIE FIX; SON GIA' A BUON PUNTO CON LA NUOVA RELEASE I2C CHE LA SOSTITUIRA';VI CONSIGLIO DI ATTENDERE O SCARICATE GIUSTO PER VEDERVI IL CODICE.
L'interfaccia grafica e' sviluppata per risoluzione 1280x800.
C'e anche un piccolo schemino in fritzing di quello che ho usato per le prove,tutto materiale di recupero.Mi scuso per le inesattezze ma e' la prima volta che ho usato questo ottimo programma.
Ultima cosa IMPORTANTE:come browser ho usato Firefox 7.0.Anche con Chrome che Opera la visione e' discreta mentre con IE (tanto per cambiare!) ci devo mettere mano.Per adesso NON USATE IE!.
Se non vi fa' ancora male la testa allora potete anche passare alla pagina della descrizione dei programmi(che e', per adesso ,parziale).

Mandatemi senza problemi commenti, offerte di collaborazione, pareri e informazioni a :leowork2000[at]gmail.com