examples/Power-Device-Control.ps1
|
<# .SYNOPSIS Power device control examples. .DESCRIPTION Demonstrates how to monitor and control power devices (smart plugs, relays, GPIO pins) configured in Moonraker. #> Import-Module KlippyCLI #region List Power Devices # Get all configured power devices Get-KlippyPowerDevice | Format-Table DeviceName, Type, Status, LockedWhilePrinting # Get a specific device Get-KlippyPowerDevice -DeviceName "printer_power" # Check if printer is on $printerPower = Get-KlippyPowerDevice -DeviceName "printer_power" if ($printerPower.IsOn) { Write-Host "Printer is ON" -ForegroundColor Green } else { Write-Host "Printer is OFF" -ForegroundColor Red } #endregion #region Control Power Devices # Turn on a device Set-KlippyPowerDevice -DeviceName "printer_power" -Action On # Turn off a device Set-KlippyPowerDevice -DeviceName "printer_power" -Action Off # Toggle a device Set-KlippyPowerDevice -DeviceName "led_strip" -Action Toggle # Control via pipeline Get-KlippyPowerDevice -DeviceName "enclosure_fan" | Set-KlippyPowerDevice -Action On #endregion #region Automated Power Sequences function Start-PrinterPowerOn { <# .SYNOPSIS Power on sequence for printer startup #> param( [string]$PrinterName ) Write-Host "Starting power-on sequence..." -ForegroundColor Cyan # Turn on main power Set-KlippyPowerDevice -DeviceName "printer_power" -Action On -PrinterName $PrinterName Write-Host " Main power: ON" # Wait for Klipper to start Start-Sleep -Seconds 10 Wait-KlippyReady -PrinterName $PrinterName -Timeout 120 # Turn on enclosure lights Set-KlippyPowerDevice -DeviceName "led_strip" -Action On -PrinterName $PrinterName Write-Host " LED strip: ON" Write-Host "Printer is ready!" -ForegroundColor Green } function Start-PrinterPowerOff { <# .SYNOPSIS Safe power off sequence #> param( [string]$PrinterName ) # Check if printing $status = Get-KlippyStatus -PrinterName $PrinterName if ($status.State -eq "printing") { Write-Warning "Cannot power off - print in progress!" return } Write-Host "Starting power-off sequence..." -ForegroundColor Cyan # Cool down heaters first Invoke-KlippyGcode -Gcode "M104 S0", "M140 S0" -PrinterName $PrinterName Write-Host " Heaters: OFF" # Turn off LEDs Set-KlippyPowerDevice -DeviceName "led_strip" -Action Off -PrinterName $PrinterName Write-Host " LED strip: OFF" # Park toolhead Invoke-KlippyGcode -Gcode "G28 X Y", "G1 X0 Y200 F3000" -PrinterName $PrinterName # Wait a moment then power off Start-Sleep -Seconds 5 Set-KlippyPowerDevice -DeviceName "printer_power" -Action Off -PrinterName $PrinterName Write-Host " Main power: OFF" Write-Host "Printer powered off safely" -ForegroundColor Green } # Usage Start-PrinterPowerOn # ... do printing ... Start-PrinterPowerOff #endregion #region Print-Triggered Power Control function Invoke-PrintWithPowerControl { param( [string]$FileName ) # Power on if needed $power = Get-KlippyPowerDevice -DeviceName "printer_power" if (-not $power.IsOn) { Write-Host "Powering on printer..." Set-KlippyPowerDevice -DeviceName "printer_power" -Action On Start-Sleep -Seconds 15 Wait-KlippyReady -Timeout 120 } # Turn on enclosure fan Set-KlippyPowerDevice -DeviceName "enclosure_fan" -Action On # Start print Start-KlippyPrint -FileName $FileName # Wait for print to complete Wait-KlippyPrintFinished # Cool down and power off Write-Host "Print complete, cooling down..." Start-Sleep -Seconds 300 # Wait 5 minutes to cool # Turn off enclosure fan Set-KlippyPowerDevice -DeviceName "enclosure_fan" -Action Off # Optionally power off printer # Set-KlippyPowerDevice -DeviceName "printer_power" -Action Off Write-Host "Done!" -ForegroundColor Green } # Usage Invoke-PrintWithPowerControl -FileName "overnight_print.gcode" #endregion #region Multi-Printer Power Status # Check power status across all printers Get-KlippyPrinter | ForEach-Object { $printerName = $_.PrinterName Write-Host "`n$printerName Power Devices:" -ForegroundColor Cyan Get-KlippyPowerDevice -PrinterName $printerName | Format-Table DeviceName, Status, Type } #endregion |