Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Install DevDefined.OAuth by using nuget.exe (see http://goodworkaround.com/node/73 for hint)
- Add-Type -Path "C:\graphapi\DevDefined.OAuth.0.2\lib\DevDefined.OAuth.dll"
- # Get the following info from http://api.telldus.com/keys/index
- $Global:TelldusOAuthToken = @{
- ConsumerKey = "FEH.....................NU"
- ConsumerSecret = "ZUX....................EF"
- Token = "52c423.............................3b906"
- TokenSecret = "65e4........................716"
- }
- <#
- .Synopsis
- Uses the $Global:TelldusOAuthToken hashmap to create OAuthSession
- .DESCRIPTION
- $Global:TelldusOAuthToken contains the ConsumerKey, ConsumerSecret, Token and TokenSecret. These are used to create a OAuthSession.
- .EXAMPLE
- Get-TelldusConsumerRequest
- #>
- function Get-TelldusConsumerRequest
- {
- [CmdletBinding()]
- [OutputType([DevDefined.OAuth.Consumer.ConsumerRequest])]
- Param
- (
- )
- Begin
- {
- }
- Process
- {
- # Create the oauth consumer
- $Consumer = New-Object devdefined.oauth.consumer.oauthconsumercontext
- $Consumer.ConsumerKey = $Global:TelldusOAuthToken.ConsumerKey
- $Consumer.ConsumerSecret = $Global:TelldusOAuthToken.ConsumerSecret
- $Consumer.SignatureMethod = [devdefined.oauth.framework.signaturemethod]::HmacSha1
- # Create the access token
- $accessToken = new-object DevDefined.OAuth.Framework.TokenBase
- $accessToken.ConsumerKey = $Global:TelldusOAuthToken.ConsumerKey
- $accessToken.Token = $Global:TelldusOAuthToken.Token
- $accessToken.TokenSecret = $Global:TelldusOAuthToken.TokenSecret
- $session = new-object DevDefined.OAuth.Consumer.OAuthSession $Consumer, $null, $null, $null
- return $session.Request($accessToken)
- }
- End
- {
- }
- }
- <#
- .Synopsis
- Returns all devices from Telldus Live
- .DESCRIPTION
- Returns all devices from Telldus Live
- .EXAMPLE
- Get-TelldusLiveDevice
- #>
- function Get-TelldusLiveDevice
- {
- [CmdletBinding()]
- Param
- (
- )
- Begin
- {
- }
- Process
- {
- $request = Get-TelldusConsumerRequest
- $request.Context.RequestMethod = 'GET'
- $request.Context.RawUri = [Uri]'http://api.telldus.com/xml/devices/list?supportedMethods=19'
- $result = [xml][DevDefined.OAuth.Consumer.ConsumerRequestExtensions]::ReadBody($request)
- foreach($Device in $result.devices.device) {
- New-Object -TypeName PSCustomObject -Property @{
- Name = $Device.name
- State = switch ($Device.state) {
- 1 { "On" }
- 2 { "Off" }
- 16 { "Dimmed" }
- default { "Unknown" }
- }
- ID = $Device.ID
- StateValue = $Device.StateValue
- Methods = switch ($Device.methods){
- 3 { "On/Off" }
- 19 { "On/Off/Dim" }
- default { "Unknown" }
- }
- Type = $Device.Type
- Client = $Device.Client
- ClientName = $Device.ClientName
- Online = switch ($Device.online){
- 0 { $false }
- 1 { $true }
- }
- }
- }
- }
- End
- {
- }
- }
- <#
- .Synopsis
- Sends turn on/off request to Telldus Live device based on the ID of the device
- .DESCRIPTION
- Sends turn on/off request to Telldus Live device based on the ID of the device
- .EXAMPLE
- Set-TelldusLiveDevice -ID "838822" -Action "turnOn"
- .EXAMPLE
- Get-TelldusLiveDevice | where{$_.Methods -eq "On/off"} | Set-TelldusLiveDevice -Action turnOn
- #>
- function Set-TelldusLiveDevice
- {
- [CmdletBinding()]
- [Alias()]
- [OutputType([int])]
- param(
- [Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
- [string] $ID,
- [Parameter(Mandatory=$True)]
- [ValidateSet("turnOff","turnOn")]
- [string] $Action
- )
- Begin
- {
- }
- Process
- {
- $request = Get-TelldusConsumerRequest
- $request.Context.RequestMethod = 'GET'
- $request.Context.RawUri = [Uri]('http://api.telldus.com/xml/device/{0}?id={1}' -f $Action, $ID)
- $result = [xml][DevDefined.OAuth.Consumer.ConsumerRequestExtensions]::ReadBody($request)
- New-Object -TypeName PSCustomObject -Property @{
- ID = $ID
- Action = $Action
- Result = $result.device.status.Trim()
- }
- }
- End
- {
- }
- }
- <#
- .Synopsis
- Sets the dimming value of a Telldus Live device
- .DESCRIPTION
- Sets the dimming value of a Telldus Live device
- .EXAMPLE
- Set-TelldusLiveDimmer -ID "838818" -Level 255
- .EXAMPLE
- Get-TelldusLiveDevice | where{$_.Methods -eq "On/Off/Dim"} | Set-TelldusLiveDimmer -Level 128
- #>
- function Set-TelldusLiveDimmer
- {
- [CmdletBinding()]
- param(
- [Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
- [string] $ID,
- [Parameter(Mandatory=$True)]
- [ValidateRange(0,255)]
- [int] $Level
- )
- Begin
- {
- }
- Process
- {
- $request = Get-TelldusConsumerRequest
- $request.Context.RequestMethod = 'GET'
- $request.Context.RawUri = [Uri]('http://api.telldus.com/xml/device/dim?id={1}&level={0}' -f $Level, $ID)
- $result = [xml][DevDefined.OAuth.Consumer.ConsumerRequestExtensions]::ReadBody($request)
- New-Object -TypeName PSCustomObject -Property @{
- ID = $ID
- Level = $Level
- Result = $result.device.status.Trim()
- }
- }
- End
- {
- }
- }
- <#
- .Synopsis
- Returns all sensors from Telldus Live
- .DESCRIPTION
- Returns all sensors from Telldus Live
- .EXAMPLE
- Get-TelldusLiveSensor
- #>
- function Get-TelldusLiveSensor
- {
- [CmdletBinding()]
- Param
- (
- )
- Begin
- {
- }
- Process
- {
- $request = Get-TelldusConsumerRequest
- $request.Context.RequestMethod = 'GET'
- $request.Context.RawUri = [Uri]'http://api.telldus.com/xml/sensors/list'
- $result = [xml][DevDefined.OAuth.Consumer.ConsumerRequestExtensions]::ReadBody($request)
- foreach($Sensor in $result.sensors.sensor) {
- New-Object -TypeName PSCustomObject -Property @{
- Name = $Sensor.name
- Ignored = switch ($Sensor.Ignored){
- 0 { $false }
- 1 { $true }
- }
- Client = $Sensor.Client
- ClientName = $Sensor.ClientName
- ID = $Sensor.ID
- Battery = $Sensor.Battery
- Protocol = $Sensor.protocol
- keepHistory = switch ($Sensor.keepHistory){
- 0 { $false }
- 1 { $true }
- }
- Editable = switch ($Sensor.editable){
- 0 { $false }
- 1 { $true }
- }
- Online = switch ($Sensor.online){
- 0 { $false }
- 1 { $true }
- }
- Model = $Sensor.model
- SensorId = $Sensor.sensorId
- LastUpdated = ([datetime] "1970-01-01 00:00:00").AddSeconds([int] $Sensor.lastUpdated)
- }
- }
- }
- End
- {
- }
- }
- <#
- .Synopsis
- Returns the sensordata for a Telldus Live sensor
- .DESCRIPTION
- Returns the sensordata for a Telldus Live sensor
- .EXAMPLE
- Get-TelldusLiveSensorData -ID "4049354"
- .EXAMPLE
- Get-TelldusLiveSensor | Get-TelldusLiveSensorData
- #>
- function Get-TelldusLiveSensorData
- {
- [CmdletBinding()]
- [Alias()]
- param(
- [Parameter(Mandatory=$True, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
- [string] $ID
- )
- Begin
- {
- }
- Process
- {
- $request = Get-TelldusConsumerRequest
- $request.Context.RequestMethod = 'GET'
- $request.Context.RawUri = [Uri]('http://api.telldus.com/xml/sensor/info?id={0}' -f $ID)
- $result = [xml][DevDefined.OAuth.Consumer.ConsumerRequestExtensions]::ReadBody($request)
- $Sensor = $result.sensor
- $props = @{
- ID = $Sensor.ID.Trim()
- }
- $temperature = $Sensor.data | where{$_.name -eq "temp"}
- if($temperature.value)
- {
- $props["Temperature"] = [Double] $temperature.value
- }
- else
- {
- $props["Temperature"] = -100
- }
- $humidity = $Sensor.data | where{$_.name -eq "humidity"}
- if($humidity.value)
- {
- $props["Humidity"] = [Double] $humidity.value
- }
- else
- {
- $props["Humidity"] =
- -100
- }
- New-Object -TypeName PSCustomObject -Property $props
- }
- End
- {
- }
- }
- <#
- .Synopsis
- Returns all sensors from Telldus Live, including temperature and humidity
- .DESCRIPTION
- Returns all sensors from Telldus Live, including temperature and humidity
- .EXAMPLE
- Get-TelldusLiveSensorDataAll
- #>
- function Get-TelldusLiveSensorDataAll
- {
- [CmdletBinding()]
- Param
- ()
- Begin
- {
- }
- Process
- {
- Foreach($Sensor in Get-TelldusLiveSensor)
- {
- $SensorData = $Sensor | Get-TelldusLiveSensorData
- $Sensor | Add-Member -MemberType NoteProperty -Name Temperature -Value $SensorData.Temperature
- $Sensor | Add-Member -MemberType NoteProperty -Name Humidity -Value $SensorData.Humidity
- $Sensor
- }
- }
- End
- {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement