Functions/Hue/Connect-HueBridge.ps1
function Connect-HueBridge { <# .Synopsis Connects to a new Hue Bridge. .Description Connects to a new Hue Bridge and saves connection information for later use. You must have physical access to the Hue Bridge controller. To demostrate your access, hold the link button on the Hue bridge until the lights flash. Then run this command within the next 30 seconds. .Link Find-HueBridge .Link Get-HueBridge .Example Find-HueBridge | Connect-HueBridge #> [CmdletBinding(DefaultParameterSetName='ExistingConnection')] [OutputType([Nullable], [PSObject])] param( # The IP Address of the Hue Bridge [Parameter(Mandatory,ParameterSetName='NewConnection',ValueFromPipelineByPropertyName)] [Alias('IPAddress')] [IPAddress] $HueBridgeIP ) begin { if ($home) { $lightScriptRoot = Join-Path $home -ChildPath LightScript } } process { #region Create New Connection if ($PSCmdlet.ParameterSetName -eq 'NewConnection') { $DeviceType = 'LightScript' $userName = Get-Random $hueResult = Invoke-RestMethod -Uri "http://$HueBridgeIP/api" -Method POST -Body ( ConvertTo-Json -InputObject ([PSCustomObject]@{devicetype="${DeviceType}#$UserName"}) ) if ($hueResult.error) { Write-Error -Message $hueResult.error.description -ErrorId $hueResult.error.type return } if (-not $hueResult) { return } $hueUserName = $hueResult.success.username $bridgeInfo = Send-HueBridge -IPAddress $HueBridgeIP -HueUserName $hueUserName -Command config if (-not $bridgeInfo) { return } if ($home) { if (-not (Test-Path $lightScriptRoot)) { $createLightScriptDir = New-Item -ItemType Directory -Path $lightScriptRoot if (-not $createLightScriptDir) { return } } $bridgeDataFile = Join-Path $lightScriptRoot ".$($bridgeInfo.bridgeid).huebridge.clixml" [PSCustomObject]@{IPAddress=$HueBridgeIP;DeviceID=$($bridgeInfo.bridgeid);HueUserName=$hueUserName} | Export-Clixml -Path $bridgeDataFile } $bridgeInfo } #endregion Create New Connection #region Return Existing Connections elseif ($PSCmdlet.ParameterSetName -eq 'ExistingConnection') { Get-ChildItem -Path $lightScriptRoot -ErrorAction SilentlyContinue -Filter *.huebridge.clixml -Force | Import-Clixml | Get-HueBridge } #endregion Return Existing Connections } } |