try to add sim info to fb

This commit is contained in:
2022-02-28 20:09:02 +01:00
parent d910ec65a3
commit 96c5e26abd
10 changed files with 118 additions and 62 deletions
+12 -3
View File
@@ -3,9 +3,11 @@ import time
import serial import serial
from serial import Serial from serial import Serial
from db.DbManager import DataManager
from SIMError import SIMError from error.SIMError import SIMError
from logs.LogSender import LogSender, LOG_ERROR from logs.LogSender import LogSender, LOG_ERROR
from pojo.SimInfoPojo import SimInfoPojo
from utils.excel_reader import ExcelHelper from utils.excel_reader import ExcelHelper
@@ -19,6 +21,7 @@ class ModemPool:
self._serial_list = [] self._serial_list = []
self._excel_helper = ExcelHelper() self._excel_helper = ExcelHelper()
self._log_sender = LogSender() self._log_sender = LogSender()
self._db_manager = DataManager()
for port in self._port_list: for port in self._port_list:
ser = serial.Serial(port, self.BAUDRATE, timeout=1) ser = serial.Serial(port, self.BAUDRATE, timeout=1)
@@ -26,13 +29,15 @@ class ModemPool:
def reset_all_modems(self): def reset_all_modems(self):
for ser in self._serial_list: for ser in self._serial_list:
# may encontre exception here, multi-access to serial port
time.sleep(2)
self._send_command("AT+CFUN=1,1\r", ser) self._send_command("AT+CFUN=1,1\r", ser)
# wait for 20 second, so that the modem can init all the sims # wait for 20 second, so that the modem can init all the sims
time.sleep(20) time.sleep(20)
def _generate_error_msg(self, slot_position, index, error: SIMError): def _generate_error_msg(self, slot_position, index, error: SIMError):
msg = "slot({}) SIM({}), error:{}".format(slot_position, index + 1, msg = "slot({}) SIM({}), error:{}".format(slot_position, index + 1,
error.value) error.value)
self._log_sender.send_log(msg, subject=self.TAG, type=LOG_ERROR) self._log_sender.send_log(msg, subject=self.TAG, type=LOG_ERROR)
return msg return msg
@@ -56,8 +61,12 @@ class ModemPool:
match = re.search(r'33\d{9}', str(msg)) match = re.search(r'33\d{9}', str(msg))
phone_number = match.group(0) phone_number = match.group(0)
print("phone is " + phone_number) print("phone is " + phone_number)
cmd = "AT+CCID\r"
response = str(self._send_command(cmd, ser))
ccid_group = re.search("[0-9F]+", response)
ccid = ccid_group.group(0)
if phone_number: if phone_number:
self._excel_helper.write_phone(phone_number) self._db_manager.save_sim_info(SimInfoPojo(phone=phone_number, ccid=ccid))
# write the number to sim card's phonebook # write the number to sim card's phonebook
cmd = f'AT+CPBW={self.phone_number_position},\"{phone_number}\"\r' cmd = f'AT+CPBW={self.phone_number_position},\"{phone_number}\"\r'
self._send_command(cmd, ser, wait_time_in_s=2) self._send_command(cmd, ser, wait_time_in_s=2)
+1 -1
View File
@@ -2,7 +2,7 @@ import logging
import serial import serial
PORT = "/dev/tty.usbmodem112101" PORT = "/dev/tty.usbmodem1432101"
BAUDRATE = 115200 BAUDRATE = 115200
+6 -2
View File
@@ -1,13 +1,13 @@
import datetime import datetime
import json
import firebase_admin import firebase_admin
from firebase_admin import credentials, firestore from firebase_admin import credentials, firestore
from pojo.ReserveResultPojo import ReserveResultPojo, PublishType from pojo.ReserveResultPojo import ReserveResultPojo, PublishType
from pojo.SimInfoPojo import SimInfoPojo
from pojo.contact_pojo import ContactPojo from pojo.contact_pojo import ContactPojo
ERROR_COLLECTION_NAME = "error_items" ERROR_COLLECTION_NAME = "error_items"
SIM_INFOS = "sim_infos"
TIMEOUT = "timeout_items" TIMEOUT = "timeout_items"
@@ -24,6 +24,10 @@ class DataManager:
doc_ref = self._db.collection(u'2022-02-25') doc_ref = self._db.collection(u'2022-02-25')
return doc_ref return doc_ref
def save_sim_info(self, simInfoPojo: SimInfoPojo):
doc_ref = self._db.collection(SIM_INFOS).document(simInfoPojo.phone)
doc_ref.set(simInfoPojo.to_firestore_dict())
def save(self, result: ReserveResultPojo): def save(self, result: ReserveResultPojo):
if result.type == PublishType.SUCCESS: if result.type == PublishType.SUCCESS:
# get id # get id
View File
+44 -48
View File
@@ -7,9 +7,10 @@ import time
from gsmmodem import GsmModem from gsmmodem import GsmModem
from ModemPool import ModemPool from ModemPool import ModemPool
from card_pool import CardPool, PORT from card_pool import CardPool
from commandor import Commandor from commandor import Commandor
from db.DbManager import DataManager from db.DbManager import DataManager
from params import MODEM_POOL_PORTS, CARD_POOL_PORT
from pojo.ReserveResultPojo import ReserveResultPojo from pojo.ReserveResultPojo import ReserveResultPojo
from utils.excel_reader import ExcelHelper from utils.excel_reader import ExcelHelper
from pojo.serial_modem import SerialModem from pojo.serial_modem import SerialModem
@@ -20,32 +21,13 @@ BAUDRATE = 115200
OTP_TIMEOUT = 60 OTP_TIMEOUT = 60
is_finished = False is_finished = False
commandor = Commandor() commandor = Commandor()
timeout_contact_list = []
# ser = serial.Serial(PORT, BAUDRATE, timeout=1)
db_manager = DataManager() db_manager = DataManager()
card_pool = CardPool(CARD_POOL_PORT)
def get_devices_ports() -> list: def get_devices_ports() -> list:
return [ return MODEM_POOL_PORTS
"/dev/tty.usbmodem111101",
"/dev/tty.usbmodem111103",
"/dev/tty.usbmodem111105",
"/dev/tty.usbmodem111107",
"/dev/tty.usbmodem111201",
"/dev/tty.usbmodem111203",
"/dev/tty.usbmodem111205",
"/dev/tty.usbmodem111207",
"/dev/tty.usbmodem111301",
## "/dev/tty.usbmodem111303",
"/dev/tty.usbmodem111305",
"/dev/tty.usbmodem111307",
"/dev/tty.usbmodem111401",
"/dev/tty.usbmodem111403",
"/dev/tty.usbmodem111405",
"/dev/tty.usbmodem111407"
]
def has_sim(ser) -> bool: def has_sim(ser) -> bool:
@@ -58,11 +40,15 @@ def has_sim(ser) -> bool:
return False return False
def send_command(cmd: str, ser) -> bytes: def send_command(cmd: str, ser, wait_time_in_s: int = 0) -> bytes:
print("send command {}".format(cmd))
ser.write(cmd.encode()) ser.write(cmd.encode())
time.sleep(10)
msg = ser.read(100) msg = ser.read(100)
count = 0
while 'OK' not in str(msg) and count < wait_time_in_s:
time.sleep(1)
count = count + 1
msg = ser.read(100)
# msg = ser.read(100)
print(msg) print(msg)
return msg return msg
@@ -95,7 +81,6 @@ def create_modem_for_port(port: str) -> SerialModem:
def timeout_occurred(serial_modem: SerialModem): def timeout_occurred(serial_modem: SerialModem):
timeout_contact_list.append(serial_modem.contact)
db_manager.save_timeout_contact(serial_modem.contact) db_manager.save_timeout_contact(serial_modem.contact)
@@ -134,6 +119,16 @@ def handle_sms(sms):
is_finished = True is_finished = True
def select_sim_storage(ser) -> bool:
# use SIM Card storage
cmd_sm = "AT+CPBS=\"SM\"\r"
result = send_command(cmd_sm, ser)
if "ERROR" in str(result):
return False
else:
return True
def init_modems() -> list: def init_modems() -> list:
modems = [] modems = []
for port in get_devices_ports(): for port in get_devices_ports():
@@ -169,12 +164,11 @@ def start_listen():
def read_all_the_phone_number(): def read_all_the_phone_number():
card_pool = CardPool(PORT)
slot_number = 1 slot_number = 1
slot_sum = 28 slot_sum = 3
# card_pool.switch_to_slot(10) # card_pool.switch_to_slot(3)
for i in range(1, slot_sum + 1): for i in range(slot_number, slot_sum + 1):
card_pool.reset() card_pool.reset()
print("will switch to " + str(i)) print("will switch to " + str(i))
card_pool.switch_to_slot(i) card_pool.switch_to_slot(i)
@@ -183,25 +177,27 @@ def read_all_the_phone_number():
modem_pool.get_raw_phone_number(i) modem_pool.get_raw_phone_number(i)
def start_book():
slot_number = 3
slot_sum = 3
for i in range(slot_number, slot_sum + 1):
card_pool.reset()
print("will switch to " + str(i))
card_pool.switch_to_slot(i)
modem_pool = ModemPool(get_devices_ports())
modem_pool.reset_all_modems()
modem_list = init_modems()
# create listeners for chaque modem
for modem in modem_list:
if modem.contact:
commandor.start_page(modem.contact)
start_to_handle_sms(modem)
if __name__ == '__main__': if __name__ == '__main__':
init_logger() init_logger()
logger = logging.getLogger() logger = logging.getLogger()
logger.addHandler(logging.StreamHandler(stream=sys.stdout)) logger.addHandler(logging.StreamHandler(stream=sys.stdout))
read_all_the_phone_number() # read_all_the_phone_number()
# start_listen() start_listen()
# reset the sim card pool start_book()
# send_command("AT+SWIT01-0001\r", ser)
# 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()
+19
View File
@@ -0,0 +1,19 @@
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"
]
CARD_POOL_PORT = "/dev/tty.usbmodem1432101"
+15
View File
@@ -0,0 +1,15 @@
class SimInfoPojo:
phone: str
ccid: str
def __init__(self, phone: str, ccid: str):
self.phone = phone
self.ccid = ccid
def to_firestore_dict(self):
dest = {
u'phone': self.phone,
u'ccid': self.ccid,
}
return dest
Binary file not shown.
+21 -8
View File
@@ -10,13 +10,30 @@ class ExcelHelper:
def __init__(self): def __init__(self):
self._df = pandas.Series() self._df = pandas.Series()
def write_phone(self, phone_number): def write_phone(self, phone_ccid):
new_df = pandas.Series([phone_number]) (phone, ccid) = phone_ccid
f = open("phone_list.txt", "a") f = open("phone_list.txt", "a")
f.write("{},".format(phone[2:len(phone)]))
f.close()
def write_ccid(self, phone_number):
f = open("ccid_list.txt", "a")
f.write("{},".format(phone_number)) f.write("{},".format(phone_number))
f.close() f.close()
def write_to_exel(self, file_name, data_list: list):
new_df = pandas.Series(data_list)
self._df = pandas.concat([self._df, new_df]) self._df = pandas.concat([self._df, new_df])
self._df.to_excel("phone_list.xlsx") self._df.to_excel(file_name)
def generate_exel_from_txt(self):
f = open("../phone_list.txt")
lines = f.read()
self.write_to_exel("phone_list.xlsx", lines.split(","))
ccid_file = open("../ccid_list.txt")
ccids = ccid_file.read()
self.write_to_exel("ccid_list.xlsx", ccids.split(","))
print(lines)
# read the contact list from the exel file # read the contact list from the exel file
def read_contacts(self) -> list: def read_contacts(self) -> list:
@@ -39,8 +56,4 @@ class ExcelHelper:
if __name__ == '__main__': if __name__ == '__main__':
helper = ExcelHelper() helper = ExcelHelper()
helper.write_phone("88649614591") helper.generate_exel_from_txt()
helper.write_phone("88649614591")
helper.write_phone("88649614591")
helper.write_phone("8864961591")
helper.write_phone("88649614591")
Binary file not shown.