Remote Access
Access the Bubbaloop dashboard from other machines on your network or over the internet.
Overview
The dashboard supports remote access via:
- HTTPS — Self-signed certificate for secure connections
- Single-port — Zenoh WebSocket proxied through dashboard port
- Multi-device — Access from laptops, phones, tablets
Quick Setup
On the Server (Robot/Jetson)
On the Client (Laptop/Phone)
Open in browser:
Accept the self-signed certificate warning.
HTTPS Configuration
Self-Signed Certificate
The dashboard automatically generates and uses a self-signed SSL certificate for HTTPS.
Benefits:
- Secure WebSocket connection required by browsers
- WebCodecs API requires secure context
- No certificate authority needed
Limitations:
- Browser shows security warning
- Must accept certificate manually
- Not suitable for public deployment
Accepting the Certificate
- Navigate to
https://<server-ip>:5173 - Browser shows "Your connection is not private"
- Click "Advanced" or "Show Details"
- Click "Proceed to \<ip> (unsafe)" or "Visit this website"
- Certificate is remembered for the session
Network Architecture
Single-Port Access
The Vite development server proxies WebSocket connections:
┌────────────────────────────────────────────────────────────┐
│ Server │
│ │
│ ┌──────────────┐ ┌──────────────────────────────────┐ │
│ │ Dashboard │ │ Zenoh Bridge │ │
│ │ :5173 │───▶│ :10000 (WebSocket) │ │
│ │ (Vite) │ │ │ │
│ └──────────────┘ └──────────────────────────────────┘ │
│ │ │
│ │ HTTPS :5173 │
└─────────┼───────────────────────────────────────────────────┘
│
│
┌─────▼─────┐
│ Client │
│ Browser │
└───────────┘
Benefit: Only one port (5173) needs to be accessible from the client.
Distributed Setup
Robot + Laptop Configuration
For accessing cameras from a laptop connected to a robot:
┌─────────────────────────────────────────────────────────────┐
│ Server (Robot) │
│ ┌────────────────┐ ┌──────────────────────────┐ │
│ │ cameras_node │──TCP───▶│ zenohd │ │
│ │ (-z :7447) │ :7447 │ - tcp :7447 (router) │ │
│ └────────────────┘ │ - ws :10000 (API) │ │
│ ┌────────────────┐ └───────────┬──────────────┘ │
│ │ weather_node │──TCP────────────────┘ │
│ └────────────────┘ │ │
└─────────────────────────────────────────┼───────────────────┘
│ TCP :7447
┌─────────────────────────────────────────┼───────────────────┐
│ Client (Laptop) │ │
│ ┌─────────────▼──────────────┐ │
│ ┌───────────────┐ WS │ zenohd │ │
│ │ Dashboard │◀───────│ - connects to server:7447 │ │
│ │ Browser │ :10000 │ - ws :10000 (local) │ │
│ └───────────────┘ └────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Server Setup
On the robot:
zenoh.json5:
{
mode: "router",
listen: {
endpoints: ["tcp/0.0.0.0:7447"],
},
plugins: {
remote_api: {
websocket_port: 10000,
},
},
}
Client Setup
On the laptop:
# Configure server endpoint (one-time)
pixi run bubbaloop
# Use /server command to set robot IP
# Start local router
pixi run zenohd-client
# Start dashboard
pixi run dashboard
Firewall Configuration
Required Ports
| Port | Protocol | Direction | Purpose |
|---|---|---|---|
| 5173 | TCP | Inbound | Dashboard HTTPS |
| 7447 | TCP | Inbound | Zenoh router (if distributed) |
| 10000 | TCP | Inbound | WebSocket (if direct access) |
UFW (Ubuntu)
# Dashboard only (single port)
sudo ufw allow 5173/tcp
# Distributed setup
sudo ufw allow 7447/tcp
sudo ufw allow 10000/tcp
iptables
# Dashboard only
sudo iptables -A INPUT -p tcp --dport 5173 -j ACCEPT
# Distributed setup
sudo iptables -A INPUT -p tcp --dport 7447 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
Mobile Access
Browser Requirements
Mobile browsers that support WebCodecs:
| Browser | Platform | Support |
|---|---|---|
| Chrome | Android | Yes |
| Safari | iOS 16.4+ | Yes |
| Edge | Android | Yes |
Mobile Considerations
- Use WiFi for better performance
- Sub-streams recommended for lower bandwidth
- Dashboard is responsive for mobile screens
- Accept certificate on first visit
Security Considerations
Local Network
For local network access:
- Self-signed certificates are acceptable
- Ensure WiFi network is trusted
- Use strong router password
Internet Access
For internet access (not recommended without additional security):
- Use a VPN instead of exposing ports
- Consider reverse proxy with proper certificates
- Implement authentication (not currently built-in)
Best Practices
- Use VPN for remote access over internet
- Limit exposure — Only open necessary ports
- Update regularly — Keep software up to date
- Monitor access — Check logs for unauthorized access
Troubleshooting
Can't connect remotely
- Verify server IP is correct
- Check firewall allows port 5173
- Ensure server is on same network or routable
Certificate error
- This is expected for self-signed certificates
- Click through the browser warning
- Certificate must be accepted on each browser/device
WebSocket disconnected
- Check Zenoh bridge is running
- Verify proxy configuration in Vite
- Check browser console for errors
Slow performance
- Check network bandwidth
- Use sub-streams for cameras
- Reduce number of simultaneous streams
Next Steps
- Dashboard Overview — Dashboard features
- Configuration — Zenoh configuration
- Troubleshooting — Common issues