A Windows client that emulates an ESPHome device for seamless Home Assistant integration. Enables voice assistant, system monitoring, remote control, and more.
🐍 Built with Python - This project is developed entirely in Python, making it easy to migrate to macOS or Linux. Most of the code is cross-platform, only a few Windows-specific modules (like
pycawfor audio control) need to be replaced with platform-specific alternatives.
📝 Early Stage - This is still an early version. If you have feature requests, please submit them in the Issues. I will evaluate each request based on exe size impact and system performance, and gradually add features.
- Wake Word Detection: Multiple wake words supported (Okay Nabu, Hey Jarvis, Alexa, etc.)
- Floating Mic Button: Push-to-talk with draggable floating button
- Global Hotkey: Set keyboard shortcuts to trigger voice input (e.g., Ctrl+Alt+V)
- Voice Recognition: Process voice commands through Home Assistant's Assist
- TTS Playback: Play voice responses from Home Assistant
- CPU Usage (%)
- Memory Usage (%)
- Memory Free (GB)
- Disk Usage (%) - per drive
- Disk Free (GB) - per drive
- Battery Level/Status (if available)
- IP Address - Local IPv4 address
- Boot Time - System boot timestamp
- Uptime (hours)
- Process Count
- Network Upload (GB) - Total uploaded data
- Network Download (GB) - Total downloaded data
- Shutdown - Shutdown the computer
- Restart - Restart the computer
- Screenshot - Take a screenshot
Call these services from Home Assistant:
-
notify - Display Windows toast notification
service: esphome.my_pc_notify data: title: "Title" message: "Message content"
-
notify_with_image - Display notification with image
service: esphome.my_pc_notify_with_image data: title: "Motion Detected" message: "Front door camera" image_url: "http://your-ha:8123/api/camera_proxy/camera.front_door"
-
run_command - Execute any CMD command
service: esphome.my_pc_run_command data: command: "notepad.exe"
-
open_url - Open URL in browser
service: esphome.my_pc_open_url data: url: "https://www.home-assistant.io"
-
set_volume - Set system volume (0-100)
service: esphome.my_pc_set_volume data: volume: 50
- media_play_pause - Play/Pause
- media_next - Next track
- media_previous - Previous track
- set_voice_input_hotkey - Set global hotkey for voice input
service: esphome.my_pc_set_voice_input_hotkey data: hotkey: "ctrl+alt+v"
The client exposes a media player entity that can:
- Play TTS (Text-to-Speech) announcements
- Play audio from URLs
- Control playback (play/pause/stop)
Use Home Assistant's media_player.play_media or tts.speak service to play audio.
Optional: Install VLC for streaming support
For long audio (music), install VLC media player to enable true streaming playback. Without VLC, remote audio is downloaded to a temporary file before playback.
- Download
HomeAssistantWindows.exefrom Releases - Run the executable
- The client will appear in your system tray
# Clone repository
git clone https://github.com/ha-china/ha-windows.git
cd ha-windows
# Install dependencies
pip install -r requirements.txt
# Run
python -m srcThe client is automatically discovered by Home Assistant via mDNS:
- Go to Settings > Devices & Services
- You should see a new ESPHome device discovered
- Click Configure to add it
Or add manually:
- Go to Settings > Devices & Services > Add Integration
- Search for ESPHome
- Enter the device IP and port (default: 6053)
- Left-click: Toggle floating mic button visibility
- Right-click: Show menu (Show/Hide Icon, Status, Quit)
- Press and hold: Start voice input
- Release: Stop voice input
- Drag: Move button to any position
- Button turns red when listening
- Set a keyboard shortcut to quickly trigger voice input
- Press the hotkey to start voice recognition
- Useful for hands-free voice control
- Configure using the
set_voice_input_hotkeyservice
Say the wake word (default: "Okay Nabu") to activate voice assistant, press the floating mic button, or use your configured global hotkey for push-to-talk.
Available wake words:
- Okay Nabu (default)
- Hey Jarvis
- Alexa
- Hey Mycroft
- Hey Home Assistant
- Okay Computer
- Hey Luna
Configure wake word in Home Assistant's ESPHome device settings.
You can place custom wake word models in the user data directory:
Windows: C:\Users\<username>\AppData\Local\HomeAssistantWindows\WakeWordModels\
MicroWakeWord\
OpenWakeWord\
Current behavior:
MicroWakeWordis used for MicroWakeWord-style modelsOpenWakeWordis used for OpenWakeWord-style models- Invalid or corrupted models are skipped automatically and do not crash the app
- If a custom model ID matches a built-in model ID, the custom one overrides the built-in one
WakeWordModels/
MicroWakeWord/
my_wakeword.json
my_wakeword.tflite
WakeWordModels/
OpenWakeWord/
alexa_v0.1.json
alexa_v0.1.tflite
Notes:
- The JSON filename without
.jsonbecomes the model ID - The
modelfield must point to a file in the same directory - For examples, see
src/wakewords/okay_nabu.jsonandsrc/wakewords/openWakeWord/alexa_v0.1.json
automation:
- alias: "PC Notification Test"
trigger:
- platform: state
entity_id: binary_sensor.front_door
to: "on"
action:
- service: esphome.my_pc_notify
data:
title: "Doorbell"
message: "Someone is at the door"automation:
- alias: "Front Door Motion Alert"
trigger:
- platform: state
entity_id: binary_sensor.front_door_motion
to: "on"
action:
- service: esphome.my_pc_notify_with_image
data:
title: "Motion Detected"
message: "Front door camera"
image_url: "http://homeassistant.local:8123/api/camera_proxy/camera.front_door"automation:
- alias: "Auto Shutdown at Night"
trigger:
- platform: time
at: "23:00:00"
action:
- service: button.press
target:
entity_id: button.my_pc_shutdownautomation:
- alias: "Open Notepad"
trigger:
- platform: state
entity_id: input_boolean.open_notepad
to: "on"
action:
- service: esphome.my_pc_run_command
data:
command: "notepad.exe"automation:
- alias: "Lower Volume at Night"
trigger:
- platform: time
at: "22:00:00"
action:
- service: esphome.my_pc_set_volume
data:
volume: 30automation:
- alias: "Set Voice Hotkey on Startup"
trigger:
- platform: homeassistant
event: start
action:
- service: esphome.my_pc_set_voice_input_hotkey
data:
hotkey: "ctrl+alt+v"# Install dependencies
pip install -r requirements.txt
# Build executable
python setup.py --build
# Output in dist/HomeAssistantWindows.exepytest tests/- Windows 10/11
- Python 3.12+ (if running from source)
- Microphone (for voice assistant)
- Network connection to Home Assistant
Contributions are welcome! Feel free to submit a Pull Request.
MIT License
- linux-voice-assistant - Voice assistant protocol implementation reference
- ESPHome - API protocol and Home Assistant integration
- Home Assistant - Smart home platform