public/Get-UnraidUps.ps1

function Get-UnraidUps {
    <#
    .SYNOPSIS
        Gets UPS (Uninterruptible Power Supply) status and metrics.

    .DESCRIPTION
        Returns UPS device information including battery status, load, runtime estimates,
        and power quality metrics.

    .PARAMETER Session
        Unraid session to use (defaults to the current session).

    .OUTPUTS
        UnraidUps[]. Array of UPS devices.

    .EXAMPLE
        Get-UnraidUps
        View current UPS status.
    #>

    [CmdletBinding()]
    [OutputType("UnraidUps")]
    param(
        [Parameter()]
        [UnraidSession]$Session = $script:DefaultUnraidSession
    )

    process {
        $gqlQuery = @"
        query GetUps {
            upsDevices {
                id name model status
                battery { chargeLevel estimatedRuntime }
                power { loadPercentage inputVoltage outputVoltage }
            }
        }
"@

        try {
            $result = Invoke-UnraidQuery -Query $gqlQuery -Session $Session

            if ($result.upsDevices) {
                foreach ($deviceData in $result.upsDevices) {
                    [UnraidUps]::new($deviceData)
                }
            }
        }
        catch {
            # Handle specific backend errors where UPS service might be stopped or unconfigured
            if ($_.Exception.Message -match "No UPS data") {
                Write-Warning "Unraid reports no UPS data available. Please verify the UPS is connected and settings are configured in the Unraid WebUI."
            }
            else {
                # Re-throw unanticipated errors
                throw
            }
        }
    }
}