Esempio n. 1
0
        private async void WatcherOnPortsChanged(object sender, OnPortsChangedEventArgs e)
        {
            if (e.NewItem.Count > 0 && e.NewItem != null)
            {
                if (e.NewItem.Count == 1)
                {
                    LogList.Insert(0, e.NewItem.Count + " New Device Detected...");
                }
                else
                {
                    LogList.Insert(0, e.NewItem.Count + " New Devices Detected...");
                }
                await Task.Run(() => ReadDeviceList(e.NewItem));

                //await Task.WhenAll(_watcher.ComPorts.Select(async item => await AddNewGsmComm(item)).ToList());
            }

            if (e.RemovedItem.Count > 0 && e.RemovedItem != null)
            {
                foreach (var item in e.RemovedItem)
                {
                    try
                    {
                        foreach (var gsm in GsmList.Where(gsm => gsm.Model.PortName == item))
                        {
                            GsmList.Remove(gsm);
                            LogList.Insert(0, "Removing Device " + gsm.Model.PortName);
                        }
                    }
                    catch (Exception)
                    {
                    }
                }
            }
        }
Esempio n. 2
0
        private async Task MessageReceiveAsync(object sender, MessageReceivedEventArgs e)
        {
            using (await _messageReceivedLock.LockAsync())
            {
                var gsm = GsmList.FirstOrDefault(c => c.Model == (GsmCommMain)sender);
                var obj = e.IndicationObject;
                var loc = (MemoryLocation)obj;
                if (gsm == null)
                {
                    return;
                }

                var messages =
                    await Task.Run(() => gsm.GetMessagesAsync(PhoneMessageStatus.ReceivedUnread, loc.Storage));

                foreach (var message in messages)
                {
                    if (MessageList.Contains(message))
                    {
                        return;
                    }
                    MessageList.Insert(0, message);
                    EnqueueMessage(message);
                }
            }
        }
Esempio n. 3
0
        private async Task RefreshDeviceProcAsync()
        {
            _watcher.Dispose();
            await Task.Run(() => CloseDeviceList(GsmList));

            GsmList.Clear();

            //DeviceLoading =
            //    NotifyTaskCompletion.Create(
            //        Task.WhenAll(_watcher.ComPorts.Select(async item => await AddNewGsmComm(item)).ToList()));
            await Task.Run(() => ReadDeviceList(_watcher.ComPorts));
        }
Esempio n. 4
0
        private async Task AddNewGsmComm(string item)
        {
            for (var i = 0; i < 5; i++)
            {
                var port = new SerialPort(item);
                var gsm  = new GsmCommModel(new GsmCommMain(port.PortName, port.BaudRate, 1000));
                await Task.Run(() => gsm.CloseAsync());

                if (!await Task.Run(() => gsm.IsOpenAsync()))
                {
                    await Task.Run(() => gsm.OpenAsync());
                }

                //if (!await Task.Run(() => gsm.IsConnectedAsync()) || !await Task.Run(() => gsm.IsOpenAsync()))
                //    return;

                //if (!await Task.Run(() => gsm.UsableDeviceTest()))
                //    return;

                gsm.Model.MessageReceived += comm_MessageReceived;
                gsm.InitializeGsm();
                //_addNumberWindow.Show();
                GsmList.Add(gsm);
                LogList.Add(gsm.Model.PortName + " Device is added...");
                try
                {
                    var messages = await Task.Run(() => gsm.GetUnsavedMessages());

                    foreach (var message in messages)
                    {
                        MessageList.Insert(0, message);
                        EnqueueMessage(message);
                    }
                }
                catch (Exception)
                {
                    // ignored
                }
                await gsm.EnableMessageNotificationAsync();

                break;
            }
        }
Esempio n. 5
0
        static GSMTest()
        {
            GsmList.Add(
                new GSM("NokiaX1", "Nokia", 2323M, "Pesho",
                        new Battery("A", 66, 66, BatteryType.Li_Ion),
                        new Display(12, 22222)
                        ));

            GsmList.Add(
                new GSM("LenovoA2", "Lenovo", 2323M, "Ivan",
                        new Battery("A", 100, 66, BatteryType.NiCd),
                        new Display(5, 5)
                        ));

            GsmList.Add(
                new GSM("S3", "Sanyo", 2323M, "Maria",
                        new Battery("A", 66, 66, BatteryType.NuMH),
                        new Display(25, 3333333)
                        ));
        }
Esempio n. 6
0
        private async Task DeleteMessage(MessageViewModel message)
        {
            var gsm = GsmList.FirstOrDefault(c => c.Model.PortName == message.Port);

            if (gsm == null)
            {
                return;
            }

            while (true)
            {
                try
                {
                    await Task.Run(() => gsm.DeleteMessageAsync(message));

                    break;
                }
                catch (CommException e)
                {
                    await Task.Delay(1000);
                }
            }
        }
Esempio n. 7
0
        private async Task ProcessMessage(MessageViewModel message)
        {
            await Task.Delay(1000);

            var messageType = MessageDecoder(message);

            if (messageType == MessageType.None)
            {
                LogList.Insert(0, "Garbage Message: " + message.MessageData.UserDataText);
            }

            if (messageType == MessageType.WeatherData)
            {
                //(013226007252592,2017/03/06,00:14:59,25.0,89.0,993.4,0.05,0.00,270,0.88,  0.00,  0.00,-52,11.57)
                //(IMEI,DATE,TIME,TEMP,HUM,PRES,RAIN24H,RAIN15M,WDIR,WSPEED15,IRRMIN,IRRHR,SIGNAL,BATTERY)
                var fields = message.MessageData.UserDataText.Split(',');
                for (var i = 0; i < fields.Length; i++)
                {
                    fields[i] = fields[i].Trim('(', ')');
                }

                var list = fields.ToList();
                try
                {
                    var station =
                        await Task.Run(() => _repository.Stations.GetAsync(c => c.Imei == list.FirstOrDefault()));

                    if (station == null)
                    {
                        LogList.Insert(0, "Imei was not recognized for message:" + message.MessageData.UserDataText);
                        return;
                    }
                    var dt = DateTime.ParseExact(list.ElementAt(1) + " " + list.ElementAt(2), "yyyy/MM/dd HH:mm:ss",
                                                 CultureInfo.InvariantCulture);

                    var records = await
                                  Task.Run(
                        () =>
                        _repository.Measurements.GetRangeAsync(
                            c => c.StationId == station.StationId && c.Date == dt));

                    if (records.Count == 0)
                    {
                        LogList.Insert(0,
                                       "Data is already existing in the system for message:" + message.MessageData.UserDataText);
                        return;
                    }
                    await Task.Run(() => _repository.Measurements.AddAsync(new Measurement
                    {
                        StationId        = station.StationId,
                        Date             = dt,
                        Temperature      = DecimalChecker(list.ElementAt(3)),
                        Humidity         = DecimalChecker(list.ElementAt(4)),
                        Pressure         = DecimalChecker(list.ElementAt(5)),
                        Rainfall24H      = DecimalChecker(list.ElementAt(6)),
                        Rainfall15M      = DecimalChecker(list.ElementAt(7)),
                        WindDirection    = DecimalChecker(list.ElementAt(8)),
                        WindSpeed        = DecimalChecker(list.ElementAt(9)),
                        SolarIrradianceM = DecimalChecker(list.ElementAt(10)),
                        SolarIrradianceH = DecimalChecker(list.ElementAt(11)),
                        SignalLevel      = DecimalChecker(list.ElementAt(12)),
                        Battery          = DecimalChecker(list.ElementAt(13))
                    }));

                    LogList.Insert(0, "Succefully Added Data: " + message.MessageData.UserDataText);
                }
                catch (Exception)
                {
                    LogList.Insert(0,
                                   "Unsuccessful data addition. Format is not acceptable for message: " +
                                   message.MessageData.UserDataText);
                }
            }
            if (messageType == MessageType.WeatherRequest)
            {
                var keyword = new List <string>(message.MessageData.UserDataText.Split(' ')).LastOrDefault();

                try
                {
                    var station = await Task.Run(() => _repository.Stations.GetAsync(c => c.Keyword == keyword));

                    if (station == null)
                    {
                        LogList.Insert(0, "Keyword does not exist: " + message.MessageData.UserDataText);
                        return;
                    }

                    var measurements =
                        await
                        Task.Run(() => _repository.Measurements.GetRangeAsync(c => c.StationId == station.StationId));

                    if (measurements.Count == 0)
                    {
                        LogList.Insert(0,
                                       "There still no data available in this station: " + message.MessageData.UserDataText);
                        return;
                    }
                    var measurement = measurements.OrderByDescending(c => c.Date).FirstOrDefault();
                    var gsm         = GsmList.FirstOrDefault(c => c.Model.PortName == message.Port);
                    var sms         = "As of " + measurement.Date.ToString("yy-mm-dd") + " Temperature: " +
                                      measurement.Temperature + "°C, Humidity: " +
                                      measurement.Humidity + "%, Wind: " + measurement.WindDirection + "° " +
                                      measurement.WindSpeed + "m/s, Rainfall: " + measurement.Rainfall15M + "mm, Pressure" +
                                      measurement.Pressure + " hPa, Solar Irradiance: " + measurement.SolarIrradianceM;
                    if (gsm != null)
                    {
                        await
                        Task.Run(
                            () =>
                            gsm.SendMessageASync(sms, message.PhoneNumber, false, false,
                                                 1));

                        LogList.Insert(0, "Request succesfull: " + message.MessageData);
                    }
                }
                catch (Exception)
                {
                }
            }
            message.IsProcessed = true;
            await DeleteMessage(message);
        }