Add movement timing and command banking to ScreenLiftController #1372
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Implements configurable movement times for raise/lower operations with command banking to prevent relay conflicts during physical movement. Applies to momentary mode only; latched mode relays switch instantly without timing.
Configuration Changes
raiseTimeInMsandlowerTimeInMsto relay config for independent movement durationsBehavior Changes
Command Banking:
Momentary Mode:
Latched Mode:
Implementation
_isMovingflag prevents concurrent relay activation_requestedStateenum (None/Raise/Lower) stores single banked commandDisposeMovementTimer()ensures cleanup before new timer creationOnMovementComplete()callback handles timer expiry and banked command executionExample Config
{ "relays": { "raise": { "deviceKey": "relay-1", "pulseTimeInMs": 500, "raiseTimeInMs": 30000 }, "lower": { "deviceKey": "relay-2", "pulseTimeInMs": 500, "lowerTimeInMs": 45000 } } }Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
crl.entrust.net/usr/bin/dotnet dotnet build PepperDash.Essentials.4Series.sln(dns block)/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/Essentials/Essentials/PepperDash.Essentials.4Series.sln --packages /home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/8E3C38744AF97AEA71D98A0334D7EC97/missingpackages_workingdir --packages /home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)ocsp.entrust.net/usr/bin/dotnet dotnet build PepperDash.Essentials.4Series.sln(dns block)/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/Essentials/Essentials/PepperDash.Essentials.4Series.sln --packages /home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/8E3C38744AF97AEA71D98A0334D7EC97/missingpackages_workingdir --packages /home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/Essentials/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.