/// <summary> /// Method to add data to the table (= POST) /// </summary> /// <param name="deviceId">Device Id</param> /// <param name="temperature">Temperature</param> /// <param name="humidity">Humidity</param> public async Task AddData(string deviceId, int temperature, int humidity) { var sensorHatModel = new SensorHatModel(); sensorHatModel.DeviceId = deviceId; sensorHatModel.Humidity = humidity; sensorHatModel.Temperature = temperature; sensorHatModel.TimeStamp = DateTime.Now; // convert it to JSON var modelJson = JsonConvert.SerializeObject(sensorHatModel); // add model to the reuest as content with the right content type HttpContent content = new StringContent(modelJson); content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); content.Headers.Add("SensorHatDataAddKey", _authKey); // make that call HttpResponseMessage response = await Client.PostAsync(_baseAddress + "/api/SensorHat/AddData/", content); // if the call is not successful, throw exception if (!response.IsSuccessStatusCode) { throw new Exception(response.ReasonPhrase); } }
/// <summary> /// Gets the data as per the sorted order /// </summary> /// <param name="deviceId">Id of the device</param> /// <param name="startUTCTime">Start time in UTC</param> /// <param name="endUTCTime">End time in UTC</param> /// <param name="latestFirst">Order of the data</param> /// <returns></returns> public List <SensorHatModel> GetSensorHatData(string deviceId, DateTime startUTCTime, DateTime endUTCTime, bool latestFirst) { if (string.IsNullOrEmpty(deviceId)) { throw new ArgumentNullException(nameof(deviceId)); } // ensure that the params are valid if (startUTCTime < endUTCTime) { throw new ArgumentException("Start time should be less than the end time."); } // return list List <SensorHatModel> data = new List <SensorHatModel>(); try { // get the start and end row keys var startRowKey = SensorHatEntity.GenerateRowKey(latestFirst, startUTCTime.Ticks); var endRowKey = SensorHatEntity.GenerateRowKey(latestFirst, endUTCTime.Ticks); // build the filter for PartitionKey var pkFilter = TableQuery.GenerateFilterCondition(nameof(TableEntity.PartitionKey), QueryComparisons.Equal, deviceId); // filter fr ow keys var gtEqRowFilter = TableQuery.GenerateFilterCondition(nameof(TableEntity.RowKey), QueryComparisons.GreaterThanOrEqual, startRowKey); var ltEqRowFilter = TableQuery.GenerateFilterCondition(nameof(TableEntity.RowKey), QueryComparisons.LessThanOrEqual, endRowKey); // combine the filters var rowRangeFilter = TableQuery.CombineFilters(gtEqRowFilter, TableOperators.And, ltEqRowFilter); var filter = TableQuery.CombineFilters(pkFilter, TableOperators.And, rowRangeFilter); // run the queries var tableQuery = new TableQuery <SensorHatEntity>().Where(filter); var results = _table.ExecuteQuery(tableQuery); //convert entities into models foreach (var ent in results) { var model = new SensorHatModel(); model.DeviceId = ent.PartitionKey; model.Humidity = ent.Humidity; model.Temperature = ent.Temperature; model.TimeStamp = ent.LocalTime; data.Add(model); } } catch (Exception ex) { Trace.WriteLine(ex.Message); } return(data); }
public void Post([FromBody] SensorHatModel weatherData) { var repos = new SensorHatRepository(); repos.AddSensorHatData(weatherData.DeviceId, weatherData.Temperature, weatherData.Humidity, weatherData.TimeStamp); }