Input/Output tramite sms

Da raspibo.

Siamo abituati ad usare il nostro raspberry connesso alla rete, ma ci sono dei casi in cui non abbiamo la possibilità di essere connessi, ed è 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 se 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.

Indice

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.

Presa relay

Relay

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 '/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.

Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti