A custom Lovelace card that provides real-time 3D visualization of the Reachy Mini robot. The card connects directly to the Reachy Mini daemon via WebSocket to display the robot's current state (head pose, antenna positions, body rotation) in an interactive 3D view.
- Real-time 3D visualization of Reachy Mini robot at 20Hz
- WebSocket connection with HTTP polling fallback
- Interactive camera controls (rotate, zoom)
- Connection status indicator (connected/reconnecting/offline)
- Local kinematics calculation for passive joints
- Visual configuration editor
- Configurable appearance and behavior
- HACS compatible for easy installation
- Home Assistant 2023.1.0 or newer
- Reachy Mini daemon running and accessible from your Home Assistant instance
- HACS (Home Assistant Community Store) for easy installation
Due to limitations with HACS plugin structure, automatic installation may have issues:
-
Resource path incorrect: HACS may add the resource as
/hacsfiles/ha-reachy-mini/ha-reachy-mini-card.jsinstead of/hacsfiles/ha-reachy-mini/dist/ha-reachy-mini-card.js- Fix: Manually edit the resource URL in Lovelace configuration to include
/dist/
- Fix: Manually edit the resource URL in Lovelace configuration to include
-
Assets not downloaded: HACS may only download the JS file without the
dist/assets/folder containing URDF and mesh files- Fix: Manually download the
dist/folder from GitHub and copy toconfig/www/community/ha-reachy-mini/
- Fix: Manually download the
I am working on improving HACS compatibility.
- Download the
dist/folder from this repository - Copy to
config/www/community/ha-reachy-mini/:config/www/community/ha-reachy-mini/ └── dist/ ├── ha-reachy-mini-card.js └── assets/ └── robot-3d/ ├── reachy-mini.urdf └── meshes/ └── *.stl - Add the resource in your dashboard resources:
resources:
- url: /hacsfiles/ha-reachy-mini/dist/ha-reachy-mini-card.js
type: module- Restart Home Assistant and clear your browser cache
Add the card to your dashboard using the UI editor or YAML:
type: custom:ha-reachy-mini-card
daemon_host: 192.168.1.100
daemon_port: 8000type: custom:ha-reachy-mini-card
daemon_host: 192.168.1.100
daemon_port: 8000
height: 400
background_color: "#f5f5f5"
camera_distance: 0.5
enable_passive_joints: true
enable_grid: true| Option | Type | Default | Description |
|---|---|---|---|
daemon_host |
string | localhost |
Hostname or IP address of the Reachy Mini daemon |
daemon_port |
number | 8000 |
Port of the Reachy Mini daemon |
height |
number | 400 |
Card height in pixels |
background_color |
string | #f5f5f5 |
Background color of the 3D view |
camera_distance |
number | 0.5 |
Initial camera distance (0.2-1.5) |
enable_passive_joints |
boolean | true |
Show Stewart platform passive joints |
enable_grid |
boolean | true |
Show floor grid |
| Status | Color | Description |
|---|---|---|
| Connected | 🟢 Green | Successfully connected, receiving data |
| Reconnecting | 🟠 Orange | Connection lost, attempting to reconnect |
| Offline | 🔴 Red | Unable to connect after multiple attempts |
The card connects to the Reachy Mini daemon:
Primary (WebSocket):
ws://{host}:{port}/api/state/ws/full?frequency=20&with_head_pose=true&use_pose_matrix=true&with_head_joints=true&with_antenna_positions=true&with_passive_joints=true
Fallback (HTTP polling):
http://{host}:{port}/api/state/full?with_control_mode=true&with_head_joints=true&with_body_yaw=true&with_antenna_positions=true
- Clear browser cache (Ctrl+Shift+R)
- Check browser console for errors (F12)
- Verify daemon is running:
curl http://<host>:<port>/api/state/full - Check firewall settings
- Check browser console for 404 errors
- Ensure
dist/assets/folder is present
MIT License