Skip to content
Closed

Beta #22

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
165 commits
Select commit Hold shift + click to select a range
c656115
Enable automatic PlatformIO upload targets
matthew73210 Apr 6, 2026
fc7898d
Add dedicated PlatformIO OTA upload environments
matthew73210 Apr 6, 2026
76b3e41
Align upload config with ElegantOTA and flash script
matthew73210 Apr 6, 2026
1434498
Add PlatformIO custom uploader for ElegantOTA
matthew73210 Apr 6, 2026
25f98f5
Fix custom uploader callback signature for SCons
matthew73210 Apr 6, 2026
b8affbe
Merge pull request #8 from matthew73210/codex/add-autoupload-from-vscode
matthew73210 Apr 6, 2026
aaabede
Add UI/device version and network info metadata
matthew73210 Apr 6, 2026
a1b543a
Add one-shot OTA script for firmware plus web assets
matthew73210 Apr 6, 2026
b0fb4bd
Bootstrap OTA script venv and littlefs dependency
matthew73210 Apr 6, 2026
672b23e
Auto-install fatfs deps and retry OTA on missing modules
matthew73210 Apr 6, 2026
8bc19c5
Handle yaml module errors in OTA dependency bootstrap
matthew73210 Apr 6, 2026
c127c24
Fix OTA fs mode detection and add async webserver deps
matthew73210 Apr 6, 2026
9b41f31
Split OTA steps and enable library dependency finder
matthew73210 Apr 6, 2026
ddb7c29
Add Network framework library dependency for OTA builds
matthew73210 Apr 6, 2026
dca1a35
Merge pull request #9 from matthew73210/codex/add-versioning-and-netw…
matthew73210 Apr 6, 2026
784b5b9
Fix OTA build by removing invalid Network lib_deps entry
matthew73210 Apr 6, 2026
cb01305
Adjust PlatformIO LDF settings to resolve ESP32 Network headers
matthew73210 Apr 6, 2026
386cf06
Use non-plus LDF mode to restore ESP32 Network header resolution
matthew73210 Apr 6, 2026
a5c3885
Merge pull request #10 from matthew73210/codex/fix-missing-network.h-…
matthew73210 Apr 6, 2026
5ca2704
Improve Wi-Fi and websocket resilience
matthew73210 Apr 6, 2026
0329712
Merge pull request #11 from matthew73210/codex/improve-wifi-connectio…
matthew73210 Apr 6, 2026
f33029a
docs: add 2026 codebase analysis and improvement roadmap
matthew73210 Apr 6, 2026
d686a8a
Merge pull request #12 from matthew73210/codex/analyze-code-and-propo…
matthew73210 Apr 6, 2026
241ea92
Harden wifi/OTA auth and update security TODO status
matthew73210 Apr 6, 2026
3d103e8
Complete point 1 hardening with WS auth, CSRF, and throttling
matthew73210 Apr 6, 2026
f90d54b
Fix OTA upload script for authenticated ElegantOTA
matthew73210 Apr 6, 2026
4a79927
Fix S3 build break and update ArduinoJson v7 usage
matthew73210 Apr 6, 2026
f69fa0b
Add OTA exponential backoff retries and close point 1 TODO
matthew73210 Apr 6, 2026
c11cc7c
Merge pull request #13 from matthew73210/codex/implement-critical-sec…
matthew73210 Apr 6, 2026
89d2456
Harden websocket command handling and mark analysis item 2 complete
matthew73210 Apr 6, 2026
2d4b778
Implement network resiliency improvements from analysis item 3
matthew73210 Apr 11, 2026
76673f7
Finalize frontend modernization path with miniweb-first workflow
matthew73210 Apr 11, 2026
f3e4858
Merge pull request #14 from matthew73210/codex/update-todo-list-in-co…
matthew73210 Apr 11, 2026
29c86a5
Remove legacy webserver frontend and svelte leftovers
matthew73210 Apr 11, 2026
f69c4c7
Merge pull request #16 from matthew73210/codex/review-webserver-and-m…
matthew73210 Apr 11, 2026
c3c7fba
Fix WebSocket polling dropouts with reconnect loop
matthew73210 Apr 11, 2026
f917386
Fix OTA mode detection for filesystem uploads
matthew73210 Apr 11, 2026
a47e608
Fix ElegantOTA target detection for SCons environment
matthew73210 Apr 11, 2026
2897dd2
Fix sensor sampling interval overflow on ESP32
matthew73210 Apr 11, 2026
4395ab4
Merge pull request #17 from matthew73210/codex/find-cause-of-temp-upd…
matthew73210 Apr 11, 2026
d36ce1e
Reduce logging pressure that stalls BT/ET updates
matthew73210 Apr 11, 2026
a0e7ba0
Add log diagnostics page and harden sensor read path
matthew73210 Apr 11, 2026
99f7d89
Debounce thermocouple faults and reduce log spam
matthew73210 Apr 11, 2026
33ff4fa
Re-prime MAX31855 bus pins to recover false short-gnd faults
matthew73210 Apr 11, 2026
a4dfdae
Show ET/BT sensor error codes on LCD display
matthew73210 Apr 11, 2026
ae47617
Fix sensor error type compile break and disable LCD by default
matthew73210 Apr 11, 2026
2119179
Merge pull request #18 from matthew73210/codex/investigate-bt-and-et-…
matthew73210 Apr 11, 2026
1ee3cbf
Make LCD build truly optional and trim default deps
matthew73210 Apr 11, 2026
ced9826
Merge pull request #19 from matthew73210/codex/fix-lcd-build-issue-an…
matthew73210 Apr 11, 2026
3aabefb
Redesign miniweb dashboard with modern left navigation
matthew73210 Apr 11, 2026
5525b69
Migrate miniweb shell to React and trim copy
matthew73210 Apr 11, 2026
196c30d
Merge pull request #20 from matthew73210/codex/propose-modern-front-e…
matthew73210 Apr 11, 2026
3ab4228
Revert "Redesign miniweb dashboard with modern left navigation"
matthew73210 Apr 11, 2026
56d6b85
Merge pull request #21 from matthew73210/revert-20-codex/propose-mode…
matthew73210 Apr 11, 2026
9160c01
Modernize web UI with left-side tab navigation
matthew73210 Apr 11, 2026
2265c8c
Merge pull request #23 from matthew73210/codex/add-modern-tab-navigat…
matthew73210 Apr 11, 2026
10e711a
Move PID control loop from web UI to firmware
matthew73210 Apr 11, 2026
6cd89e3
Disable PID/profile auto-start defaults
matthew73210 Apr 11, 2026
837c5a8
Merge pull request #24 from matthew73210/codex/move-pid-calculation-t…
matthew73210 Apr 11, 2026
587260a
Add roast-page RoR and live PID diagnostic values
matthew73210 Apr 11, 2026
823d987
Merge pull request #25 from matthew73210/codex/add-ror-values-and-pid…
matthew73210 Apr 11, 2026
c1f3352
cleanup: remove unused firmware declarations in main
matthew73210 Apr 11, 2026
9a3905a
optimize: make WebSerial logging optional to reduce firmware footprint
matthew73210 Apr 11, 2026
776d841
Merge pull request #26 from matthew73210/codex/remove-unused-code-and…
matthew73210 Apr 11, 2026
1678ea7
Add Kalman-based simulated bean core temperature
matthew73210 Apr 11, 2026
d4299b6
Merge pull request #27 from matthew73210/codex/add-simulated-internal…
matthew73210 Apr 11, 2026
ca80df0
Add PID autotune with per-target tuning options
matthew73210 Apr 11, 2026
68cde65
Move PID autotune controls to dedicated tab
matthew73210 Apr 11, 2026
7eeb0b1
Add fan speed control to autotune page
matthew73210 Apr 11, 2026
22c7610
Stop autotune panel from overwriting edited setpoints
matthew73210 Apr 11, 2026
d9e28e5
Show autotune measured temps and live graph
matthew73210 Apr 11, 2026
185122c
Fix autotune start race and add firmware autotune logs
matthew73210 Apr 11, 2026
441f17f
Expose autotune telemetry and progress in UI
matthew73210 Apr 11, 2026
587bfdb
Lower autotune relay minimum PWM to zero
matthew73210 Apr 11, 2026
c61ef36
Add configurable autotune PWM bounds and fix UI log rendering
matthew73210 Apr 11, 2026
b33369d
Apply saved PID target globally when setting preferences
matthew73210 Apr 11, 2026
87b7fd9
Mirror saved PID gains to global preference keys
matthew73210 Apr 11, 2026
919ed74
Merge pull request #29 from matthew73210/codex/add-pid-autotune-and-t…
matthew73210 Apr 11, 2026
f43ef94
Tidy miniweb form labels and responsive layout
matthew73210 Apr 11, 2026
c9217f2
Merge pull request #30 from matthew73210/codex/tidy-up-the-ui
matthew73210 Apr 11, 2026
43939c6
Port miniweb UI from VanJS to Preact
matthew73210 Apr 11, 2026
4f23e85
Merge pull request #32 from matthew73210/codex/port-application-to-pr…
matthew73210 Apr 11, 2026
a601d68
Polish roast telemetry UI with sleek metric cards
matthew73210 Apr 11, 2026
206d46a
Unify sleek card UI across roast, logs, autotune, and home
matthew73210 Apr 11, 2026
bf0be23
Add GitHub links and bump firmware/web UI to V3.0
matthew73210 Apr 11, 2026
de2f43e
Merge pull request #33 from matthew73210/codex/improve-ui-design-with…
matthew73210 Apr 11, 2026
7720694
feat(miniweb): add subtle interactive coffee bean background
matthew73210 Apr 12, 2026
10535c0
feat(miniweb): switch coffee background to canvas particles
matthew73210 Apr 12, 2026
e184956
Merge pull request #34 from matthew73210/codex/add-interactive-coffee…
matthew73210 Apr 12, 2026
aa5aae4
Make background beans avoid app panels
matthew73210 Apr 12, 2026
c1ce5dd
Merge pull request #35 from matthew73210/codex/make-beans-move-with-l…
matthew73210 Apr 12, 2026
6ab4248
Add ElegantOTA update tab and improve input sizing
matthew73210 Apr 12, 2026
d9f8fb5
Merge pull request #36 from matthew73210/codex/add-update-tab-for-ele…
matthew73210 Apr 12, 2026
086c228
Rebuild roast and autotune graphs with Preact SVG components
matthew73210 Apr 12, 2026
364ceec
Add roast graph layout toggle for combined vs separate views
matthew73210 Apr 12, 2026
1c9270c
Add larger graph defaults and adjustable height scaling
matthew73210 Apr 12, 2026
7a9411c
Switch roast and autotune graphs to Plotly
matthew73210 Apr 12, 2026
4128255
Replace Plotly charts with uPlot graphs
matthew73210 Apr 12, 2026
31b0981
Switch graph implementation to Visx and update framework ranking
matthew73210 Apr 12, 2026
1984118
Merge pull request #37 from matthew73210/codex/rebuild-graphs-in-prea…
matthew73210 Apr 12, 2026
979c31a
Fix PID apply wiring and enhance animated bean background
matthew73210 Apr 12, 2026
6a6f626
Sync applied PID values into Roast controls
matthew73210 Apr 12, 2026
cfe9343
Merge pull request #38 from matthew73210/codex/fix-apply-pid-function…
matthew73210 Apr 12, 2026
dacca12
Harden roast safety on websocket disconnect
matthew73210 Apr 12, 2026
67192d5
Merge pull request #39 from matthew73210/codex/enhance-roasting-robus…
matthew73210 Apr 12, 2026
d05d58a
Persist roast graph history on device across reconnects
matthew73210 Apr 12, 2026
d42af27
Keep setpoint stable across reconnect and history restore
matthew73210 Apr 12, 2026
c7b9689
Add clear graph action and clearRoastHistory command
matthew73210 Apr 12, 2026
8c91433
Send immediate setpoint value in PID control updates
matthew73210 Apr 12, 2026
85789d0
Send setpoint on slider commit and record device-reported setpoint
matthew73210 Apr 12, 2026
77f1796
Merge pull request #40 from matthew73210/codex/persist-roast-graph-af…
matthew73210 Apr 12, 2026
6be5adb
Fix PID input fields resetting while editing
matthew73210 Apr 12, 2026
6a03d37
Prevent PID apply from snapping back to old values
matthew73210 Apr 12, 2026
d4057eb
Stop PID fields from resyncing to stale autotune values
matthew73210 Apr 12, 2026
f44c7b3
Merge pull request #41 from matthew73210/codex/fix-pid-value-modifica…
matthew73210 Apr 12, 2026
8a69d15
Improve PID timing stability and autotune peak detection
matthew73210 Apr 12, 2026
62b366d
Report sensor faults in status payload and invalidate bad readings
matthew73210 Apr 12, 2026
1bba2ed
Add human-readable sensor fault source in status payload
matthew73210 Apr 12, 2026
d59cad3
Add richer PID autotune debug telemetry and crossing logs
matthew73210 Apr 12, 2026
a09dc37
Smooth PID actuator command to avoid 0/100 bang-bang output
matthew73210 Apr 12, 2026
627b2ab
Add delay measurement flow and Smith-style predictor support
matthew73210 Apr 12, 2026
3959d5b
Make delay measurement robust to noisy temperatures
matthew73210 Apr 12, 2026
3c30db5
Run delay measurement loop even when PID is disabled
matthew73210 Apr 12, 2026
2355a54
Add Fan Off control to PID autotune panel
matthew73210 Apr 12, 2026
9c47a29
Show and apply PID process delay in roast and settings views
matthew73210 Apr 12, 2026
6992786
Merge pull request #42 from matthew73210/codex/analyze-pid-circuit-pe…
matthew73210 Apr 12, 2026
17f0322
Split roast recording/start controls and preserve setpoint target
matthew73210 Apr 12, 2026
a4573a2
Overlay roast profile setpoint on roast graphs
matthew73210 Apr 12, 2026
28091f9
Force heat/PID/profile off when stopping roast control
matthew73210 Apr 12, 2026
49435d4
Persist PID delay fan/heater settings across reboot
matthew73210 Apr 12, 2026
0baea8a
Persist measured delay and show profile preview before roast
matthew73210 Apr 12, 2026
7800922
Force stop roasting to zero PID setpoint and heater
matthew73210 Apr 12, 2026
60838f8
Prevent autotune PWM bounds from being reset by telemetry
matthew73210 Apr 12, 2026
ec8b5c5
Keep loaded profile attached when starting graph
matthew73210 Apr 12, 2026
7276dc7
Keep delay fan/heater inputs from being overwritten by telemetry
matthew73210 Apr 12, 2026
633a077
Add sidebar emergency stop and one-click roast shutdown
matthew73210 Apr 12, 2026
9a04218
Merge pull request #44 from matthew73210/codex/improve-set-point-adju…
matthew73210 Apr 12, 2026
3782b04
Add latched emergency stop heater clamp
matthew73210 Apr 12, 2026
3f20685
Fix PID delay preference persistence keys
matthew73210 Apr 12, 2026
1b4e5a9
Merge pull request #45 from matthew73210/codex/investigate-emergency-…
matthew73210 Apr 12, 2026
164b129
chore: remove unused miniweb chart and pwa remnants
matthew73210 Apr 12, 2026
fe3913c
Merge pull request #46 from matthew73210/codex/remove-unused-code-and…
matthew73210 Apr 12, 2026
41f134f
Adjust desktop bean density and roasting lifecycle animation
matthew73210 Apr 12, 2026
ed64845
Merge pull request #47 from matthew73210/codex/add-bean-behavior-for-…
matthew73210 Apr 12, 2026
a89a96b
Improve fork PR docs and fix GitHub autobuild publishing conditions
matthew73210 Apr 12, 2026
e7765fc
Merge pull request #48 from matthew73210/codex/explain-changes-and-in…
matthew73210 Apr 12, 2026
aad8877
Fix runaway coffee bean spin acceleration
matthew73210 Apr 12, 2026
ddcda12
Merge pull request #49 from matthew73210/codex/investigate-coffee-bea…
matthew73210 Apr 12, 2026
736975d
Fix NaN handling in roast RoR calculations
matthew73210 Apr 12, 2026
f19d019
Merge pull request #50 from matthew73210/codex/investigate-rors-showi…
matthew73210 Apr 12, 2026
c4d405e
Add selectable PID/ADRC control and autotune modes
matthew73210 Apr 18, 2026
d83c3df
Fix control mode persistence and controller factor UI
matthew73210 Apr 18, 2026
fe66cf8
Fix OTA script LittleFS target sequencing
matthew73210 Apr 18, 2026
01bbc51
Retry OTA buildfs on missing littlefs output path
matthew73210 Apr 18, 2026
d3ecd72
Retry OTA on missing .sconsign build-path errors
matthew73210 Apr 18, 2026
17cc7e1
Retry OTA builds on missing .sconsign paths
matthew73210 Apr 18, 2026
c677491
Add autotune memos and ADRC telemetry
matthew73210 Apr 18, 2026
b4bcb9c
Add fan bounds and autotune completion messaging
matthew73210 Apr 18, 2026
ca93d26
Merge pull request #55 from matthew73210/codex/review-pid-and-propose…
matthew73210 Apr 18, 2026
b03239f
Removed fluff
matthew73210 Apr 18, 2026
a34f9ba
Testing gitbuild
matthew73210 Apr 18, 2026
8a185df
2nd test
matthew73210 Apr 18, 2026
32c8e8a
Merge pull request #56 from matthew73210/codex/trim-bundle-and-fix-ci
matthew73210 Apr 18, 2026
a0c1cb1
Added profile follower
matthew73210 Apr 18, 2026
3d96ad3
Re added beans
matthew73210 Apr 18, 2026
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
54 changes: 44 additions & 10 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ on:
branches:
- main
- develop
pull_request:
branches:
- main
- develop

jobs:
build:
Expand All @@ -16,25 +20,54 @@ jobs:
- esp32-s3-mini

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v6

- uses: actions/cache@v3
- uses: actions/cache@v5
with:
path: |
~/.cache/pip
~/.platformio/.cache
key: ${{ runner.os }}-pio
- uses: actions/setup-node@v4.1.0
key: ${{ runner.os }}-python-3.12-pio-${{ hashFiles('platformio.ini', 'miniweb/package-lock.json') }}
restore-keys: |
${{ runner.os }}-python-3.12-pio-
- uses: actions/setup-node@v6
with:
node-version: "24"

- uses: actions/setup-python@v4
- uses: actions/setup-python@v6
with:
python-version: "3.11"
python-version: "3.12"

- name: Build webUI
run: cd miniweb && npm i && npm run build;
run: cd miniweb && npm ci && npm run build

- name: Install PlatformIO Core
run: pip install --upgrade platformio
run: |
python -m pip install --upgrade pip
python -m pip install "platformio==6.1.19"

- name: Prime pioarduino Python environment
run: |
python -m venv ~/.platformio/penv
~/.platformio/penv/bin/python -m pip install --upgrade pip
~/.platformio/penv/bin/python -m pip install \
"uv>=0.1.0" \
"https://github.com/pioarduino/platformio-core/archive/refs/tags/v6.1.19.zip" \
"littlefs-python>=0.16.0" \
"fatfs-ng>=0.1.14" \
"pyyaml>=6.0.2" \
"rich-click>=1.8.6" \
"zopfli>=0.2.2" \
"intelhex>=2.3.0" \
"rich>=14.0.0" \
"urllib3<2" \
"cryptography>=45.0.3" \
"certifi>=2025.8.3" \
"ecdsa>=0.19.1" \
"bitstring>=4.3.1" \
"reedsolo>=1.5.3,<1.8" \
"esp-idf-size>=2.0.0" \
"esp-coredump>=1.14.0"

- name: Build PlatformIO Project
run: |
Expand All @@ -47,15 +80,16 @@ jobs:
name: firmware-${{ matrix.board }}
path: |
.pio/build/${{ matrix.board }}/firmware.bin
.pio/build/${{ matrix.board }}/spiffs.bin
.pio/build/${{ matrix.board }}/littlefs.bin

publish:
if: ${{ github.event_name == 'push' && github.repository == 'tadelv/yaeger' }}
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/publish-firmware.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:

jobs:
publish:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' && github.event.workflow_run.repository.full_name == 'tadelv/yaeger' }}
runs-on: ubuntu-latest
permissions:
contents: write
Expand Down Expand Up @@ -68,7 +68,7 @@ jobs:
done

- name: Check out repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0

Expand Down
49 changes: 39 additions & 10 deletions .github/workflows/release-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
outputs:
matrix: ${{ steps.collect.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Collect PlatformIO environments
id: collect
Expand Down Expand Up @@ -43,26 +43,55 @@ jobs:
matrix: ${{ fromJson(needs.determine-boards.outputs.matrix) }}

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- uses: actions/cache@v3
- uses: actions/cache@v5
with:
path: |
~/.cache/pip
~/.platformio/.cache
key: ${{ runner.os }}-pio
key: ${{ runner.os }}-python-3.12-pio-${{ hashFiles('platformio.ini', 'miniweb/package-lock.json') }}
restore-keys: |
${{ runner.os }}-python-3.12-pio-

- uses: actions/setup-node@v4.1.0
- uses: actions/setup-node@v6
with:
node-version: "24"

- uses: actions/setup-python@v4
- uses: actions/setup-python@v6
with:
python-version: "3.11"
python-version: "3.12"

- name: Build webUI
run: cd miniweb && npm i && npm run build
run: cd miniweb && npm ci && npm run build

- name: Install PlatformIO Core
run: pip install --upgrade platformio
run: |
python -m pip install --upgrade pip
python -m pip install "platformio==6.1.19"

- name: Prime pioarduino Python environment
run: |
python -m venv ~/.platformio/penv
~/.platformio/penv/bin/python -m pip install --upgrade pip
~/.platformio/penv/bin/python -m pip install \
"uv>=0.1.0" \
"https://github.com/pioarduino/platformio-core/archive/refs/tags/v6.1.19.zip" \
"littlefs-python>=0.16.0" \
"fatfs-ng>=0.1.14" \
"pyyaml>=6.0.2" \
"rich-click>=1.8.6" \
"zopfli>=0.2.2" \
"intelhex>=2.3.0" \
"rich>=14.0.0" \
"urllib3<2" \
"cryptography>=45.0.3" \
"certifi>=2025.8.3" \
"ecdsa>=0.19.1" \
"bitstring>=4.3.1" \
"reedsolo>=1.5.3,<1.8" \
"esp-idf-size>=2.0.0" \
"esp-coredump>=1.14.0"

- name: Build PlatformIO Project
run: |
Expand All @@ -73,7 +102,7 @@ jobs:
run: |
mkdir -p release/${{ matrix.board }}
cp .pio/build/${{ matrix.board }}/firmware.bin release/${{ matrix.board }}/firmware.bin
cp .pio/build/${{ matrix.board }}/spiffs.bin release/${{ matrix.board }}/spiffs.bin
cp .pio/build/${{ matrix.board }}/littlefs.bin release/${{ matrix.board }}/littlefs.bin

- name: Upload firmware artifacts
uses: actions/upload-artifact@v4
Expand Down
95 changes: 95 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,77 @@ You can also control Yaeger from its own web interface without an app. Just poin
your home wifi, or `192.168.4.1` if Yaeger creates its own access point.
![yaeger webui](./assets/yaeger-webui.png)

The web UI now includes a **Version & Network Info** section that shows the Web UI version/build timestamp and device firmware/network details (mode, SSID, IP, hostname) so you can quickly check when the currently loaded build was last updated.

### Frontend status

- `miniweb` (TypeScript + Vite) is the **only supported** web UI in this repository.
- The old `webserver` Svelte/Rollup frontend and related legacy files have been removed.
- Project scripts and firmware asset packaging target `miniweb`.

#### Using Yaeger on the go

If Yaeger can't connect to your preferred Wifi, it will create its own access point. Perfect for when out and about :grin:

## Build guide (WIP)

## What changed in this fork

If you are reviewing this fork before opening a PR against `tadelv/yaeger`, here is the practical summary:

* `miniweb` is now the canonical frontend (TypeScript + Vite). Legacy `webserver` content is gone.
* OTA uploads are now aligned with ElegantOTA (`/update`) and no longer depend on PlatformIO `espota`.
* A one-command OTA flow (`ota_update_all.sh`) now updates both LittleFS web assets and firmware in one run.
* OTA tooling is isolated in a local Python virtual environment (`.ota-venv`) to avoid polluting global Python installs.
* GitHub Actions build flow now supports PR validation and avoids publish failures on forks/non-upstream repos.

## Installation / update flows

There are now two recommended paths depending on how you connect to your board:

### 1) USB flash (first-time install or recovery)

Use this when the device is connected over USB serial:

```bash
./build_and_flash.sh s3
# or
./build_and_flash.sh s3-mini
```

What it does:
1. installs frontend dependencies with `npm ci`,
2. builds `miniweb`,
3. optionally erases flash,
4. uploads LittleFS (`buildfs` + `uploadfs`),
5. uploads firmware (`upload`).

### 2) OTA update (already deployed device on network)

Use this once the device is reachable over Wi-Fi and ElegantOTA is available:

```bash
./ota_update_all.sh s3
# or
./ota_update_all.sh s3-mini
```

What it does:
1. creates/reuses `.ota-venv`,
2. installs OTA dependencies in that venv (`platformio`, `littlefs-python`, `fatfs-ng`, `pyyaml`),
3. builds `miniweb`,
4. uploads LittleFS image over ElegantOTA,
5. uploads firmware over ElegantOTA.

If your device requires OTA credentials, set:

```bash
export YAEGER_OTA_USERNAME=admin
export YAEGER_OTA_PASSWORD='your-password'
```

(`YAEGER_OTA_USERNAME` defaults to `admin` if omitted.)

### Schema

![schema](./schema/Schematic_Yaeger_2024-12-24.svg)
Expand All @@ -76,13 +141,43 @@ Courtesy of [@dlisec](https://github.com/dlisec)

A build script has been provided by [@matthew73210](https://github.com/matthew73210), so to get up and running on the
ESP, just run `./build_and_flash.sh`. Make sure to read the comments in the script. But also in the platformio.ini and choose the right board
Yaeger OTA in this project is provided by the web-based ElegantOTA handler (`/update`) and not the PlatformIO `espota`
upload protocol.

For VS Code + PlatformIO uploads via ElegantOTA, use one of these environments:

* `esp32-s3-elegantota`
* `esp32-s3-mini-elegantota`

These use a custom PlatformIO upload script that sends the built firmware to `http://yaeger.local/update` through the
same ElegantOTA mechanism used by the device web UI.

For a **single-command OTA update of the whole project** (frontend files + firmware), run:

```bash
./ota_update_all.sh s3
# or
./ota_update_all.sh s3-mini
```

This builds `miniweb`, then runs OTA in two explicit steps: (1) upload LittleFS (`buildfs` + `uploadfs`) and (2) upload firmware (`upload`). The script creates and uses a local Python virtual environment (`.ota-venv`), installs required OTA dependencies (`platformio`, `littlefs-python`, `fatfs-ng`, `pyyaml`), and auto-retries if PlatformIO reports missing Python modules.

For local frontend builds, use npm from `miniweb`:

```bash
cd miniweb
npm ci
npm run build
```

## Latest features

### PID

PID temp follower, set the temperature setpoint and the PID controller will try and follow. You'll need to find your own PID values

A controller review with alternatives (including MPC/LQR and fan min/max envelope design) is available at `docs/control_strategy_review_2026-04-14.md` (current recommendation: ADRC as primary advanced controller, with an ADRC autotune workflow proposal).

### Profile

Still in the works, but there is now a profile follower, it follows a simple .json format. You can have a go at [Gaggiuino web profiler](https://matthew73210.github.io/Gaggiuino-web-profiler/) under the _pun_ "Yägermeister Mode"
Expand Down
23 changes: 4 additions & 19 deletions build_and_flash.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,36 +31,21 @@ fi

echo "Using PlatformIO environment: $PIO_ENV"


read -p "Choose frontend (r for reyaeger, empty for classic): " frontend

if [ $frontend = 'r' ]; then

echo "reyaeger download";
curl -L https://github.com/RobTS/reyaeger/releases/latest/download/reyaeger.zip > reyaeger.zip
rm -rf data
mkdir data
unzip -d ./data ./reyaeger.zip

else

# Step 1: Navigate to the miniweb directory
# Step 1: Navigate to the primary frontend (miniweb)
echo "Navigating to miniweb..."
cd miniweb || { echo "miniweb folder not found!"; exit 1; }

# Step 2: Install dependencies
echo "Installing dependencies with npm..."
npm install || { echo "npm install failed!"; exit 1; }
# Step 2: Install dependencies with npm (standardized package manager)
echo "Installing dependencies with npm ci..."
npm ci || { echo "npm ci failed!"; exit 1; }

# Step 3: Build the web assets
echo "Building the web project..."
npm run build || { echo "npm build failed!"; exit 1; }

# Step 4: Return to the project root
echo "Returning to the project root..."

cd .. || exit 1
fi

# Step 5: Erase the device memory (optional but recommended)
echo "Erasing the device memory..."
Expand Down
Loading
Loading