Que suerte que tengo! Esta mañana me ha llegado un SMS de Movistar que, ojo!! sin siquiera haberlo solicitado me dice tengo un premio!! que solo tengo que llamar 1200 veces al 1200 cada 1200 milisegundos (o algo así, hablo de memoria). Así es que yo, que soy de naturaleza vaga, subespecie vaguérrima, me hice un script que, tal y como ellos me aconsejaban se pase la mañana llamando hasta conseguir el premio. Ahora mismo está llamando, debo estar a punto de recibir una llamada de la suerte.

Mi ordenador a punto de conseguir un premioMi ordenador a punto de conseguir un premio

La situación inversa a esta, es decir la de manejar el ordenador con el móvil ya la comentamos en otro apunte, esta es incluso más fácil. Básicamente consiste en (una vez vinculado el ordenador-móvil por Bluetooth) construir un script en Python que tome control del móvil y ejecute comandos AT en el teléfono.
El script más elemental sería algo como esto (asegúrate de que tu móvil tienen cobertura, está localizable para tu ordenador y no está en uso por otro programa) abre un terminal, ejecuta python y escribe:>>>import bluetooth
>>>telefono="00:11:22:33:44:55" # obtén tu ID con hcitool scan
>>>puerto=1
>>>destino=1200
>>>so = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
>>>so.connect((telefono, puerto))
>>>so.send('ATZ\r')
>>>so.send('ATD'+destino+';\r') # llamando ...
>>>so.send("AT+CVHU=0\r") # toma control del auricular
>>>so.send("ATH\r") # cuelga

Eso realizaría una llamada desde tu teléfono al número “destino” que resultaría cancelada al ejecutar las dos últimas lineas.
A partir de ahí es fácil, la idea es dejar un teléfono junto al ordenador y llevar otro encima, de tal manera que podamos programar el ordenador para que nos avise de algún evento en cuanto este se produzca de una forma tan sencilla como una llamada perdida a tu teléfono. Un correo electrónico que esperas, una grabación en la webcam del patio, un subidón de temperaturas de la cpu, etc…. bastaría con una código de nº llamadas perdidas + duración llamada para identificar el mensaje recibido: 1 llamada corta perdida de mi ordenador=la descarga ha terminado, 3 llamadas cortas=detectada actividad en camara1, 1 llamada larga que se corta a la mitad=toi ardiendo…. y todo con coste 0.

(Nota:coste cero siempre y cuando no descuelgues la llamada. Nota II: si te llama tu ordenador por teléfono, no lo cojas!! no es pa tomar cerveza!!)

En el siguiente vídeo se puede ver el script en funcionamiento. Cuando lo grabé estaba afónico, así es que apenas se me oye, pero no subais demasiado el volumen, tampoco hay mucho que oir.

Copia, personaliza las líneas 8 / 9 y pega en un archivo de texto las líneas siguientes:#!/usr/bin/python
## -*- coding: UTF-8 -*-
import bluetooth
import sys
import time
import argparse
destinoDefault="12345678" # telefono al que se llama por defecto si no se indica en la linea de comandos
mobil="00:11:22:33:44:55" #dispositivo a través del cual se realizan las llamadas
puerto=1 # puerto de conexión RFCOMM
def llamar(destino, perdidas, pausa):
global so
n=1
for n in range(int(perdidas)):
print 'Llamando a '+str(destino)+'.... ('+str(n+1)+' de '+str(perdidas)+')'
so.send('ATD'+destino+';\r')
for c in range(int(pausa)):
sys.stdout.write(str(c+1)+", ")
sys.stdout.flush()
time.sleep(1)
print "Colgando..."
so.send("AT+CVHU=0\r") # toma control del auricular
so.send("ATH\r") # cuelga
n = n + 1
time.sleep(2)
return True
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
def conectar():
global so
print "Conectando..."
so = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
so.connect((mobil, puerto))
so.send('ATZ\r')
time.sleep(2)
if __name__ == '__main__':
parser=argparse.ArgumentParser(description='Llama a un número T de teléfono produciendo N llamadas perdidas')
parser.add_argument('-t', '--telefono', help='Número de telefono destino (default '+destinoDefault+')', required=False, default=destinoDefault)
parser.add_argument('-n', '--perdidas', help='Número de llamadas perdidas a producir (default 1)', required=False, default="1" )
parser.add_argument('-p', '--pausa', help='Segundos antes de colgar y volver a llamar (default 12)', required=False, default="12" )
argumentos=parser.parse_args()
try:
print 'Llamando a '+argumentos.telefono+','+argumentos.perdidas+' veces'
conectar()
llamar(argumentos.telefono, argumentos.perdidas, argumentos.pausa)
so.close()
except Exception,e:
print e
sys.exit(0)

Guarda el archivo como ~/bin/llamar_telefono.py y hazlo ejecutable ( chmod +x ~/bin/llamar.py ). Ahora en un terminal puedes escribir llamar –help para los argumentos que espera el script, o bien:

  • llamar_telefono.py -t 1200 -n 1200 -p 12 (llamar al 1200, esperar 12 segundos, colgar. Repetir 1200 veces)
  • llamar_telefono.py -t 12345678 -p 10 (1 perdida corta al 12345678)
  • llamar_telefono.py -p 15 -n 3 -t 12345678 (1 perdida corta al 12345678)
  • llamar_telefono.py (1 perdida corta al telefono marcado como default en el script)

Nota: Como habréis notado, la diferencia entre una llamada perdida corta y una larga viene dada por la duración en segundos de la orden, es decir, tendréis que hacer algunas pruebas para determinar cuantos segundos tarda vuestro móvil en realizar la conexión y “empezar a sonar” para saber cuantos segundos debéis darle como mínimo para establecer y efectuar la llamada. Por las pruebas que yo hice al teléfono no le da tiempo de establecer la llamada con menos de 8 segundos. Mínimo 10 segundos y 12 si la cobertura es baja.

Otra opción muy parecida y mucho más versátil usando también comandos AT sería enviar directamente un SMS con texto vía bluetooth-> teléfono, pero claro esto ya no es gratuito sino que se factura tal cual los SMS que cobre tu compañía.