Skip to content

feat(q7): set local server URLs with an owner OTA - #99

Closed
Lash-L wants to merge 2 commits into
feat/q7-b01-local-bootstrapfrom
feat/q7-owner-ota-migration
Closed

Lash-L wants to merge 2 commits into
feat/q7-b01-local-bootstrapfrom
feat/q7-owner-ota-migration

Conversation

@Lash-L

@Lash-L Lash-L commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

A cloud-paired Q7 sc05 can receive an owner-initiated, script-only OTA that changes the five saved API/MQTT fields in iot.json. This PR builds that package, reserves matching credentials on the local server, verifies the hosted bytes and current cloud identity, and sends the update only while the robot is charging with OTA idle. The script saves the original iot.json beside it before an atomic replacement. It does not enable SSH or replace the kernel or root filesystem.

The B01 owner command transport may apply to other models, but the package format, OTA key, return script, and iot.json path are pinned to inspected Q7 sc05 firmware 03.01.74 and 03.01.80. Q10 is not yet validated. A per-device flash dump is not needed for this owner-account migration; building the package still requires the pinned firmware-wide Q7 profile, which is currently kept private. This PR is stacked on #96 for local B01 service once connected.

On one physical Q7, the cloud-to-local migration was completed on both supported firmware versions. After this trim, the 03.01.80 migration package rebuilds byte-for-byte identically to the tested package. The profile is not published in this PR. This trim also omits the separate restore OTA sender; the original iot.json remains backed up on the device.

Compatibility: V1 key lookup retains its DID fallback. MQTT inventory seeding now uses inbound rr/d/i only; an outbound rr/d/o message no longer creates a device row. Reserved Q7 migration records are linked to a device topic only after an authenticated publish, avoiding a stale model-only DID guess. No existing admin route is changed.

Validation: 41 focused tests passed (1 skipped); the broader suite passed 239 tests (1 skipped) with two unrelated long-running modules excluded. The URL migration package parity check passed.

@Lash-L Lash-L changed the title feat(q7): migrate cloud-paired Q7 to the local server by owner OTA feat(q7): set local server URLs with an owner OTA Sep 24, 2026
@Lash-L Lash-L closed this Sep 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant