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 } }
public MotionActivityEvent(MotionActivityType types, MotionActivityConfidence confidence, DateTimeOffset timestamp) { this.Types = types; this.Confidence = confidence; this.Timestamp = timestamp; }
/// <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);
//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)); }
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); }
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); }
/// <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);