public void RegisterSensor(SensorBase sensorBase) { var metaData = new SensorMetaData(sensorBase); sensors.Add(metaData); instanceToMetaData.Add(sensorBase, metaData); if (awaitingPathToUID.Count > 0 && awaitingPathToUID.TryGetValue(metaData.HierarchyPath, out var uid)) { awaitingPathToUID.Remove(metaData.HierarchyPath); uidToMetaData.Add(uid, metaData); } }
private async Task ListBlobsFlatListingAsync(CloudBlobContainer container, int?segmentSize) { BlobContinuationToken continuationToken = null; CloudBlob blob; try { do { BlobResultSegment resultSegment = await container.ListBlobsSegmentedAsync(string.Empty, true, BlobListingDetails.Metadata, segmentSize, continuationToken, null, null); _metaSensorData = new List <SensorMetaData>(); foreach (var blobItem in resultSegment.Results) { // A flat listing operation returns only blobs, not virtual directories. blob = (CloudBlob)blobItem; using (var mStream = new MemoryStream()) { if (!blob.Name.Contains("historical") && !blob.Name.Contains("metadata")) { SensorMetaData sensorMetaData = null; if (blob.Name.Contains("humidity")) { sensorMetaData = new Humidity(); } else if (blob.Name.Contains("rainfall")) { sensorMetaData = new Rainfall(); } else if (blob.Name.Contains("temperature")) { sensorMetaData = new Temperature(); } await ParseSensorDataAndAddToDataStream(mStream, sensorMetaData, blob); } } _logger.LogInformation($"Blob name {blob.Name}"); } // Get the continuation token and loop until it is null. continuationToken = resultSegment.ContinuationToken; } while (continuationToken != null); } catch (StorageException ex) { _logger.LogCritical(ex.Message); throw; } }
/// <summary> /// Parses incoming data according to {DateTime}, {double} from .csv-files. /// Adds data to global list: _metaSensorData. /// </summary> /// <param name="mStream"></param> /// <param name="sensorMetaData"></param> /// <param name="blob"></param> /// <returns></returns> private async Task ParseSensorDataAndAddToDataStream(MemoryStream mStream, SensorMetaData sensorMetaData, CloudBlob blob) { await blob.DownloadToStreamAsync(mStream); var byteStream = mStream.ToArray(); string converted = Encoding.UTF8.GetString(byteStream, 0, byteStream.Length); // More robust using regx? var startOfMeasurementDateIndex = blob.Name.IndexOf(".csv") - 10; var measurementDate = blob.Name.Substring(startOfMeasurementDateIndex, 10); var endOfDeviceIDIndex = blob.Name.IndexOf("/"); var deviceID = blob.Name.Substring(0, endOfDeviceIDIndex); sensorMetaData.DeviceID = deviceID; sensorMetaData.MeasurementDay = DateTime.Parse(measurementDate); sensorMetaData.SensorData = new List <SensorData>(); var measData = new SensorData(); measData.MeasurementData = new List <double>(); measData.MeasurementTime = new List <DateTime>(); string[] splitData = converted.Split("\r\n"); foreach (var splitItem in splitData) { var finalSplit = splitItem.Split(";"); try { measData.MeasurementTime.Add(DateTime.Parse(finalSplit[0])); measData.MeasurementData.Add(double.Parse(finalSplit[1], new NumberFormatInfo() { NumberDecimalSeparator = "," })); } catch (Exception ex) { _logger.LogWarning(ex.Message); } } sensorMetaData.SensorData.Add(measData); _metaSensorData.Add(sensorMetaData); }
// Invalid rest requests will be swaped for mqtt--------------------- public async Task <SensorMetaData> _GetMetaDataFromSensorAsync() { using (var httpClient = new HttpClient()) { try { using (var response = await httpClient.GetAsync($"{_url}metadata")) { string apiResponse = await response.Content.ReadAsStringAsync(); SensorMetaData metadata = JsonConvert.DeserializeObject <SensorMetaData>(apiResponse); return(metadata); } } catch (HttpRequestException e) { Console.WriteLine(e.StackTrace); } return(null); } }
internal static extern bool GetSensorMetaData(ref SensorMetaData sensorMetaData);
public string checkCommands(AnalystResult ar) { SensorMetaData smd = _GetMetaDataFromSensorAsync().Result; string msg = string.Empty; //testfun(69f, 69f); DateTime unixTime = DateTime.Now; string interval = ""; string threshold = ""; string weatherStatus = ""; string radiationStatus = ""; string periodOfDay = ""; if (ar.DayTimeDay) { Console.WriteLine("CommandProcessing: daytime day"); periodOfDay = "Day time"; if (ar.RadiationHigh) { Console.WriteLine("CommandProcessing: radiation high"); radiationStatus = "High"; if (ar.WeatherGood) { _SetInterval(5000f, smd.Interval); //interval=5s i tsh=2.5 Console.WriteLine("CommandProcessing: weather good"); weatherStatus = "Good"; interval = "5000ms"; } else { _SetInterval(10000f, smd.Interval);//interval=15s i tsh=2.5 Console.WriteLine("CommandProcessing: weather bad"); weatherStatus = "Bad"; interval = "7500ms"; } _SetThreshold(25f, smd.Threshold); threshold = "25"; } else { Console.WriteLine("CommandProcessing: radiation low"); radiationStatus = "Low"; // int 10s tsh 75 _SetInterval(7500f, smd.Interval); _SetThreshold(75f, smd.Threshold); interval = "7500ms"; threshold = "75"; } } else { _SetInterval(10000f, smd.Interval); _SetThreshold(0.025f, smd.Threshold);//0.025 Console.WriteLine("CommandProcessing: daytime night"); periodOfDay = "Night time"; interval = "10000ms"; threshold = "0.025"; if (ar.RadiationHigh) { radiationStatus = "High"; } else { radiationStatus = "Low"; } } if (ar.WeatherGood) { weatherStatus = "Good"; } else { weatherStatus = "Bad"; } return(unixTime + "," + interval + "," + threshold + "," + weatherStatus + "," + radiationStatus + "," + periodOfDay); }
public static bool AreSensorsInitialized() { SensorMetaData sensorMetaData = new SensorMetaData(); return(KernelInterop.GetSensorMetaData(ref sensorMetaData)); }
public static extern bool GetSensorMetaData(ref SensorMetaData sensorMetaData);