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