Come realizzare un sistema di autenticazione RFiD per HA con Arduino
di Luigi Duchi
16 Novembre 2018
Guide
Non molto tempo fa ho pubblicato un articolo riguardante un sistema di allarme "home made" implementabile tramite il component allarm panel di Home Assistant, potete trovare l'articolo QUI. Ci tengo a precisare che i sistemi di allarme "home made" anche se non paragonabili ai sistemi professionali, con alcuni accorgimenti, possono essere comunque utilizzati con buoni risultati.
Ringrazio molto il mio amico VINCENZO POMA che mi ha aiutato a programmare il mio lettore RFID.
Oggi in particolare andremo a vedere come programmare un NodeMCU abbinato ad un lettore RFID e integrarlo in Home Assistant proprio per attivare o disattivare il nostro sistema di allarme.
Per chi non lo conoscesse, il lettore RFID è un modulo aggiuntivo che si può installare su Arduino o su nodemcu o D1 mini e permette di leggere i tag NFC che potete vedere nella foto sottostante.
RFID, NFC: di cosa stiamo parlando?
(fonte wikipedia)In telecomunicazioni ed elettronica con l'acronimo RFID (dall'inglese Radio-Frequency IDentification, in italiano identificazione a radiofrequenza) si intende una tecnologia per l'identificazione e/o memorizzazione automatica di informazioni inerenti ad oggetti, animali o persone (automatic identifying and data capture, AIDC) basata sulla capacità di memorizzazione di dati da parte di particolari etichette elettroniche, chiamate tag (o anche transponder o chiavi elettroniche e di prossimità), e sulla capacità di queste di rispondere all'interrogazione a distanza da parte di appositi apparati fissi o portatili, chiamati reader (o anche interrogatori).
Questa identificazione avviene mediante radiofrequenza, grazie alla quale un reader è in grado di comunicare e/o aggiornare le informazioni contenute nei tag che sta interrogando; infatti, nonostante il suo nome, un reader (ovvero: "lettore") non è solo in grado di leggere, ma anche di scrivere informazioni.
In un certo senso, i dispositivi RFID possono essere quindi assimilabili a sistemi di lettura e/o scrittura senza fili con svariate applicazioni. In questi ultimi anni si sta affermando man mano anche lo standard NFC (Near Field Communication, 13,56 MHz e fino a 10 cm, ma con velocità di trasmissione dati fino a 424 kbit/s) che estende gli standard per consentire lo scambio di informazioni anche tra lettori. (fonte wikipedia)
Bene adesso che abbiamo visto una panoramica dell'argomento che andremo a trattare andiamo a vedere il materiale che ci serve:
- 1 d1 mini che potrete acquistare su Amazon https://amzn.to/349EOhS
- 1 lettore rfid che potrete acquistare QUI
- jumper di collegamento che potrete acquistare QUI
Nel kit base del lettore rfid e' compresa una tessera e un portachiavi nfc nel caso ve ne servano degli altri potrete acquistarli QUI
Adesso che abbiamo visto il materiale necessario per il progetto, sarà necessario scaricare IDE di arduino sul proprio computer, sempre che non lo abbiate già fatto. Lo potrete reperire QUI
Abbiamo già visto nelle guide precedenti come aggiungere le schede basate sul processore esp 8266 (come il d1 mini) su ide di arduino. Chi si fosse perso questo passaggio lo può rileggere QUI
Una volta installato l'add-on per il d1 mini sarete pronti ad aprire lo sketch direttamente in ide. Lo sketch non è altro che una serie di righe di comando che andranno ad installarsi sul d1 mini e che permetteranno, in questo caso, l'utilizzo del nostro lettore rfid.
lo potrete scaricare cliccando QUI
collegate il d1 mini al PC tramite un cavo usb
cliccate 2 volte sul file nfc_allarme.ino che avete scaricato precedentemente
in automatico verrà caricato lo sketch su Ide di Arduino.
Nelle impostazioni, sotto la voce strumenti, settate le seguenti impostazioni:
ovviamente alla voce porta dovrete selezionare la porta corrispondente a quella che avete collegato il d1 mini
controllate all'inizio dello sketch che tutti i file dopo la scritta include siano rosse, se così non fosse vorrà dire che vi mancano le relative librerie, dovrete quindi procedere ad aggiungerle manualmente...
...cliccando su:
ed digitando il nome della libreria mancante nella barra per poi andarla ad installare
quando avrete tutte le librerie pronte (scritte in rosso) scorrete nello sketch su IDE di arduino e compilate lo sketch con i vostri dati:
cliccate sulla spunta in alto a sinistra (verifica). Quando avrà finito il controllo cliccate sulla freccia accanto per caricare lo sketch. Attendete il termine della procedura, dopo di che potrete staccare il vostro d1 dalla porta usb.
Adesso dovrete procedere a collegare il vostro d1 mini al lettore rfid, per farlo seguite questo schema:
benissimo adesso non vi rimane che alimentare il d1 e passare alla programmazione di Home Assistant.
Per prima cosa creiamo un sensore (virtuale) che ci permetterà di leggere il codice dei vari tag che avvicineremo.
Per farlo andrete in configuration.yaml e inserite questo:
sensor:
platform: mqtt
state_topic: "home/rfid"
name: RFID c
al riavvio di Home Assistant vi comparirà questo sensore
Noterete che ogni volta che si leggerà un tag, il sensore mostrerà un codice diverso. Annotatevi i codici di tutti i sensori, vi servirà per aggiungere un automazione all'allarme che abbiamo creato nel precedente articolo.
Nell'automazione che andremo a creare faremo in modo di attivare o disattivare l'allarme ogni volta che avvicineremo il nostro tag al lettore. In occasione dell'attivazione o della disattivazione faremo parlare il nostro Google Home con una frase che indicherà l'attivazione o la disattivazione dell'allarme stesso.
recatevi quindi in automation.yaml e inserite queste due automazioni:
- alias: RFID 2 Alarm on
trigger:
platform: mqtt
topic: "home/rfid"
payload: 'QWERTY'
condition:
- condition: state
entity_id: alarm_control_panel.allarme_casa
state: disarmed
for:
seconds: 5
action:
- service: logbook.log
data_template:
name: >-
{{ MQTT }}
message: RFID 1 -> Alarm on!
- service: alarm_control_panel.alarm_arm_away
data: {"entity_id":"alarm_control_panel.allarme_casa","code":"0000"}
- service: tts.google_say
entity_id: media_player.piloty
data:
message: 'allarme attivato'
La prima automazione serve per attivare l'allarme. Alla voce payload tra le due ' ' dove io ho scritto QWERTY voi dovrete scrivere il codice che avrete ricavato dal lettore rfid una volta che avrete appoggiato la tessera o il tag, ovviamente dovrete creare un automazione identica cambiando il playload per ogni tag o carta che avvicinerete.
alla voce entity_id dell'allarme dovrete inserire quella relativa al vostro allarme nel mio caso alarm_control_panel.allarme_casa
e dopo code, dove io ho inserito 0000, voi dovrete inserire il codice che avrete scelto quando avete creato l'allarme nella precedente guida.
Ovviamente anche il Google Home, che nel mio caso si chiama media_player.piloty, dovrete sostituirlo con il nome del Google Home che vorrete far parlare. Anche il messaggio (che per me e' allarme attivato) lo potrete personalizzare con la frase che preferite.
- alias: RFID 1 Alarm off
trigger:
platform: mqtt
topic: "home/rfid"
payload: 'QWERTY'
condition:
condition: or
conditions:
- condition: state
entity_id: alarm_control_panel.allarme_casa
state: armed_home
for:
seconds: 5
- condition: state
entity_id: alarm_control_panel.allarme_casa
state: armed_away
for:
seconds: 5
- condition: state
entity_id: alarm_control_panel.allarme_casa
state: pending
for:
seconds: 5
action:
- service: logbook.log
data_template:
name: >-
{{ MQTT }}
message: RFID 1 -> Alarm off!
- service: alarm_control_panel.alarm_disarm
data: {"entity_id":"alarm_control_panel.allarme_casa","code":"0000"}
- service: tts.google_say
entity_id: media_player.piloty
data:
message: 'allarme disattivato'
La seconda automazione invece serve per disattivare l'allarme. Ovviamente dovrete andare a sostituire tutti i dati che avete cambiato nell'automazione di attivazione allarme, con i vostri dati. Anche in questo caso dovrete creare delle automazioni identiche cambiando solamente il payload, se avrete piu tag o piu carte da inserire.
una volta completate tutte le automazioni salvate il file automation.yaml e riavviate Home Assistant.
Appena Home Assistant si sarà riavviato, il vostro lettore RFID vi permetterà di attivare e disattivare l'allarme. Per motivi di sicurezza vi consiglio di mettere il lettore RFiD dentro casa e magari ritardare l'intervento dell'allarme di qualche secondo in modo da avere il tempo di disattivarlo con un tag o una carta.
Ho provato anche ad utilizzare il chip NFC dello smartphone, purtroppo senza successo, in quanto purtroppo il chip dei nostri telefoni ha una sorta di rolling code che cambia codice ogni volta che si utilizza, questo ovviamente per aumentarne la sicurezza in ambito di pagamenti da cellulare o cose simili... peccato, sarebbe stata un'idea molto interessante. Comunque sia una volta integrato in Home Assisistant questo sistema, gli usi sono praticamente infiniti, potrete attivare o disattivare qualsiasi cosa vi venga in mente.
Come al solito vi lascio al video di fine articolo per una dimostrazione del sistema in azione. Buona visione!
Produrre e aggiornare contenuti su vincenzocaputo.com richiede molto tempo e lavoro. Se il contenuto che hai appena letto è di tuo gradimento e vuoi supportarmi, clicca uno dei link qui sotto per fare una donazione.