Differenze tra le versioni di "Input/Output tramite sms"
(Creata pagina con 'Siamo abituati ad usare il nostro raspberry connesso alla rete, ci sono dei casi in cui non abbiamo la possibilità di essere connessi, è in questi casi che potrebbe essere u...') |
|||
Riga 106: | Riga 106: | ||
chmod +x /home/pi/sms_relay.py | chmod +x /home/pi/sms_relay.py | ||
− | Ora possiamo avviare il demone e provare a inviare degli sms, importante che contengano almeno una parola chiave per vedere il risultato, in questo caso se scriviamo le due parole "on" e "off" nello stesso messaggio non si riuscirà a vedere nessun risultato perché lo fa troppo | + | Ora possiamo avviare il demone e provare a inviare degli sms, importante che contengano almeno una parola chiave per vedere il risultato, in questo caso se scriviamo le due parole "on" e "off" nello stesso messaggio non si riuscirà a vedere nessun risultato perché lo fa troppo velocemente. |
Versione delle 00:58, 4 apr 2013
Siamo abituati ad usare il nostro raspberry connesso alla rete, ci sono dei casi in cui non abbiamo la possibilità di essere connessi, è in questi casi che potrebbe essere utile pensare di controllare il nostro raspberry tramite sms. E' difficile trovare una soluzione che abbia solo dei vantaggi, questa non è un'eccezione, i dati che riusciamo a scambiare con il raspberry sono molto ridotti e quindi ci dobbiamo limitare a dare dei comandi oppure a richiedere i dati di qualche sensore. Questo possiamo farlo a prezzi abbastanza bassi e con una copertura molto maggiore a quella del 2G/3G/4G. Se invece siamo coperti dal 3G potremmo sfruttare questo meccanismo per avviare la connessione 3G solo quando ne abbiamo bisogno visto che costa ancora tanto e consuma più energia. Tutto questo discorso ha senso il raspberry non è fisso ma per qualche motivo si deve spostare oppure si trova in assenza di connessione.
Attenzione: In questa guida viene dato per scontato che la chiavetta usb sia già configurata e pronta all'utilizzo, una guida per la configurazione si trova qua.
Hardware
Una delle soluzioni più economiche è riciclare una chiavetta 3G usb.
Negli esempi io uso la Huawei E353 (in questo tutorial è spiegato come configurarla) ma dovrebbero funzionare anche altri modem.
Software(Raspbian)
Quello che si vuole realizzare è un piccolo sistema che sia in grado di ricevere gli sms e compiere determinate azioni in base alle parole chiave trovate negli sms.
Per fare questo abbiamo bisogno di qualcosa che stia in ascolto per la ricezione degli sms e come spesso accade c'è un tool fatto proprio per questo, sto parlando di "gammu-smsd" [[1]] la "d" sta per "daemon".
Procediamo con l'installazione, fortunatamente è presente nei repository quindi:
sudo apt-get install gammu-smsd
Ora procediamo con la configurazione, basta editare il file /etc/gammu-smsdrc che è diviso in due parti:
- [gammu] - questa è la parte in cui vengono specificate le configurazioni relative al collegamento con il modem, per più informazioni leggere qui e il manuale con "man gammurc".
- [smsd] - questa è la configurazione del demone
Per il nostro scopo nella configurazione di smsd il campo più rilevante è RunOnReceive che si aspetta uno script che verrà eseguito alla ricezione di uno o più sms.
Quindi la configurazione più semplice è questa:
.... [smsd] Service = Null RunOnReceive = /home/pi/script.sh
Il campo Service è stato impostato a Null per indicare che non abbiamo bisogno del salvataggio degli sms, se volessimo salvarli ci sono tante possibili alternative in quanto gammu-smsd supporta il salvataggio nel File System, Sqlite, MySql, PostgreSQL... per maggiori informazioni vi consiglio di leggere il manuale con "man gammu-smsdrc".
Visto che ora non ci interessa il salvataggio analizziamo solo il campo RunOnReceive, abbiamo visto che bisogna impostare uno script da chiamare alla ricezione ma dobbiamo ancora capire come i dati vengono passati allo script.
Gammu-smsd usa le variabili d'ambiente per il passaggio delle informazioni allo script, le variabili che ci interessano sono:
- SMS_MESSAGES - il numero dei messaggi ricevuti
- SMS_%d_NUMBER - il mittente
- SMS_%d_TEXT - il testo del messaggio
"%d" è il numero dell'sms che parte da 1 e arriva al numero dei messaggi ricevuti.
Questi sono solo i campi che ci interessano in questa guida, per la completa documentazione consiglio di leggere il manuale con "man gammu-smsd-run".
Per avviare il demone:
gammu-smsd &
Se lo script impostato richiede i permessi di root per essere eseguito allora:
sudo gammu-smsd &
Con questo abbiamo visto tutto il necessario per fare quello che vogliamo, adesso passiamo agli esempi.
Esempi
Attenzione: il demone deve essere in esecuzione se vogliamo provare gli esempi, se non lo è al prossimo avvio verranno elaborati tutti gli sms ancora da ricevere.
Attivare/Disattivare un relè
Questo è un esempio di come controllare un relè con degli sms. Per informazioni relative all'interfacciamento del relè vi invito a leggere questa guida: Interfacciare un Rele'.
Per questo esempio ho costruito una piccola prolunga che viene controllata dal relè. Il relè che ho usato è in realtà un modulo (si trova nei soliti negozi online) già pronto per essere usato che ha 3 uscite: Segnale, +3v, GND.
Codice python:
In questo script viene importato "relay" è un modulo che ha due funzioni turnOn e turnOff sarà lui ad interfacciarsi con il relè, per la creazione di questo modulo consultate la guida: Interfacciare un Rele'.
#!/usr/bin/env python import os, relay def applyRules(sender, text): text = text.lower() for rule in rules: if rule['key'].lower() in text: rule['action']() #per ogni parola chiave specificio una funzione da chiamare rules = [{'key':'on','action':relay.turnOn},{'key':'off','action':relay.turnOff}] num_sms = 0 if 'SMS_MESSAGES' in os.environ: num_sms = int(os.environ['SMS_MESSAGES']) if num_sms > 0: for i in range(1, num_sms + 1): sender = 'SMS_%d_NUMBER' % i text = 'SMS_%d_TEXT' % i if sender in os.environ and text in os.environ: text = os.environ[text] sender = os.environ[sender] applyRules(sender,text)
Dobbiamo salvarlo in un file per esempio /home/pi/sms_relay.py e nel campo "RunOnReceive" del file di configurazione '/etc/gammu-smsdrc' dobbiamo impostare il path assoluto di questo file.
Quindi il '/etc/gammu-smsdrc' diventa:
.... [smsd] Service = Null RunOnReceive = /home/pi/sms_relay.py
Rendiamo eseguibile il file:
chmod +x /home/pi/sms_relay.py
Ora possiamo avviare il demone e provare a inviare degli sms, importante che contengano almeno una parola chiave per vedere il risultato, in questo caso se scriviamo le due parole "on" e "off" nello stesso messaggio non si riuscirà a vedere nessun risultato perché lo fa troppo velocemente.