functions/public/Get-KlippyBedMesh.ps1
|
function Get-KlippyBedMesh { <# .SYNOPSIS Gets bed mesh data from a Klipper printer. .DESCRIPTION Retrieves the bed mesh profiles and current mesh data including probed points, mesh matrix, and profile information. .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 ProfileName Get a specific mesh profile by name. .PARAMETER ListProfiles List available mesh profile names only. .EXAMPLE Get-KlippyBedMesh Gets the current bed mesh from the default printer. .EXAMPLE Get-KlippyBedMesh -PrinterName "voronv2" -ListProfiles Lists available mesh profiles. .EXAMPLE Get-KlippyBedMesh -ProfileName "default" Gets the "default" mesh profile data. .OUTPUTS KlippyCLI.BedMesh object. #> [CmdletBinding(DefaultParameterSetName = 'Default')] [OutputType([PSCustomObject])] param( [Parameter(ParameterSetName = 'ById')] [Parameter(ParameterSetName = 'ListById')] [ValidateNotNullOrEmpty()] [string]$Id, [Parameter(ParameterSetName = 'ByName', Position = 0)] [Parameter(ParameterSetName = 'ListByName')] [ValidateNotNullOrEmpty()] [string]$PrinterName, [Parameter(ParameterSetName = 'ByObject', ValueFromPipeline = $true)] [Parameter(ParameterSetName = 'ListByObject', ValueFromPipeline = $true)] [PSCustomObject]$InputObject, [Parameter()] [string]$ProfileName, [Parameter(ParameterSetName = 'ListById')] [Parameter(ParameterSetName = 'ListByName')] [Parameter(ParameterSetName = 'ListByObject')] [switch]$ListProfiles ) process { # Resolve printer $resolveParams = @{} if ($Id) { $resolveParams['Id'] = $Id } elseif ($PrinterName) { $resolveParams['PrinterName'] = $PrinterName } elseif ($InputObject) { $resolveParams['InputObject'] = $InputObject } $printer = Resolve-KlippyPrinterTarget @resolveParams try { $endpoint = "printer/objects/query?bed_mesh" $response = Invoke-KlippyJsonRpc -Printer $printer -Method $endpoint -NoNormalize $data = $response.status.bed_mesh if (-not $data) { Write-Warning "Bed mesh data not available. Is bed_mesh configured?" return } # List profiles only if ($ListProfiles) { $profiles = @() if ($data.profiles) { $profiles = $data.profiles.PSObject.Properties.Name } return [PSCustomObject]@{ PSTypeName = 'KlippyCLI.BedMeshProfiles' PrinterId = $printer.Id PrinterName = $printer.PrinterName Profiles = $profiles CurrentProfile = $data.profile_name } } # Get specific profile or current mesh $meshData = $data if ($ProfileName -and $data.profiles.$ProfileName) { $meshData = $data.profiles.$ProfileName } $result = [PSCustomObject]@{ PSTypeName = 'KlippyCLI.BedMesh' PrinterId = $printer.Id PrinterName = $printer.PrinterName ProfileName = $data.profile_name MeshMin = $data.mesh_min MeshMax = $data.mesh_max ProbedMatrix = $data.probed_matrix MeshMatrix = $data.mesh_matrix } # Add profile-specific data if available if ($meshData.points) { $result | Add-Member -NotePropertyName 'Points' -NotePropertyValue $meshData.points -Force } $result } catch { Write-Error "Failed to get bed mesh from '$($printer.PrinterName)': $_" } } } |