Windows-PC per Home Assistant herunterfahren

- Veröffentlicht unter Makerspace von

Hinweis: Der Beitrag wurde von KI entworfen und manuell nachbearbeitet. Er basiert auf einem real eingesetzten System; einige Angaben wurden anonymisiert.


Projektziel

Ein Windows-PC sollte sich direkt aus Home Assistant herunterfahren lassen – ohne Zusatztools und ohne komplizierte SSH-Konfiguration. Da der integrierte SSH-Server unter Windows schnell mühsam wird (Rechte, Firewall, Schlüsselverwaltung), entstand eine einfachere Lösung: Ein PowerShell-Skript, das auf simple HTTP-Aufrufe reagiert.


Funktionsprinzip

Ein kleiner Listener lauscht auf Port 8123 und führt bei bestimmten URLs Aktionen aus:

  • /poweroff/ → fährt den PC nach 30 Sekunden herunter
  • /cancelpoweroff/ → bricht den Countdown wieder ab

Home Assistant ruft diese URLs über den integrierten rest_command-Dienst auf. Das funktioniert zuverlässig, ohne SSH-Login oder externe Tools.


Das Listener-Skript

Datei C:\tools\shutdown-listener.ps1 (Beispielpfad):

$prefixes = @(
  "http://+:8123/poweroff/",
  "http://+:8123/cancelpoweroff/"
)

$listener = New-Object System.Net.HttpListener
foreach ($p in $prefixes) { $listener.Prefixes.Add($p) }
$listener.Start()
Write-Host "Listening on $($prefixes -join ', ')"

while ($true) {
    $ctx = $listener.GetContext()
    $path = $ctx.Request.Url.AbsolutePath.ToLower()

    if ($path -eq "/poweroff/") {
        shutdown /s /t 30 /c "Herunterfahren durch Home Assistant"
    }
    elseif ($path -eq "/cancelpoweroff/") {
        shutdown /a
    }

    $ctx.Response.StatusCode = 200
    $ctx.Response.Close()
}

Firewallregel anlegen

Damit Home Assistant darauf zugreifen kann:

New-NetFirewallRule -DisplayName "HA Poweroff Listener" -Direction Inbound -Protocol TCP -LocalPort 8123 -Action Allow

Den Task im Windows-Aufgabenplaner anlegen

Damit das Skript dauerhaft im Hintergrund läuft, auch nach einem Neustart, empfiehlt sich die Ausführung über den Aufgabenplaner (Task Scheduler).

Schritt-für-Schritt-Anleitung

  1. Aufgabenplaner öffnen
  • Win + R → taskschd.msc → Enter
  1. Neue Aufgabe erstellen
  • Im rechten Bereich auf „Aufgabe erstellen…“ klicken (nicht „Einfache Aufgabe“).
  1. Allgemein
  • Name: Poweroff Listener
  • Beschreibung: Lauscht auf Port 8123 für Home Assistant
  • Benutzerkonto: Administrator oder ein Konto mit lokalen Adminrechten
  • Haken setzen bei „Mit höchsten Privilegien ausführen“
  • „Konfigurieren für“ → Windows 10 oder höher
  1. Trigger
  • „Neu…“ → Beim Systemstart auswählen
  • Optional: „Verzögerung: 30 Sekunden“, damit der Listener startet, wenn das System schon Netzverbindung hat.
  1. Aktionen
  • „Neu…“ →
  • Aktion: Programm starten
  • Programm/Skript: powershell.exe
  • Argumente hinzufügen: -ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\tools\shutdown-listener.ps1"
  • Starten in (optional): C:\tools
  1. Bedingungen
  • „Nur starten, wenn Computer im Netzbetrieb ist“ deaktivieren (optional).
  • Sonst bleibt der Task auf Laptops im Akkubetrieb inaktiv.
  1. Einstellungen
  • Haken bei „Aufgabe bei Bedarf ausführen“
  • „Falls Aufgabe bereits ausgeführt wird: Keine neue Instanz starten“
  1. Speichern und testen
  • Nach dem Speichern Rechtsklick → Ausführen
  • In der PowerShell sollte Listening on http://+:8123/poweroff/ ... erscheinen.

Kontrolle

Im Taskplaner → Verlauf aktivieren, dann sieht man beim nächsten Systemstart, ob der Listener sauber gestartet wurde. Alternativ kann man ihn über die PowerShell beenden mit:

Stop-Process -Name "powershell" -CommandLine "shutdown-listener.ps1"

REST-Commands in Home Assistant

Eintrag in configuration.yaml:

rest_command:
  poweroff_pc_remote:
    url: "http://192.168.0.50:8123/poweroff/"
  cancel_poweroff_pc_remote:
    url: "http://192.168.0.50:8123/cancelpoweroff/"

Home-Assistant-Scripts

pc_remote_herunterfahren:
  alias: PC herunterfahren
  sequence:
    - action: rest_command.poweroff_pc_remote
pc_remote_herunterfahren_abbrechen:
  alias: Herunterfahren abbrechen
  sequence:
    - action: rest_command.cancel_poweroff_pc_remote

Dashboard-Buttons

type: horizontal-stack
cards:
  - type: button
    name: PC ausschalten
    icon: mdi:laptop-off
    tap_action:
      action: call-service
      service: script.pc_remote_herunterfahren
  - type: button
    name: Shutdown abbrechen
    icon: mdi:cancel
    tap_action:
      action: call-service
      service: script.pc_remote_herunterfahren_abbrechen

Erweiterungen

  • Authentifizierung: Mit Secret-Key im Querystring (z. B. ?key=meinpasswort) oder via JSON-Body.
  • Port oder Pfad anpassen: z. B. auf Port 8181 oder /api/poweroff/.
  • Alternative Aktionen: Statt shutdown /s auch restart, hibernate oder logoff möglich.
  • In Kombination mit ping und WakeOnLan sind auch Statusabfrage und Einschalten möglich

Fazit

Mit diesem kleinen PowerShell-Listener und einer Aufgabe im Windows-Aufgabenplaner wird der PC aus Home Assistant heraus steuerbar – ganz ohne SSH oder Zusatztools. Der Listener startet automatisch beim Hochfahren, reagiert sofort auf REST-Aufrufe und bleibt unauffällig im Hintergrund aktiv.

Einfach, robust, wartungsarm – genau so soll Smart Home sein.