private async Task <DeviceStatus> GetExactDeviceStatus(Guid deviceId) { SensorActivity pirActivity = await _movementService.GetSensorStatusAsync(deviceId, SensorType.PIR); SensorActivity rangeActivity = await _movementService.GetSensorStatusAsync(deviceId, SensorType.Range); TimeSpan expiry = _settingsService.GetSensorActivityExpiry(); OccupationStatus status = pirActivity.IsActive(expiry) || rangeActivity.IsActive(expiry) ? OccupationStatus.Occupied : OccupationStatus.Empty; return(new DeviceStatus() { DeviceInfo = Devices.All.FirstOrDefault(f => f.ID.Equals(deviceId)), Status = status, LastActivity = GetMinDate(pirActivity?.EntryDate, rangeActivity?.EntryDate) }); }
public static bool IsActive(this SensorActivity activity, TimeSpan expiration) { return(activity != null && (DateTime.UtcNow - activity.EntryDate) <= expiration); }