Browse Source

ein funktionierender stand

Chris Hoelzel 4 years ago
parent
commit
6bed5a70ec
3 changed files with 131 additions and 0 deletions
  1. 109 0
      AlarmSMS.py
  2. 15 0
      doc/AT-Commands.txt
  3. 7 0
      test/ATI.py

+ 109 - 0
AlarmSMS.py

@@ -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)

+ 15 - 0
doc/AT-Commands.txt

@@ -0,0 +1,15 @@
+Netzsuche:
+    AT+COPS=?
+
+Ist eine PIN notwendig
+    AT+CPIN?
+
+PIN Eingabe
+    AT+CPIN=$PIN
+
+SMS Senden:
+
+    AT+CSCS="GSM"
+    AT+CMGF=1
+    AT+CMGS="$TELEFONNUMMER"
+    $TEXT->wie terminiert man den ?

+ 7 - 0
test/ATI.py

@@ -0,0 +1,7 @@
+import serial
+
+print("Abfrage ATI")
+ser = serial.Serial('/dev/ttyUSB1', 115200)
+
+ser.write(b'ATI\r\n')
+print(ser.readall())