|
|
@@ -14,6 +14,12 @@ class SIM:
|
|
|
pin = None
|
|
|
baud = None
|
|
|
sio = None
|
|
|
+ devInfo = None
|
|
|
+ devTemp = None
|
|
|
+ devSN = None
|
|
|
+ devProd = None
|
|
|
+ devRev = None
|
|
|
+
|
|
|
|
|
|
|
|
|
# wenn keine PIN übergeben, dann brechen wir ab
|
|
|
@@ -33,23 +39,64 @@ class SIM:
|
|
|
try:
|
|
|
# Verbindung oeffnen
|
|
|
self.ser = serial.Serial(self.getTTY(), self.getBaud(), timeout=1)
|
|
|
+ #self.sio = io.TextIOWrapper(io.BufferedRWPair(self.ser, self.ser),newline="\r\n")
|
|
|
self.sio = io.TextIOWrapper(io.BufferedRWPair(self.ser, self.ser))
|
|
|
self.devSetup()
|
|
|
|
|
|
#try:
|
|
|
# self.ser.open()
|
|
|
except serial.SerialException as e:
|
|
|
- sys.stderr.write('Could not open serial port {}: {}\n'.format(self.ser.name, e))
|
|
|
+ sys.stderr.write('Could not open serial port {}: {}\n'.format(self.getTTY(), e))
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
|
|
|
|
- # pruefe auf Modem Infostring
|
|
|
-
|
|
|
+ # sammle Modem Informationen
|
|
|
self.devInfo()
|
|
|
+ self.devProd()
|
|
|
+ self.devRev()
|
|
|
+ self.devSN()
|
|
|
+ self.devTemp()
|
|
|
+
|
|
|
+ # PIN Übergabe
|
|
|
+ self.sendPIN(pin)
|
|
|
+
|
|
|
+ print("DEBUG:")
|
|
|
+ print(" " + self.devInfo)
|
|
|
+ print(" " + self.devProd)
|
|
|
+ print(" " + self.devRev)
|
|
|
+ print(" " + self.devSN)
|
|
|
+ print(" " + self.devTemp)
|
|
|
|
|
|
# PIN senden
|
|
|
|
|
|
+ #übermittelt ein AT Command, aber bitte nur eine Zeile als Rückgabewert
|
|
|
+ def sendAT(self,AT):
|
|
|
+ self.sio.write(AT + '\n')
|
|
|
+ self.sio.flush() # it is buffering. required to get the data out *now*
|
|
|
+
|
|
|
+ return self.cleanOutput(self.sio.readlines())
|
|
|
+
|
|
|
+ # Antwort DICT bereinigen
|
|
|
+ def cleanOutput(self,output):
|
|
|
+ # erstmal suchen wir nach einem OK in der Ausgabe
|
|
|
+ if not 'Error' in output:
|
|
|
+
|
|
|
+ # wir entfernen alle OKs
|
|
|
+ while 'OK\n' in output:
|
|
|
+ output.remove('OK\n')
|
|
|
+
|
|
|
+ # wir entfernen alle \n
|
|
|
+ while '\n' in output:
|
|
|
+ output.remove('\n')
|
|
|
+
|
|
|
+ else:
|
|
|
+ return 'ERROR'
|
|
|
+
|
|
|
+ if len(output) > 0:
|
|
|
+ return output[0].replace('\n','')
|
|
|
+ else:
|
|
|
+ return ' '
|
|
|
|
|
|
|
|
|
|
|
|
@@ -77,33 +124,37 @@ class SIM:
|
|
|
|
|
|
# Konfigurationsoptionen für das Modem
|
|
|
def devSetup(self):
|
|
|
- self.sio.write('ATE0\n')
|
|
|
- self.sio.write('AT+CRSL=100\n')
|
|
|
- self.sio.flush() # it is buffering. required to get the data out *now*
|
|
|
-
|
|
|
+ self.sendAT('ATE0')
|
|
|
+ self.sendAT('AT+CRSL=100')
|
|
|
+ self.sendAT('AT+CSCS="GSM"')
|
|
|
+ self.sendAT('AT+CMGF=1')
|
|
|
|
|
|
# Temperaturchecks
|
|
|
def devTemp(self):
|
|
|
- #AT+CMTE?
|
|
|
+ self.devTemp = self.sendAT('AT+CMTE?').partition(",")[2]
|
|
|
|
|
|
# Informationen vom Modem lesen
|
|
|
def devInfo(self):
|
|
|
+ self.devInfo = self.sendAT('ATI')
|
|
|
|
|
|
- self.sio.write('ATI\n')
|
|
|
- self.sio.flush() # it is buffering. required to get the data out *now*
|
|
|
- ATI = self.sio.readline() #> liest aktuell nur eine Zeile aus
|
|
|
- print(ATI)
|
|
|
+ def devProd(self):
|
|
|
+ self.devProd = self.sendAT('AT+GMM')
|
|
|
|
|
|
- # setzt den PIN auf dem Modem
|
|
|
- def sendPIN(self):
|
|
|
- self.ser.write()
|
|
|
+ def devSN(self):
|
|
|
+ self.devSN = self.sendAT('AT+GSN')
|
|
|
|
|
|
+ def devRev(self):
|
|
|
+ self.devRev = self.sendAT('AT+GMR')
|
|
|
|
|
|
+ # setzt den PIN auf dem Modem
|
|
|
+ def sendPIN(self,pin):
|
|
|
+ if not 'ready' in self.sendAT('AT+CPIN?'):
|
|
|
+ # PIN fehlt, hier noch eintragen
|
|
|
+ self.sendAT('AT+CPIN=' + str(pin))
|
|
|
|
|
|
-#ser.write(b'AT+CPIN=2389\n')
|
|
|
-#ser.write(b'AT+CSCS="GSM"\n')
|
|
|
-#ser.write(b'AT+CMGF=1\n')
|
|
|
-#ser.write(b'AT+CMGS="017643609376"\nHaferdrink kocht auf\x1A')
|
|
|
+ def sendSMS(self,number,text):
|
|
|
+ self.sendAT('AT+CMGS="'+ str(number) + '"\n' + str(text) + '\x1A')
|
|
|
|
|
|
#print (ser.out_waiting)
|
|
|
-mdm = SIM('/dev/ttyUSB1', 115200, 2389)
|
|
|
+mdm = SIM('/dev/ttyUSB1', 115200, 2389)
|
|
|
+mdm.sendSMS("017643609376", "neue Testnachricht")
|