domenica 2 agosto 2015

Apriporta RFID parte 2 - il software

In questa seconda parte completo il primo post sull'apriporta rfid descrivendone brevemente il codice.

Chiamata al server esterno

Al momento della "strisciata" con il badge rfid viene chiamato un servizio web esterno che effettua la validazione del codice rfid letto.
La chiamata è una semplice http get a un pagina web alla quale vengono passati il codice rfid letto e il gate, ovvero il codice della postazione.
Questo perchè il sistema è stato pensato per gestire un set di porte, gestite centralmente con un unico database.
La chiamata è del tipo GET /presenze.aspx?code=XXX&gate=YYY, dove XXX è il codice rfid e YYY è il codice della postazione.
Il servizio chiamato restituisce un "OK" se il codice rfid è valido, in tutti gli altri casi è sufficiente che la pagina web restituisca una stringa diversa.
Per questioni di sicurezza, al fine di avere sempre garantita l'apertura della porta  anche in caso di assenza di connettività verso il server, ho previsto fino a 10 card "master" il cui identificati rfid è cablato nel codice: in questo caso se viene rilevata uno di questi codici, la porta viene aperta istantaneamente senza alcun tipo di verifica sul server remoto. Queste card andranno utilizzate solo dai proprietari del sistema, mentre l'abilitazione di tutte le altre card potrà essere fatta dinamicamente attraverso il database.

Configurazione

per la configurazione sono necessarie alcune costanti:
  • const IPAddress server(82,63,171,50) : indirizzo del nostro server
  • const int       serverPort = 80 : porta del server
  • const String    gate = "SEDE1" : identificativo della postazione (gate)
  • byte            mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0xE5, 0x0F } : mac address della ethernet shield (attenzione: deve coincidere con quello riportato sull'etichetta sul dietro della scheda)
  • const String master0 = "2590ab25" : identificativo della card master (fino a 10)
  • const int       activateTime = 1000 : tempo di attivazione del relè (consigliato >500ms)

Attenzione: se lavorate con ip address statico, settate la variabile myip[] e scommentate la riga successiva, altrimenti verrà acquisito un indirizzo dinamico via dhcp

  byte myip[] = { 10, 10, 30, 89 };   
 // Ethernet.begin(mac, myip);

Funzionamento

Il main è un ciclo infinito:
viene fatto lampeggiare il led, viene letto l'rfid, vengono aspettati 200ms e poi si ripete nuovamente il ciclo.
In caso di lettura di un rfid, viene verificato se il codice coincide con una delle card master, in tal caso viene attivato immediatamente il relè. Se il codice non è relativo a una card master, allora viene invocato il servizio esterno chiedendo la verifica sul codice rfid letto. Se la risposta è affermativa allora viene eccitato il relè.

Lo sketch

Scarica qui lo sketch completo

Non posto la parte serve in quanto davvero semplice. Nel mio caso si trattava di una pagina aspx che andava a effettuare una query su una tabella contenente le card abilitate. Al momento della chiamata veniva inoltre scritta una tabella di log riportante codice, ora, gate ed esito.






2 commenti:

  1. Ciao,
    ti avevo scritto una mail tanto tempo fà, ma non mi hai mai risposto.
    Colgo l'occasione per chiederti informazioni sulla ethernet shield, nel senso che in alcuni casi nei miei utilizzi simili al tuo la scheda in questione spesso andava riavviata, hai riscontrato questo problema lasciandola 24 su 24 accessa la postazione di accesso ? Hai gestito il reset software della shield ?
    Il mio obiettivo è gestire un punto che si trova a quasi 50 metri, cosa mi consigli ?

    RispondiElimina
  2. ciao, non ho mai riscontrato problemi di blocco, le installazioni che ho installato a casa e nell'ufficio sono molto stabili, si inchioda occasionalmente per cali di tensione (temporali o altre cause esterne), in pratica sta su per mesi senza problemi. Per questo non ho mai considerato un reset software della shield. Se hai necessità di avere un lettore rfid a 50 metri dalla scheda arduino con il progetto da me descritto leggiti il mio precedente post sui cavi lunghi http://diegodiy.blogspot.it/2015/02/bus-spi-e-cavi-lunghi.html perchè ho avuto parecchi problemi di disturbi. Di recente ho provato tuttavia un'altra scheda rfid con un bus seriale uart che è interfacciata come una normale seriale, e sembra avere molti meno problemi, ho tirato senza problemi 20m di cavo nelle stesse canale della rete elettrica, http://www.seeedstudio.com/depot/Grove-125KHz-RFID-Reader-p-1008.html .

    RispondiElimina