can restart modemPool and detected disabled sim card
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import datetime
|
||||
import json
|
||||
import logging
|
||||
import re
|
||||
import sys
|
||||
@@ -6,34 +7,47 @@ import time
|
||||
|
||||
from gsmmodem import GsmModem
|
||||
|
||||
from ModemPool import ModemPool
|
||||
from card_pool import CardPool
|
||||
from commandor import Commandor
|
||||
from excel_reader import ExcelReader
|
||||
from db.DbManager import DataManager
|
||||
from pojo.ReserveResultPojo import ReserveResultPojo, PublishType
|
||||
from utils.excel_reader import ExcelHelper
|
||||
from pojo.serial_modem import SerialModem
|
||||
from utils.logging import init_logger
|
||||
from utils.message_receiver import MessageReceiver
|
||||
|
||||
BAUDRATE = 115200
|
||||
OTP_TIMEOUT = 60
|
||||
sms_received = False
|
||||
is_finished = False
|
||||
commandor = Commandor()
|
||||
timeout_contact_list = []
|
||||
PORT = "/dev/tty.usbmodem1301"
|
||||
|
||||
# ser = serial.Serial(PORT, BAUDRATE, timeout=1)
|
||||
|
||||
db_manager = DataManager()
|
||||
|
||||
|
||||
def get_devices_ports() -> list:
|
||||
return ["/dev/tty.usbmodem121101",
|
||||
"/dev/tty.usbmodem121103",
|
||||
"/dev/tty.usbmodem121105",
|
||||
"/dev/tty.usbmodem121107",
|
||||
"/dev/tty.usbmodem121201",
|
||||
"/dev/tty.usbmodem121203",
|
||||
"/dev/tty.usbmodem121205",
|
||||
"/dev/tty.usbmodem121207",
|
||||
"/dev/tty.usbmodem121301",
|
||||
# "/dev/tty.usbmodem1121303",
|
||||
"/dev/tty.usbmodem121305",
|
||||
"/dev/tty.usbmodem121307",
|
||||
"/dev/tty.usbmodem121401",
|
||||
"/dev/tty.usbmodem121403",
|
||||
"/dev/tty.usbmodem121405",
|
||||
"/dev/tty.usbmodem121407"]
|
||||
return [
|
||||
"/dev/tty.usbmodem1121101",
|
||||
"/dev/tty.usbmodem1121103",
|
||||
"/dev/tty.usbmodem1121105",
|
||||
"/dev/tty.usbmodem1121107",
|
||||
"/dev/tty.usbmodem1121201",
|
||||
"/dev/tty.usbmodem1121203",
|
||||
"/dev/tty.usbmodem1121205",
|
||||
"/dev/tty.usbmodem1121207",
|
||||
"/dev/tty.usbmodem1121301",
|
||||
## "/dev/tty.usbmodem1121303",
|
||||
"/dev/tty.usbmodem1121305",
|
||||
"/dev/tty.usbmodem1121307",
|
||||
"/dev/tty.usbmodem1121401",
|
||||
"/dev/tty.usbmodem1121403",
|
||||
"/dev/tty.usbmodem1121405",
|
||||
"/dev/tty.usbmodem1121407"
|
||||
]
|
||||
|
||||
|
||||
def has_sim(ser) -> bool:
|
||||
@@ -49,21 +63,26 @@ def has_sim(ser) -> bool:
|
||||
def send_command(cmd: str, ser) -> bytes:
|
||||
print("send command {}".format(cmd))
|
||||
ser.write(cmd.encode())
|
||||
time.sleep(10)
|
||||
msg = ser.read(100)
|
||||
logger.info(msg)
|
||||
print(msg)
|
||||
return msg
|
||||
|
||||
|
||||
def get_phone_number():
|
||||
def get_phone_number(ser):
|
||||
cmd = "AT+CNUM\r"
|
||||
send_command(cmd)
|
||||
send_command(cmd, ser)
|
||||
|
||||
|
||||
def execut_USSD_cmd(cmd, ser):
|
||||
send_command(cmd, ser)
|
||||
|
||||
|
||||
def create_modem_for_port(port: str) -> SerialModem:
|
||||
logger.info('Initializing modem... for ' + port)
|
||||
# Uncomment the following line to see what the modem is doing:
|
||||
init_logger()
|
||||
modem = GsmModem(port, BAUDRATE)
|
||||
modem = GsmModem(port)
|
||||
modem.connect('0000')
|
||||
number = modem.ownNumber
|
||||
logger.info("The SIM card phone number is:")
|
||||
@@ -77,19 +96,26 @@ def create_modem_for_port(port: str) -> SerialModem:
|
||||
return serial_modem
|
||||
|
||||
|
||||
def timeout_occurred(serial_modem: SerialModem):
|
||||
timeout_contact_list.append(serial_modem.contact)
|
||||
db_manager.save_timeout_contact(serial_modem.contact)
|
||||
|
||||
|
||||
def start_to_handle_sms(serial_modem: SerialModem):
|
||||
serial_modem.modem.smsReceivedCallback = handle_sms
|
||||
global sms_received
|
||||
sms_received = False
|
||||
global is_finished
|
||||
is_finished = False
|
||||
serial_modem.modem.smsTextMode = False
|
||||
logger.info('Waiting for SMS message, for phone number ' + str(serial_modem.phone_number))
|
||||
listen_at = time.time()
|
||||
while not sms_received:
|
||||
while not is_finished:
|
||||
time.sleep(2)
|
||||
# check whether timeout
|
||||
now = time.time()
|
||||
if (listen_at + OTP_TIMEOUT) < now:
|
||||
logger.info("time out for {}, switch to next contact".format(serial_modem.phone_number))
|
||||
# save the contact in timeout
|
||||
timeout_occurred(serial_modem)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -103,9 +129,11 @@ def handle_sms(sms):
|
||||
otp = match.group(0)
|
||||
logger.info("otp is " + otp)
|
||||
commandor.send_otp(otp)
|
||||
time.sleep(20)
|
||||
global sms_received
|
||||
sms_received = True
|
||||
# wait for the sms for 20 seconds
|
||||
global is_finished
|
||||
while not is_finished:
|
||||
time.sleep(2)
|
||||
is_finished = True
|
||||
|
||||
|
||||
def init_modems() -> list:
|
||||
@@ -113,24 +141,71 @@ def init_modems() -> list:
|
||||
for port in get_devices_ports():
|
||||
modems.append(create_modem_for_port(port))
|
||||
# read the contact, and contact the 2 objects together
|
||||
excel_reader = ExcelReader()
|
||||
excel_reader = ExcelHelper()
|
||||
contacts = excel_reader.read_contacts()
|
||||
for modem in modems:
|
||||
contact = [contact for contact in contacts if contact.ccid == modem.ccid][0]
|
||||
modem.phone_number = contact.phone
|
||||
modem.contact = contact
|
||||
for index, modem in enumerate(modems):
|
||||
contact = [contact for contact in contacts if contact.ccid == modem.ccid]
|
||||
if len(contact) > 0:
|
||||
modem.phone_number = contact[0].phone
|
||||
modem.contact = contact[0]
|
||||
else:
|
||||
logger.info("contact not found for {}, position:{}".format(modem.ccid, index + 1))
|
||||
return modems
|
||||
|
||||
|
||||
def on_message_received(ch, method, properties, body):
|
||||
logger.info(" [x] Received {} {}".format(body, datetime.datetime.now()))
|
||||
# parse the received message
|
||||
result = ReserveResultPojo.from_json(body)
|
||||
print(result)
|
||||
db_manager.save(result)
|
||||
# set the flag to True
|
||||
global is_finished
|
||||
is_finished = True
|
||||
|
||||
|
||||
# save the result to db
|
||||
|
||||
|
||||
def start_listen():
|
||||
logger.info("start to listen to message queue")
|
||||
receiver = MessageReceiver()
|
||||
receiver.start_listener(on_message_received)
|
||||
|
||||
|
||||
def read_all_the_phone_number():
|
||||
card_pool = CardPool("/dev/tty.usbmodem11301")
|
||||
slot_number = 1
|
||||
slot_sum = 32
|
||||
card_pool.reset()
|
||||
|
||||
for i in range(2, slot_sum + 1):
|
||||
# i = 2
|
||||
card_pool.switch_to_slot(i)
|
||||
modem_pool = ModemPool(get_devices_ports())
|
||||
modem_pool.reset_all_modems()
|
||||
modem_pool.get_raw_phone_number(i)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# enable verbose logs for all port
|
||||
init_logger()
|
||||
logger = logging.getLogger()
|
||||
logger.addHandler(logging.StreamHandler(stream=sys.stdout))
|
||||
# create modems for all the available port
|
||||
modem_list = init_modems()
|
||||
# create listeners for chaque modem
|
||||
read_all_the_phone_number()
|
||||
# start_listen()
|
||||
# reset the sim card pool
|
||||
# send_command("AT+SWIT01-0001\r", ser)
|
||||
|
||||
for modem in modem_list:
|
||||
commandor.start_page(modem.contact)
|
||||
start_to_handle_sms(modem)
|
||||
# enable verbose logs for all port
|
||||
|
||||
# # create modems for all the available port
|
||||
# modem_list = init_modems()
|
||||
# create listeners for chaque modem
|
||||
# for modem in modem_list:
|
||||
# commandor.start_page(modem.contact)
|
||||
# start_to_handle_sms(modem)
|
||||
# # save the timeout contacts
|
||||
# timeout_list = json.dumps(timeout_contact_list)
|
||||
# f = open("timeout_list.json", "a")
|
||||
# f.write(str(timeout_list))
|
||||
# f.close()
|
||||
|
||||
Reference in New Issue
Block a user