Connect your Zepp smartwatch to Home Assistant and track your health & fitness data in real-time! 📊
If you find this integration useful, please give it a star on GitHub! It really helps the project grow! ⭐
Zepp2Hass receives data from your Zepp smartwatch via a local webhook endpoint. When you configure the integration, it creates a unique webhook URL that accepts JSON payloads with all your health metrics.
Rate limiting is built-in to protect your Home Assistant instance: max 30 requests per 60 seconds per device.
Each webhook includes a minimalist web interface accessible via your browser, specifically designed for quick URL retrieval.
How to find your URL:
The integration creates multiple sensor types organized by category:
| Category | Sensors |
|---|---|
| Health | Heart Rate (last, resting, max), Body Temperature, Stress, Blood Oxygen |
| Activity | Steps, Calories, Fat Burning, Stands, Distance (all with goal targets) |
| Sleep | Sleep Score, Total Duration, Deep Sleep, Sleep Start/End Time |
| Workout | Training Load, Last Workout, Workout History, VO2 Max |
| Device | Battery, Screen Status/AOD/Brightness, Device Info, User Info |
| PAI | Weekly PAI score with daily PAI as attribute |
| Binary Sensors | Is Wearing, Is Moving, Is Sleeping |
After adding the integration, you can get your webhook URL:
Integration Interface - Go to Settings → Integrations → Zepp2Hass → Click on device name → Under "Device Info" click "Visit". This will take you to the web interface.
The URL format is:
http://YOUR_HOME_ASSISTANT_BASE_URL/api/webhook/WEBHOOK_ID
Advanced: You can change the Base URL at any time by going to Settings → Devices & Services → Zepp2Hass → Configure. The integration will automatically reload to apply the new URL.
To send data from your Zepp smartwatch to Home Assistant, you need to install the zepp2hass app on your watch and configure it:
Prerequisites: You need the Zepp app installed on your smartphone.
Search for "zepp2hass" and install it on your smartwatch
Configure the Webhook
Optionally, adjust the update interval (default: 1 minute)
Apply Settings on Your Watch
Tip: For most use cases, a 2-5 minute interval provides a good balance between data freshness and battery life.
Click to see supported devices
Battery low automation:
automation:
- alias: "Zepp Battery Low"
trigger:
- platform: numeric_state
entity_id: sensor.my_zepp_watch_battery
below: 20
action:
- service: notify.mobile_app_your_phone
data:
message: "🔋 Watch battery low: {{ states('sensor.my_zepp_watch_battery') }}%"
curl -X POST http://YOUR_HA_IP:8123/api/webhook/YOUR_WEBHOOK_ID \
-H "Content-Type: application/json" \
-d '{
"battery": {"current": 80},
"steps": {"current": 5000, "target": 10000},
"heart_rate": {"last": 72, "resting": 58},
"is_wearing": 1
}'
Note: Replace
YOUR_WEBHOOK_IDwith the actual webhook ID from your integration. You can find it by visiting the webhook URL in your browser (GET request) or checking Home Assistant logs.
Expected response:
{ "status": "ok" }
Click to expand Debug Mode instructions
How to help with debugging:
How to access and share logs:
Once the QR code is scanned, follow these steps to view the real-time logs:
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
This project is licensed under the MIT License - see the LICENSE file for details.
For support, please see SUPPORT.md.
Made with ❤️ for the Home Assistant community
⭐ Star this repo if you find it useful! ⭐
$ claude mcp add zepp2hass \
-- python -m otcore.mcp_server <graph>