static void HandleSmsRecievedEvent(object sender, Sms e) { //Neue SMS-Nachricht empfangen Gsm_Basics.RaiseGsmEvent(GsmEventArgs.Telegram.SmsRec, e.Message); //Neue Nachricht in DB speichern Sql.InsertMessageRec(e.Message, e.Phone); if (e.Message.Trim().ToLower() == GlobalProperty.SmsRouteTestTrigger.ToLower()) { //SMS mit 'MeldeAbruf' Empfangen //if (!Gsm.SmsSendQueue.Contains(e)) { //Gsm.SmsSend(e.Phone, e.Message + " um " + DateTime.Now); //Gsm.SmsToDelete.Add(e.Index); //Gsm.SmsDeletePending(); const string ctrlz = "\u001a"; //Senden Gsm_Basics.AddAtCommand("AT+CMGS=\"+" + e.Phone + "\"\r"); Gsm_Basics.AddAtCommand(e.Message + " um " + DateTime.Now + ctrlz); } } else { bool isBlocked = Sql.IsMessageBlockedNow(e.Message); if (isBlocked) { Sql.Log(MelBoxSql.LogTopic.Shift, MelBoxSql.LogPrio.Info, "Keine SMS: " + e.Message); } else { //Für jeden Empfänger (Bereitschaft) eine SMS vorbereiten foreach (ulong phone in Sql.GetCurrentShiftPhoneNumbers()) { //Nachricht per SMS weiterleiten Gsm.SmsSend(phone, e.Message); } } //Nachricht per email weiterleiten System.Net.Mail.MailAddressCollection mailTo = Sql.GetCurrentShiftEmail(); foreach (string mail in Email.PermanentEmailRecievers) { mailTo.Add(new System.Net.Mail.MailAddress(mail)); } Email.Send(mailTo, e, isBlocked); } Gsm.ReadGsmMemory(); }
static void HandleSmsStatusReportEvent(object sender, Sms e) { //Empfangener Statusreport (z.B. Sendebestätigung) Gsm_Basics.RaiseGsmEvent(GsmEventArgs.Telegram.SmsStatus, string.Format("Empfangsbestätigung erhalten für SMS-Referrenz {0}", e.MessageReference)); Sql.InsertMessageStatus(e.MessageReference, e.SendStatus); //provisorisch - später entfernen? Sql.UpdateMessageSentStatus(MelBoxSql.SendWay.Sms, e.MessageReference, e.SmsProviderTimeStamp, e.SendStatus); //Status prüfen 0-31 erfolgreich versandt; 32-63 versucht weiter zu senden: 64-127 Sendeversuch abgebrochen if (63 > e.SendStatus && e.SendStatus < 128) { //BAUSTELLE: In DB prüfen, ob die Nachricht schonal erfolglos versdnet wurde, wenn ja Abbruch, wenn nein; Sendewiederholung Email.Send(Email.MelBox2Admin, string.Format("Sendeabbruch. Wiederhole SMS senden an \r\n+{0}\r\n{1}\r\n\r\nSendeversuch um {2}", e.Phone, e.Message, e.SmsProviderTimeStamp), "SMS-Sendeversuch wiederholen"); Gsm.SmsSend(e.Phone, e.Message); } }
/// <summary> /// Soll einmal täglich ausgeführt werden für Inaktivitätsprüfung, DB-Backup /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static void DailyCheck(object sender, ElapsedEventArgs e) { //Timer stoppen, wird am Ende der Methode neu gestartet. tDaily.Stop(); tDaily.Dispose(); //Lebensbit-Meldung an MelBox2-Admin #if DEBUG Console.WriteLine("\r\nDEBUG-Mode: Es wird keine Routinemeldung (Lebens-Bit) an MelBox2-Admin versendet."); #else Gsm.SmsSend(Properties.Settings.Default.MelBoxAdminPhone, "MelBox2 - Tägliche Routinemeldung"); #endif // Prüfe Inaktivität Sender InactiveNotification(); //Prüfe Backup Datenbank Sql.CheckDbBackup(); // Timer neu starten, um TimeSpan bis morgen 8 Uhr neu zu berechnen InitDailyCheck(Properties.Settings.Default.HourOfDailyCheck); }
private static void Main() { try { Console.BufferHeight = 1000; //Max. Zeilen in Konsole, bei Überlauf werden älteste Zeilen entfernt Console.WriteLine("Programm gestartet. Konsole mit max. {0} Zeilen.", Console.BufferHeight); Email.PermanentEmailRecievers = Properties.Settings.Default.PermanentEmailRecievers.Cast <string>().ToList(); Email.MelBox2Admin = new System.Net.Mail.MailAddress("*****@*****.**", "MelBox2 Admin"); //Properties gehen nicht? Gsm_Basics.ComPortName = Properties.Settings.Default.ComPort; Gsm_Basics.BaudRate = Properties.Settings.Default.BaudRate; Gsm_Basics.GsmConnected += HandleGsmEvent; Gsm_Basics.GsmEvent += HandleGsmEvent; Gsm.GsmSignalQualityEvent += HandleGsmEvent; Gsm.SmsRecievedEvent += HandleSmsRecievedEvent; Gsm.SmsSentEvent += HandleSmsSentEvent; Gsm.SmsStatusreportEvent += HandleSmsStatusReportEvent; MelBoxWeb.StartWebServer(); Sql.Log(MelBoxSql.LogTopic.Start, MelBoxSql.LogPrio.Info, string.Format("MelBox2 - Anwendung gestartet. {0}, {1} Baud", Gsm_Basics.ComPortName, Gsm_Basics.BaudRate)); InitDailyCheck(Properties.Settings.Default.HourOfDailyCheck); //Führt täglich morgens um 8 Uhr Routinecheck aus //TEST Sql.InsertMessageRec("Testnachricht am " + DateTime.Now.Date, 4915142265412); //Auskommentiert für Test WebServer Gsm.Connect(); #if DEBUG Console.WriteLine("\r\nDEBUG Mode: es wird keine StartUp-Info an MelBox2-Admin gesendet."); //Email.Send(Email.MelBox2Admin, "MelBox2 - Anwendung neu gestartet um " + DateTime.Now); #else //Gsm.SmsSend(Properties.Settings.Default.MelBoxAdminPhone, "MelBox2 - Anwendung neu gestartet um " + DateTime.Now); //besser Email Email.Send(Email.MelBox2Admin, "MelBox2 - Anwendung neu gestartet um " + DateTime.Now); #endif const string help = "\r\n- ENTF zum Aufräumen der Anzeige\r\n" + "- EINF für AT-Befehl\r\n" + "- ESC Taste zum beenden...\r\n"; Console.WriteLine(help); while (true) { ConsoleKeyInfo pressed = Console.ReadKey(); //Console.WriteLine("Gedrückt: " + pressed.KeyChar); if (pressed.Key == ConsoleKey.Escape) { break; } if (pressed.Key == ConsoleKey.Delete) { Console.Clear(); GlobalProperty.ShowOnConsole(); Console.WriteLine(help); } //if (pressed.Key == ConsoleKey.O) //{ // Console.Clear(); // GlobalProperty.ShowOnConsole(); // //Console.WriteLine("\r\nOPTIONEN:\r\n\tModem: Umschalten eingehend"); // //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmError + ":\t" + GsmEventArgs.Telegram.GsmError); // //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmSystem + ":\t" + GsmEventArgs.Telegram.GsmSystem); // //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmConnection + ":\t" + GsmEventArgs.Telegram.GsmConnection); // //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmSignal + ":\t" + GsmEventArgs.Telegram.GsmSignal); // //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmOwnPhone + ":\t" + GsmEventArgs.Telegram.GsmOwnPhone); // //Console.WriteLine((byte)GsmEventArgs.Telegram.GsmOwnPhone + ":\t" + GsmEventArgs.Telegram.GsmOwnPhone); // //Console.WriteLine("Konsolenanzeige: Bitweise Filter setzten (sperren):"); // //Console.WriteLine("\r\n\tBitte Nummer auswählen."); // //string input = Console.ReadLine(); // //if (byte.TryParse(input, out byte a)) // //{ // // ConsoleDisplayBlock = a; // //} // Console.Clear(); // Console.WriteLine(help); //} if (pressed.Key == ConsoleKey.Insert) { Console.WriteLine("AT-Befehl eingeben:"); string at = Console.ReadLine(); Gsm_Basics.AddAtCommand(at); } } } finally { Console.WriteLine("Programm wird geschlossen..."); MelBoxWeb.StopWebServer(); Gsm_Basics.ClosePort(); System.Threading.Thread.Sleep(3000); } }