Beispiel #1
0
        public async Task GetTimeBlocksTest(MotionActivityConfidence confidence, int expectedAutoSeconds)
        {
            var result = await this.activityManager.Object.GetTimeBlocksForRange(DateTimeOffset.UtcNow, DateTimeOffset.UtcNow, confidence);

            var auto = result.FirstOrDefault(x => x.Type == MotionActivityType.Automotive);

            if (expectedAutoSeconds == 0)
            {
                auto.Should().Be(null);
            }
            else
            {
                auto.Should().NotBeNull();
                //auto.Start
                //    auto.End
            }
        }
Beispiel #2
0
 public MotionActivityEvent(MotionActivityType types, MotionActivityConfidence confidence, DateTimeOffset timestamp)
 {
     this.Types      = types;
     this.Confidence = confidence;
     this.Timestamp  = timestamp;
 }
Beispiel #3
0
 /// <summary>
 /// Queries if most recent activity is stationary
 /// </summary>
 /// <param name="activity"></param>
 /// <param name="maxAge"></param>
 /// <param name="minConfidence"></param>
 /// <returns></returns>
 public static Task <bool> IsCurrentStationary(this IMotionActivityManager activity, TimeSpan?maxAge = null, MotionActivityConfidence minConfidence = MotionActivityConfidence.Medium)
 => activity.IsCurrentActivity(MotionActivityType.Stationary, maxAge, minConfidence);
Beispiel #4
0
        //public static async Task<IList<MotionActivityTimeBlock>> GetTimeBlocksForRange(this IMotionActivity activity,
        //                                                                               DateTimeOffset start,
        //                                                                               DateTimeOffset? end = null,
        //                                                                               MotionActivityConfidence minConfidence = MotionActivityConfidence.Medium)
        //{
        //    var list = new List<MotionActivityTimeBlock>();
        //    var result = await activity.Query(start, end);
        //    var set = result
        //        .Where(x => x.Confidence >= minConfidence)
        //        .OrderBy(x => x.Timestamp)
        //        .ToList();

        //    if (set.Count > 1)
        //    {
        //        MotionActivityEvent firstEvent = null;
        //        foreach (var item in set)
        //        {
        //            if (firstEvent == null)
        //                firstEvent = item;
        //            else if (!firstEvent.Types.HasFlag(item.Types)) // has to have 1 of the types
        //            {
        //                var block = new MotionActivityTimeBlock(item.Types, firstEvent.Timestamp, item.Timestamp);
        //                list.Add(block);

        //                // first event of next time block
        //                firstEvent = item;
        //            }

        //        }
        //    }

        //    return list;
        //}


        //public static async Task<IDictionary<MotionActivityType, TimeSpan>> GetTotalsForRange(this IMotionActivity activity,
        //                                                                                      DateTimeOffset start,
        //                                                                                      DateTimeOffset? end = null,
        //                                                                                      MotionActivityConfidence minConfidence = MotionActivityConfidence.Medium)
        //{
        //    var dict = new Dictionary<MotionActivityType, TimeSpan>();
        //    var result = await activity.Query(start, end);
        //    var set = result
        //        .Where(x => x.Confidence >= minConfidence)
        //        .OrderBy(x => x.Timestamp)
        //        .ToList();

        //    if (set.Count > 1)
        //    {
        //        MotionActivityEvent lastEvent = null;
        //        foreach (var item in set)
        //        {
        //            if (lastEvent == null)
        //                lastEvent = item;
        //            else
        //            {
        //                if (!dict.ContainsKey(item.Types))
        //                    dict.Add(item.Types, TimeSpan.Zero);

        //                var ts = item.Timestamp.Subtract(lastEvent.Timestamp);
        //                dict[item.Types] += ts;
        //            }

        //        }
        //    }
        //    return dict;
        //}


        /// <summary>
        /// Queries for the most current event and checks against type & confidence
        /// </summary>
        /// <param name="activity"></param>
        /// <param name="type"></param>
        /// <param name="maxAge"></param>
        /// <param name="minConfidence"></param>
        /// <returns></returns>
        public static async Task <bool> IsCurrentActivity(this IMotionActivityManager activity, MotionActivityType type, TimeSpan?maxAge = null, MotionActivityConfidence minConfidence = MotionActivityConfidence.Medium)
        {
            var result = await activity.GetCurrentActivity(maxAge);

            //if (result == default(MotionActivityEvent))
            //return false;
            if (result.Confidence < minConfidence)
            {
                return(false);
            }

            return(result.Types.HasFlag(type));
        }
Beispiel #5
0
        public static async Task <IDictionary <MotionActivityType, TimeSpan> > GetTotalsForRange(this IMotionActivity activity,
                                                                                                 DateTimeOffset start,
                                                                                                 DateTimeOffset?end = null,
                                                                                                 MotionActivityConfidence minConfidence = MotionActivityConfidence.Medium)
        {
            var dict   = new Dictionary <MotionActivityType, TimeSpan>();
            var result = await activity.Query(start, end);

            var set = result
                      .Where(x => x.Confidence >= minConfidence)
                      .OrderBy(x => x.Timestamp)
                      .ToList();

            if (set.Count > 1)
            {
                MotionActivityEvent lastEvent = null;
                foreach (var item in set)
                {
                    if (lastEvent == null)
                    {
                        lastEvent = item;
                    }
                    else
                    {
                        if (!dict.ContainsKey(item.Types))
                        {
                            dict.Add(item.Types, TimeSpan.Zero);
                        }

                        var ts = item.Timestamp.Subtract(lastEvent.Timestamp);
                        dict[item.Types] += ts;
                    }
                }
            }
            return(dict);
        }
Beispiel #6
0
        public static async Task <IList <MotionActivityTimeBlock> > GetTimeBlocksForRange(this IMotionActivity activity,
                                                                                          DateTimeOffset start,
                                                                                          DateTimeOffset?end = null,
                                                                                          MotionActivityConfidence minConfidence = MotionActivityConfidence.Medium)
        {
            var list   = new List <MotionActivityTimeBlock>();
            var result = await activity.Query(start, end);

            var set = result
                      .Where(x => x.Confidence >= minConfidence)
                      .OrderBy(x => x.Timestamp)
                      .ToList();

            if (set.Count > 1)
            {
                MotionActivityEvent firstEvent = null;
                foreach (var item in set)
                {
                    if (firstEvent == null)
                    {
                        firstEvent = item;
                    }
                    else if (!firstEvent.Types.HasFlag(item.Types)) // has to have 1 of the types
                    {
                        var block = new MotionActivityTimeBlock(item.Types, firstEvent.Timestamp, item.Timestamp);
                        list.Add(block);

                        // first event of next time block
                        firstEvent = item;
                    }
                }
            }

            return(list);
        }
Beispiel #7
0
 /// <summary>
 /// Queries if most recent activity is automotive
 /// </summary>
 /// <param name="activity"></param>
 /// <param name="maxAge"></param>
 /// <param name="minConfidence"></param>
 /// <returns></returns>
 public static Task <bool> IsCurrentAutomotive(this IMotionActivity activity, TimeSpan?maxAge = null, MotionActivityConfidence minConfidence = MotionActivityConfidence.Medium)
 => activity.IsCurrentActivity(MotionActivityType.Automotive, maxAge, minConfidence);