示例#1
0
        private async Task StartRRIntervalStream()
        {
            var stream = await this.GetSensorStream(this.bandClient.SensorManager.RRInterval);

            if (stream == null)
            {
                return;
            }

            this.disposableStreams.Add(stream.Subscribe());
            var channelName = nameof(this.bandClient.SensorManager.RRInterval);
            //var channelCode = this.channels[channelName.ToUpper()];
            await stream.Buffer(new TimeSpan(0, 0, Interval)).Select(
                async readings =>
            {
                if (!readings.Any())
                {
                    return;
                }

                var rr     = readings.Average(reading => reading.SensorReading.Interval);
                var sample = new SensorReadingDC(channelName, BandController.GetUnixTimeStamp(), rr.ToString(CultureInfo.InvariantCulture));
                //var sampleValue = new DataSampleDC
                //{
                //    SensorType = channelCode,
                //    Values = new Dictionary<string, string>
                //                                    { { channelCode, gsr.ToString(CultureInfo.InvariantCulture) } }
                //};
                await this.SendNewSample(sample);
            });
        }
示例#2
0
        private async Task StartUVIndexStream()
        {
            var stream = await this.GetSensorStream(this.bandClient.SensorManager.UV);

            if (stream == null)
            {
                return;
            }

            this.disposableStreams.Add(stream.Subscribe());
            var channelName = $"{nameof(this.bandClient.SensorManager.UV)}Index";
            //var channelCode = this.channels[channelName];
            await stream.Buffer(new TimeSpan(0, 0, Interval)).Select(
                async readings =>
            {
                if (!readings.Any())
                {
                    return;
                }

                var indexLevel =
                    readings.GroupBy(reading => reading.SensorReading.IndexLevel)
                    .OrderByDescending(gr => gr.Count())
                    .Select(gr => gr.Key)
                    .First();
                var sample = new SensorReadingDC(channelName, BandController.GetUnixTimeStamp(), indexLevel.ToString());
                //var sampleValue = new DataSampleDC
                //{
                //    SensorType = channelCode,
                //    Values = new Dictionary<string, string>
                //                                    { { channelCode, indexLevel.ToString() } }
                //};
                await this.SendNewSample(sample);
            });
        }
示例#3
0
        private async Task StartContactStream()
        {
            var stream = await this.GetSensorStream(this.bandClient.SensorManager.Contact);

            if (stream == null)
            {
                return;
            }

            this.disposableStreams.Add(stream.Subscribe());
            var channelName = nameof(this.bandClient.SensorManager.Contact);
            //var channelCode = this.channels[channelName];
            await stream.Buffer(new TimeSpan(0, 0, Interval)).Select(
                async readings =>
            {
                if (!readings.Any())
                {
                    return;
                }

                var worn   = readings.All(reading => reading.SensorReading.State == BandContactState.Worn);
                var sample = new SensorReadingDC(channelName, BandController.GetUnixTimeStamp(), worn.ToString());
                //var sampleValue = new DataSampleDC
                //{
                //    SensorType = channelCode,
                //    Values = new Dictionary<string, string>
                //                                  { { channelCode, worn.ToString() } }
                //};
                await this.SendNewSample(sample);
            });
        }
示例#4
0
        private async Task StartAccelerometerStream()
        {
            var stream = await this.GetSensorStream(this.bandClient.SensorManager.Accelerometer);

            if (stream == null)
            {
                return;
            }

            this.disposableStreams.Add(stream.Subscribe());
            var channelName = nameof(this.bandClient.SensorManager.Accelerometer);
            ////var channelCodes = new List<string>
            ////{
            ////    this.channels[$"{channelName}X"],
            ////    this.channels[$"{channelName}Y"],
            ////    this.channels[$"{channelName}Z"]
            ////};
            //var sensorType = channelCodes[0].Split('-').FirstOrDefault();
            await stream.Buffer(new TimeSpan(0, 0, HighOutputInterval)).Select(
                async readings =>
            {
                var accelerationX = string.Join(Separator,
                                                readings.Select(
                                                    reading => reading.SensorReading.AccelerationX.ToString(CultureInfo.InvariantCulture)));
                var accelerationY = string.Join(Separator,
                                                readings.Select(
                                                    reading => reading.SensorReading.AccelerationY.ToString(CultureInfo.InvariantCulture)));
                var accelerationZ = string.Join(Separator,
                                                readings.Select(
                                                    reading => reading.SensorReading.AccelerationZ.ToString(CultureInfo.InvariantCulture)));

                if (string.IsNullOrEmpty(accelerationX) &&
                    string.IsNullOrEmpty(accelerationY) &&
                    string.IsNullOrEmpty(accelerationZ))
                {
                    return;
                }

                var message = accelerationX + " , " + accelerationY + " , " + accelerationZ;

                var sample = new SensorReadingDC(channelName, BandController.GetUnixTimeStamp(), message);

                //var sampleValues = new DataSampleDC
                //{
                //    SensorType = sensorType,
                //    Values = new Dictionary<string, string>
                //                              {
                //                                  { channelCodes[0], accelerationX.ToString() },
                //                                  { channelCodes[1], accelerationY.ToString() },
                //                                  { channelCodes[2], accelerationZ.ToString() }
                //                              }
                //};
                await this.SendNewSample(sample);
            });
        }
示例#5
0
        private async Task StartHeartRateStream()
        {
            var stream = await this.GetSensorStream(this.bandClient.SensorManager.HeartRate);

            if (stream == null)
            {
                return;
            }

            this.disposableStreams.Add(stream.Subscribe());
            var channelName = nameof(this.bandClient.SensorManager.HeartRate);
            //var channelCode = this.channels[channelName];
            await stream.Buffer(new TimeSpan(0, 0, Interval)).Select(
                async readings =>
            {
                var lockedReadings =
                    readings.Where(reading => reading.SensorReading.Quality == HeartRateQuality.Locked);
                if (!lockedReadings.Any())
                {
                    return;
                }

                var avg       = lockedReadings.Average(reading => reading.SensorReading.HeartRate);
                var min       = lockedReadings.Min(y => y.SensorReading.HeartRate);
                var max       = lockedReadings.Max(y => y.SensorReading.HeartRate);
                var avgdouble = Math.Round(avg, 2);
                var message   = min.ToString() + " , " + avgdouble.ToString() + " , " + max.ToString();



                var sample = new SensorReadingDC(channelName, BandController.GetUnixTimeStamp(), message);
                //var sampleValue = new DataSampleDC
                //{
                //    SensorType = channelCode,
                //    Values = new Dictionary<string, string>
                //                                      { { channelCode, avg.ToString(CultureInfo.InvariantCulture) } }
                //};
                await this.SendNewSample(sample);
            });
        }
示例#6
0
        private async Task StartPedometerStream()
        {
            var stream = await this.GetSensorStream(this.bandClient.SensorManager.Pedometer);

            if (stream == null)
            {
                return;
            }

            this.disposableStreams.Add(stream.Subscribe());
            var channelName = nameof(this.bandClient.SensorManager.Pedometer);
            //var channelCode = this.channels[channelName];
            await stream.Buffer(new TimeSpan(0, 0, Interval)).Select(
                async readings =>
            {
                if (!readings.Any())
                {
                    return;
                }

                var steps = readings.Max(reading => reading.SensorReading.TotalSteps);

                if (isFirstStepsReading)
                {
                    isFirstStepsReading = false;
                    firstStepsReading   = steps;
                }
                var sample = new SensorReadingDC(channelName, BandController.GetUnixTimeStamp(),
                                                 (steps - firstStepsReading).ToString(CultureInfo.InvariantCulture));
                //var sampleValue = new DataSampleDC
                //{
                //    SensorType = channelCode,
                //    Values = new Dictionary<string, string>
                //                                  { { channelCode, (steps - firstStepsReading).ToString(CultureInfo.InvariantCulture) } }
                //};
                await
                this.SendNewSample(sample);
            });
        }
示例#7
0
        private async Task SendNewSample(SensorReadingDC sample)
        {
            try
            {
                this.sentNewValue = true;

                if (Done != null)
                {
                    Done(this, new SensorEventArgs(true, sample));


                    if (sample.channelName.Contains("HeartRate"))
                    {
                        var    substring = sample.sensorMessage.Split(',')[1];
                        double avg       = Convert.ToDouble(substring);

                        if (avg > classifierAmount)
                        {
                            classifierCounter++;

                            if (classifierCounter == 5)
                            {
                                this.SendMessage(substring);
                                classifierCounter = 0;
                            }
                        }
                    }
                }

                bool x = await this.sensorClient.SendSampleAsync(sample.sensorMessage);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
        }