Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 4 additions & 14 deletions .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,13 @@
name: Bug/Issue report
description: Report a issue related to the Roborock Local Server stack
description: Report an issue related to the Roborock Local Server stack
labels: ["bug/issue"]
body:
- type: markdown
attributes:
value: >-
Thanks for taking the time to file a bug/issue! If instead you just want to
confirm the server/onboarding works (or does not work) on your device, please use
the [Compatibility Discussions
category](https://github.com/Python-roborock/local_roborock_server/discussions/categories/compatibility)
rather than opening an issue.

- type: checkboxes
id: confirm-issue
attributes:
label: This is a real issue?
options:
- label: I have confirmed this is a issue, not a report that the project works on my device.
required: true
Use this form for a problem you need help investigating. To share a
compatibility result, use the
[compatibility report form](https://github.com/Python-roborock/local_roborock_server/issues/new?template=compatibility.yml).

- type: textarea
id: what-happened
Expand Down
68 changes: 68 additions & 0 deletions .github/ISSUE_TEMPLATE/compatibility.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Device compatibility report
description: Share a tested vacuum model, firmware, and certificate result
title: "Compatibility report: "
body:
- type: markdown
attributes:
value: >-
Check the [tested vacuums list](https://github.com/Python-roborock/local_roborock_server/blob/main/docs/tested_vacuums.md)
for existing results. Share what you tested so we can update it.
If you need help investigating a failure, use the bug report form instead.

- type: input
id: vacuum
attributes:
label: Vacuum model
description: Include the model identifier if available.
placeholder: Roborock S8 / roborock.vacuum.a51
validations:
required: true

- type: input
id: firmware
attributes:
label: Firmware version
description: Copy the exact version shown for the vacuum, or say if it is unknown.
placeholder: "02.17.42"
validations:
required: true

- type: input
id: version
attributes:
label: Server version
description: Include the release or image tag and any custom changes.
placeholder: v1.1.0, Home Assistant add-on
validations:
required: true

- type: input
id: certificate
attributes:
label: Certificate issuer and chain
description: >-
For example, ZeroSSL, Actalis, Let's Encrypt, or SSL.com. Include the chain
if known. Cloudflare DNS or ACME alone does not identify the issuer;
say unknown if you cannot check it.
validations:
required: true

- type: textarea
id: result
attributes:
label: What worked or failed?
description: >-
Describe whether onboarding completed and whether you could control the
vacuum from Home Assistant or the Roborock app. Include any limitations.
validations:
required: true

- type: textarea
id: setup
attributes:
label: Setup and workarounds
description: >-
Mention Docker or the Home Assistant add-on, any reverse proxy, and any
changes needed to make it work. Link an existing issue or PR if relevant.
validations:
required: false
9 changes: 4 additions & 5 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
blank_issues_enabled: false
contact_links:
- name: Device compatibility report
url: https://github.com/Python-roborock/local_roborock_server/discussions/categories/compatibility
- name: Tested vacuums
url: https://github.com/Python-roborock/local_roborock_server/blob/main/docs/tested_vacuums.md
about: >-
Confirming the server works (or does not work) on your vacuum? That goes in
the Compatibility Discussions category, not in Issues. Please share your
model, firmware, and which certificate chain you used so others can benefit.
Check reported models, firmware versions, and certificate results before
submitting a compatibility report.
12 changes: 6 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ If you would like to contribute there are a few ways that would be great!

## Where does my report go?

To keep Issues focused and actionable, there are three destinations depending on what you have:
Choose the form that matches your contribution:

- **Found a bug?** → Open an [Issue](https://github.com/Python-roborock/local_roborock_server/issues/new/choose).
Use the bug report form and confirm it is a real issue, not a "works on my device" note.
- **Confirming (or ruling out) that the server runs on your vacuum?** → Post in the
[Compatibility Discussions category](https://github.com/Python-roborock/local_roborock_server/discussions/categories/compatibility).
Please include your model, firmware, and which certificate chain you used. These reports do **not**
belong in Issues.
Use the bug report form for a problem you need help investigating.
- **Confirming (or ruling out) that the server runs on your vacuum?** → Open a
[compatibility report](https://github.com/Python-roborock/local_roborock_server/issues/new?template=compatibility.yml).
Include your exact model, firmware, server version, certificate issuer, and what worked or failed.
Mention any workarounds needed for the result.
- **Have a confirmed, reproducible result to record?** → Open a pull request adding a row to
[Tested Vacuums.md](/docs/tested_vacuums.md) so the next person can find it quickly.

Expand Down
86 changes: 62 additions & 24 deletions docs/tested_vacuums.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Check this page alongside [Installation](installation.md) and [Onboarding](onboarding.md) if you are trying to confirm whether your model is expected to work.

For most users, start with ZeroSSL. Actalis is mainly recommended for older vacuums or for models that already have reports showing better compatibility with the Actalis chain. Some newer vacuums can also handle any cert you throw at it!
For most users, start with ZeroSSL. Actalis is mainly recommended for older vacuums or for models that already have reports showing better compatibility with the Actalis chain. Results below apply to the reported firmware and certificate chain; other versions or chains may behave differently.

## Buying a New Vacuum?

Expand All @@ -22,44 +22,82 @@ These models have not yet been confirmed working. Version `1.1.0` adds V2
onboarding support; please report your model, firmware, and certificate chain
if you try one.

- Roborock Qrevo Curv 2 Pro
- Saros 20
- Roborock Qrevo S Pro
- [Roborock Qrevo Curv 2 Pro](https://github.com/Python-roborock/local_roborock_server/issues/47)
- [Saros 20 / Saros 20X](https://github.com/Python-roborock/local_roborock_server/issues/47)
- [Roborock Qrevo S Pro](https://github.com/Python-roborock/local_roborock_server/issues/67)
- Qrevo Curv 2 Flow
- Qrevo CurvX
- Saros Z70

Failing reports made before `1.1.0` need retesting on those devices and firmware versions.

## Known Failures

These reports remain unresolved:

| Vacuum | Firmware | Result | Report |
|---|---|---|---|
| Roborock Q7 TF+ | Not reported | Onboarding fails; uses a different protocol from the V2 models supported in `1.1.0`. | [#48](https://github.com/Python-roborock/local_roborock_server/issues/48) |

## Supported Vacuums

The following vacuums are confirmed working:

Legend:

- Check mark: reported working
- Cross: reported not working
- Question mark: not reported yet

| Vacuum | Firmware | ZeroSSL / Cloudflare | Actalis | Let's Encrypt | SSL.com |
|---|---:|---:|---:|---:|---:|
| Roborock S5 Max | Not reported | ❌ | ✅ | ❌ | ❓ |
| Roborock S7 | Not reported | ❓ | ✅ | ❌ | ✅ |
| Roborock S7 MaxV | Not reported | ✅ | ❓ | ✅ | ❓ |
| Roborock S8 | Not reported | ❓ | ❓ | ❓ | ❓ |
| Roborock S8 MaxV Ultra | Not reported | ✅ | ❓ | ❓ | ❓ |
| Roborock S8 Pro Ultra (a70) | Not reported | ❓ | ❓ | ❓ | ❓ |
| Roborock Saros 10R | `02.52.32` | ✅ | ❓ | ✅ | ❓ |
| [Roborock Saros 20 Sonic (a279)](https://github.com/Python-roborock/local_roborock_server/pull/84#issuecomment-5701936113) | `02.42.52` | ✅ | ❓ | ❓ | ❓ |
| [QRevo Edge 2 Set (a298)](https://github.com/Python-roborock/local_roborock_server/pull/84#issuecomment-5684924538) | `02.15.44` | ❓ | ❓ | ✅ | ❓ |
| Roborock G30U | `02.52.32` | ✅ | ❓ | ❓ | ❓ |
| Roborock Qrevo S5V | Not reported | ❓ | ❓ | ❓ | ❓ |
| QRevo MaxV | Not reported | ✅ | ❓ | ✅ | ❓ |
| QRevo Master | `02.28.26` | ❓ | ❓ | ✅ | ❓ |
| QRevo Plus | Not reported | ✅ | ❓ | ❓ | ❓ |
- Cross: reported not working with that certificate setup
- Question mark: certificate result not reported

Cloudflare can provide DNS validation for several certificate issuers. Its use alone does not establish which issuer was tested. Working reports without a named issuer retain question marks in the certificate columns.

| Vacuum | Firmware | ZeroSSL | Actalis | Let's Encrypt | SSL.com | Reports |
|---|---:|---:|---:|---:|---:|---|
| Roborock S5 Max | Not reported | ❌ | ❓ | ❌ | ❓ | [#3](https://github.com/Python-roborock/local_roborock_server/issues/3) |
| Roborock S5 Max | `02.16.62` | ❓ | ✅ | ❓ | ❓ | [#3](https://github.com/Python-roborock/local_roborock_server/issues/3#issuecomment-5450368775) |
| Roborock S7 | Not reported | ❓ | ✅ | ❌ | ✅ | [#3](https://github.com/Python-roborock/local_roborock_server/issues/3) |
| Roborock S7 MaxV | Not reported | ❓ | ❓ | ✅ | ❓ | — |
| Roborock S7 MaxV | `2.59.36` | ✅ | ❓ | ❓ | ❓ | [#49](https://github.com/Python-roborock/local_roborock_server/issues/49) |
| Roborock S7 Max Ultra | `02.26.80` | ❓ | ❓ | ✅ | ❓ | [#79](https://github.com/Python-roborock/local_roborock_server/issues/79#issuecomment-5637657592) |
| Roborock S7 Pro Ultra (a62) | Not reported | ❓ | ✅ | ❌ | ❓ | [#65](https://github.com/Python-roborock/local_roborock_server/pull/65) |
| Roborock S8 (a51) | `02.14.48` | ❌ | ❓ | ✅ | ❌ | [#46](https://github.com/Python-roborock/local_roborock_server/issues/46#issuecomment-5456737057) |
| Roborock S8 (a51) | `02.17.42` | ✅ | ❓ | ✅ | ❓ | [#46](https://github.com/Python-roborock/local_roborock_server/issues/46) |
| Roborock S8+ (a51) | `02.17.42` | ❓ | ❓ | ✅ | ❓ | [#66](https://github.com/Python-roborock/local_roborock_server/pull/66#issuecomment-5401631314) |
| Roborock S8 MaxV Ultra | `02.37.38` | ✅ | ❓ | ❓ | ❓ | [#49](https://github.com/Python-roborock/local_roborock_server/issues/49) |
| Roborock S8 Pro Ultra (a70) | Not reported | ❓ | ❓ | ❓ | ❓ | — |
| Roborock Saros 10R | `02.50.56` | ❓ | ❓ | ❓ | ❓ | [#78](https://github.com/Python-roborock/local_roborock_server/issues/78) |
| Roborock Saros 10R | `02.52.32` | ✅ | ❓ | ✅ | ❓ | — |
| Roborock Saros 10R (a144) | `02.52.86` | ❓ | ❓ | ✅ | ❓ | [#57](https://github.com/Python-roborock/local_roborock_server/issues/57), [#61](https://github.com/Python-roborock/local_roborock_server/issues/61) |
| Roborock Saros 20 Sonic (a279) | `02.42.52` | ✅ | ❓ | ❓ | ❓ | [#84](https://github.com/Python-roborock/local_roborock_server/pull/84#issuecomment-5701936113) |
| Roborock G30U | `02.52.32` | ✅ | ❓ | ❓ | ❓ | — |
| Roborock Q5 Pro | `2.04.06` | ❓ | ❓ | ✅ | ❓ | [#56](https://github.com/Python-roborock/local_roborock_server/issues/56) |
| Roborock Q8 Max | `02.06.86` | ❓ | ❓ | ✅ | ❓ | [#70](https://github.com/Python-roborock/local_roborock_server/issues/70) |
| QRevo | `02.20.60` | ❓ | ❓ | ✅ | ❓ | [#75](https://github.com/Python-roborock/local_roborock_server/pull/75) |
| QRevo Curv | `02.28.60` | ❓ | ❓ | ✅ | ❓ | [#60](https://github.com/Python-roborock/local_roborock_server/issues/60) |
| QRevo CurvX | `02.35.88` | ✅ | ❓ | ❓ | ❓ | [#64](https://github.com/Python-roborock/local_roborock_server/issues/64) |
| QRevo Edge | `02.22.52` | ❓ | ❓ | ✅ | ❓ | [#90](https://github.com/Python-roborock/local_roborock_server/issues/90) |
| QRevo Edge 2 Set (a298) | `02.15.44` | ❓ | ❓ | ✅ | ❓ | [#84](https://github.com/Python-roborock/local_roborock_server/pull/84#issuecomment-5684924538) |
| QRevo MaxV | Not reported | ✅ | ❓ | ✅ | ❓ | — |
| QRevo Master (a117) | `02.28.26` | ❓ | ❓ | ✅ | ✅ | [#57](https://github.com/Python-roborock/local_roborock_server/issues/57), [#82](https://github.com/Python-roborock/local_roborock_server/pull/82) |
| QRevo Plus | Not reported | ✅ | ❓ | ❓ | ❓ | — |
| QRevo S5V (a170) | `02.09.70` | ❓ | ❓ | ❓ | ❓ | [#52](https://github.com/Python-roborock/local_roborock_server/issues/52#issuecomment-4826867624) |
| QRevo S5V (a170) | `02.16.64` | ❓ | ❓ | ✅ | ❓ | [#52](https://github.com/Python-roborock/local_roborock_server/issues/52) |
| QX Revo Plus (Costco version) | Not reported | ❓ | ❓ | ✅ | ❓ | [#89](https://github.com/Python-roborock/local_roborock_server/pull/89) |

Setup notes:

- S7 Pro Ultra: the Actalis success used an RSA-2048 certificate. The Let's Encrypt failure was reported with an R3/E1 chain.
- Saros 10R `02.50.56`: the reported pfSense/HAProxy setup used provided certificates and the MITM redirect fix in [PR #77](https://github.com/Python-roborock/local_roborock_server/pull/77).
- QRevo Curv: the reporter worked around an app redirect port issue, also tracked by [PR #77](https://github.com/Python-roborock/local_roborock_server/pull/77).
- QRevo Master: the SSL.com result used a Sectigo Public Server Authentication CA DV R36 chain and a workaround for the proxy MQTT onboarding issue in [#83](https://github.com/Python-roborock/local_roborock_server/issues/83).

## Unlisted Vacuums

If your model is not listed, start with ZeroSSL unless it is an older model that is likely to need a different trusted chain. If onboarding fails after the DNS and server checks pass, try Actalis or a provided certificate and report the result.

## Report Your Result

Use the [compatibility report form](https://github.com/Python-roborock/local_roborock_server/issues/new?template=compatibility.yml) to share your exact model, firmware, server version, certificate issuer, and what worked or failed. Include any workarounds. You can also open a pull request updating this page with a link to your report.

## Related Docs

- [Installation](installation.md)
Expand Down
Loading