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
12 changes: 11 additions & 1 deletion docs/m1-wled-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ guarantees a factory-fresh 64x64 boot. It is offered for Rev6 only, so Rev4 owne
to the WLED-MM 14.5.1 (Rev4) variant.

The M-1 entry sets `"platform": "wled"`, so step 3 of the wizard gives the WLED onboarding
(WLED-AP fallback, discovered WLED integration, WLED web UI for effects and manual OTA) instead
(open Apollo M-1 hotspot at 4.3.2.1, discovered WLED integration, WLED web UI for effects and
manual OTA) instead
of the ESPHome Dashboard "Take control" flow. The hardware can run ESPHome, we just do not offer
an ESPHome build yet. When we do, add that manifest as another variant and mark it in a
`platforms` map (`"platforms": { "stable": { "<variant>": "esphome" } }`); step 3 then switches
Expand All @@ -32,3 +33,12 @@ Hosting: WLED-MM-M1 serves the 14.5.1 manifests from committed files via legacy
WLED-M1 serves the 16.0.1 manifest through an Actions Pages workflow
(.github/workflows/apollo-pages.yml) that publishes manifest.json plus M-1_full_install.bin
from the latest GitHub release, so the 16MB image never enters git history.

## Setup hotspot (verified against the shipped images, not WLED defaults)

Both the 16.0.1 and 14.5.1 Apollo builds broadcast an **open** hotspot, not the stock WLED
`WLED-AP` / `wled1234` pair. The string `wled1234` is absent from `M-1_full_install.bin` and from
`Apollo_M-1_Rev6_14.5.1.bin`, while the sibling default `wledota` is present in both, so `apPass`
is empty. The m1-b8 release notes state it directly: "STEP 1: join the open Apollo M-1 WiFi", and
list "cleaner hotspot name: the setup WiFi is now just Apollo M-1 (no serial-number suffix)" as new
in that build, which is why step 3 says older builds carry a suffix. Setup address is 4.3.2.1.
8 changes: 5 additions & 3 deletions js/views/device.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,11 @@ function platformFor(device, channel, variant) {
function stepThreeHtml(device, platform) {
if (platform === 'wled') {
return `
<p>If you did not set Wi-Fi during install, join the device's own
<strong>WLED-AP</strong> network (password <code>wled1234</code>) and pick your network
at <code>4.3.2.1</code>. Once it is on your Wi-Fi, go to
<p>If you did not set Wi-Fi during install, join the open
<strong>Apollo ${device.name}</strong> Wi-Fi hotspot the device broadcasts (builds before
16.0.1 add a serial-number suffix to the name), then open <code>4.3.2.1</code> in a
browser and pick your network. On 16.0.1 the panel itself shows a setup card with that
address and a QR code. Once it is on your Wi-Fi, go to
<strong>Settings → Devices &amp; services</strong> in Home Assistant, where it appears as a
discovered <strong>WLED</strong> device. Click <strong>Configure</strong>, and you're done.
<span class="done-check">✓</span></p>
Expand Down
11 changes: 7 additions & 4 deletions tests/installer.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -331,8 +331,11 @@ test('step 3 gives WLED instructions on a WLED device, not ESPHome ones', async
await page.goto(`/#/${d.id}`);
const done = page.locator('#step-done');
await expect(done).toContainText('discovered');
await expect(done).toContainText('WLED-AP');
await expect(done).toContainText('4.3.2.1');
await expect(done).toContainText('Manual OTA Update');
// The Apollo builds ship an OPEN hotspot, not the stock WLED-AP/wled1234 pair.
await expect(done).not.toContainText('wled1234');
await expect(done).not.toContainText('WLED-AP');
// The ESPHome adoption path does not exist on a WLED device.
await expect(done).not.toContainText('ESPHome Dashboard');
await expect(done).not.toContainText('Take control');
Expand All @@ -356,15 +359,15 @@ test('step 3 follows a per-variant platform override', async ({ page }) => {
await page.goto(`/#/${d.id}`);

const done = page.locator('#step-done');
await expect(done).toContainText('WLED-AP');
await expect(done).toContainText('4.3.2.1');

await page.locator(`#variant-seg button[data-variant="${espVariant}"]`).click();
await expect(done).toContainText('ESPHome Dashboard');
await expect(done).not.toContainText('WLED-AP');
await expect(done).not.toContainText('4.3.2.1');

// And back, so the override is not a one-way trip.
await page.locator(`#variant-seg button[data-variant="${wledVariant}"]`).click();
await expect(done).toContainText('WLED-AP');
await expect(done).toContainText('4.3.2.1');
});

function blobFromRaw(raw) {
Expand Down
Loading