@@ -1,6 +1,7 @@
using Microsoft.Extensions.Options ;
using Newtonsoft.Json.Linq ;
using Serilog ;
using System.Diagnostics ;
using YaleAccess.Models ;
using YaleAccess.Models.Options ;
using YaleAccess.Services.Interfaces ;
@@ -62,11 +63,13 @@ namespace YaleAccess.Services
// Subscribe to the driver ready event
driver . DriverReady + = ( ) = >
{
Log . Logger . Information ( "Z-Wave driver started successfully." ) ;
isReady = true ;
} ;
driver . StartupErrorEvent + = ( error ) = >
{
Log . Logger . Error ( "Error starting the driver: {error}" , error ) ;
message = error ;
} ;
@@ -80,6 +83,7 @@ namespace YaleAccess.Services
// If there was an error starting the driver, throw an exception
if ( message ! = null )
{
Log . Logger . Error ( "Failed to start the driver. Error message: {message}" , message ) ;
throw new Exception ( $"Failed to start the driver. Error message: {message}" ) ;
}
@@ -89,22 +93,45 @@ namespace YaleAccess.Services
public async Task < YaleUserCode > GetCodeInformationAsync ( int userCodeId )
{
Stopwatch stopwatch = new ( ) ;
stopwatch . Start ( ) ;
// Log the start of the operation
Log . Logger . Debug ( "Retrieving user code information for user code ID: {userCodeId}" , userCodeId ) ;
// Setup the two tasks to get the values we need
CMDResult status = await lockNode . GetValue ( GetUserStatusValue ( userCodeId ) ) ;
Log . Logger . Debug ( "Retrieved user code status for user code ID: {userCodeId} in {ElapsedMilliseconds} ms" , userCodeId , stopwatch . ElapsedMilliseconds ) ;
CMDResult code = await lockNode . GetValue ( GetUserCodeValue ( userCodeId ) ) ;
Log . Logger . Debug ( "Retrieved user code value for user code ID: {userCodeId} in {ElapsedMilliseconds} ms" , userCodeId , stopwatch . ElapsedMilliseconds ) ;
// Covert the result to a YaleUserCode object
return new Y aleUserCode( )
YaleUserCode y aleUserCode = new ( )
{
Id = userCodeId ,
Code = GetUserCodeValue ( code ) ,
Status = GetUserStatusValue ( status ) ,
IsHome = false
} ;
stopwatch . Stop ( ) ;
Log . Logger . Debug ( "Retrieved user code information for user code ID: {userCodeId} in {ElapsedMilliseconds} ms" , userCodeId , stopwatch . ElapsedMilliseconds ) ;
// Return the user code information
return yaleUserCode ;
}
public async Task < bool > SetUserCode ( int userCodeId , string code )
{
Stopwatch stopwatch = new ( ) ;
stopwatch . Start ( ) ;
// Log the start of the operation
Log . Logger . Debug ( "Setting user code for user code ID: {userCodeId} to {code}" , userCodeId , code ) ;
// Setup the set value task
CMDResult result = await lockNode . SetValue ( GetUserCodeValue ( userCodeId ) , code ) ;
@@ -114,12 +141,21 @@ namespace YaleAccess.Services
Log . Logger . Error ( "Failed to set user code {@userCodeId} to {@code}. Error message: {message}" , userCodeId , code , result . Message ) ;
}
stopwatch . Stop ( ) ;
Log . Logger . Debug ( "Set user code for user code ID: {userCodeId} to {code} in {ElapsedMilliseconds} ms" , userCodeId , code , stopwatch . ElapsedMilliseconds ) ;
// Return the result
return result . Success ;
}
public async Task < bool > SetCodeAsAvailable ( int userCode )
{
Stopwatch stopwatch = new ( ) ;
stopwatch . Start ( ) ;
// Log the start of the operation
Log . Logger . Debug ( "Setting user code status for user code ID: {userCode} to available" , userCode ) ;
// Setup the set value task
CMDResult result = await lockNode . SetValue ( GetUserStatusValue ( userCode ) , ( int ) UserCodeStatus . AVAILABLE ) ;
@@ -129,6 +165,9 @@ namespace YaleAccess.Services
Log . Logger . Error ( "Failed to set user code {@userCode} to available status. Error message: {message}" , userCode , result . Message ) ;
}
stopwatch . Stop ( ) ;
Log . Logger . Debug ( "Set user code status for user code ID: {userCode} to available in {ElapsedMilliseconds} ms" , userCode , stopwatch . ElapsedMilliseconds ) ;
// Return the result
return result . Success ;
}