Kaynağa Gözat

Der erste Streich. Funzt nun ueber PC

Chris Hoelzel 4 yıl önce
ebeveyn
işleme
83650d001b
2 değiştirilmiş dosya ile 83 ekleme ve 21 silme
  1. 71 20
      AlarmSMS.py
  2. 12 1
      doc/AT-Commands.txt

+ 71 - 20
AlarmSMS.py

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

+ 12 - 1
doc/AT-Commands.txt

@@ -12,4 +12,15 @@ SMS Senden:
     AT+CSCS="GSM"
     AT+CMGF=1
     AT+CMGS="$TELEFONNUMMER"
-    $TEXT->wie terminiert man den ?
+    $TEXT->wie terminiert man den ?
+
+Temperatur überwachen
+    AT+CMTE?
+
+        mode,Temperatur
+
+Geräteinformation
+    ATI
+    AT+GMM
+    AT+GMR
+    AT+GSN