I am trying to setup my Roborock S5 Max with your local server, but I am stuck during the onboarding. The server (installed inside a Proxmox LXC) is running, showing a Healthy state and accessible from my target VLAN (via NginxProxyManager). Now I am running the onboarding script from my windows laptop.
First I had issues when the onboarding script terminated after sending the cfgwifi with the following error:
Reconnect this machine to your normal Wi-Fi. The script will poll the main server every 5 seconds for up to 5 minutes.
Error: <urlopen error [Errno 11001] getaddrinfo failed>
It seems the script was trying to continue immediately, but my laptop was either still connected to the Roborock wifi or not reconnect to my regular wifi yet.
output.write(
"Reconnect this machine to your normal Wi-Fi. "
"The script will poll the main server every 5 seconds for up to 5 minutes.\n"
)
result, status = poll_session_until_progress(
output.write(
"Reconnect this machine to your normal Wi-Fi. "
"After reconnecting, press Enter to begin polling the main server.\n"
)
input("> ")
result, status = poll_session_until_progress(
I tried around 10 cycles but never get any sample. Any idea what could be the issue here?
Sending cfgwifi onboarding packet...
HELLO_RESP_CMD=17
HELLO_RESP_JSON={"id":1,"method":"hello","params":{"sdks":{"tuya":"2.0","roborock":"02"},"key":"e38d812829746431"}}
TOKEN_S=S_TOKEN_123456789abc
TOKEN_T=T_TOKEN_123456789abc
WIFI_BODY_SENT={"u":"1234567890","ssid":"XXX","token":{"r":"roborock.XXX.de/","tz":"Europe/Berlin","s":"S_TOKEN_123456789abc","cst":"CET-1CEST,M3.5.0,M10.5.0/3","t":"T_TOKEN_123456789abc"},"passwd":"XXX","country_domain":"de"}
WIFI_RESP_CMD=2
WIFI_RESP_HEX=312e300000000100020000c3222b5f
Reconnect this machine to your normal Wi-Fi. After reconnecting, press Enter to begin polling the main server.
>
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Waiting for the server to observe new onboarding traffic...
Status for S5 Max: samples=0, public_key=False, connected=False, state=missing
Waiting for onboarding traffic from the selected vacuum.
Status for S5 Max: samples=0, public_key=False, connected=False, state=missing
Waiting for onboarding traffic from the selected vacuum.
Health
{
"generated_at": "2026-04-09T18:29:55.843218+00:00",
"overall_ok": true,
"services": [
{
"name": "https_server",
"running": true,
"required": true,
"enabled": true,
"detail": "0.0.0.0:443",
"updated_at": "2026-04-08T12:39:04.379875+00:00"
},
{
"name": "mqtt_backend_broker",
"running": true,
"required": true,
"enabled": true,
"detail": "embedded:127.0.0.1:18830",
"updated_at": "2026-04-08T12:39:04.268351+00:00"
},
{
"name": "mqtt_tls_proxy",
"running": true,
"required": true,
"enabled": true,
"detail": "0.0.0.0:8883",
"updated_at": "2026-04-08T12:39:04.380779+00:00"
},
{
"name": "mqtt_topic_bridge",
"running": true,
"required": false,
"enabled": true,
"detail": "rr/m <-> rr/d",
"updated_at": "2026-04-08T12:39:04.268533+00:00"
}
],
"connected_vacuums": [],
"all_vacuums": [
{
"duid": "123456789abc",
"did": "",
"id_kind": "duid",
"name": "S5 Max",
"local_key": "123456789abc",
"source": "devices",
"key_model": "",
"ips": [],
"connected": false,
"last_ip": "",
"last_http_at": "",
"last_http_route": "",
"last_http_path": "",
"last_http_remote": "",
"last_http_host": "",
"last_mqtt_at": "",
"last_mqtt_topic": "",
"last_mqtt_direction": "",
"last_mqtt_payload_preview": "",
"last_disconnect_at": "",
"last_message_at": "",
"last_message_source": "",
"onboarding_steps": {},
"onboarding": {
"required_steps": [
"region",
"nc_prepare"
],
"step_labels": {
"region": "Region",
"nc_prepare": "NC Prepare",
"login_key_sign": "Key Sign"
},
"missing_steps": [
"region",
"nc_prepare"
],
"has_required_messages": false,
"has_public_key": false,
"public_key_ready": false,
"status": "collecting_messages",
"guidance": "Still waiting for onboarding messages: Region, NC Prepare.",
"key_state": {}
},
"model": "roborock.vacuum.s5e",
"product_id": "123456789abc",
"inventory_source": "devices"
}
],
"active_mqtt_connections": 0,
"pending_onboarding_ips": [
"IP_FROM_NGINXPROXYMANAGER"
],
"last_cloud_request": {
"success": true,
"step": "inventory_fetched",
"inventory_path": "/data/runtime/web_api_inventory.json",
"cloud_snapshot_path": "/data/runtime/web_api_inventory_full_snapshot.json",
"home_name": "My Home",
"device_count": 1,
"shared_device_count": 0,
"device_names": [
"S5 Max"
],
"shared_device_names": [],
"time": "2026-04-09T16:16:41.339020+00:00"
}
}
Vacuums
[
{
"duid": "123456789abc",
"did": "",
"id_kind": "duid",
"name": "S5 Max",
"local_key": "123456789abc",
"source": "devices",
"key_model": "",
"ips": [],
"connected": false,
"last_ip": "",
"last_http_at": "",
"last_http_route": "",
"last_http_path": "",
"last_http_remote": "",
"last_http_host": "",
"last_mqtt_at": "",
"last_mqtt_topic": "",
"last_mqtt_direction": "",
"last_mqtt_payload_preview": "",
"last_disconnect_at": "",
"last_message_at": "",
"last_message_source": "",
"onboarding_steps": {},
"onboarding": {
"required_steps": [
"region",
"nc_prepare"
],
"step_labels": {
"region": "Region",
"nc_prepare": "NC Prepare",
"login_key_sign": "Key Sign"
},
"missing_steps": [
"region",
"nc_prepare"
],
"has_required_messages": false,
"has_public_key": false,
"public_key_ready": false,
"status": "collecting_messages",
"guidance": "Still waiting for onboarding messages: Region, NC Prepare.",
"key_state": {}
},
"model": "roborock.vacuum.s5e",
"product_id": "123456789abc",
"inventory_source": "devices"
}
]
Hi,
first of all: Great work with this solution!
I am trying to setup my Roborock S5 Max with your local server, but I am stuck during the onboarding. The server (installed inside a Proxmox LXC) is running, showing a Healthy state and accessible from my target VLAN (via NginxProxyManager). Now I am running the onboarding script from my windows laptop.
First I had issues when the onboarding script terminated after sending the cfgwifi with the following error:
It seems the script was trying to continue immediately, but my laptop was either still connected to the Roborock wifi or not reconnect to my regular wifi yet.
I solved this by changing
to
I tried around 10 cycles but never get any sample. Any idea what could be the issue here?
Output from the onboarding script:
Information from the admin website: