Product/Get-LifxProduct.ps1

<#
    .SYNOPSIS
        Returns a device's model and capabilities
    .DESCRIPTION
        This cmdlet returns a Lifx Device's model and capabilities by it's Product ID.
    .EXAMPLE
        Get-LifxProduct -Id 18
#>


function Get-LifxProduct {
    param(
        #Lifx Product by Id (pass results from Get-LifxDevice | Initialize-LifxDevice)
        #https://lan.developer.lifx.com/docs/product-registry
        [parameter(
            Position = 0,
            Mandatory = $true,
            ValueFromPipeline = $true)]
        [int[]]$ProductId
    )

    #online product registry
    $RestError = $null
    Try {
        $productRegistry = Invoke-RestMethod -Uri "https://raw.githubusercontent.com/LIFX/products/refs/heads/master/products.json"
    }
    Catch {
        $RestError = $_
    }

    #process
    $ProductId | ForEach-Object {
        switch ($_) {
            1 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Original 1000"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            3 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Color 650"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            10 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX White 800 (Low Voltage)"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            11 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX White 800 (High Voltage)"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            15 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Color 1000"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            18 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX White 900 BR30 (Low Voltage)"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            19 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX White 900 BR30 (High Voltage)"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            20 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Color 1000 BR30"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            22 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Color 1000"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            27 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX A19"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            28 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX BR30"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            29 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX A19 Night Vision"; Color = $true; Infrared = $true; Multizone = $false; HEV = $false } }
            30 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX BR30 Night Vision"; Color = $true; Infrared = $true; Multizone = $false; HEV = $false } }
            31 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Z"; Color = $true; Infrared = $false; Multizone = $true; HEV = $false } }
            32 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Z"; Color = $true; Infrared = $false; Multizone = $true; HEV = $false } }
            36 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Downlight"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            37 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Downlight"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            38 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Beam"; Color = $true; Infrared = $false; Multizone = $true; HEV = $false } }
            39 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Downlight White to Warm"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            40 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Downlight"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            43 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX A19"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            44 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX BR30"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            45 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX A19 Night Vision"; Color = $true; Infrared = $true; Multizone = $false; HEV = $false } }
            46 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX BR30 Night Vision"; Color = $true; Infrared = $true; Multizone = $false; HEV = $false } }
            49 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Mini Color"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            50 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Mini White to Warm"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            51 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Mini White"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            52 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX GU10"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            53 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX GU10"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            55 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Tile"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            57 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Candle"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            59 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Mini Color"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            60 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Mini White to Warm"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            61 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Mini White"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            62 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX A19"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            63 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX BR30"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            64 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX A19 Night Vision"; Color = $true; Infrared = $true; Multizone = $false; HEV = $false } }
            65 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX BR30 Night Vision"; Color = $true; Infrared = $true; Multizone = $false; HEV = $false } }
            66 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Mini White"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            68 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Candle"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            81 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Candle White to Warm"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            82 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Filament Clear"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            85 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Filament Amber"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            87 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Mini White"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            88 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Mini White"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            90 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Clean"; Color = $true; Infrared = $false; Multizone = $false; HEV = $true } }
            91 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Color"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            92 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Color"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            93 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX A19 US"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            94 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX BR30"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            96 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Candle White to Warm"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            97 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX A19"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            98 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX BR30"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            99 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Clean"; Color = $true; Infrared = $false; Multizone = $false; HEV = $true } }
            100 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Filament Clear"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            101 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Filament Amber"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            109 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX A19 Night Vision"; Color = $true; Infrared = $true; Multizone = $false; HEV = $false } }
            110 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX BR30 Night Vision"; Color = $true; Infrared = $true; Multizone = $false; HEV = $false } }
            111 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX A19 Night Vision"; Color = $true; Infrared = $true; Multizone = $false; HEV = $false } }
            112 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX BR30 Night Vision Intl"; Color = $true; Infrared = $true; Multizone = $false; HEV = $false } }
            113 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Mini WW US"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            114 { $product = [PSCustomObject]@{Id = $_; Name = "LIFX Mini WW Intl"; Color = $true; Infrared = $false; Multizone = $false; HEV = $false } }
            default {
                if ($productRegistry) {
                    if ($_ -in $productRegistry.products.pid) {
                        $onlineProduct = $productRegistry.products | Where-Object { $ProductId -eq $_.pid }
                        $product = [PSCustomObject]@{
                            Id        = $_;
                            Name      = $onlineProduct.name;
                            Color     = $onlineProduct.features.color;
                            Infrared  = $onlineProduct.features.infrared;
                            Multizone = $onlineProduct.features.multizone;
                            HEV       = $onlineProduct.features.hev
                        }
                    }
                    else {
                        $product = $ProductId
                    }
                }
            }
        }

        return $product
    }
}