__init__.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import logging
  2. import serial
  3. import time
  4. logging.basicConfig(level=logging.DEBUG)
  5. class Gsm:
  6. def __init__(self, port, msisdn, imei=None, pin=None):
  7. self.port = port
  8. logging.info('Initializing Gsm cass for port ' + port)
  9. try:
  10. self.console = serial.Serial(self.port, 112500, timeout=3)
  11. except:
  12. logging.error('Error connecting to ' + self.port)
  13. self.msisdn = msisdn
  14. #self.cmd("AT+CMGF=1")
  15. logging.info('Connection established')
  16. self.status = self.check_status()
  17. self.unlock_sim(pin)
  18. logging.info("Current status: " + str(self.status))
  19. if imei is not None:
  20. r = self.set_imei(imei)
  21. if r:
  22. self.imei = imei
  23. logging.info("IMEI Changed")
  24. def cmd(self, cmd):
  25. cmd += "\r\n"
  26. self.console.write(cmd.encode("ascii"))
  27. time.sleep(0.5)
  28. return list(map(lambda elem: elem.decode("ascii", errors="replace"), self.console.readlines()))
  29. def check_status(self):
  30. r = self.cmd("ATI")
  31. if "OK" in r:
  32. return True
  33. else:
  34. return False
  35. def unlock_sim(self, pin):
  36. status = self.cmd("AT+CPIN?")
  37. if status == "+CPIN:READY":
  38. return True
  39. elif "+CPIN:SIM PIN" in status:
  40. auth = self.cmd('AT+CPIN="' + pin + '"')
  41. if "OK" in auth:
  42. logging.info("Pin correct")
  43. return True
  44. else:
  45. logging.error("Wrong PIN")
  46. return False
  47. else:
  48. logging.error("Unknown PIN error")
  49. return False
  50. def set_imei(self, imei):
  51. r = self.cmd('AT+EMGR=1,7,"' + imei + '"')
  52. if "OK" in r:
  53. return True
  54. else:
  55. return False
  56. def fetch_messages(self):
  57. r = self.cmd("AT+CMGL=REC UNREAD")
  58. print(r)
  59. def delete_messages(self):
  60. r = self.cmd("")
  61. def parse_message(self, message):
  62. return True