Readiness report

OpenDTU Solar Microinverter Gateway · 2026-09-03 03:53 · complete · 24 searches, 10 pages fetched

Download PDF

Cybersecurity — software & network: Review before networking · 11 findings

Details in the Cybersecurity section of the report below.

Readiness: OpenDTU Solar Microinverter Gateway

Verdict: Ready with caveats · 2026-09-03 · est. parts cost $5–$66 per station (one host-board variant; the OpenDTU Fusion carrier-board route is priced separately at EUR 30,00) Cybersecurity — software & network: Review before networking

This is the cold check for this lab — there is no previous report, so everything below establishes the baseline that future checks will measure drift against. The lab is implementable today. Most of the bill of materials is in healthy supply: both Olimex boards, both WIZnet Ethernet options, the ceramic capacitor and the indicator LED are Active at an authorized distributor with deep stock, and the generic ESP32 board, both RF modules and the OLED display are plentiful at retail for a few dollars each. The caveats are real but bounded. Two of the ten selectable host boards — the ESP32-S3-DevKitC-1-N8 and the ESP32-C3-DevKitC-02 — are Obsolete with zero stock at both DigiKey and Mouser, and each needs the substitute named below. The snapshot's example bulk capacitor is unsourceable, though its commodity replacement costs $0.24 and sits in deep stock. The OpenDTU Fusion carrier board, the only route to the opendtufusion build targets, comes from a single small European community shop with no authorized alternative and no published design files — the one dependency that could strand a class. Because the host platform is explicitly "select one variant" and the cheap generic ESP32 route is unaffected, none of this blocks the lab; it constrains which build target an instructor should choose.

Action required

Part Problem Recommended action
ESP32-S3-DevKitC-1-N8 Obsolete at DigiKey; 0 stock at DigiKey and Mouser, 8-week factory lead, ECIA lifecycle risk High Order ESP32-S3-DEVKITC-1-N8R8 instead — $15.00, 1,825 in stock at Mouser. Adds 8 MB PSRAM; confirm the pinout against your target before buying a class set.
ESP32-C3-DevKitC-02 Obsolete at DigiKey; 0 stock at DigiKey and Mouser; no genuine retail listings found this run Order ESP32-C3-DEVKITM-1-N4X — $8.00, 110 in stock. Different module and pin arrangement; OpenDTU's C3 targets use dynamic pin mapping, so remap pins rather than expecting a drop-in.
Bulk decoupling capacitor (snapshot example UEP1A470MDD) No DigiKey listing; 0 stock at TTI and Mouser Substitute Panasonic ECA-1CM470I — 47 µF, 16 V, radial through-hole, $0.24, 6,565 in stock.
CMT2300A sub-GHz module Retail listings mix 433 MHz and 868 MHz parts; a 433 MHz module will not talk to an 868 MHz HMS/HMT inverter Order the 868/915 MHz variant explicitly — the Ebyte listing at $7.99 is the only band-correct result this run.
OpenDTU Fusion v1 / v2 / v2 PoE carrier board Single-sourced from one European community shop at EUR 30,00; no authorized distributor, no published gerbers or EDA files, stock not stated Budget for international shipping and lead time, or choose a generic ESP32 / ESP32-S3 build target instead for a class set.

Cybersecurity — software & network

Review before networking — The gateway serves an unauthenticated read-only API over plain HTTP and ships with published default credentials, and its frontend build chain carries eight vulnerable packages including a critical one — all mitigable, but each needs a deliberate step before the device goes on a shared network.

Component Version How known Support status
OpenDTU gateway firmware (project) not determined not determined (The lab's materials name the project but state no OpenDTU release version.) —
PlatformIO platform espressif32 6.10.0 read from project (platformio.ini (fetched this run as fetched/03-platformio.ini): 'platform = espressif32@6.10.0') —
Arduino framework for ESP32 not determined not determined (platformio.ini (fetched this run as fetched/03-platformio.ini) states only 'framework = arduino'; the framework version is bundled inside espressif32@6.10.0 and is not stated independently.) —
platformio/tool-mklittlefs not determined unpinned (platformio.ini (fetched this run as fetched/03-platformio.ini) lists it under platform_packages with no version, so PlatformIO installs whatever is current.) —
ESP32Async/ESPAsyncWebServer 3.10.3 read from project (platformio.ini (fetched this run as fetched/03-platformio.ini) lib_deps) —
ESP32Async/AsyncTCP 3.4.10 read from project (platformio.ini (fetched this run as fetched/03-platformio.ini) lib_deps) —
bblanchon/ArduinoJson 7.4.3 read from project (platformio.ini (fetched this run as fetched/03-platformio.ini) lib_deps) —
espMqttClient (bertmelis, git dependency) v1.7.2 read from project (platformio.ini (fetched this run as fetched/03-platformio.ini) lib_deps: 'https://github.com/bertmelis/espMqttClient.git#v1.7.2') —
nrf24/RF24 1.5.0 read from project (platformio.ini (fetched this run as fetched/03-platformio.ini) lib_deps) —
olikraus/U8g2 2.36.18 read from project (platformio.ini (fetched this run as fetched/03-platformio.ini) lib_deps) —
buelowp/sunset 1.1.7 read from project (platformio.ini (fetched this run as fetched/03-platformio.ini) lib_deps) —
arkhipenko/TaskScheduler 4.0.4 read from project (platformio.ini (fetched this run as fetched/03-platformio.ini) lib_deps) —
mathieucarbou/MycilaNTP 6.0.5 read from project (platformio.ini (fetched this run as fetched/03-platformio.ini) lib_deps) —
Yarn (package manager) 1.22.22 inferred (webapp/package.json (fetched this run as fetched/02-package.json) packageManager field; validation: this version appears in no file fetched this run) —
vue 3.5.31 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock) resolves vue@^3.5.31) —
vue-i18n 11.3.0 read from project (webapp/package.json (fetched this run as fetched/02-package.json) pins 11.3.0 exactly; webapp/yarn.lock (fetched this run as fetched/01-yarn.lock) resolves it) —
vue-router 5.0.4 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
bootstrap 5.3.8 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
bootstrap-icons-vue 1.11.3 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
@popperjs/core 2.11.8 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
sortablejs 1.15.7 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
spark-md5 3.0.2 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
mitt 3.0.1 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
pulltorefreshjs 0.1.22 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
vite (frontend build tool) 8.0.3 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
@vitejs/plugin-vue 6.0.5 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
@intlify/unplugin-vue-i18n 11.0.7 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
typescript 5.9.3 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
vue-tsc 3.2.6 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
sass 1.98.0 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
terser 5.46.1 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
eslint 10.1.0 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
prettier 3.8.1 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
oxlint 1.50.0 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
npm-run-all 4.1.5 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
shell-quote (transitive, build toolchain) 1.8.3 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
postcss (transitive, build toolchain) 8.5.8 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
nanoid (transitive, build toolchain) 3.3.11 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
brace-expansion (transitive, build toolchain) 1.1.13 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
brace-expansion (transitive, second resolution) 5.0.5 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
immutable (transitive, via sass) 5.1.5 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
@humanfs/node (transitive, via eslint) 0.16.7 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
postcss-selector-parser (transitive) 7.1.1 read from project (webapp/yarn.lock (fetched this run as fetched/01-yarn.lock)) —
Component Finding Severity Fix available?
shell-quote 1.8.3 The frontend build chain pulls in shell-quote 1.8.3, which fails to escape newlines when quoting shell arguments (rated critical) and can be stalled by a crafted string; This is a build-machine dependency: it runs on the workstation that rebuilds the web UI, not on the ESP32 gateway itself. — GHSA-w7jw-789q-3m8p, GHSA-395f-4hp3-45gv critical Yes — update to 1.9.0
brace-expansion 1.1.13 and 5.0.5 Two separate resolutions of brace-expansion in the lockfile can be driven into runaway memory or CPU use by a crafted glob pattern, crashing the build; This is a build-machine dependency: it runs on the workstation that rebuilds the web UI, not on the ESP32 gateway itself. — GHSA-rgw5-rvv9-x895, GHSA-mh99-v99m-4gvg, GHSA-3jxr-9vmj-r5cp, GHSA-jxxr-4gwj-5jf2 high Yes — update to 1.1.18 and 5.0.9
immutable 5.1.5 Immutable.js 5.1.5, pulled in by the Sass compiler, can be forced into an unrecoverable stall by hash collisions or oversized lists; This is a build-machine dependency: it runs on the workstation that rebuilds the web UI, not on the ESP32 gateway itself. — GHSA-v56q-mh7h-f735, GHSA-xvcm-6775-5m9r high Yes — update to 5.1.8
nanoid 3.3.11 nanoid 3.3.11 can loop indefinitely or wrap around on malformed size arguments, hanging the build; This is a build-machine dependency: it runs on the workstation that rebuilds the web UI, not on the ESP32 gateway itself. — GHSA-xwg4-73v4-xw9w, GHSA-28wg-ghj8-5hjv, GHSA-2v37-7h3g-55p8 high Yes — update to 3.3.18
postcss 8.5.8 PostCSS 8.5.8 can be induced by a crafted CSS comment to read arbitrary source-map files during the build; This is a build-machine dependency: it runs on the workstation that rebuilds the web UI, not on the ESP32 gateway itself. — GHSA-r28c-9q8g-f849, GHSA-6g55-p6wh-862q, GHSA-qx2v-qp2m-jg93, GHSA-fxqj-rqcc-2cmp high Yes — update to 8.5.23
vite 8.0.3 The Vite dev server used to build and preview the web UI can be made to serve files from outside the project directory, so anyone who can reach a running dev server may read files off the build machine; This is a build-machine dependency: it runs on the workstation that rebuilds the web UI, not on the ESP32 gateway itself. — GHSA-fx2h-pf6j-xcff, GHSA-p9ff-h696-f583, GHSA-v2wj-q39q-566r, GHSA-v6wh-96g9-6wx3 (+1 more) high Yes — update to 8.0.16
@humanfs/node 0.16.7 The ESLint file helper follows symbolic links during a recursive copy and can pull in files from outside the project tree; This is a build-machine dependency: it runs on the workstation that rebuilds the web UI, not on the ESP32 gateway itself. — GHSA-p498-v437-472g moderate Yes — update to 0.16.8
postcss-selector-parser 7.1.1 A deeply nested CSS selector can exhaust the parser's stack and stop the build; This is a build-machine dependency: it runs on the workstation that rebuilds the web UI, not on the ESP32 gateway itself. — GHSA-w9m9-85wc-3x92 low Yes — update to 7.1.3
OpenDTU network services (no transport encryption by default) The web interface runs over plain HTTP on port 80 and MQTT telemetry defaults to unencrypted port 1883 with TLS switched off, so credentials and inverter data cross the network in the clear if MQTT is enabled. posture Mitigation only — enable MQTT TLS and keep the gateway off untrusted or public networks
OpenDTU web interface (default credentials) The gateway ships with a published setup Wi-Fi password (openDTU42) and the administrative username 'admin', both written into the firmware defaults, so anyone who knows the project knows the factory credentials. posture Mitigation only — change the access-point password and the admin credentials during first-boot configuration, before the device joins a shared network
OpenDTU web interface (unauthenticated read access) Read-only access is enabled without any authentication by default (SECURITY_ALLOW_READONLY true), so any device on the same network can read the gateway's live solar data and event log over plain HTTP on port 80 without logging in. posture Mitigation only — turn off read-only access or place the gateway on an isolated network segment

What this means for your lab

Out of the box this gateway is meant to be easy to set up, and that comes at a cost: anyone else on the same network can open its web page and read your solar data — live inverter output, the event log and the metrics feed — without a password, because read-only access is deliberately left open by default. The setup Wi-Fi password (openDTU42) and the administrator username (admin) are published in the project's own source code, so they are not secrets; if you leave them unchanged, someone nearby could join the setup network and reconfigure the device, which on this hardware means changing how your inverters are told to behave. Everything travels unencrypted — the web page over plain HTTP, and the optional MQTT telemetry feed over an unencrypted port unless you switch TLS on. The practical steps are: change the access-point password and the admin credentials during first-boot setup, turn off unauthenticated read-only access if the data is sensitive, and put the gateway on an isolated lab network or VLAN rather than the main campus network — talk to campus IT before connecting it, since this is a device that controls power-generating equipment. Separately, the packages used to rebuild the web interface carry a number of known vulnerabilities, including a critical one; those affect the workstation doing the build rather than the gateway, and refreshing the lockfile clears them. One honest gap: the nine embedded firmware libraries could not be checked at all, because no vulnerability database covers Arduino and PlatformIO libraries — that is unknown territory, not a clean bill of health.

Not checked

  • Nine PlatformIO/Arduino firmware libraries (ESPAsyncWebServer 3.10.3, AsyncTCP 3.4.10, ArduinoJson 7.4.3, espMqttClient v1.7.2, RF24 1.5.0, U8g2 2.36.18, sunset 1.1.7, TaskScheduler 4.0.4, MycilaNTP 6.0.5): Versions were read from platformio.ini, but OSV.dev has no advisory database covering PlatformIO or Arduino C++ libraries, so no vulnerability check is possible. Absence of a database is not evidence that they are clean.
  • PlatformIO platform espressif32 6.10.0: endoflife.date has no 'platformio' product, so no support-status lookup matched; the platform's supported/end-of-life state is unknown. It also has no OSV ecosystem.
  • Arduino framework for ESP32 (bundled in espressif32@6.10.0): No independent version is stated anywhere in the project, so there is nothing concrete to look up.
  • platformio/tool-mklittlefs: Unpinned in platformio.ini — PlatformIO installs whatever is current, so no fixed version exists to check.
  • OpenDTU firmware itself: No release version is stated in the lab's materials, and the project is not published to a package registry with an advisory database.
  • TypeScript type-definition packages (@types/bootstrap, @types/node, @types/pulltorefreshjs, @types/sortablejs, @types/spark-md5): Compile-time type declarations only; they ship no executable code and the snapshot marks them not checkable.
  • ISRG Root X1 CA certificate embedded in defaults.h: Certificate validity was not verified this run; the snapshot records it as valid to June 2035 but no check was performed.
  • platformio 6.10.0: support status: endoflife.date has no such product
  • validation: Yarn (package manager): 'read from project' downgraded to 'inferred' - version '1.22.22' not in any fetched file

Parts

Microcontroller host platform (select one target variant)

Part Spec/Package Status Stock Price Source
Generic ESP32 dev board (ESP32-DevKitC / ESP32-WROOM-32) 30/38-pin 2.54 mm module, ≥4 MB flash, 3.3 V readily available (retail) — $2.12–$14.99 pcb-hero.com, KUONGSHUN, Walmart sellers
ESP32-S3-DevKitC-1-N8 ESP32-S3-WROOM-1-N8, 8 MB flash, USB CDC Obsolete 0 (DigiKey and Mouser; 8-wk lead) — DigiKey exact match, corroborated via TrustedParts/ECIA
ESP32-C3-DevKitC-02 ESP32-C3-WROOM-02, single-core RISC-V, 3.3 V Obsolete 0 (DigiKey and Mouser; 8-wk lead) — DigiKey exact match, corroborated via TrustedParts/ECIA
Olimex ESP32-POE RJ45 MagJack, TPS2375 PoE, LAN8710A RMII Active 1,625 $20.71 DigiKey
Olimex ESP32-EVB Screw terminals, RJ45, LAN8710A RMII Active 147 $23.01 DigiKey
Wemos D1 Mini ESP32 D1 mini dual 8-pin 2.54 mm headers readily available (retail) — $2.59–$6.99 eBay, Simply. Smarter. Electronics., Walmart/JacobsParts
Wireless-Tag WT32-ETH01 Castellated module, LAN8720A RMII, RJ45 readily available (retail) — $12.32–$19.90 Walmart, banggood.com, DigiKey listing
Wemos Lolin32 Lite Slim 2.54 mm breakout, JST battery connector readily available (retail) — $4.03–$4.69 eBay, Elecbee, Simply. Smarter. Electronics.
Wemos Lolin S2 Mini ESP32-S2FN4R2, compact dual-row headers available (retail, marketplace-concentrated) — $2.56–$3.10 AliExpress sellers; Newegg outlier at $24.26
OpenDTU Fusion v1 / v2 / v2 PoE carrier board Custom PCB accepting ESP32-S3 + RF modules available, single-sourced not stated EUR 30,00 AllianceApps Community Shop (only source found)

Radio frequency transceiver modules

Part Spec/Package Status Stock Price Source
NRF24L01+ PA/LNA module with antenna 2x4 pin 2.54 mm header, 1.9–3.6 V rail, 2.4 GHz readily available (retail) — $2.20–$11.99 eBay, AliExpress, ShillehTek, Walmart/MakerFocus
CMT2300A sub-GHz module (Ebyte E49-900M20S or similar) SMD/DIP adapter, 1.8–3.6 V rail, 868 MHz required available (retail) — check the band — $7.99 (868/915 MHz) Walmart — EBYTE IoT Application Expert

Ethernet transceiver controller

Part Spec/Package Status Stock Price Source
WIZ850IO (W5500 module) Module, supply 2.97–3.63 V, 132 mA Active 3,258 $24.52 DigiKey
W5500 (bare IC) 48-LQFP (7x7), supply 2.97–3.63 V, 132 mA Active 73,493 $3.47 DigiKey

Display module (optional)

Part Spec/Package Status Stock Price Source
0.96"/1.3" monochrome OLED, SSD1306/SH1106, 128x64 4-pin I2C or 7-pin SPI header, 3.3 V readily available (retail) — $2.49–$19.50 BuyDisplay, CANADUINO/DigiKey, Micro Center/Adafruit

Passive and support hardware

Part Spec/Package Status Stock Price Source
Bulk decoupling capacitor (example UEP1A470MDD) 10–100 µF, ≥6.3 V, radial through-hole not sourceable as specified 0 (TTI, Mouser) — DigiKey returned no listing; TrustedParts/ECIA corroborated
100 nF ceramic decoupling capacitor (C0805C104K5RACTU) 0.1 µF, ±10%, 50 V, X7R, 0805 Active 5,566,409 $0.16 DigiKey
Indicator status LEDs (example LG R971-KN-1) 0805 SMD, Vf 2.2 V typ, driven at 2–10 mA Active (orderable P/N LG R971-KN-1-0-20-R18) 1,172,771 $0.17 DigiKey

Substitutes

For part Substitute Differences Verified Judgment
ESP32-S3-DevKitC-1-N8 ESP32-S3-DEVKITC-1-N8R8 — $15.00, Active, 1,825 at Mouser Same ESP32-S3-DevKitC-1 board family and Espressif module line; flash 8 MB in both, meeting the snapshot's 4 MB minimum; N8R8 adds 8 MB PSRAM the N8 lacks — exceeding a requirement, which is acceptable; 3.3 V rail and native USB CDC unchanged. Stocked at Mouser, not DigiKey. verified: lifecycle status, price and multi-distributor stock (DigiKey part_lookup + TrustedParts/ECIA); flash and PSRAM difference (DigiKey product descriptions). Not verified: header pinout and GPIO mapping — DigiKey publishes no package, pitch or pinout parametrics for either board. Acceptable — electrically and functionally equivalent within the snapshot's stated latitude; footprint/pinout not verified, so confirm the pin map before ordering a class set.
ESP32-C3-DevKitC-02 ESP32-C3-DEVKITM-1-N4X — $8.00, Active, 110 in stock Both are Espressif ESP32-C3 single-core RISC-V boards on the required 3.3 V rail. The DevKitM-1 carries the ESP32-C3-MINI-1 module where the DevKitC-02 carries ESP32-C3-WROOM-02 — a different module, so a different board outline and pin arrangement. The snapshot's latitude explicitly allows "any ESP32-C3 module providing custom pin reassignment via dynamic pin mapping". Order the -N4X specifically: the plain ESP32-C3-DEVKITM-1 is itself Obsolete with 0 stock. verified: lifecycle status, price and stock (DigiKey part_lookup); ESP32-C3 family and 3.3 V operation (DigiKey product identity + snapshot). Not verified: header pitch, board outline, and which GPIOs are broken out — DigiKey gives only "Mounting Type: Fixed". Acceptable with remapping — the differing pinout is configurable rather than fatal because the C3 targets set pins dynamically, but the pin map must be checked against the target environment first.
Bulk decoupling capacitor (UEP1A470MDD) Panasonic ECA-1CM470I — $0.24, Active, 6,565 in stock 47 µF sits inside the snapshot's 10–100 µF window and matches its named 47 µF option; 16 V rating exceeds the ≥6.3 V requirement, which is acceptable and desirable; Through Hole mounting, "Radial, Can" package — matching the required radial leaded form; lead spacing 2.50 mm, body 5.00 mm dia. x 12.00 mm; ±20%; −40 °C to +85 °C. verified: capacitance, voltage rating, mounting type, package/case and lead spacing (DigiKey parametrics). Not verified: ESR — the snapshot asks for "low ESR" and DigiKey's ESR field for this part is blank. Acceptable — a straightforward commodity replacement. An instructor chasing marginal RF range should prefer a part with a stated ESR figure.

Verify any substitute against its datasheet before ordering — particularly the board pinouts, which distributor parametrics could not confirm.

Other dependencies

  • Project documentation — https://tbnobody.github.io/OpenDTU-docs/ is live (fetched this run).
  • Inverter compatibility matrix — https://www.opendtu.solar/hardware/inverter_overview/ is live (fetched this run). Worth re-checking before each term, since which inverters are supported drives which RF module a student needs.
  • Wireless-Tag WT32-ETH01 vendor page — http://www.wireless-tag.com/portfolio/wt32-eth01/ is dead (HTTP 404). This is the hardware reference link in platformio.ini; the module itself is still sold at retail, so only the manufacturer's documentation has rotted.
  • OpenDTU main repository — https://github.com/tbnobody/OpenDTU is live. Its root listing was retrieved this run and contains partitions_custom_4mb.csv, partitions_custom_8mb.csv and partitions_custom_16mb.csv, so the flash partition tables the README's repartitioning warning refers to are present.
  • OpenDTU Fusion documentation repository — https://github.com/markusdd/OpenDTUFusionDocs is live and directs buyers to the AllianceApps Community Shop.
  • Fusion carrier-board PCB fabrication — not available as a fabrication route on this evidence. No gerbers or EDA design files appear on the fetched documentation page, and the snapshot records that layer count and dimensions are not stated in the sources. The board is bought assembled (EUR 30,00, includes the PCB, three adhesive 800–2600 MHz antennas and a power jumper; USB-C cable and case not included). The shop states the Community Edition is for experienced users and carries no seller support.
  • Olimex ESP32-POE / ESP32-EVB open-source-hardware pages and the Waveshare ESP-S3-12K-Kit wiki — not checked this run.
  • Mikrocontroller.net origin thread (https://www.mikrocontroller.net/topic/525778) — not checked; historical reference only.

Watch list

  • OpenDTU Fusion carrier board — a single European community shop is the only source found, with no stock figure published and no design files to fall back on. If that shop closes, the opendtufusion build targets become unbuildable. Highest-risk dependency in the lab.
  • ESP32-C3-DevKitC-02 — already Obsolete with no retail equivalent found; its substitute (DEVKITM-1-N4X) has only 110 units in stock, so this line could go from "substitute available" to "nothing" quickly.
  • ESP32-S3-DevKitC-1-N8 — Obsolete, and its replacement is stocked at Mouser but not DigiKey, so the check depends on a single distributor holding inventory.
  • Olimex ESP32-EVB — 147 units is the thinnest authorized-distribution stock of any healthy part here; watch for it thinning further.
  • CMT2300A modules — a retail-only, band-sensitive part where the wrong listing silently produces a non-working lab. Re-verify the 868 MHz listing each term.
  • Wemos Lolin S2 Mini — supply is concentrated on AliExpress sellers, with the one mainstream listing priced roughly eight times higher.