|
|
@@ -0,0 +1,109 @@
|
|
|
+# Diese Klasse ist für normales Python mit pySerial
|
|
|
+# Sie stellt ein Interface für SIM800 Befehlssätze dar
|
|
|
+
|
|
|
+# 2022-03-02 - devnull - initial
|
|
|
+
|
|
|
+import sys
|
|
|
+import io
|
|
|
+
|
|
|
+class SIM:
|
|
|
+
|
|
|
+
|
|
|
+ tty = None
|
|
|
+ ser = None
|
|
|
+ pin = None
|
|
|
+ baud = None
|
|
|
+ sio = None
|
|
|
+
|
|
|
+
|
|
|
+ # wenn keine PIN übergeben, dann brechen wir ab
|
|
|
+ def __init__(self, tty = None, baud = 115200, pin = None):
|
|
|
+
|
|
|
+ # wir brauchen hier noch etwas um zu prüfen und abzubrechen, wenn PIN und TTY nicht gesetzt sind
|
|
|
+ if (tty is None) or (pin is None):
|
|
|
+ sys.stderr.write('TTY oder PIN fehlt')
|
|
|
+ sys.exit(1)
|
|
|
+ else:
|
|
|
+ self.setTTY(tty)
|
|
|
+ self.setBaud(baud)
|
|
|
+ self.setPIN(pin)
|
|
|
+
|
|
|
+ import serial
|
|
|
+
|
|
|
+ try:
|
|
|
+ # Verbindung oeffnen
|
|
|
+ self.ser = serial.Serial(self.getTTY(), self.getBaud(), timeout=1)
|
|
|
+ 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.exit(1)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ # pruefe auf Modem Infostring
|
|
|
+
|
|
|
+ self.devInfo()
|
|
|
+
|
|
|
+ # PIN senden
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ # tty setter
|
|
|
+ def setTTY(self,tty):
|
|
|
+ self.tty = tty
|
|
|
+
|
|
|
+ # tty getter
|
|
|
+ def getTTY(self):
|
|
|
+ return self.tty
|
|
|
+
|
|
|
+ # PIN setter/getter
|
|
|
+ def setPIN(self,pin):
|
|
|
+ self.pin = pin
|
|
|
+
|
|
|
+ def getPIN(self):
|
|
|
+ return self.pin
|
|
|
+
|
|
|
+ # Baud setter/getter
|
|
|
+ def setBaud(self,baud):
|
|
|
+ self.baud = baud
|
|
|
+
|
|
|
+ def getBaud(self):
|
|
|
+ return self.baud
|
|
|
+
|
|
|
+ # 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*
|
|
|
+
|
|
|
+
|
|
|
+ # Temperaturchecks
|
|
|
+ def devTemp(self):
|
|
|
+ #AT+CMTE?
|
|
|
+
|
|
|
+ # Informationen vom Modem lesen
|
|
|
+ def devInfo(self):
|
|
|
+
|
|
|
+ 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)
|
|
|
+
|
|
|
+ # setzt den PIN auf dem Modem
|
|
|
+ def sendPIN(self):
|
|
|
+ self.ser.write()
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#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')
|
|
|
+
|
|
|
+#print (ser.out_waiting)
|
|
|
+mdm = SIM('/dev/ttyUSB1', 115200, 2389)
|