Paso 2: Cómo funciona (la magia revelada)
Antes de empezar a juntar todas las materias, pasar par de minutos para entender la lógica detrás del software.
El sistema implementa 2 procesos paralelos:
un sistema de E/S que inyecta datos SMS en la base de datos MySQL (WEB - PHP basado o directa conexión de socket MySQL - ver métodos de iniciación debajo)
y,
un proceso de Python basado en "enviar SMS". Este proceso de PYTHON hará consulta iterativa a la base de datos MySQL local (tabla de SMS), para extraer los nuevos pares de mensajes/destinos. Cuando hay nuevas parejas, el SMS(s) será enviado por el mismo proceso y se actualiza la tabla SMS. A continuación, detallada:
.... while(1): db = MySQLdb.connect(dbserver, dbuser, dbpass, dbname) curs=db.cursor() curs.execute("""SELECT `destinationNumber`, `smsContent`,`id` FROM `SMS` WHERE `sendTimestamp` < 1;""") for readline in curs.fetchall():#process each returned SMS task message = checkMessage(readline[1]) res = sendSMS(readline[0], "129", message)#"don't care what" format numbers if res==0: print("SMS has been sent with succes") curs.execute("UPDATE `SMS` SET `sendTimestamp` = %s WHERE `SMS`.`id` =%s LIMIT 1 ;", (str(long(time())),str(readline[2]))); db.commit() else:#to do how to handle error 4 not blocking process in wrong number case print("SMS error") sleep(0.5) db.close() sleep(5)#wait a while bw. cycles. let the RPI breathe...
Pueden utilizarse dos métodos de iniciación (inyección) de SMS:
a. remoto escribiendo el número de destino y el mensaje directamente en la base de datos de MySQL de RPI (conexión de socket base). Ejemplo:
"INSERT INTO `SMS` (`destinationNumber`,`message`) VALUES ('+40123456789','My first test message');"
b. acceso a servicio WEB GET/POST que funciona en RPI. Haz el ejemplo:
"http://myrpi_ip/injectSMS?number=%2B40123456789&message=My%20first%20test%20message"
El resultado del proceso y enviar fecha y hora de envío de SMS actualiza el campo de mensaje en la tabla SMS.