functions/public/Get-KlippyExtruder.ps1
|
function Get-KlippyExtruder { <# .SYNOPSIS Gets extruder status from a Klipper printer. .DESCRIPTION Retrieves the status of all extruders configured on the printer, including temperature, target, pressure advance, and other settings. .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 extruder name (e.g., "extruder", "extruder1"). .EXAMPLE Get-KlippyExtruder Gets all extruders from the default printer. .EXAMPLE Get-KlippyExtruder -PrinterName "voronv2" Gets all extruders from the specified printer. .EXAMPLE Get-KlippyExtruder -Name "extruder" Gets only the primary extruder. .OUTPUTS KlippyCLI.Extruder 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" # Filter for extruder objects (extruder, extruder1, extruder2, etc.) $extruderObjects = $allObjects.Objects | Where-Object { $_ -match '^extruder\d*$' } # Apply name filter if ($Name) { $extruderObjects = $extruderObjects | Where-Object { $_ -like $Name } } if (-not $extruderObjects) { Write-Verbose "No extruders found matching the specified criteria." return } # Build query string $queryParts = $extruderObjects | ForEach-Object { [System.Uri]::EscapeDataString($_) } $endpoint = "printer/objects/query?" + ($queryParts -join '&') $response = Invoke-KlippyJsonRpc -Printer $printer -Method $endpoint -NoNormalize # Process results foreach ($extruderName in $extruderObjects) { $data = $response.status.$extruderName if ($data) { [PSCustomObject]@{ PSTypeName = 'KlippyCLI.Extruder' PrinterId = $printer.Id PrinterName = $printer.PrinterName Name = $extruderName Temperature = [math]::Round($data.temperature, 1) Target = $data.target Power = if ($null -ne $data.power) { [math]::Round($data.power * 100, 1) } else { $null } PressureAdvance = $data.pressure_advance SmoothTime = $data.smooth_time CanExtrude = $data.can_extrude } } } } catch { Write-Error "Failed to get extruders from '$($printer.PrinterName)': $_" } } } |