Aprire una porta col bluetooth, in automatico


Informatica / mercoledì, Gennaio 22nd, 2020

A casa hai il tuo Raspberry Pi ad aspettarti, con collegati sensori, tapparelle, basculanti automatiche ed assistenti vocali, allarmi e quant’altro.. Ti manca solo un sistema per fargli sapere che sei rientrato in casa. Un buon modo, riconoscimento facciale e/o della retina a parte, sarebbe fargli rilevare il Bluetooth del tuo smartphone e di quello di ogni tuo familiare.

Il Bluetooth versione 4.0 attualmente ha un raggio di 30m , sufficente per vessere rilevato fuori dal garage, i nuovi Raspberry Pi poi hanno già integrato il modulo Bluetooth e WIFI risparmiandoci l’utilizzo di eventuali adattatori usb, limitando i costi, i problemi di compatibilità, i consumi e le dimensioni.

Ogni dispositivo Bluetooth ha un codice univoco, come per le schede di rete, chiamato MAC address, faremo in modo che il nostro Raspberry Pi lo rilevi, identificando in modo univoco il device di ogni familiare che l’abbia attivato e successivamente eseguirà un vostro script Python.

Prerequisiti

Per iniziare bisogna impostare lo smartphone in modo che conceda di essere rilevato da tutti gli altri dispositivi, di norma questa opzione sii trova nelle impostazioni, naturalmente sotto la voce Bluetooth.

Dopodichè, andranno intallati i software per la gestione del Bluetooth tramite Python3.

apt update ; apt install -y libbluetooth-dev python-dev python3-pip
pip3 install pybluez

Trovare l’indirizzo dello smartphone

Se già non lo conosciamo, dobbiamo trovare il MAC address proprio del nostro cellulare con il seguente comando.

python3
import bluetooth
bluetooth.discover_devices(lookup_names=True)
Premere ctrl-d per uscire

Lo script

Veniamo ora al sodo: diamo un occhiata al “canovaccio” per il vostro script in Python3.

Creiamo il file rileva.py , sotto trovate uno spunto su come comporre lo script, poi naturalmente sta alla vostra fantasia adattarlo alle vostre specifiche esigenze.

nano rileva.py
#!/usr/bin/python3 
import bluetooth
from time import sleep 

CELL1 = 'indirizzo rilevato prima' 

def rilevato():    
    Lista di comandi da eseguire in caso di rilevamento 
def nonrilevato():    
    Lista di comandi da eseguire in caso di non rilevamento 
while 1:     
    LISTA = bluetooth.discover_devices()    
    if CELL1 in LISTA:        
        rilevato()        
        sleep(30)    
    else:        
        nonrilevato()

Un extra nel caso volessimo attivare dei relè

from gpiozero 
import LED
rele = LED(27) 
def rilevato():    
    rele.on() 
def nonrilevato():    
    rele.off()

Utilizzo

Per avviare lo script è sufficente eseguire

python3 rileva.py

oppure

chmod +x rileva.py./rileva.py

Per abilitare l’avvio automatico

crontab

@reboot /usr/lib/python3 /percorso/script/rileva.py &

per avviarlo da ssh e lasciarlo attivo usiamo il comando nohup, oppure per chi volesse, il software Screen è una valida alternativa.

nohup python3 /percorso/script/rileva.py

Riferimenti utili