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);
        }
Example #4
0
        // 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);
Example #6
0
        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);
        }
Example #7
0
        public static bool AreSensorsInitialized()
        {
            SensorMetaData sensorMetaData = new SensorMetaData();

            return(KernelInterop.GetSensorMetaData(ref sensorMetaData));
        }
Example #8
0
 public static extern bool GetSensorMetaData(ref SensorMetaData sensorMetaData);