functions/public/Get-KlippyTemperatureSensor.ps1
|
function Get-KlippyTemperatureSensor { <# .SYNOPSIS Gets temperature sensor readings from a Klipper printer. .DESCRIPTION Retrieves the status of all temperature sensors configured on the printer, including current temperature and measured min/max values. .PARAMETER Id The unique identifier of the printer. .PARAMETER PrinterName The friendly name of the printer. .PARAMETER InputObject A printer object from pipeline input. .PARAMETER Name Filter by specific sensor name. Supports wildcards. .EXAMPLE Get-KlippyTemperatureSensor Gets all temperature sensors from the default printer. .EXAMPLE Get-KlippyTemperatureSensor -PrinterName "voronv2" Gets all temperature sensors from the specified printer. .EXAMPLE Get-KlippyTemperatureSensor -Name "*chamber*" Gets sensors with "chamber" in the name. .OUTPUTS KlippyCLI.TemperatureSensor objects. #> [CmdletBinding(DefaultParameterSetName = 'Default')] [OutputType([PSCustomObject])] param( [Parameter(ParameterSetName = 'ById')] [ValidateNotNullOrEmpty()] [string]$Id, [Parameter(ParameterSetName = 'ByName', Position = 0)] [ValidateNotNullOrEmpty()] [string]$PrinterName, [Parameter(ParameterSetName = 'ByObject', ValueFromPipeline = $true)] [PSCustomObject]$InputObject, [Parameter()] [string]$Name ) process { # Resolve printer $resolveParams = @{} switch ($PSCmdlet.ParameterSetName) { 'ById' { $resolveParams['Id'] = $Id } 'ByName' { $resolveParams['PrinterName'] = $PrinterName } 'ByObject' { $resolveParams['InputObject'] = $InputObject } } $printer = Resolve-KlippyPrinterTarget @resolveParams try { # Get list of available objects $allObjects = Invoke-KlippyJsonRpc -Printer $printer -Method "printer/objects/list" # Find temperature_sensor objects $sensorObjects = foreach ($obj in $allObjects.Objects) { if ($obj.StartsWith('temperature_sensor ')) { $sensorName = ($obj -split ' ', 2)[1] [PSCustomObject]@{ ObjectName = $obj SensorName = $sensorName } } } # Apply name filter if ($Name) { $sensorObjects = $sensorObjects | Where-Object { $_.SensorName -like $Name } } if (-not $sensorObjects) { Write-Verbose "No temperature sensors found matching the specified criteria." return } # Build query string $queryParts = $sensorObjects | ForEach-Object { [System.Uri]::EscapeDataString($_.ObjectName) } $endpoint = "printer/objects/query?" + ($queryParts -join '&') $response = Invoke-KlippyJsonRpc -Printer $printer -Method $endpoint -NoNormalize # Process results foreach ($sensor in $sensorObjects) { $data = $response.status.($sensor.ObjectName) if ($data) { [PSCustomObject]@{ PSTypeName = 'KlippyCLI.TemperatureSensor' PrinterId = $printer.Id PrinterName = $printer.PrinterName Name = $sensor.SensorName Temperature = [math]::Round($data.temperature, 1) MeasuredMinTemp = $data.measured_min_temp MeasuredMaxTemp = $data.measured_max_temp } } } } catch { Write-Error "Failed to get temperature sensors from '$($printer.PrinterName)': $_" } } } |