public void ReadSensorData(IScanResult scanResult, Sensor s, double lat, double lon)
        {
            if (!IsTimeToReadSensor(s))
            {
                return;
            }

            sensorReadings[sensors.IndexOf(s)] = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            if (scanResult.AdvertisementData.ServiceData.Count == 0)
            {
                return;
            }
            byte[] serviceData = GetServiceDataBytes(scanResult);

            TSensorData sensorData = TSensorService.ParseSensorData(serviceData);

            if (sensorData == null)
            {
                return;
            }
            var date = DateTime.Now.ToString();

            Console.WriteLine(
                string.Format(
                    "Name: {0} - UUID: {1} - Temperature: {2} - Pressure: {3} - Altitude: {4} - Lat: {5} - Lon: {6}",
                    s.Name,
                    s.Uuid,
                    sensorData.Temperature,
                    sensorData.Pressure,
                    sensorData.Altitude,
                    lat,
                    lon
                    )
                );

            var telemetryDataPoint = new
            {
                uuid        = s.Uuid,
                name        = s.Name,
                temperature = sensorData.Temperature,
                pressure    = sensorData.Pressure,
                altitude    = sensorData.Altitude,
                battery     = sensorData.Battery,
                lat,
                lon,
                date,
            };

            UploadSensorDataService.SendDeviceToCloudMessagesAsync(telemetryDataPoint); // Kolla så Object faktiskt fungerar
        }
Ejemplo n.º 2
0
        private void ProcessReceive(SocketAsyncEventArgs e)
        {
            if (e.SocketError == SocketError.Success)
            {
                if (e.BytesTransferred > 0)
                {
                    Socket socket = (Socket)e.UserToken;
                    if (socket.Available == 0)
                    {
                        DateTime currentTime = DateTime.Now;
                        byte[]   data        = new byte[e.BytesTransferred];
                        Array.Copy(e.Buffer, e.Offset, data, 0, data.Length);
                        string info = Encoding.UTF8.GetString(data);
                        //TODO:deal the receive datas

                        if (info.Substring(0, 1) == "x")
                        {
                            Console.WriteLine("收到 {0} 模拟数据为 {1}", socket.RemoteEndPoint.ToString(), "项目ID:" + info.Substring(1, 2) + " 温度:" + info.Substring(3, 2) + " 湿度:" + info.Substring(5, 2) + " 噪音:" + info.Substring(7, 2) + " 可燃气体:" + info.Substring(9, 4) + " 光照:" + info.Substring(13, 4));
                            int         projId = int.Parse(info.Substring(1, 2));
                            TSensorData gasx   = new TSensorData()
                            {
                                CreateDate = currentTime,
                                SensorData = info.Substring(9, 4) + "PPM",
                                SensorUnit = "PPM",
                                SensorName = "可燃气体传感器",
                                DeviceId   = 2,
                                SensorId   = 7,
                                SensorTag  = "data_gas",
                                DeviceName = "模拟数据生成器",
                                DataType   = 1,
                                ProjectId  = projId
                            };
                            TSensorData tempx = new TSensorData()
                            {
                                CreateDate = currentTime,
                                SensorData = info.Substring(3, 2) + "℃",
                                SensorUnit = "℃",
                                SensorName = "温度传感器",
                                DeviceId   = 2,
                                SensorId   = 1,
                                SensorTag  = "data_temp",
                                DeviceName = "模拟数据生成器",
                                DataType   = 1,
                                ProjectId  = projId
                            };
                            TSensorData humix = new TSensorData()
                            {
                                CreateDate = currentTime,
                                SensorData = info.Substring(5, 2) + "%",
                                SensorUnit = "%",
                                SensorName = "湿度传感器",
                                DeviceId   = 2,
                                SensorId   = 2,
                                SensorTag  = "data_humi",
                                DeviceName = "模拟数据生成器",
                                DataType   = 1,
                                ProjectId  = projId
                            };
                            TSensorData lxx = new TSensorData()
                            {
                                CreateDate = currentTime,
                                SensorData = new Random().Next(200, 2800) + "lx",
                                SensorUnit = "lx",
                                SensorName = "光照传感器",
                                DeviceId   = 2,
                                SensorId   = 3,
                                SensorTag  = "data_lx",
                                DeviceName = "模拟数据生成器",
                                DataType   = 1,
                                ProjectId  = projId
                            };
                            TSensorData voicex = new TSensorData()
                            {
                                CreateDate = currentTime,
                                SensorData = info.Substring(7, 2) + "db",
                                SensorUnit = "db",
                                SensorName = "噪音传感器",
                                DeviceId   = 2,
                                SensorId   = 4,
                                SensorTag  = "data_voice",
                                DeviceName = "模拟数据生成器",
                                DataType   = 1,
                                ProjectId  = projId
                            };
                            TSensorData wind_speedx = new TSensorData()
                            {
                                CreateDate = currentTime,
                                SensorData = new Random().Next(0, 60) + "m/s",
                                SensorUnit = "m/s",
                                SensorName = "风速传感器",
                                DeviceId   = 2,
                                SensorId   = 10,
                                SensorTag  = "data_windspeed",
                                DeviceName = "模拟数据生成器",
                                DataType   = 1,
                                ProjectId  = projId
                            };
                            Task.Run(new Action(() =>
                            {
                                TSensorData[] datas = { tempx, humix, gasx, lxx, wind_speedx, voicex };
                                context.TSensorData.AddRangeAsync(datas);
                                try
                                {
                                    if (context.SaveChangesAsync().Result > 0)
                                    {
                                        Console.WriteLine("data save keep container successful!");
                                    }
                                }
                                catch (Exception)
                                {
                                    //throw;
                                }
                            }));
                        }
                        else
                        {
                            TSensorData gas = new TSensorData()
                            {
                                CreateDate = currentTime,
                                SensorData = info.Substring(0, 4) + "PPM",
                                SensorUnit = "PPM",
                                SensorName = "可燃气体传感器",
                                DeviceId   = 2,
                                SensorId   = 7,
                                SensorTag  = "data_gas",
                                DeviceName = "数据采集网关",
                                DataType   = 1,
                                ProjectId  = 1
                            };
                            TSensorData temp = new TSensorData()
                            {
                                CreateDate = currentTime,
                                SensorData = info.Substring(4, 2) + "℃",
                                SensorUnit = "℃",
                                SensorName = "温度传感器",
                                DeviceId   = 2,
                                SensorId   = 1,
                                SensorTag  = "data_temp",
                                DeviceName = "数据采集网关",
                                DataType   = 1,
                                ProjectId  = 1
                            };
                            TSensorData humi = new TSensorData()
                            {
                                CreateDate = currentTime,
                                SensorData = info.Substring(6) + "%",
                                SensorUnit = "%",
                                SensorName = "湿度传感器",
                                DeviceId   = 2,
                                SensorId   = 2,
                                SensorTag  = "data_humi",
                                DeviceName = "数据采集网关",
                                DataType   = 1,
                                ProjectId  = 1
                            };
                            Task.Run(new Action(() =>
                            {
                                TSensorData[] datas = { temp, humi, gas };
                                context.TSensorData.AddRangeAsync(datas);
                                try
                                {
                                    if (context.SaveChangesAsync().Result > 0)
                                    {
                                        Console.WriteLine("data save keep container successful!");
                                    }
                                }
                                catch (Exception)
                                {
                                    //throw;
                                }
                            }));
                        }
                    }

                    if (!socket.ReceiveAsync(e))
                    {
                        //
                        ProcessReceive(e);
                    }
                }
            }
            else
            {
                CloseClientSocket(e);
            }
        }