support multi-modem pools

This commit is contained in:
2022-04-14 19:06:11 +02:00
parent 3097032b09
commit 953e904a17
6 changed files with 54 additions and 40 deletions
+1 -1
View File
@@ -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__))
+2 -4
View File
@@ -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)
+17 -10
View File
@@ -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__':
+25 -17
View File
@@ -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()
+4 -4
View File
@@ -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
+5 -4
View File
@@ -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: