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, audio is downloaded to memory first (fine for short TTS).
- 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 src
The 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.
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_shutdown
automation: - 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: 30
automation: - 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.exe
pytest 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