From 071174fa7d2fa65cf9497e34967b205c50148e17 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Thu, 30 Oct 2025 14:13:02 -0600 Subject: [PATCH] feat: Implement help request status tracking in Fusion system --- .../Fusion/IEssentialsRoomFusionController.cs | 72 +++++++++++++++++-- .../Fusion/IFusionHelpRequest.cs | 6 +- .../Fusion/eFusionHelpResponse.cs | 37 ++++++++++ 3 files changed, 109 insertions(+), 6 deletions(-) create mode 100644 src/PepperDash.Essentials.Core/Fusion/eFusionHelpResponse.cs diff --git a/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs b/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs index ee439b12..11c19bce 100644 --- a/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs +++ b/src/PepperDash.Essentials.Core/Fusion/IEssentialsRoomFusionController.cs @@ -76,12 +76,18 @@ namespace PepperDash.Essentials.Core.Fusion private bool _helpRequestSent; + private eFusionHelpResponse _helpRequestStatus; + /// public StringFeedback HelpRequestResponseFeedback { get; private set; } /// public BoolFeedback HelpRequestSentFeedback { get; private set; } + /// + public StringFeedback HelpRequestStatusFeedback { get; private set; } + + #region System Info Sigs //StringSigData SystemName; @@ -297,11 +303,10 @@ namespace PepperDash.Essentials.Core.Fusion FusionRVI.GenerateFileForAllFusionDevices(); - HelpRequestResponseFeedback = new StringFeedback("HelpRequestResponse", () => FusionRoom.Help.InputSig.StringValue); - HelpRequestResponseFeedback.LinkInputSig(FusionRoom.Help.InputSig); + HelpRequestResponseFeedback = new StringFeedback("HelpRequestResponse", () => FusionRoom.Help.OutputSig.StringValue); HelpRequestSentFeedback = new BoolFeedback("HelpRequestSent", () => _helpRequestSent); - + HelpRequestStatusFeedback = new StringFeedback("HelpRequestStatus", () => _helpRequestStatus.ToString()); } /// @@ -1767,10 +1772,59 @@ namespace PepperDash.Essentials.Core.Fusion { if (args.EventId == FusionEventIds.HelpMessageReceivedEventId) { - Debug.LogMessage(LogEventLevel.Information, this, "Help message received from Fusion for room '{0}'", + this.LogInformation( "Help message received from Fusion for room '{0}'", Room.Name); + + this.LogDebug("Help message content: {0}", FusionRoom.Help.OutputSig.StringValue); // Fire help request event HelpRequestResponseFeedback.FireUpdate(); + + if (!string.IsNullOrEmpty(FusionRoom.Help.OutputSig.StringValue)) + { + switch (FusionRoom.Help.OutputSig.StringValue) + { + case "Please wait, a technician is on his / her way.": + this.LogInformation("Please wait, a technician is on his / her way.", + Room.Name); + + _helpRequestStatus = eFusionHelpResponse.HelpOnTheWay; + break; + case "Please call the helpdesk.": + this.LogInformation("Please call the helpdesk."); + _helpRequestStatus = eFusionHelpResponse.CallHelpDesk; + break; + case "Please wait, I will reschedule your meeting to a different room.": + this.LogInformation("Please wait, I will reschedule your meeting to a different room.", + Room.Name); + + _helpRequestStatus = eFusionHelpResponse.ReschedulingMeeting; + break; + case "I will be taking control of your system. Please be patient while I adjust the settings.": + this.LogInformation("I will be taking control of your system. Please be patient while I adjust the settings.", + Room.Name); + + _helpRequestStatus = eFusionHelpResponse.TakingControl; + break; + default: + this.LogInformation("Unknown help request code received from Fusion for room '{0}'", + Room.Name); + + _helpRequestStatus = eFusionHelpResponse.None; + break; + } + } + else + { + _helpRequestStatus = eFusionHelpResponse.None; + } + + if(_helpRequestStatus == eFusionHelpResponse.None) + { + _helpRequestSent = false; + HelpRequestSentFeedback.FireUpdate(); + } + + HelpRequestStatusFeedback.FireUpdate(); } @@ -1835,9 +1889,14 @@ namespace PepperDash.Essentials.Core.Fusion FusionRoom.Help.InputSig.StringValue = requestString; - Debug.LogMessage(LogEventLevel.Information, this, "Help request sent to Fusion from room '{0}'", Room.Name); + this.LogInformation("Help request sent to Fusion from room '{0}'", Room.Name); + this.LogDebug("Help request content: {0}", FusionRoom.Help.InputSig.StringValue); _helpRequestSent = true; + HelpRequestSentFeedback.FireUpdate(); + + _helpRequestStatus = eFusionHelpResponse.HelpRequested; + HelpRequestStatusFeedback.FireUpdate(); } /// @@ -1847,6 +1906,9 @@ namespace PepperDash.Essentials.Core.Fusion { FusionRoom.Help.InputSig.StringValue = ""; _helpRequestSent = false; + HelpRequestSentFeedback.FireUpdate(); + _helpRequestStatus = eFusionHelpResponse.None; + HelpRequestStatusFeedback.FireUpdate(); Debug.LogMessage(LogEventLevel.Information, this, "Help request cancelled in Fusion for room '{0}'", Room.Name); } } diff --git a/src/PepperDash.Essentials.Core/Fusion/IFusionHelpRequest.cs b/src/PepperDash.Essentials.Core/Fusion/IFusionHelpRequest.cs index 7dcc6009..de4cca17 100644 --- a/src/PepperDash.Essentials.Core/Fusion/IFusionHelpRequest.cs +++ b/src/PepperDash.Essentials.Core/Fusion/IFusionHelpRequest.cs @@ -21,10 +21,14 @@ namespace PepperDash.Essentials.Core.Fusion /// BoolFeedback HelpRequestSentFeedback { get; } + /// + /// Feedback containing the current status of the help request + /// + StringFeedback HelpRequestStatusFeedback { get; } + /// /// Sends a help request /// - /// void SendHelpRequest(); /// diff --git a/src/PepperDash.Essentials.Core/Fusion/eFusionHelpResponse.cs b/src/PepperDash.Essentials.Core/Fusion/eFusionHelpResponse.cs new file mode 100644 index 00000000..6a5bbcd8 --- /dev/null +++ b/src/PepperDash.Essentials.Core/Fusion/eFusionHelpResponse.cs @@ -0,0 +1,37 @@ + + +namespace PepperDash.Essentials.Core.Fusion +{ + /// + /// Enumeration of possible Fusion Help Responses based on the standard responses from Fusion + /// + public enum eFusionHelpResponse + { + /// + /// No help response + /// + None, + /// + /// Help has been requested + /// + HelpRequested, + /// + /// Help is on the way + /// + HelpOnTheWay, + /// + /// Please call the helpdesk. + /// + CallHelpDesk, + /// + /// Rescheduling meeting. + /// + ReschedulingMeeting, + + /// + /// Technician taking control. + /// + TakingControl, + } + +} \ No newline at end of file