Example #1
0
        public AddSensorDataResponse Write(GreenHouseDataMessage message)
        {
            var factory = GetFactory();

            using (var db = factory.Open())
            {
                var device = db.Single <Device>(x => x.Token == message.DeviceToken);
                if (device == null)
                {
                    throw new DeviceNotFoundException();
                }

                var sensorIds = message.SensorsData.Select(x => x.SensorId).ToArray();
                var sensors   = db.Select <Sensor>(s => sensorIds.Contains(s.Id));
                if (sensors.Any(x => x.DeviceId != device.Id) || sensorIds.Count() != sensors.Count())
                {
                    throw new WrongSensorIdException();
                }
                var time = DateTime.Now;
                var data = message.SensorsData.Select(x => new GreenHouse.Repository.DataModel.SensorData
                {
                    //DeviceId = device.Id,
                    EventDateTime = time,
                    SensorId      = x.SensorId,
                    Value         = x.Value
                }
                                                      );
                db.InsertAll(data);

                var sensorTypes = db.Select <SensorType>();

                var response = message.SensorsData.Select(x => new SensorDataResponse
                {
                    DeviceName    = device.Name,
                    EventDateTime = time,
                    SensorName    = sensors.First(s => s.Id == x.SensorId).Name,
                    Dimension     = sensorTypes.First(sType => sType.Id == sensors.First(s => s.Id == x.SensorId).SensorTypeId).Dimension,
                    Value         = x.Value
                });

                var user = db.Single <User>(x => x.Id == device.UserId);

                return(new AddSensorDataResponse {
                    SensorDataResponse = response, UserName = user.Login, DeviceViewId = device.ViewId
                });
            }
        }
Example #2
0
        public IHttpActionResult AddDeviceData(GreenHouseDataMessage message)
        {
            //Example:

            /*{
             *  'DeviceToken': 'e0559f6b-30fa-47b1-9a07-915a015129a3',
             *  'SensorsData' :
             *  [
             *      {
             *      'SensorId' : 1,
             *      'Value' : 31
             *      }
             *  ]
             * }*/


            if (message == null)
            {
                return(BadRequest());
            }
            try
            {
                var responce = dataRepository.Write(message);

                var datasets = ChartHelper.GetDataSets(responce.SensorDataResponse);

                SensorDataHubProxy.AddData(responce.UserName, datasets);
                SensorDataHubProxy.SendCurrentSensorValues(responce.UserName, message.SensorsData);

                PublicHubProxy.AddData(responce.DeviceViewId, datasets);
                PublicHubProxy.SendCurrentSensorValues(responce.DeviceViewId, message.SensorsData);

                cache.Set(message.DeviceToken, message.SensorsData,
                          new CacheItemPolicy {
                    AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(cacheTimeoutMinutes)
                });
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
            return(Ok());
        }