Esempio n. 1
0
        //example using the time series, one per day
        public ActionResult LastYearWeight()
        {
            FitbitClient client = GetFitbitClient();

            TimeSeriesDataList weightSeries = client.GetTimeSeries(TimeSeriesResourceType.Weight, DateTime.UtcNow, DateRangePeriod.OneYear);

            return(View(weightSeries));
        }
Esempio n. 2
0
        public ActionResult LastWeekSteps()
        {
            FitbitClient client = GetFitbitClient();

            TimeSeriesDataList results = client.GetTimeSeries(TimeSeriesResourceType.Steps, DateTime.UtcNow.AddDays(-7), DateTime.UtcNow);

            return(View(results));
        }
        private void ValidateDataList(TimeSeriesDataList dataList)
        {
            Assert.IsNotNull(dataList);
            Assert.IsNotNull(dataList.DataList);
            Assert.AreEqual(8, dataList.DataList.Count);

            var item = dataList.DataList.First();

            dataList.DataList.Remove(item);

            Assert.AreEqual("1.0", item.Value);
            Assert.AreEqual(DateTime.Parse("2014-08-12"), item.DateTime);

            item = dataList.DataList.First();
            dataList.DataList.Remove(item);

            Assert.AreEqual("2.0", item.Value);
            Assert.AreEqual(DateTime.Parse("2014-08-13"), item.DateTime);

            item = dataList.DataList.First();
            dataList.DataList.Remove(item);

            Assert.AreEqual("4.0", item.Value);
            Assert.AreEqual(DateTime.Parse("2014-08-14"), item.DateTime);

            item = dataList.DataList.First();
            dataList.DataList.Remove(item);

            Assert.AreEqual("8.0", item.Value);
            Assert.AreEqual(DateTime.Parse("2014-08-15"), item.DateTime);

            item = dataList.DataList.First();
            dataList.DataList.Remove(item);

            Assert.AreEqual("16.0", item.Value);
            Assert.AreEqual(DateTime.Parse("2014-08-16"), item.DateTime);

            item = dataList.DataList.First();
            dataList.DataList.Remove(item);

            Assert.AreEqual("32.0", item.Value);
            Assert.AreEqual(DateTime.Parse("2014-08-17"), item.DateTime);

            item = dataList.DataList.First();
            dataList.DataList.Remove(item);

            Assert.AreEqual("64.0", item.Value);
            Assert.AreEqual(DateTime.Parse("2014-08-18"), item.DateTime);

            item = dataList.DataList.First();
            dataList.DataList.Remove(item);

            Assert.AreEqual("128.0", item.Value);
            Assert.AreEqual(DateTime.Parse("2014-08-19"), item.DateTime);

            Assert.AreEqual(0, dataList.DataList.Count);
        }
Esempio n. 4
0
        public ActionResult LastWeekActiveScore()
        {
            FitbitClient client = new FitbitClient(ConfigurationManager.AppSettings["FitbitConsumerKey"],
                                                   ConfigurationManager.AppSettings["FitbitConsumerSecret"],
                                                   Session["FitbitAuthToken"].ToString(),
                                                   Session["FitbitAuthTokenSecret"].ToString());

            TimeSeriesDataList results = client.GetTimeSeries(TimeSeriesResourceType.ActiveScore, DateTime.UtcNow.AddDays(-7), DateTime.UtcNow);

            return(View(results));
        }
Esempio n. 5
0
        public void Can_Deserialize_Activities_Distance()
        {
            string content = SampleDataHelper.GetContent("TimeSeries-ActivitiesDistance.json");
            JsonDotNetSerializer deserializer = new JsonDotNetSerializer
            {
                RootProperty = TimeSeriesResourceType.Distance.ToTimeSeriesProperty()
            };

            TimeSeriesDataList result = deserializer.GetTimeSeriesDataList(content);

            ValidateDataList(result);
        }
Esempio n. 6
0
        private void DownloadMetric(TimeSeriesResourceType type, DateTime dateStart)
        {
            TimeSeriesDataList fitbitData = null;

            try
            {
                fitbitData = _client.GetTimeSeriesAsync(type, dateStart, DateRangePeriod.OneYear).Result;
                SaveSeries(type, fitbitData);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                return;
            }
        }
Esempio n. 7
0
        private void SaveSeries(TimeSeriesResourceType type, TimeSeriesDataList fitbitData)
        {
            var           metricType             = MetricTypeConversion.FromFitBitType(type);
            List <Metric> currentlyStoredMetrics = _unitOfWork.CRUDRepository.GetByUserId <Metric>(_userId)
                                                   .Where(m => m.MetricType == metricType)
                                                   .ToList();

            foreach (Fitbit.Models.TimeSeriesDataList.Data item in fitbitData.DataList)
            {
                // no value so ignore
                if (string.IsNullOrEmpty(item.Value))
                {
                    continue;
                }

                decimal convertedValue = FitbitConversion.ConvertFitbitValue(type, item.Value);

                // 0 = no value for the type/date so ignore
                if (convertedValue == FitbitConversion.InvalidValue)
                {
                    continue;
                }

                // check if we already have a metric for the given date.
                var existingMetric = currentlyStoredMetrics.Where(m => m.Recorded == item.DateTime).FirstOrDefault();

                if (existingMetric == null)
                {
                    // add metric
                    _unitOfWork.Metrics.AddMetric(Metric.CreateMetric(_userId, metricType, item.DateTime, convertedValue, false));
                }
                else
                {
                    // don't overwrite any manually entered metrics.
                    if (!existingMetric.IsManual)
                    {
                        existingMetric.Value = convertedValue;
                        _unitOfWork.Metrics.UpdateMetric(existingMetric);
                    }
                }
            }
            _unitOfWork.Complete();
        }
Esempio n. 8
0
        /// <summary>
        /// GetTimeSeriesDataList has to do some custom manipulation with the returned representation
        /// </summary>
        /// <param name="serializer"></param>
        /// <param name="timeSeriesDataJson"></param>
        /// <returns></returns>
        internal static TimeSeriesDataList GetTimeSeriesDataList(this JsonDotNetSerializer serializer, string timeSeriesDataJson)
        {
            if (string.IsNullOrWhiteSpace(timeSeriesDataJson))
            {
                throw new ArgumentNullException(nameof(timeSeriesDataJson), "timeSeriesDataJson can not be empty, null or whitespace.");
            }

            var dataPoints = JToken.Parse(timeSeriesDataJson)[serializer.RootProperty];
            var result     = new TimeSeriesDataList
            {
                DataList = (from item in dataPoints
                            select new TimeSeriesDataList.Data
                {
                    DateTime = DateTime.Parse(item["dateTime"].ToString()),
                    Value = item["value"].ToString()
                }).ToList()
            };

            return(result);
        }
Esempio n. 9
0
        public async Task GetTimeSeriesDataListAsync_DoubleDate_Success()
        {
            string content = SampleDataHelper.GetContent("TimeSeries-ActivitiesDistance.json");

            Func <HttpResponseMessage> responseMessage = new Func <HttpResponseMessage>(() =>
            {
                return(new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new StringContent(content)
                });
            });

            Action <HttpRequestMessage, CancellationToken> verification = new Action <HttpRequestMessage, CancellationToken>((message, token) =>
            {
                Assert.AreEqual(HttpMethod.Get, message.Method);
                Assert.AreEqual("https://api.fitbit.com/1/user/-/activities/distance/date/2014-09-07/2014-09-14.json", message.RequestUri.AbsoluteUri);
            });

            FitbitClient fitbitClient = Helper.CreateFitbitClient(responseMessage, verification);

            TimeSeriesDataList response = await fitbitClient.GetTimeSeriesAsync(TimeSeriesResourceType.Distance, new DateTime(2014, 9, 7), new DateTime(2014, 9, 14));

            ValidateDataList(response);
        }
Esempio n. 10
0
        protected void UploadFitBitData()
        {
            try
            {
                // Get the fitbit client data
                FitbitClient client = GetFitbitClient();

                // Get the most recent upload date for steps
                string userId = Session["UserId"].ToString();

                var latestSteps = db.Steps.Where(m => m.AspNetUser.Id == userId)
                                  .OrderByDescending(m => m.StepDate)
                                  .FirstOrDefault();

                // Convert lastUpload date to DateTime for comparison
                DateTime lastUploadDateSteps = (DateTime)latestSteps.StepDate;

                // Get total days between now and last upload
                int daysSteps = Convert.ToInt32((DateTime.Now - lastUploadDateSteps).TotalDays);
                TimeSeriesDataList stepsData = client.GetTimeSeries(TimeSeriesResourceType.Steps, DateTime.Now.AddDays(-daysSteps), DateTime.Now);

                // Loop through results to total steps since last upload
                int dayCountSteps = stepsData.DataList.Count - 1;
                foreach (var d in stepsData.DataList)
                {
                    int steps = Convert.ToInt32(d.Value);
                    if (Convert.ToDateTime(latestSteps.StepDate).AddDays(-(dayCountSteps--)) == d.DateTime)
                    {
                        Step lastSteps = db.Steps.Where(m => m.AspNetUser.Id == userId && m.StepDate == d.DateTime)
                                         .FirstOrDefault();
                        lastSteps.StepCount = steps;

                        // Change state to modified
                        db.Entry(lastSteps).State = System.Data.Entity.EntityState.Modified;
                        db.SaveChanges();
                    }
                    else
                    {
                        // Add the record to the database
                        Step step = new Step();
                        step.StepCount = steps;
                        step.StepDate  = d.DateTime;
                        step.UserId    = Session["UserId"].ToString();
                        db.Steps.Add(step);
                        db.SaveChanges();
                    }
                }

                // Get the most recent upload date for distances
                var latestDistance = db.Distances.Where(m => m.AspNetUser.Id == userId)
                                     .OrderByDescending(m => m.DistanceDate)
                                     .FirstOrDefault();

                // Convert lastUpload date to DateTime for comparison
                DateTime lastUploadDateDistances = (DateTime)latestDistance.DistanceDate;

                // Get total days between now and last upload
                int daysDistances = Convert.ToInt32((DateTime.Now - lastUploadDateDistances).TotalDays);
                TimeSeriesDataList distanceData = client.GetTimeSeries(TimeSeriesResourceType.Distance, DateTime.Now.AddDays(-daysDistances), DateTime.Now);

                // Loop through results to total steps since last upload
                int dayCountDistances = distanceData.DataList.Count - 1;
                foreach (var d in distanceData.DataList)
                {
                    decimal distances = Convert.ToDecimal(d.Value);
                    if (Convert.ToDateTime(latestDistance.DistanceDate).AddDays(-(dayCountDistances--)) == d.DateTime)
                    {
                        Distance lastDistances = db.Distances.Where(m => m.AspNetUser.Id == userId && m.DistanceDate == d.DateTime)
                                                 .FirstOrDefault();
                        lastDistances.DistanceCount = distances;

                        // Change state to modified
                        db.Entry(lastDistances).State = System.Data.Entity.EntityState.Modified;
                        db.SaveChanges();
                    }
                    else
                    {
                        // Add the record to the database
                        Distance distance = new Distance();
                        distance.DistanceCount = distances;
                        distance.DistanceDate  = d.DateTime;
                        distance.UserId        = Session["UserId"].ToString();
                        db.Distances.Add(distance);
                        db.SaveChanges();
                    }
                }

                // Get the most recent upload date for minutes
                var latestMinutes = db.Minutes.Where(m => m.AspNetUser.Id == userId)
                                    .OrderByDescending(m => m.MinuteDate)
                                    .FirstOrDefault();

                // Convert lastUpload date to DateTime for comparison
                DateTime lastUploadDateMinutes = (DateTime)latestMinutes.MinuteDate;

                // Get total days between now and last upload
                int daysMinutes = Convert.ToInt32((DateTime.Now - lastUploadDateMinutes).TotalDays);
                TimeSeriesDataList lightlyActive = client.GetTimeSeries(TimeSeriesResourceType.MinutesLightlyActive, DateTime.Now.AddDays(-daysMinutes), DateTime.Now);
                TimeSeriesDataList fairlyActive  = client.GetTimeSeries(TimeSeriesResourceType.MinutesFairlyActive, DateTime.Now.AddDays(-daysMinutes), DateTime.Now);

                // Join the results of both minute datas together so we only have to use one loop to get total minutes
                var minutesData = lightlyActive.DataList.Zip(fairlyActive.DataList, (lightly, fairly) => new { LightlyActive = lightly, FairlyActive = fairly }).ToList();

                // Loop through results to total steps since last upload
                int dayCountMinutes = minutesData.Count - 1;
                foreach (var d in minutesData)
                {
                    decimal minutes = Convert.ToDecimal(d.FairlyActive.Value) + Convert.ToDecimal(d.LightlyActive.Value);
                    if (Convert.ToDateTime(latestMinutes.MinuteDate).AddDays(-(dayCountMinutes--)) == d.FairlyActive.DateTime)
                    {
                        Minute lastMinutes = db.Minutes.Where(m => m.AspNetUser.Id == userId && m.MinuteDate == d.FairlyActive.DateTime)
                                             .FirstOrDefault();
                        lastMinutes.MinuteCount = minutes;

                        // Change state to modified
                        db.Entry(lastMinutes).State = System.Data.Entity.EntityState.Modified;
                        db.SaveChanges();
                    }
                    else
                    {
                        // Add the record to the database
                        Minute minute = new Minute();
                        minute.MinuteCount = minutes;
                        minute.MinuteDate  = d.FairlyActive.DateTime;
                        minute.UserId      = Session["UserId"].ToString();
                        db.Minutes.Add(minute);
                        db.SaveChanges();
                    }
                }

                lblCRUDMessage.Text     = "FitBit Data successfully synchronized.";
                lblCRUDMessage.CssClass = "text-success";
            }
            catch (DataException dx)
            {
                lblCRUDMessage.Text     = "Unable to synchronize FitBit Data. To try again, click the 'Synchronize FitBit Data' button. If the error persists, please inform an Administrator.";
                lblCRUDMessage.CssClass = "text-danger";
                LogFile.WriteToFile("FitBitManager.aspx.cs", "UploadFitBitData", dx, User.Identity.Name + " tried to synchronize FitBit Data.", "HPSErrorLog.txt");
            }
            catch (Exception ex)
            {
                lblCRUDMessage.Text     = "Unable to synchronize FitBit Data. To try again, click the 'Synchronize FitBit Data' button. If the error persists, please inform an Administrator.";
                lblCRUDMessage.CssClass = "text-danger";
                LogFile.WriteToFile("FitBitManager.aspx.cs", "UploadFitBitData", ex, User.Identity.Name + " tried to synchronize FitBit Data.", "HPSErrorLog.txt");
            }
        }
Esempio n. 11
0
        public List <List <string> > GatherFitBitChartData(int dayCount, string type)
        {
            // Get the fitbit client data
            FitbitClient client = GetFitbitClient();

            // Store data into a dual list of strings
            List <List <string> > data   = new List <List <string> >();
            List <string>         values = new List <string>();
            List <string>         dates  = new List <string>();

            // Check which type of data to get
            if (type == "Steps")
            {
                var steps = client.GetTimeSeries(TimeSeriesResourceType.Steps, DateTime.Now.AddDays(-dayCount), DateTime.Now).DataList.ToList();

                // Loop through data and assign data to its own seperate list
                foreach (var result in steps)
                {
                    values.Add(result.Value.ToString());
                    dates.Add(result.DateTime.ToString());
                }

                // Add lists together and return
                data.Add(values);
                data.Add(dates);
                return(data);
            }
            else if (type == "Distance")
            {
                var distances = client.GetTimeSeries(TimeSeriesResourceType.Distance, DateTime.Now.AddDays(-dayCount), DateTime.Now).DataList.ToList();

                // Loop through data and assign data to its own seperate list
                foreach (var result in distances)
                {
                    values.Add(result.Value.ToString());
                    dates.Add(result.DateTime.ToString());
                }

                // Add lists together and return
                data.Add(values);
                data.Add(dates);
                return(data);
            }
            else
            {
                TimeSeriesDataList lightlyActive = client.GetTimeSeries(TimeSeriesResourceType.MinutesLightlyActive, DateTime.Now.AddDays(-dayCount), DateTime.Now);
                TimeSeriesDataList fairlyActive  = client.GetTimeSeries(TimeSeriesResourceType.MinutesFairlyActive, DateTime.Now.AddDays(-dayCount), DateTime.Now);
                var minutes = lightlyActive.DataList.Zip(fairlyActive.DataList, (lightly, fairly) => new { LightlyActive = lightly, FairlyActive = fairly }).ToList();

                // Loop through data and assign data to its own seperate list
                foreach (var result in minutes)
                {
                    values.Add((Convert.ToDecimal(result.FairlyActive.Value) + Convert.ToDecimal(result.LightlyActive.Value)).ToString());
                    dates.Add(result.FairlyActive.DateTime.ToString());
                }

                // Add lists together and return
                data.Add(values);
                data.Add(dates);
                return(data);
            }
        }