#include <_CommMG.au3> #include #include #include Global $gvLog Func _SIM_CheckModem($e_DebugConsol, $e_DLLFile, $e_COMPort) Local $SIMResult $SIMResult = _fSIM($e_DebugConsol, $e_DLLFile, $e_COMPort, 2) Return $SIMResult EndFunc Func _SIM_CheckSIMCard($e_DebugConsol, $e_DLLFile, $e_COMPort) Local $SIMResult $SIMResult = _fSIM($e_DebugConsol, $e_DLLFile, $e_COMPort, 3) Return $SIMResult EndFunc Func _SIM_CheckSIMCardPin($e_DebugConsol, $e_DLLFile, $e_COMPort, $e_SIMPin) Local $SIMResult $SIMResult = _fSIM($e_DebugConsol, $e_DLLFile, $e_COMPort, 4, $e_SIMPin) Return $SIMResult EndFunc ;=============================================================================== ; Function Name: _SIM_SMSSend ; Author: jeff_poweruser ; Description: Sends SMS via COM-Port by using AT-Commands ; Info: One SMS should not include more than 160 Characters ; ; Parameters: ; $e_ComPort: integer value for the COM-port to use e.G.: 4 for COM4 ; $e_SMSPhoneNo: Recipient PhoneNo e.G. "+4915422xxxx" -> with country code ; $e_SIMPin: PIN for SIM-Card ; $e_SMS_Msg: Text including linebreaks @CR or @CRLF ; $e_SMS_Flash: True = SMS with Flashtype ; $e_SMSValid: integer value for the validity of the SMS-Message (default is 1 hour) ; 0 - 143 (VP + 1) x 5 minutes ; 144 - 167 12 Hours + ((VP-143) x 30 minutes) ; 168 - 196 (VP-166) x 1 day ; 197 - 255 (VP-192) x 1 week ;=============================================================================== Func _SIM_SMSSend($e_DebugConsol, $e_DLLFile, $e_COMPort, $e_SIMPin, $e_SMSPhoneNo, $e_SMSMsg="", $e_SMSFlash=False, $e_SMSValid=145) Local $SIMResult Local $SMS_Var = 0 ;Check PhoneNumber if StringLen($e_SMSPhoneNo) < 8 Then Return "Invalid Number: " & $e_SMSPhoneNo Else If StringLeft($e_SMSPhoneNo,1) <> "0" and StringLeft($e_SMSPhoneNo,1) <> "+" Then Return "Invalid Number: " & $e_SMSPhoneNo EndIf EndIf ;Rufnummer formatieren If StringLeft($e_SMSPhoneNo,2) = "00" Then $e_SMSPhoneNo = "+" & StringTrimLeft($e_SMSPhoneNo,2) Else If StringLeft($e_SMSPhoneNo,1) = "0" Then $e_SMSPhoneNo = "+49" & StringTrimLeft($e_SMSPhoneNo,1) EndIf EndIf $SIMResult = _fSIM($e_DebugConsol, $e_DLLFile, $e_ComPort, 0, $e_SIMPin, $e_SMSPhoneNo, $e_SMSMsg, $e_SMSFlash) Return $SIMResult EndFunc Func _fSIM($e_DebugConsol, $e_DLLFile, $e_ComPort, $e_SIMAction=0, $e_SIMPin="", $e_SMSPhoneNo="", $e_SMSMsg="", $e_SMSFlash=False ,$e_SMSValid=145) $gvLog = "" $lvComVersion = "" ;CommMG.dll ;Global $DLLNAME = $e_DLLFile _CommSetDllPath($e_DLLFile) Local $lv_COMVar = 0 Local $lv_COMResult = "" Local $lv_SMSFlash = 0 ;Debugmodus-Parameter-Check If $e_DebugConsol <> 1 Then $e_DebugConsol = 0 ;Wurde Flash-SMS aktiviert ? If $e_SMSFlash = True Then $lv_SMSFlash = 16 If $e_DebugConsol = 1 Then ConsoleWrite("------------------------------------" & @CRLF) If $e_DebugConsol = 1 Then ConsoleWrite(" start communication (COM" & $e_ComPort & ")" & @CRLF) If $e_DebugConsol = 1 Then ConsoleWrite("------------------------------------" & @CRLF) $gvLog = $gvLog & "------------------------------------" & @CRLF $gvLog = $gvLog & " start communication (COM" & $e_ComPort & ")" & @CRLF $gvLog = $gvLog & "------------------------------------" & @CRLF ;Setze COM-Port mit der Geschwindigkeit 9600 $comSet = "" $comSet = _CommSetPort($e_ComPort, $lv_COMVar, 9600, 8, 0, 1, 0) $comSetResult = @error $comSetReturn = "" ;CommDLL-Version $lvComVersion = _CommGetVersion(1) If $e_DebugConsol = 1 Then ConsoleWrite("DLL-Version: " & $lvComVersion & @CRLF) if $comSet = 0 Then $comSetReturn = "Error - (COM" & $e_ComPort & ")" Return $comSetReturn Else $comSetReturn = "OK" If $e_DebugConsol = 1 Then ConsoleWrite("Setze COM-Port Einstellungen: " & $comSetReturn & @CRLF) $gvLog = $gvLog & "Setze COM-Port Einstellungen: " & $comSetReturn & @CRLF If @error Then If $e_DebugConsol = 1 Then ConsoleWrite("Error - 'COM" & $e_ComPort & "' (Code: " & $comSetResult & ")" & @CRLF) $gvLog = $gvLog & "Error - 'COM" & $e_ComPort & "' (Code: " & $comSetResult & ")" & @CRLF EndIf ;reset aller vorherigen Eingaben _CommSendString(Chr(26), 1) _CommSendString(Chr(26), 1) _CommSendString(Chr(26), 1) ;lese COM-Port aus ; $lv_COMResult = _fComWaitForResult("") ; If $e_DebugConsol = 1 Then ConsoleWrite("COM-Init: " & $lv_COMResult & " - Code: " & @error & @CRLF) ; $gvLog = $gvLog & "COM-Init: " & $lv_COMResult & @CRLF _CommGetString() If $e_DebugConsol = 1 Then ConsoleWrite("COM-Init: " & _fCOMOutput() & @CRLF) $gvLog = $gvLog & "COM-Init: " & _fCOMOutput() & @CRLF ;Mache "AT"-Test _CommSendString('AT' & @CR, 1) ;Lese die Rückgabe aus $lv_COMResult = _fComWaitForResult("") If $e_DebugConsol = 1 Then ConsoleWrite("COM-Check (AT-Test): " & $lv_COMResult & " - Code: " & @error & @CRLF) $gvLog = $gvLog & "COM-Check (AT-Test): " & $lv_COMResult & " - Code: " & @error & @CRLF ;Falls nur die SIM-Karte erkannt werden soll, oder ein Fehler auftriff.. If $e_SIMAction = 2 Or StringInStr($lv_COMResult,"OK")=0 Then If StringInStr($lv_COMResult,"OK") > 0 Then _CommClosePort() Return "OK" Else _CommClosePort() Return $lv_COMResult EndIf EndIf ;wenn ein SIM-Pin hinterlegt wurde, dann jetzt schicken _CommSendString('at+cpin?' & @CR, 1) $lv_COMResult = "" $lv_COMResult = _fComWaitForResult("") If $e_DebugConsol = 1 Then ConsoleWrite("COM-Check (PIN): " & $lv_COMResult & " - Code: " & @error & @CRLF) $gvLog = $gvLog & "COM-Check (PIN): " & $lv_COMResult & " - Code: " & @error & @CRLF ; Soll nur die SIM-Karte geprüft werden ? if $e_SIMAction = 3 Or StringInStr($lv_COMResult,"OK")=0 Then If StringInStr($lv_COMResult,"OK") > 0 Then _CommClosePort() Return "OK" Else _CommClosePort() Return $lv_COMResult EndIf EndIf ;wenn im Output "Ready" steht ist alles in Ordnung (Sim bereits entsperrt) if StringInStr($lv_COMResult, "READY")=0 Then ;wird ein SIMPin benötigt und wurde ein PIN übergeben ? If $e_SIMPin <> "" and StringInStr($lv_COMResult,"SIM PIN") Then If $e_DebugConsol = 1 Then ConsoleWrite("SIM locked" & @CRLF) If $e_DebugConsol = 1 Then ConsoleWrite("SIM-Pin set: " & $e_SIMPin & @CRLF) $gvLog = $gvLog & "SIM locked" & @CRLF $gvLog = $gvLog & "SIM-Pin set: " & $e_SIMPin & @CRLF _CommSendString('at+cpin="' & $e_SIMPin &'"' & @CR, 1) ; SIM-Pin $lv_COMResult = _fComWaitForResult("") If $e_DebugConsol = 1 Then ConsoleWrite("COM-Check (PIN-Eingabe): " & $lv_COMResult & " - Code: " & @error & @CRLF) $gvLog = $gvLog & "COM-Check (PIN-Eingabe): " & $lv_COMResult & " - Code: " & @error & @CRLF If $e_SIMAction = 4 Or StringInStr($lv_COMResult,"OK")=0 Then If StringInStr($lv_COMResult,"OK") > 0 Then _CommClosePort() Return "OK" Else _CommClosePort() Return $lv_COMResult EndIf EndIf Else If $e_DebugConsol = 1 Then ConsoleWrite("Keine SIM-Pin übergeben." & @CRLF) $gvLog = $gvLog & "Keine SIM-Pin übergeben." & @CRLF _CommClosePort() Return "PIN erforderlich." EndIf Else If $e_SIMAction = 4 Then _CommClosePort() Return "OK" EndIf EndIf ;---------------------------------- ; ab hier nur, wenn gesendet wird ;---------------------------------- If $e_SIMAction = 0 Then ; Modus setzen (0=PDU, 1=Text) _CommSendString('AT+CMGF=1' & @CR, 1) ; Rückgabe in Log schreiben $lv_COMResult = _fComWaitForResult("") If $e_DebugConsol = 1 Then ConsoleWrite("COM-Check (Text-Mode): " & $lv_COMResult & " - Code: " & @error & @CRLF) $gvLog = $gvLog & "COM-Check (Text-Mode): " & $lv_COMResult & " - Code: " & @error & @CRLF If StringInStr($lv_COMResult,"OK") = 0 Then _CommClosePort() Return $lv_COMResult EndIf ; Modem-Settings setzen _CommSendString('AT+CSMP=17,' & $e_SMSValid & ',0,' & $lv_SMSFlash & @CR, 1) ; Rückgabe in Log schreiben $lv_COMResult = _fComWaitForResult('AT+CSMP=17,' & $e_SMSValid & ',0,' & $lv_SMSFlash) ; Rückgabe in Log schreiben If $e_DebugConsol = 1 Then ConsoleWrite("COM-Check (Modem-Set): " & $lv_COMResult & " - Code: " & @error & @CRLF) $gvLog = $gvLog & "COM-Check (Modem-Set): " & $lv_COMResult & " - Code: " & @error & @CRLF ;Rufnummer setzen If $e_DebugConsol = 1 Then ConsoleWrite(" # To: '" & $e_SMSPhoneNo & "'" & @CRLF) $gvLog = $gvLog & " # To: '" & $e_SMSPhoneNo & "'" & @CRLF _CommSendString('AT+CMGS="' & $e_SMSPhoneNo & '"' & @CR, 1) $lv_COMResult = "" Do $lv_COMResult = _fCOMOutput() Until $lv_COMResult <> "" ; $lv_COMResult =_fComWaitForResult() If $e_DebugConsol = 1 Then ConsoleWrite("COM-Check (Caller): " & $lv_COMResult & " - Code: " & @error & @CRLF) $gvLog = $gvLog & "COM-Check (Caller): " & $lv_COMResult & " - Code: " & @error & @CRLF If StringInStr($lv_COMResult,">") = 0 Then If $e_DebugConsol = 1 Then ConsoleWrite(" Caller-Check failed: '" & $lv_COMResult & "'" & @CRLF) _CommClosePort() Return $lv_COMResult Else If $e_DebugConsol = 1 Then ConsoleWrite(" Caller-Check passed." & @CRLF) EndIf ;Nachricht an COM-Port übermitteln Local $arrSMSMsg = _StringExplode($e_SMSMsg,@CR) _ArrayDisplay($arrSMSMsg) For $i= 0 To UBound($arrSMSMsg)-1 $tempSMSLine = StringReplace($arrSMSMsg[$i],@LF,"") If $i=0 Then If $e_DebugConsol = 1 Then ConsoleWrite(" # Msg: '" & $tempSMSLine & "'" & @CRLF) $gvLog = $gvLog & " # Msg: '" & $tempSMSLine & "'" & @CRLF Else If $e_DebugConsol = 1 Then ConsoleWrite(" '" & $tempSMSLine & "'" & @CRLF) $gvLog = $gvLog & " '" & $tempSMSLine & "'" & @CRLF EndIf ;Bei der letzten Zeile kein @crlf senden If $i = UBound($arrSMSMsg)-1 Then _CommSendString($tempSMSLine, 1) Else _CommSendString($tempSMSLine & @CRLF, 1) $lv_COMResult = "" Do $lv_COMResult = _fCOMOutput() Until $lv_COMResult <> "" EndIf Next If $e_DebugConsol = 1 Then ConsoleWrite(" # send now.." & @CRLF) $gvLog = $gvLog & " # send now.." & @CRLF ; "STRG + z" zum Abschluss der Nachricht und Senden _CommSendString(Chr(26), 1) ;warte auf Sendebericht ;_fComWaitForResult("") $lv_COMResult = "" Do $lv_COMResult = _fCOMOutput() Until $lv_COMResult <> "" ; $lv_COMResult =_fComWaitForResult() If $e_DebugConsol = 1 Then ConsoleWrite("COM-Check (SMS-Send): " & $lv_COMResult & " - Code: " & @error & @CRLF) $gvLog = $gvLog & "COM-Check (SMS-Send): " & $lv_COMResult & " - Code: " & @error & @CRLF If StringInStr($lv_COMResult,"error") = 0 Then _CommClosePort() Return "OK" Else _CommClosePort() Return $lv_COMResult EndIf EndIf EndIf EndFunc Func _fComWaitForResult($e_COMCommand = "") Local $lvWait = 100 ; Millisekunden Local $lvWaitMax = 2 ;Sekunden Local $lvWaitTemp = 0 ;Sekunden Local $lvBoolFound = False Local $lvCOMOutput = "" Do $lvCOMOutput = _fCOMOutput() ; $lvCOMOutput = "OK: READY >" if $lvCOMOutput <> "" Then ConsoleWrite(" .. COM-Out: " & $lvCOMOutput & @CRLF) EndIf ;Ist die Sim Busy If $e_COMCommand <> "" Then If StringInStr($lvCOMOutput,"ERROR: 14") > 0 Then ; Befehl erneut senden, wenn übergeben _CommSendString($e_COMCommand & @CR, 1) Else If StringInStr($lvCOMOutput,"OK") > 0 or StringInStr($lvCOMOutput,"ERROR") > 0 Then $lvBoolFound = True EndIf EndIf Else If StringInStr($lvCOMOutput,"OK") > 0 or StringInStr($lvCOMOutput,"ERROR") > 0 Then $lvBoolFound = True EndIf EndIf $lvWaitTemp = $lvWaitTemp + $lvWait ;wait-timer hochzählen Sleep(100) Until $lvBoolFound = True Or $lvWaitTemp > ($lvWaitMax*1000) Return $lvCOMOutput EndFunc func _fCOMOutput() Local $lv_COMOutput = _CommGetString() ; Strip Spaces $lv_COMOutput = StringStripWS($lv_COMOutput, 7) ; Trim "CR" $lv_COMOutput = StringReplace($lv_COMOutput,@CR," - ") Return $lv_COMOutput EndFunc