From 2f0901bb9ff34961b87b415c9db8aa18510b26f0 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Thu, 8 Jan 2026 11:30:51 +0000 Subject: [PATCH 1/3] Set hardware version during factory --- backend/src/factory.js | 14 +++++++++----- backend/src/service.js | 5 ++++- frontend/src/pages/factory.jsx | 4 +++- lib/hardware.js | 2 +- lib/setup.js | 14 ++------------ 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/backend/src/factory.js b/backend/src/factory.js index ce403c3e7..13313d621 100644 --- a/backend/src/factory.js +++ b/backend/src/factory.js @@ -4,11 +4,11 @@ // For example updating the EEPROM import crypto from "node:crypto" -// import * as z from "zod" +import * as z from "zod" import { read, write } from "../../lib/eeprom.js" import { procedure, request } from "../../lib/mqtt.js" -import { setHardwareVersion } from "../../lib/hardware.js" +import { hardware_versions, setHardwareVersion } from "../../lib/hardware.js" await procedure("factory/init", async () => { const eeprom = await read() @@ -31,14 +31,18 @@ await procedure("factory/init", async () => { } } - return eeprom + return { eeprom, hardware_versions } +}) + +const Schema = z.object({ + hardware_version: z.enum(hardware_versions), }) await procedure("factory/update", async (data) => { - const { hardware_version } = data.custom_data + const { hardware_version } = Schema.parse(data) await Promise.all([ - hardware_version && write(data), + hardware_version === "v3.0" && write(data), setHardwareVersion(hardware_version), ]) diff --git a/backend/src/service.js b/backend/src/service.js index a7b5cf4a0..a68647267 100755 --- a/backend/src/service.js +++ b/backend/src/service.js @@ -38,8 +38,11 @@ app.post("/api/reset", async (req, res) => { app.get("/", async (req, res) => { const software_config = await readSoftwareConfig() + if (!software_config) { + return res.redirect(302, "/factory") + } - if (software_config?.user_setup !== true) { + if (software_config.user_setup !== true) { return res.redirect(302, "/ps/node-red-v2/dashboard/setup") } diff --git a/frontend/src/pages/factory.jsx b/frontend/src/pages/factory.jsx index a5dee0637..6dc877e91 100644 --- a/frontend/src/pages/factory.jsx +++ b/frontend/src/pages/factory.jsx @@ -6,13 +6,15 @@ import { useSubmission, action } from "@solidjs/router" import { request } from "../../../lib/mqtt.js" export default function Factory() { - const [EEPROM, { refetch }] = createResource( + const [{ EEPROM, hardware_versions }, { refetch }] = createResource( "factory/init", async (topic) => { return request(topic) }, ) + console.log(hardware_versions) + const updateFactoryAction = action(async (data) => { const { serial_number, diff --git a/lib/hardware.js b/lib/hardware.js index 4c2349648..74f2eb193 100644 --- a/lib/hardware.js +++ b/lib/hardware.js @@ -8,7 +8,7 @@ import { read as readEEPROM } from "./eeprom.js" const execFile = promisify(child_process.execFile) -const hardware_versions = ["v3.0", "v2.6"].map((v) => { +export const hardware_versions = ["v3.0", "v2.6"].map((v) => { return { label: `PlanktoScope ${v}`, value: v } }) diff --git a/lib/setup.js b/lib/setup.js index 51ecb7012..3aef53e75 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -1,7 +1,6 @@ import * as z from "zod" import { publish } from "./mqtt.js" -import { setHardwareVersion, detectHardwareVersion } from "./hardware.js" import { getWifiRegulatoryDomains, setWifiRegulatoryDomain, @@ -10,7 +9,6 @@ import { import { getTimezones, getTimezone, setTimezone } from "./timezone.js" import { updateSoftwareConfig } from "./file-config.js" -import { promiseDashboardOnline } from "./nodered.js" export async function readSetup() { const [regions, region, timezones, timezone] = await Promise.all([ @@ -35,18 +33,10 @@ const Schema = z.object({ export async function writeSetup(data) { const { region, timezone } = Schema.parse(data) - const hardware_version = await detectHardwareVersion() - await Promise.all([ - setWifiRegulatoryDomain(region), - setTimezone(timezone), - setHardwareVersion(hardware_version), - ]) + await Promise.all([setWifiRegulatoryDomain(region), setTimezone(timezone)]) - await Promise.all([ - updateSoftwareConfig({ user_setup: true }), - promiseDashboardOnline(), - ]) + await updateSoftwareConfig({ user_setup: true }) await publish("setup/ready", {}) } From fdc0c42d03c0d12dba1f203999ec3179091bc044 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Thu, 8 Jan 2026 11:42:11 +0000 Subject: [PATCH 2/3] f --- backend/src/factory.js | 4 ++-- frontend/src/pages/factory.jsx | 35 +++++++++++++++------------------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/backend/src/factory.js b/backend/src/factory.js index 13313d621..3f632f4fb 100644 --- a/backend/src/factory.js +++ b/backend/src/factory.js @@ -11,10 +11,10 @@ import { procedure, request } from "../../lib/mqtt.js" import { hardware_versions, setHardwareVersion } from "../../lib/hardware.js" await procedure("factory/init", async () => { - const eeprom = await read() + let eeprom = await read() if (eeprom?.custom_data?.eeprom_version !== 0) { - return { + eeprom = { product_uuid: crypto.randomUUID(), product_id: "0x0000", // TODO product_ver: "0x0000", //TODO diff --git a/frontend/src/pages/factory.jsx b/frontend/src/pages/factory.jsx index 6dc877e91..169abd9ff 100644 --- a/frontend/src/pages/factory.jsx +++ b/frontend/src/pages/factory.jsx @@ -6,14 +6,9 @@ import { useSubmission, action } from "@solidjs/router" import { request } from "../../../lib/mqtt.js" export default function Factory() { - const [{ EEPROM, hardware_versions }, { refetch }] = createResource( - "factory/init", - async (topic) => { - return request(topic) - }, - ) - - console.log(hardware_versions) + const [data, { refetch }] = createResource("factory/init", async (topic) => { + return request(topic) + }) const updateFactoryAction = action(async (data) => { const { @@ -60,7 +55,7 @@ export default function Factory() { @@ -86,7 +81,7 @@ export default function Factory() { {/* */} @@ -130,7 +125,7 @@ export default function Factory() { serial_number @@ -148,7 +143,7 @@ export default function Factory() { hardware_version