This document provides solutions to common issues with the RoboVac integration.
DPS (Data Point Specification) codes are numeric identifiers used in Tuya-based devices like Eufy RoboVacs to control various functions and retrieve device states. Each DPS code maps to a specific function or feature of your vacuum, such as:
- Battery level
- Cleaning mode
- Fan speed
- Error status
- Cleaning area
- Cleaning time
In the RoboVac integration, these codes are used to communicate with your vacuum via the Tuya local API. Think of them as the language that allows Home Assistant to talk to your vacuum.
Finding the correct DPS codes for your vacuum model is essential for adding support for new devices. Here are methods to discover these codes:
The repository includes a test that analyzes DPS codes for all supported models:
- Navigate to the
tests/test_vacuum/test_model_dps_analysis.pyfile - Run this test to generate a report showing:
- Which models use default codes
- Which models use custom codes
- What specific custom codes are used by each model
This can help you understand patterns in how different models use DPS codes.
-
Enable debug logging for the RoboVac component in your Home Assistant configuration:
logger: default: info logs: custom_components.robovac: debug
-
Restart Home Assistant and monitor the logs while operating your vacuum
-
Look for log entries showing
"Updating entity values from data points: ..."which will display all the DPS codes and values being reported by your device
For more advanced users:
- Use a tool like Wireshark to capture traffic between your Home Assistant instance and your vacuum
- Filter for traffic to/from your vacuum's IP address
- Look for Tuya protocol messages, which contain DPS code information in their payload
- Decode these messages to identify which DPS codes your vacuum is using and their functions
To add support for a new device, you'll need to:
- Determine your model code: This is typically the first 5 characters of the full model number
- Identify required DPS codes: Using the methods above, determine which DPS codes your vacuum uses
- Create a model-specific class: If your vacuum uses non-default DPS codes, you'll need to create a model-specific class in the
custom_components/robovac/vacuums/directory - Map commands to DPS codes: In your model class, create mappings between RoboVac commands and the DPS codes your vacuum uses
Here's a simplified example of how a model-specific class looks:
from custom_components.robovac.vacuums.base import RobovacModelDetails, RoboVacEntityFeature, RobovacCommand
class YourModel(RobovacModelDetails):
"""Implementation for Your Specific Model."""
# Define which Home Assistant features this vacuum supports
homeassistant_features = (
# Add relevant features here
)
# Define which RoboVac features this vacuum supports
robovac_features = (
# Add relevant features here
)
# Map commands to DPS codes - override any that differ from defaults
dps_codes = {
"BATTERY_LEVEL": "104", # Example - use actual codes from your device
"STATUS": "15",
# Add other codes as needed
}
# Define available commands
commands = {
RobovacCommand.START_PAUSE: True,
RobovacCommand.BATTERY: True,
# Add other commands as appropriate
}- Test incrementally: Add support for basic functions first (start/stop, battery), then add more complex features
- Compare with similar models: Look at implementations for similar vacuum models for guidance
- Use debug logging: Keep debug logging enabled during development to monitor communication with the device
- Test systematically: Create tests for your implementation similar to those for existing models
- Document your findings: Once you've successfully added support, document any unique aspects of your model to help others
- Device not responding: Verify your IP address and access token are correct
- Command not working: Check if the DPS code mapping is correct for that specific command
- Values not updating: Ensure the DPS code for status information is correctly mapped
This section will be expanded in the future.
This section will be expanded in the future.