SunPatrol
(download programma)
1 - Introduzione
2 - Il programma
3 - Uso in pratica con esempi
4 - Considerazioni finali
Introduzione
Da tempo sono appassionato, oltre che di DSP anche di impianti fotovoltaici. In particolare, ho realizzato un impianto "ad isola" ossia completamente autonomo, composto da pannelli fotovoltaici, un inverter sinusoidale, un regolatore di carica ed ovviamente un cospicuo pacco batterie. E fino a qui...è storia, e non è argomento di questa discussione. Credo che quanto prima verrà allestita una apposita pagina web, a beneficio degli amici del forum che frequento sull'argomento.
Il mio impianto fotovoltaico alimenta svariati carichi, tra cui un Server sempre acceso. Che è semplicemente un vecchio PC portatile in disuso (ed allo scopo reimpiegato), che uso per File Sharing, backup, Forum etc.
Tempo fa, per motivi vari, comprai un Kit della VELLEMAN, la "famosa" DemoBoard K8055 (vedi sito produttore, cercare sul sito la sigla K8055) che è praticamente una scheda connessa tramite interfaccia USB al PC e consente, tramite software Windows (viene fornito un esempio completo di sorgenti), di pilotare delle uscite (8, eventualmente connesse ad un relè), leggere degli ingressi digitali (5) e analogici (2) e dulcis in fundo anche due uscite analogiche. Le prestazioni sono modeste, lo stesso convertitore A/D e D/A è a soli 8 bit, ma se usata - per esempio - come scheda per controllo carichi e monitoraggio grandezze analogiche (senza pretendere una grande risoluzione) è a dir poco eccellente, considerando il prezzo d'acquisto relativamente modesto; ed il fatto che non è difficile costruirne una autonomamente, a patto di avere l'attrezzatura per programmare il PIC (il microcontrollore usato nel progetto). Essa è stata presentata dalla rivista ElettronicaIN (www.elettronicain.it) che consente di scaricare GRATUITAMENTE (previa registrazione) l'intero articolo.
E' ovvio che questa discussione si rivolge apparentemente ai possessori di questa scheda, ed il software sviluppato funziona esclusivamente con essa; tuttavia, sono disponibile a modificarlo opportunamente ed adattarlo ad altre schede (per esempio altri modelli della Velleman) oppure a qualsivoglia scheda a patto che mi si indichi come pilotarla (per esempio fornendomi la DLL oppure il codice C++ o Pascal o che quello che avete) e le caratteristiche. Meglio ancora (o forse prerequisito indispensabile) è poterne avere una per le mani.
Avevo l'esigenza di controllare da remoto l'accensione e lo spegnimento del mio impianto fotovoltaico, in particolare dell'Inverter, ed anche di - sempre da remoto - connettere il mio impiantino all'impianto Enel di casa (sconnettendolo però dall'enel stessa). E dulcis in fundo avevo anche bisogno di monitorare lo stato di carica delle batterie e del livello di insolazione. Ed ancora di memorizzare l'andamento di queste tensioni nel tempo magari in maniera in maniera permanente (su file). A pensarci, il tutto poteva servirmi anche per accendere e spegnere altri carichi, per esempio un acquario o l'impianto di riscaldamento/condizionamento...
Ora, di prodotti che fanno tutto questo (ed oltre) sul mercato ne esistono a bizzeffe, di ogni tipologia e prezzo; la mia idea nasce semplicemente dalla considerazione che 1) la scheda K8055 era già in mio possesso e comunque costava poco 2) avevo un server sempre acceso alimentato "gratis" dal sole 3) programmare mi diverte un mucchio.
Detto fatto. Ho creato un programmino che consente di fare tutte queste cose. Che era ovviamente dedicato al mio impianto solare. Da qui il nome SunPatrol...(la cui traduzione sarebbe "controllore solare", od almeno questa era la mia intenzione!)
Ben presto mi sono accorto che sarebbe stato possibile fare, con un po' di sforzo aggiuntivo, un programma ben più flessibile. Detto fatto. Il nome è rimasto sempre lo stesso, ma il programma è diventato MOLTO più generale e sofisticato. Mi sono dunque affrettato a metter la scheda della Velleman in uno "scatolozzo" che avevo in casa, aggiungendogli una manciata di relè e di cavi:
E questa è la schermata principale del programma che gira su un PC collegato tramite USB alla scheda K8055 (le foto sono relative ad una versione un po' più vecchia di quella che è possibile scaricare):
Figura 1
Questa invece è la schermata di controllo che appare su Internet Explorer (su PC remoto tramite Internet) e si collega via HTTP al programma della figura precedente (che dunque implementa un web server autonomo!):
Figura 2
Ho riportato "di corsa" tre immagini per dare un'idea immediata del tutto, ora vediamo di andare un po' più nel dettaglio e spiegare ogni singola funzione (significativa) realizzata. C'e ne sono moltissime, cercherò di dare un'idea delle principali, contando sul fatto che la maggior parte delle funzioni sono state realizzate in maniera da essere "autoesplicative". In altri termini, una semplice occhiata al programma DOVREBBE mettere chiunque in grado di utilizzarlo...
Il programma
Il programma creato, come detto, si chiama SunPatrol, ma non è fatto solo per impianti fotovoltaici, piuttosto si può usare anche per impianti fotovoltaici (ed a tal proposito si presta a modifiche incredibili dettate solo dalla fantasia...anche ora mentre scrivo ho nuove idee...) ed è un programma generale che consente di controllare da remoto tramite INTERNET ed un browser (Internet Explorer per esempio, o Firefox etc.) una scheda Velleman K8055. SunPatrol nasce dopo un attento studio del programmino dato come esempio dalla stessa Velleman, che è possibile scaricare gratuitamente dal sito del produttore stesso, codice sorgente compreso. La rivista ElettronicaIn, nel numero 90 (luglio/agosto 2004) ha recensito il prodotto e nel numero successivo ne ha descritto il software a corredo. Come detto nell'introduzione è possibile scaricare l'articolo dal sito della rivista (www.elettronicain.it) gratuitamente, previa registrazione. Io ho scritto un programma simile a quello dato come demo ma tremendamente più potente, che comprende (inglobato nel programma) un web server e la possibilità di inviare posta senza appoggiarsi a server esterni: questo naturalmente se il vostro provider non ha bloccato le porte inerenti il servizio. In tale ultimo caso, è comunque possibile mandare la posta in maniera "standard", ossia impostando nel programma il server SMTP (con eventuale autenticazione) del vostro fornitore di posta. Alcuni provider bloccano l'uso di server SMTP che non siano quelli da loro stessi gestiti (per esempio il mio..!)
in sintesi, il programma consente di:
1) Essere gestito in locale tramite l'interfaccia della figura 1, che:
- consente di attivare/disattivare gli output tramite le checkbox appositamente dedicate,
- monitorare lo stato degli input tramite delle checkbox che non possono essere modificate manualmente (sola lettura),
- il livello d'ingresso ai convertitori A/D tramite barre e rappresentazione grafica in tempo reale,
- impostare il livello d'uscita dei convertitori D/A tramite trackbar,
- visualizzare il tempo corrente (data e ora),
- visualizzare i punti acquisiti (per esempio, nel mio caso, la tensione della batteria, ossia i valori letti ai vari istanti)
- visualizzare la log generale del sistema (v. avanti),
- visualizzare e resettare i contatori (v. avanti).
2) Gestire tutti i parametri tramite finestra di Setting, accessibile mediante menù principale,voce OPTION/SETTING. Compare una finestra che contiene svariate "sottofinestre" che consentono di impostare TUTTI i parametri di funzionamento del programma, automaticamente salvati in un file di inizializzazione che consente di non perderli alla chiusura dello stesso:
Figura 3 a,b,c...
Eccetera. in particolare, nella figura 3a è possibile impostare l'indirizzo della scheda, la frequenza di aggiornamento della LOG grafica, la frequenza con cui vengono letti i convertitori A/D più i parametri relativi all'antirimbalzo (come da sw originale Velleman) e quelli relativi all'HTTP (vedi prossimo punto). Nella figura 3b si impostano i parametri relativi alla posta elettronica (come si vedrà il programma può mandare mail ad un indirizzo predefinito in conseguenza del verificarsi di eventi: esempio quando un'ingresso cambia stato, o si verifica lo scatto di un timer, un errore etc) e gli eventi a causa dei quali mandare la posta. Infine nella figura 3c si possono impostare i TIMER, ossia è possibile definire quattro timer nell'arco delle 24 ore che accenderanno e spegneranno un utilizzatore connesso ad uno tra gli 8 output disponibili della scheda (normalmente connessi a relè) ad orari predefiniti.
Le restanti opzioni sono disponibili nelle sottocartelle "Input label Setting" che consente di definire etichette personalizzate per le checkbox di input di figura 1, quelle relative alla sottocartella "Output Label Setting", che consente di definire le analoghe etichette per le checkbox di output. Queste etichette personalizzate appariranno anche nella pagina web e dovunque nel programma al posto delle scritte di default "output1,2,3,4,5..., Input1,2,3...). Esempio, invece di "Output1" che a me serve per pilotare l'accensione delle luci dell'acquario di casa, posso voler usare l'etichetta "Acquario".
"A/D e D/A setting" consente di impostare etichette e fattori di scala per i convertitori, mentre "log file options" consente di definire le modalità di memorizzazione dei file di log grafici, che possono essere salvati con cadenza arbitraria, a "passi" minimi di un giorno, oppure salvati in un UNICO file comunque salvato allo scadere della mezzanotte (per motivi di sicurezza). E' possibile inoltre impostare un salvataggio con cadenza mensile.
NOTA (repetita iuvant) Confido sul fatto che le varie opzioni di per se non necessitino di molte spiegazioni, ho cercato di scrivere il programma in maniera da essere il più intuitivo possibile.
3) I parametri principali di funzionamento, nonché l'attivazione manuale dei vari output, e la gestione completa dei Timer (oltre a monitorare la log grafica e di sistema) può avvenire interamente via web, grazie ad un server web integrato nel programma, che funziona su di una porta definibile dall'utente (default 80). La figura 2 è la pagina web principale che appare digitando sul browser l'indirizzo del computer su cui gira SunPatrol, mentre la pagina web di "setup" dei timer è la seguente:
Figura 4
La pagina web di figura 2 e 4 possono accettare comandi SOLO se si imposta una password, definibile dall'utente in finestra di setting principale (figura 3a) e se si preme il bottone submit nella pagina web DOPO aver impostato il comando voluto (esempio abilitare/disabilitare un output). Una eventuale digitazione di password errata non verrà segnalata, ma sarà altresì evidente perché non verranno applicate le modifiche selezionate. E' possibile che la scheda "reagisca" con un tempo dell'ordine dei millisecondi che potrebbe comunque essere molto più lungo di quanto il software ci impieghi a trasmettere la pagina web, nel caso è opportuno fare un refresh della pagina mediante l'opzione REFRESH. In altri termini, appena si clicca il bottone submit e i comandi accettati, è possibile che l'input corrispondente che è stato scelto come CONFERMA del comando appena impartito non vari mentre in effetti la commutazione è effettivamente avvenuta. Questo è dovuto appunto alla possibile relativa lentezza della scheda rispetto alla velocità del software e dunque sarà necessario effettuare un refresh manuale.
Errori di digitazione nei parametri dei timer verranno invece segnalati via web.
Filosofia generale del sistema: il programma gira, leggendo i dati dalla scheda (input digitali e analogici) con una frequenza definibile nella finestra di setting, sotto la voce "Meas. Time" . Essi sono presentati e memorizzati nell'interfaccia grafica del programma in tempo reale, in particolare aggiornando lo stato delle checkbox, le barre di livello dei convertitori A/D e la finestra con grafico a barre che memorizza i valori letti dai convertitori A/D in un grafico tempo-tensione (il tempo è rappresentato dalla data del giorno e l'ora in cui è effettuata la misura).
Questi ultimi possono essere visualizzati in maniera "estesa" cliccando sull'opzione del menù principale "View" e successivamente "Extended graphics" provocando la comparsa della seguente finestra:
Figura 5
Essa consente di visualizzare gli stessi grafici della finestra principale, e come su questa è possibile "zoomare" o scorrere tramite mouse. In aggiunta, presenta numerose opzioni che consentono una gestione completa dei dati acquisiti (e sto già lavorando ad una versione potenziata). In particolare per effettuare lo zoom è possibile definire la zona da evidenziare tramite il pulsante sinistro: posizionate il cursore sull'angolo superiore sinistro del rettangolo che volete ingradire, cliccate con il tasto sinistro del mouse e, mantenendo la pressione sul pulsante, muovete il mouse in diagonale verso il basso. Verrà disegnato un rettangolo ed al rilascio del pulsante la zona evidenziata dal rettangolo verrà ingrandita. Per eliminare lo zoom potrete usare il bottone "unZoom" od in alternativa tracciare nuovamente un rettangolo di zoom ma IN SENSO INVERSO, ossia partendo dal basso verso l'alto (non importa la dimensione) questa volta in diagonale da destra a sinistra.
Per "trascinare" il grafico (ossia farlo scorrere in orizzontale) potere usare le trackbar ma anche mediante il mouse, in particolare usando il tasto destro (mantenendolo premuto e muovendo il mouse nella direzione desiderata). Si tenga infatti presente che la visualizzazione dei valori acquisiti è limitata ad un numero ristretto di campioni (18) per consentire una migliore leggibilità. Pertanto il grafico visualizzato è una "finestra" sulla sequenza di valori acquisiti. Si tenga altresì presente che se viene impostata una frequenza di aggiornamento della log di svariati minuti (od ore) essa verrà appunto riempita dopo un tempo pari a 18*(frequenza aggionamento).
Ancora, è possibile avere ulteriori indicazioni sui valori dei dati tramite il tasto centrale del mouse (posizionate il cursore su una delle barre e premete il pulsante centrale, se il vostro mouse è a tre tasti).
E' possibile "interpolare" i valori "grezzi" letti e rappresentati con barre tramite grafici standard e secondo uno dei metodi proposti nella combobox "Fitting method"; è altresì possibile, dal menù principale della finestra eliminare la visualizzazione delle barre e lasciare solo il grafico interpolato (opzione View). I dati salvati sono comunque i soli dati "reali" acquisiti.
Lascio al lettore la scoperta delle altre opzioni (stampa, salvataggio etc).
Uso in pratica con esempi
In "soldoni" come si fa ad usare il programma?
Semplice; scompattare il file zip scaricato da questo sito (da questa stessa pagina, per esempio da qui) , e metterlo in una directory a piacere (per esempio c:\domotica). Il programma può essere eseguito così com'è, non necessita di installazione. I file contenuti nel file SunPatrol.zip sono:
SunPatrol.exe = il programma
K8055D.dll = è la DLL fornita da Velleman per il controllo remoto della scheda tramite USB. La versione che allego al programma è la 4.0.0 che ho scaricato dal sito del produttore (www.velleman.de, ma si trova anche, e forse più facilmente, sul sito di Futura Elettronica), e che credo di poter liberamente allegare al programma.
Collegate la scheda al computer, e lanciate il programma SunPatrol.exe. Andate sulla voce di menù "option" ed aprite la finestra di setting. Essa compare con una serie di parametri di default, per lo più adatti ad ogni esigenza; per ora non ho previsto una ricerca automatica della scheda, probabilmente compresa nella prossima versione.
Dunque, come ogni possessore di K8055 dovrebbe sapere, la scheda è individuata da un indirizzo definibile via hardware da jumper. Nella finestra di setting è possibile dunque definire l'indirizzo in maniera semplice: 0,1,2,3. Il primo (zero) corrisponde ai due jumper non inseriti (come nel mio caso) e gli altri di conseguenza.
Impostate poi una password a vostra scelta per poter "impartire gli ordini" al programma via web in tutta sicurezza (altrimenti chiunque via web potrà accendere e spegnere i vostri utilizzatori, semplicemente premendo il tasto submit!).
A questo punto il tutto è pronto a funzionare. Chiudete la finestra di setting e cliccate sul bottone "Connect". Se tutto va a buon fine, il programma sta girando con i parametri definiti in finestra di setting.
A questo punto potrete settare a ON/OFF i vari output (intesi come output della scheda, ossia eccitare e diseccitare i relè eventualmente connessi alle uscite open-collector della scheda), leggere gli ingressi digitali e analogici e impostare i valori di uscita dei convertitori D/A. Dall'opzione del menù principale "File" potrete cliccare sull'opzione "tray" che ridurrà il programma ad una icona nella "tray bar" e lasciare il programma indefinitamente in esecuzione sulla vostra macchina server. Oppure, cliccare sul bottone "di serie" per la riduzione ad icona del programma ed esso verrà invece ed automaticamente ridotto a icona nella Tray-bar.
Tenete presente che il programma implementa un completo web server, che gira sulla porta da voi impostata; tipicamente, la porta 80. Se avete un'altro web server attivo, dovrete cambiare la porta, altrimenti il programma segnalerà errore. Io per esempio uso una porta non standard, sia perché ho altri web server in funzione ma principalmente per motivi di sicurezza (è un accorgimento "blando" che però almeno non consente a visitatori occasionali di sapere che avete un controllo domotico attivo). E non dimenticate di autorizzare il programma a livello di Firewall, ammesso che lo stesso ve lo chieda. Il programma è in grado di implementare un web server ed inviare posta, pertanto NON è un comportamento fraudolento ma ESPLICITAMENTE VOLUTO. Mi spiego: segnalazioni da parte dell'antivirus-antispam-firewall che il programma sta cercando di agire come server e che sta cercando di inviare posta E' ASSOLUTAMENTE NORMALE e non vuol dire che il programma nasconda spyware e simili. L'importante è che abbiate scaricato il software dal mio sito (www.sillanumsoft.org o com)
A questo punto andate su una macchina remota e provate a pilotare la scheda tramite pagina web. Ricordate (ancora una volta) che il vostro Firewall o router (e conseguente firewall da esso eventualmente implementato) potrebbero bloccare il flusso di dati, pertando dovrete "autorizzare" sunpatrol e le porte da esso utilizzate (che per la pagina web avrete stabilito voi, oppure, se non lo avete fatto, è la porta 80 = non dovete digitare la porta). Vedi sopra.
Dalla macchina remota digitate l'indirizzo del vostro server (come IP o indirizzo simbolico se avete un'indirizzo simbolico ad esso associato, magari anche con servizi gratuiti su IP dinamico come DynDNS - www.dyndns.com - come ho fatto io). E ricordatevi che l'indirizzo (simbolico o no), non vale ALL'INTERNO della vostra sotto-rete, dove dovrete usare un indirizzo tipo 192.168.x.y ossia di tipo "locale".
Per esempio io uso un indirizzo "staticizzato" tramite dyndns del tipo casa.accattatis.org, e dunque da remoto mi collego a SunPatrol (per esempio dal lavoro) tramite browser digitando il seguente indirizzo
http://casa.accattatis.org:XX
dove XX è la porta da me scelta. Da casa invece (ossia da un computer connesso all'interno della mia rete locale, per esempio quello di mia moglie) uso l'indirizzo 192.168.1.100 che è l'indirizzo "interno" che ho assegnato alla macchina server. Macchina server che ho comunque detto al router di mappare come direttamente visibile dall'esterno (e che quindi dall'esterno apparirà come l'indirizzo che il mio provider mi ha fornito al momento - per intenderci, alla data in cui scrivo è 79.8.247.89)
Insomma, ecco cosa mi appare sul browser:
Da questa pagina posso controllare le uscite e leggere gli ingressi; con l'opzione refresh posso aggiornare la pagina in maniera da leggere le nuove letture dei convertitori A/D (ed aggiornare la data). Che nel mio caso sono il valore della tensione dei pannelli fotovoltaici e lo stato di carica della batteria. La scritta che nel mio caso è "Welcome to Accattatis Server" è definibile a vostro piacere, andate a modificarla nella finestra di setting, prima sottocartella sezione Http. Potete anche non mettere nulla e lasciarla "bianca".
Considerazioni finali
Ho scritto il programma per mio uso e consumo personale, e dunque esso è FREEWARE. Pianifico di costruire un hardware personalizzato, e dunque svincolarmi da circuiti di terze parti, sebbene per ora mi va bene così, e mi funziona alla grande. E comunque lascerei la compatibilità verso la scheda di Velleman. Anche in tal caso il programma rimarrà freeware, così come lo schema eventualmente prodotto. Valgono le considerazioni fatte qualche riga fa, ossia che sono disponibile (ed anzi interessato) ad estendere il programma ad altre schede commerciali e non, a patto che ovviamente mi si forniscano i mezzi per poterlo fare: codice sorgente oppure dll per la gestione della scheda e magari la scheda stessa.
La scheda che sto usando è prodotta da Vellemann, ma al contempo commercializzata in italia da Futura Elettronica (www.futuraelettronica.net). Siccome costa relativamente poco (al momento in cui scrivo 38 euro) e comunque per il fatto che è già in mio possesso da tempo, mi viene gratis. Ripeto ancora, ben due articoli sono stati scritti dalla rivista ElettronicaIn (www.elettronicain.it) che possono essere scaricati GRATUITAMENTE dal sito della rivista, previa registrazione. Dovrete poi andare nella sezione "download", fare una piccola ricerca per argomento od al limite inserendo come parola chiave la sigla K8055 e troverete gli articoli.
Nel mio personalissimo caso poi, avendo un PC sempre acceso, usare un software Windows è addirittura cosa migliore che usare un hardware dedicato standalone, come molti ne esistono (se qualcuno è interessato posso fornire qualche indirizzo, ho trovato in rete cose apparentemente ben fatte ed economiche). Inoltre, come è facile immaginare, le possibilità di modificare il programma per ottenere comportamenti praticamente arbitrari è il punto di forza del sistema. Sono aperto ai suggerimenti.
Che esistano in commercio MIRIADI di hardware che fanno controllo remoto (persino completamente autosufficienti, semplicemente una scatoletta da collegare al router) ne sono ben cosciente, ed infatti non ho assolutamente la pretesa di aver creato chissà che; tuttavia, un programmino come Sunpatrol, che consente di fare queste cose con la K8055 personalmente non lo avevo ancora trovato (se esiste ben felice di analizzarlo, a saperlo avrei risparmiato un sacco di tempo!) ma in particolare mi ha fatto fare una bella esperienza e dato la possibilità di modificarlo secondo le mie esigenze. Inoltre, fatto assolutamente non trascurabile, implementa si un web server, ma che NON SI APPOGGIA a file esterni. Qual'è il vantaggio (almeno sperato)? Semplice: oltre a non dipendere da web server esterni che potrebbero avere i loro problemi, non costringe il PC a LEGGERE DA DISCO che anzi può tranquillamente andare anche a riposo. Ossia, per un computer sempre acceso, ne riduce significativamente il consumo elettrico ed aumenta la durata del disco in se. Direi che il fattore consumo, in particolare per me che alimento il tutto a "batterie solari" , è essenziale.
Conclusione. Metto a disposizione di tutti questo mio piccolo lavoro, che invero apre le porte a nuove versioni del mio oramai famoso Visual Analyser (pensavo ad una versione "Web Edition") e a vari nuovi programmi che mi sono venuti in mente nel corso dei lavori, alcuni persino mentre scrivo queste righe. In particolare la controllabilità in remoto tramite web è una cosa che di questi tempi diviene particolarmente interessante. Ma non voglio anticipare nulla, e men che meno creare aspettative su programmi che magari con potrò portare a termine o magari nemmeno iniziare.
Per qualsiasi chiarimento, suggerimento o comunicazione di bachi individuati, scrivete pure liberamente agli indirizzi di posta che ho rilasciato per VA, e spero di trovare il tempo per rispondere a tutti.