mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-19 00:56:16 +00:00
feat(setup): add CLI setup command group for end-to-end speaker provisioning
Add `soundtouch-cli setup` subcommand group covering the full reset →
re-provision → pair lifecycle as a scriptable alternative to the web UI:
inspect, verify, plan, factory-reset, wait-ap, wifi-push, wait-online,
ssh-check, install-ca, migrate, reboot, pair (bare | full state machine)
Supporting library code lives in pkg/service/setup: factory_reset.go,
wifi_provision.go, inspect.go, init_plan.go, setup_session.go.
Confirmed against ST10 firmware 27.0.6 that bare setMargeAccount over
WebSocket — no SETUP_START/SETUP_ENTER/SETUP_LEAVE bracket — is
sufficient to pair a factory-reset speaker; the firmware materializes
SystemConfigurationDB.xml and Sources.xml itself and the pairing
survives reboot. Result and field-by-field SystemConfigurationDB
comparison documented in docs/analysis/SETUP-WEBSOCKET-EXPERIMENT.md.
Captures the device's pre-reset DELETE-to-marge plus its LAN peer
notification flow in docs/analysis/FACTORY-RESET-PROTOCOL.md.
Perf: batch GetMigrationSummary's SSH probes into one Run() call via
ssh_probe.go / ssh_probe_apply.go — was ~8 sequential dials at
500-1000 ms each on FW 27 crypto, now one round-trip. Same data shape,
same MigrationSummary fields populated.
Fixes /clockTime and /clockDisplay wire formats — firmware 27 rejects
the legacy flat XML ("Error parsing request"). ClockTimeRequest now
uses utcTime attribute; ClockDisplayRequest emits the nested
<clockConfig> envelope with timezoneInfo/timeFormat/brightnessLevel.
Removes cmd/example-init-speaker (superseded by setup pair).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
1ab4295653
commit
29a462da2b
@@ -95,9 +95,7 @@ func TestClient_SetClockTime(t *testing.T) {
|
||||
{
|
||||
name: "Successful clock time set",
|
||||
request: &models.ClockTimeRequest{
|
||||
UTC: 1609459200,
|
||||
Value: "2021-01-01 00:00:00",
|
||||
Zone: "UTC",
|
||||
UTCTime: 1609459200,
|
||||
},
|
||||
statusCode: http.StatusOK,
|
||||
expectError: false,
|
||||
@@ -112,8 +110,7 @@ func TestClient_SetClockTime(t *testing.T) {
|
||||
{
|
||||
name: "Server error",
|
||||
request: &models.ClockTimeRequest{
|
||||
UTC: 1609459200,
|
||||
Value: "2021-01-01 00:00:00",
|
||||
UTCTime: 1609459200,
|
||||
},
|
||||
statusCode: http.StatusInternalServerError,
|
||||
expectError: true,
|
||||
|
||||
Reference in New Issue
Block a user