This guide helps you troubleshoot common issues with your DIY Thread Border Router.
Symptoms: task flash-esp32h2 fails with connection errors.
Solutions:
- Check physical connections between Raspberry Pi and ESP32-H2
- Verify the correct port is being used (
/dev/ttyUSB0or/dev/ttyACM0) - Ensure you have permissions to access the serial port:
sudo usermod -a -G dialout $USER # Log out and log back in for changes to take effect
- Try putting the ESP32-H2 into download mode manually:
- Hold the BOOT button
- Press and release the RST button
- Release the BOOT button
Symptoms: task flash-esp32h2 starts but fails during flashing.
Solutions:
- Try a different USB cable (some cables are charge-only)
- Update esptool.py:
pip install --upgrade esptool - Try a slower baud rate:
python3 -m esptool --chip esp32h2 --port /dev/ttyUSB0 --baud 115200 \ write_flash 0x0 ./firmware/binaries/ot-rcp-esp32h2.bin
Symptoms: task start fails or some containers are not running.
Solutions:
- Check logs for specific errors:
docker-compose logs - Ensure Docker is running:
sudo systemctl status docker - Check if there are port conflicts:
sudo lsof -i :80 sudo lsof -i :3000
- Try pulling the images manually:
docker-compose pull
- Restart Docker:
sudo systemctl restart docker
Symptoms: docker-compose ps shows a container constantly restarting.
Solutions:
- Check specific container logs:
docker-compose logs <service-name> - Verify configuration files for that service
- Check system resources:
htop(install withsudo apt install htopif needed) - Increase Docker logging for detailed output:
docker-compose logs --tail=100 <service-name>
Symptoms: "Form" button in the web interface fails to create a network.
Solutions:
- Check OTBR logs:
docker-compose logs otbr - Verify ESP32-H2 connection:
Should show "disabled" (ready to form a network)
docker-compose exec otbr ot-ctl > state
- Reset the OTBR container:
docker-compose restart otbr - Check that the ESP32-H2 firmware is correctly flashed
Symptoms: Thread devices cannot connect to your network.
Solutions:
- Verify network is operating:
docker-compose exec otbr ot-ctl state - Check if the network is at capacity (too many router devices)
- Ensure devices are within radio range
- Verify commissioning credentials are correct
- Try resetting the device to factory defaults
Symptoms: Unable to access the OTBR web interface at http://<raspberry-pi-ip>:80.
Solutions:
- Verify OTBR container is running:
docker-compose ps otbr - Check if another service is using port 80:
sudo lsof -i :80
- Verify network connectivity between your computer and Raspberry Pi
- Check OTBR logs for errors:
docker-compose logs otbr - Try restarting the OTBR service:
docker-compose restart otbr
Symptoms: Grafana dashboards show "No data" or query errors.
Solutions:
The RST (reset) pin connection mentioned in earlier versions of the documentation is not required for normal operation:
- Modern ESP32-H2 boards handle automatic reset during flashing via the USB connection
- The esptool.py utility can typically manage the reset sequence without a dedicated GPIO connection
If you're experiencing issues with automatic reset during flashing:
-
Try using the physical reset button on the ESP32-H2 board (if available) right as the flashing begins
-
Try a different USB cable or port
-
Only as a last resort, connect the RST pin to GPIO 18 (Pin 12) on the Raspberry Pi
-
Check Prometheus is running:
docker-compose ps prometheus -
Verify Prometheus can scrape targets:
http://<raspberry-pi-ip>:9090/targets -
Check Prometheus logs:
docker-compose logs prometheus -
Verify OTBR metrics endpoint is accessible:
curl http://localhost:8080/metrics
-
Restart the monitoring stack:
docker-compose restart prometheus grafana
Symptoms: System is slow, unresponsive, or services crash randomly.
Solutions:
- Check system resources:
htop - Monitor temperature:
vcgencmd measure_temp - Ensure adequate cooling for your Raspberry Pi
- Check SD card health:
sudo apt install smartmontools sudo smartctl -a /dev/mmcblk0
- Consider using a higher quality power supply (3A+ recommended)
Symptoms: Intermittent connection to the Raspberry Pi.
Solutions:
- Use Ethernet instead of Wi-Fi if possible
- If using Wi-Fi, check signal strength:
iwconfig wlan0 - Consider setting a static IP address for the Raspberry Pi
- Restart networking:
sudo systemctl restart networking
If you're still experiencing issues:
- Collect logs for all services:
docker-compose logs > all-logs.txt - Check system logs:
sudo journalctl -xe > system-logs.txt - Create a detailed description of your issue including:
- Hardware setup details
- Steps to reproduce the problem
- Error messages and logs
- Setup Guide - Revisit setup instructions
- Configuration Guide - Check configuration settings
- Operation Guide - Review operating procedures This guide helps you troubleshoot common issues with your DIY Thread Border Router.
Symptoms: task flash-esp32h2 fails with connection errors.
Solutions:
- Check physical connections:
ls -l /dev/ttyUSB* - Ensure you have the correct permissions:
sudo usermod -a -G dialout $USER # Log out and log back in for changes to take effect
- Try entering bootloader mode manually:
- Hold down the BOOT button on the ESP32-H2
- Press and release the RESET button
- Release the BOOT button
Symptoms: Flashing completes but the device doesn't work correctly.
Solutions:
- Check you're using the correct firmware version:
task download-esp32h2-firmware
- Try a slower baud rate in
Taskfile.yml:- Change
--baud 460800to--baud 115200
- Change
Symptoms: task start fails to start containers.
Solutions:
- Check Docker service is running:
sudo systemctl status docker
- Verify Docker Compose installation:
docker-compose --version
- Check logs for specific errors:
docker-compose logs
Symptoms: OTBR container can't access the ESP32-H2 device.
Solutions:
- Check the device path in
docker-compose.ymlmatches your actual device:ls -l /dev/ttyUSB* - Make sure the device is properly mapped in the container:
docker exec -it otbr ls -l /dev/ttyUSB0
Symptoms: The "Form" or "Join" actions fail in the web interface.
Solutions:
- Check if the RCP is operational:
task network-scan
- Restart the entire stack:
task restart
- Check OTBR logs for specific errors:
docker-compose logs otbr
Symptoms: Thread devices can't join the network.
Solutions:
- Verify the Thread network is up:
task network-info
- Check that NAT64 is enabled (for IPv6-to-IPv4 translation):
docker-compose exec otbr ot-ctl nat64 - Make sure you're using the correct network credentials when joining devices.
Symptoms: Can't access the web interface or dashboards.
Solutions:
- Check that all containers are running:
task status
- Verify network connectivity to the Raspberry Pi:
ping <raspberry-pi-ip>
- Check port availability:
sudo netstat -tulpn | grep -E '80|3000|8080|8081|9090'
If you're still experiencing issues:
-
Collect diagnostic information:
docker-compose logs > logs.txt task network-info > network-info.txt lsusb > usb-devices.txt
-
Open an issue on the GitHub repository with these files attached.
-
For more advanced debugging, you can access the OTBR shell directly:
docker-compose exec otbr bash