From 953e904a1716eb27276e79904df3a74e8a7dc106 Mon Sep 17 00:00:00 2001 From: Lei PAN Date: Thu, 14 Apr 2022 19:06:11 +0200 Subject: [PATCH] support multi-modem pools --- definitions.py | 2 +- main.py | 6 ++---- modems/card_pool.py | 27 +++++++++++++++---------- params.py | 42 +++++++++++++++++++++++---------------- wait_for_sms.py | 8 ++++---- workers/commandor_page.py | 9 +++++---- 6 files changed, 54 insertions(+), 40 deletions(-) diff --git a/definitions.py b/definitions.py index 770e18c..d0b5122 100644 --- a/definitions.py +++ b/definitions.py @@ -4,7 +4,7 @@ from dotenv import load_dotenv load_dotenv() LOG_SOURCE = os.getenv("LOG_SOURCE") -SMS_TIMEOUT = 60 +SMS_TIMEOUT = 120 BAUDRATE = 115200 ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) diff --git a/main.py b/main.py index faebdd3..78351fe 100644 --- a/main.py +++ b/main.py @@ -60,9 +60,7 @@ def init_modems() -> list: return modems -def start_book(): - start_slot_number = 14 - end_slot_number = 15 +def start_book(start_slot_number, end_slot_number): slot_list = list(range(start_slot_number, end_slot_number + 1)) random.shuffle(slot_list) for i in slot_list: @@ -124,4 +122,4 @@ def get_proxy(phone_number): if __name__ == '__main__': - start_book() + start_book(25, 28) diff --git a/modems/card_pool.py b/modems/card_pool.py index e8a8c9e..32e69b3 100644 --- a/modems/card_pool.py +++ b/modems/card_pool.py @@ -10,36 +10,43 @@ BAUDRATE = 115200 class CardPool: - def __init__(self, port): + def __init__(self, port_list): self.logger = logging.getLogger("CardPool") - self._serial = serial.Serial(port, BAUDRATE, timeout=1) + self._serial_list = [] + for port in port_list: + self._serial_list.append(serial.Serial(port, BAUDRATE, timeout=1)) - def _send_command(self, cmd: str) -> bytes: + def _send_command(self, serial, cmd: str) -> bytes: print("send command {}".format(cmd)) - self._serial.write(cmd.encode()) - msg = self._serial.read(100) + serial.write(cmd.encode()) + msg = serial.read(100) self.logger.info(msg) return msg # info: after reset, we need to restart modem pool def reset(self): - self._send_command("AT+NEXT00\r") + for serial in self._serial_list: + self._send_command(serial, "AT+NEXT00\r") def switch_to_next(self): - self._send_command("AT+NEXT11\r") + for serial in self._serial_list: + self._send_command(serial, "AT+NEXT11\r") def switch_to_slot(self, slot_number: int): params.oracle_log_sender.send_log(msg="换到" + str(slot_number) + "行", source=LOG_SUBJECT_EVENT, subject=LOG_SUBJECT_EVENT, type=TYPE_EVENT_CHANGE_SLOT) if slot_number < 10: - self._send_command("AT+SWIT00-000{}\r".format(slot_number)) + for serial in self._serial_list: + self._send_command(serial, "AT+SWIT00-000{}\r".format(slot_number)) else: - self._send_command("AT+SWIT00-00{}\r".format(slot_number)) + for serial in self._serial_list: + self._send_command(serial, "AT+SWIT00-00{}\r".format(slot_number)) # not work for the pool def find_current_slot(self): - self._send_command("AT+USIM\r") + for serial in self._serial_list: + self._send_command(serial, "AT+USIM\r") if __name__ == '__main__': diff --git a/params.py b/params.py index 6402680..69d2acf 100644 --- a/params.py +++ b/params.py @@ -4,24 +4,32 @@ from db.DbManager import DataManager from logs.LogSender import LogSender MODEM_POOL_PORTS = [ - "/dev/tty.usbmodem1431101", - "/dev/tty.usbmodem1431103", - "/dev/tty.usbmodem1431105", - "/dev/tty.usbmodem1431107", - "/dev/tty.usbmodem1431201", - "/dev/tty.usbmodem1431203", - "/dev/tty.usbmodem1431205", - "/dev/tty.usbmodem1431207", - "/dev/tty.usbmodem1431301", - ## "/dev/tty.usbmodem1431303", - "/dev/tty.usbmodem1431305", - "/dev/tty.usbmodem1431307", - "/dev/tty.usbmodem1431401", - "/dev/tty.usbmodem1431403", - "/dev/tty.usbmodem1431405", - "/dev/tty.usbmodem1431407" + # "/dev/tty.usbmodem1431101", + # "/dev/tty.usbmodem1431103", + # "/dev/tty.usbmodem1431105", + # "/dev/tty.usbmodem1431107", + # "/dev/tty.usbmodem1431201", + # "/dev/tty.usbmodem1431203", + # "/dev/tty.usbmodem1431205", + # "/dev/tty.usbmodem1431207", + # "/dev/tty.usbmodem1431301", + # ## "/dev/tty.usbmodem1431303", + # "/dev/tty.usbmodem1431305", + # "/dev/tty.usbmodem1431307", + # "/dev/tty.usbmodem1431401", + # "/dev/tty.usbmodem1431403", + # "/dev/tty.usbmodem1431405", + # "/dev/tty.usbmodem1431407", + "/dev/tty.usbmodem1434101", + "/dev/tty.usbmodem1434103", + "/dev/tty.usbmodem1434105", + "/dev/tty.usbmodem1434107", + "/dev/tty.usbmodem1434201", + "/dev/tty.usbmodem1434203", + "/dev/tty.usbmodem1434205", + "/dev/tty.usbmodem1434207" ] -CARD_POOL_PORT = "/dev/tty.usbmodem1432101" +CARD_POOL_PORT = ["/dev/tty.usbmodem1432101","/dev/tty.usbmodem1434601"] firebase_store_manager = DataManager() oracle_log_sender = LogSender() diff --git a/wait_for_sms.py b/wait_for_sms.py index 7437e66..ab6464c 100644 --- a/wait_for_sms.py +++ b/wait_for_sms.py @@ -54,9 +54,9 @@ def init_modems() -> list: def start_waiting_sms(): params.oracle_log_sender.send_wait_sms_log() - slot_number = 21 - slot_sum = 31 - slot_list = list(range(slot_number, slot_sum + 1)) + start_slot_number = 1 + end_slot_sum = 2 + slot_list = list(range(start_slot_number, end_slot_sum + 1)) for i in reversed(slot_list): card_pool.reset() logger.info("will switch to " + str(i)) @@ -89,7 +89,7 @@ def start_waiting_sms(): now = time.time() while (listen_at + SMS_TIMEOUT + 5) > now: now = time.time() - print("sleep for 2 s") + # print("sleep for 2 s") time.sleep(2) print("will call continue") continue diff --git a/workers/commandor_page.py b/workers/commandor_page.py index a8b5572..7817bc8 100644 --- a/workers/commandor_page.py +++ b/workers/commandor_page.py @@ -63,6 +63,7 @@ class CommandorPage: self.logger.info(result) params.firebase_store_manager.save(result) params.oracle_log_sender.send_appoint_result(result) + self.current_gsm_modem.modem.close() self.is_finished = True def handle_sms(self, sms): @@ -70,7 +71,7 @@ class CommandorPage: u'== SMS message received ==\nFrom: {0}\nTime: {1}\nMessage:\n{2}\n'.format(sms.number, sms.time, sms.text)) # extract the otp number date = str(sms.time)[0:10] - params.oracle_log_sender.send_sms_reception_log(sms.number, sms.text) + params.oracle_log_sender.send_sms_reception_log(sms.number, sms.text,self.current_gsm_modem.ccid) if date == str(datetime.date.today()): self.logger.info("this sms is for today") if "rendez-vous" in sms.text or "appointment" in sms.text: @@ -87,9 +88,9 @@ class CommandorPage: # while not self.is_finished: # time.sleep(2) self.is_finished = True - if self.current_gsm_modem: - self.logger.info("will close used modem") - self.current_gsm_modem.modem.close() + # if self.current_gsm_modem: + # self.logger.info("will close used modem") + # self.current_gsm_modem.modem.close() else: self.logger.info("The sms is not for RDV") else: