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 }); } }
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()); }