/// <summary> /// Abarbeiten der zu sendeneden SMSen /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static void SendSmsQueue(object sender, ElapsedEventArgs e) { if (currentSendSms != null) { return; //Wenn noch etwas in Bearbeitung ist, Abbruch; wird durch Timer erneut gestartet. } currentSendSms = SendList.Dequeue(); //Ersten aus der Schlange nehmen + andere SMS senden blockieren if (SendList.Count == 0) { sendTimer.Enabled = false; //Timer beenden, wenn Liste leer } Gsm.Write("AT+CMGS=\"" + currentSendSms.Item1 + "\"\r"); Gsm.Write(currentSendSms.Item2 + ctrlz); Console.WriteLine("SendSmsQueue(): Versende SMS an {1}\r\n{2}", currentSendSms.Item1, currentSendSms.Item2); }
public static void Ask_SmsRead(string status = "REC UNREAD") { Gsm.Write(string.Format("AT+CMGL=\"{0}\"", status)); }
public void SetPhone(string strPhone) { Phone = Gsm.StrToPhone(strPhone); }
public static void ModemSetup(string serialPort = "", int baudRate = 0) { string[] ports = System.IO.Ports.SerialPort.GetPortNames(); if (Array.Exists(ports, p => p == serialPort)) { Gsm.SerialPortName = serialPort; } if (baudRate > 0) { Gsm.SerialPortBaudRate = baudRate; } if (Connect()) { //Modem Type; Gewinnt Zeit, falls Modem noch nicht bereit. Write("AT+CGMM"); //extended error reports Write("AT+CMEE=1"); //Textmode Write("AT+CMGF=1"); Write("AT+CMGF?"); //Write("AT+CSCS=\"UCS2\""); //böse! kein UCS2-Decoding implementiert! //Signalqualität Ask_SignalQuality(); //Eigene Telefonnumer-Nummer der SIM-Karte auslesen Write("AT+CNUM"); //Im Netzwerk Registriert? Ask_NetworkRegistration(); //Modem meldet Registrierungsänderungänderung mit +CREG: <stat> Write("AT+CREG=1"); //ProviderName? Write("AT+COPS?"); //SMS-Service-Center Adresse Write("AT+CSCA?"); //Alle Speicher nutzen Write("AT+CPMS=\"MT\",\"MT\",\"MT\""); //Sendeempfangsbestätigungen abonieren //Quelle: https://www.codeproject.com/questions/271002/delivery-reports-in-at-commands //Quelle: https://www.smssolutions.net/tutorials/gsm/sendsmsat/ //AT+CSMP=<fo> [, <vp> / <scts> [, <pid> [, <dcs> ]]] // <fo> First Octet: // <vp> Validity-Period: 0 - 143 (vp+1 x 5min), 144 - 167 (12 Hours + ((VP-143) x 30 minutes)), [...] Write("AT+CSMP=49,1,0,0"); Write("AT+CNMI=2,1,2,2,1"); //erfolgreich getestet: AT+CNMI=2,1,2,2,1 //Statusänderung SIM-Schubfach melden Write("AT^SCKS=1"); //SIM-Karte gesperrt? Write("AT+CPIN?"); #region Regelmäßige Anfragen an das Modem askingTimer.Elapsed += new ElapsedEventHandler(Ask_RegularQueue); askingTimer.AutoReset = true; askingTimer.Start(); #endregion //Sprachanrufe: //Display unsolicited result codes Write("AT+CLIP=1"); //Abfrage Rufweiterleitung aktiv? Write("AT+CCFC=0,2"); Gsm.Ask_RelayIncomingCalls(Gsm.RelayCallsToPhone); } }