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
- Aufgabenplaner öffnen
- Win + R → taskschd.msc → Enter
- Neue Aufgabe erstellen
- Im rechten Bereich auf „Aufgabe erstellen…“ klicken (nicht „Einfache Aufgabe“).
- 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
- Trigger
- „Neu…“ → Beim Systemstart auswählen
- Optional: „Verzögerung: 30 Sekunden“, damit der Listener startet, wenn das System schon Netzverbindung hat.
- 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
- Bedingungen
- „Nur starten, wenn Computer im Netzbetrieb ist“ deaktivieren (optional).
- Sonst bleibt der Task auf Laptops im Akkubetrieb inaktiv.
- Einstellungen
- Haken bei „Aufgabe bei Bedarf ausführen“
- „Falls Aufgabe bereits ausgeführt wird: Keine neue Instanz starten“
- 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.
