Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
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
7 changes: 6 additions & 1 deletion .github/workflows/create-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,17 @@ jobs:
shell: bash
run: cmp assets/Templates/Configurations/configuration.json data_build/configuration.json

- name: Create complete first-install image
run: python scripts/create_full_image.py --environment github

- name: Archive release binaries
uses: actions/upload-artifact@v7
with:
name: JunkersControl-${{ env.RELEASE_TAG }}
name: Cerasmarter-${{ env.RELEASE_TAG }}
path: |
.pio/build/github/firmware.bin
.pio/build/github/littlefs.bin
.pio/build/github/cerasmarter-complete.bin
if-no-files-found: error

- name: Create draft GitHub release
Expand All @@ -72,6 +76,7 @@ jobs:
gh release create "$RELEASE_TAG" \
".pio/build/github/firmware.bin#Firmware" \
".pio/build/github/littlefs.bin#LittleFS filesystem" \
".pio/build/github/cerasmarter-complete.bin#Complete first-install image" \
--draft \
--verify-tag \
--title "Release $RELEASE_TAG" \
Expand Down
17 changes: 9 additions & 8 deletions .github/workflows/deploy-artifact.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,16 @@ jobs:
python -m pip install "platformio==6.1.19"
- name: Build Production Image
run: pio run -e production
- name: Archive Firmware
uses: actions/upload-artifact@v7
with:
name: firmware.bin
path: .pio/build/production/firmware.bin
- name: Build Production FS Image
run: pio run -e production -t buildfs
- name: Archive Filesystem
- name: Create complete first-install image
run: python scripts/create_full_image.py --environment production
- name: Archive flash images
uses: actions/upload-artifact@v7
with:
name: littlefs.bin
path: .pio/build/production/littlefs.bin
name: Cerasmarter-images
path: |
.pio/build/production/firmware.bin
.pio/build/production/littlefs.bin
.pio/build/production/cerasmarter-complete.bin
if-no-files-found: error
52 changes: 52 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,57 @@
# Changelog

## v0.94.0

- Reworked the documentation around the current web UI, configuration persistence, MQTT/Home Assistant state, and CAN profiles. Added a consolidated HTTP/SSE/MQTT API reference with security and persistence notes, refreshed MQTT payload examples, and added current production-controller and Home Assistant discovery screenshots.
- Persist stable heating and hot-water settings received through MQTT or Home Assistant and restore them after reboot. Writes are coalesced to protect flash, while live measurements and momentary boost/fast-heat-up actions remain transient.

- Renamed the dashboard's derived burner-power percentage to "Feed temperature utilization" ("Vorlauftemperatur-Auslastung") to distinguish the feed-temperature ratio from the burner's actual thermal output.
- Fixed General Settings silently omitting disabled form fields and misreading typed JSON booleans, so every value now survives page reloads and is written to `configuration.json`. Added separately persisted normal-operation heating-curve basepoint and endpoint defaults, and audited the remaining configuration forms for the same disabled-field serialization error.
- Added conservative, non-blocking Wi-Fi roaming: connection attempts now scan all channels and select by RSSI, while sustained signals below -75 dBm trigger an asynchronous same-SSID scan and handover only when another AP is at least 12 dB better. A five-minute cooldown prevents access-point flip-flopping.
- Added functional CAN installation profiles for heating, mixed circuits, and domestic hot water; profiles gate decoding and control without assuming a particular room-controller model.
- Added a hard CAN read-only interlock, configurable controller-detection range, heartbeat address, and heartbeat interval.
- Added an explicit alternative domestic-hot-water address preset while retaining fully editable addresses and the established mapping. Credit for the underlying BM1 protocol observations: https://github.com/jen-s-and/JunkersControl.
- Rebuilt the CAN analyzer with always-available live events, timestamps, direction, filters, change-only view, per-ID cadence and payload statistics, candidate interpretations, bounded display, and JSON/CSV capture export. Added an explicit filter reset, corrected dark-mode table headers and fixed-navigation spacing, generalized the page description, and documented an effective and safe investigation workflow with production-controller screenshots.
- Modernized the dashboard into compact heating, mixed-circuit, domestic-hot-water, auxiliary, runtime-control, and system categories; disabled installation sections now disappear and the remaining cards reflow. Added derived burner load, heating-curve context beneath outside temperature, a dedicated auxiliary-sensor trend graph, a locally bundled MIT-licensed Chart.js 4.5.1 chart, corrected status-pill alignment, theme-aware chart labels, and explicit page scrolling.
- Fixed MQTT setpoint reporting so the effective heating value is no longer overwritten by the requested/default value, requested and effective Home Assistant values remain distinct, and unseen CAN setpoints are reported as unavailable instead of fabricated defaults. The transmitted domestic-hot-water setpoint now follows the accepted command rather than a hard-coded 10 °C payload. Addresses issue #39.
- Made automatic controller detection start read-only and wait through a complete configured timeout before taking control. The configurable, inclusive controller-address range recognizes the standard `0x250` operation frame and avoids startup and boundary-address override chatter. Addresses issue #40.
- Added a complete first-install release image containing the bootloader, project partition table, OTA metadata, firmware, and LittleFS. Updated installation guidance and CI artifacts so boards with an incompatible factory partition layout are flashed at `0x0` instead of receiving only unbootable component images. Addresses issue #48.
- Migrated older uploaded configurations by carrying forward newly introduced fail-safe, Home Assistant, timezone, and low-setpoint settings only when their keys are absent; explicit uploaded values remain authoritative. Upload responses now clarify that staged values become visible after configuration reload or reboot.
- Clamped every internally calculated feed setpoint to the manufacturer's exact 10 °C minimum before shutdown evaluation and CAN transmission.
- Made the validated NVS configuration backup persistent and refreshed it after every successful load or save, allowing raw LittleFS flashes to restore device settings while deliberate configuration uploads remain authoritative. Filesystem builds now stamp release templates and custom bundled configurations explicitly so edge-case provisioning intent is preserved. Added a 10-second BOOT-button factory-reset gesture that clears both NVS and LittleFS configuration copies.
- Fixed file-manager downloads to retain the original filename and extension instead of being saved as `file`.
- Added manufacturer-compatible low-setpoint shutdown: an effective 10 °C (50 °F) feed request disables heating after a configurable grace period, with a controller-side latch that cannot be defeated by repeated external enable commands.
- Changed offline fail-safe activation from a periodic-command lease to sustained MQTT disconnection. Home Assistant and other MQTT clients no longer need a Node-RED-style heartbeat, and reconnecting restores the previous runtime controls.
- Added the first live home dashboard for boiler, heating, hot-water, connectivity, and fail-safe state; the dashboard has now been expanded and its history chart replaced by the locally bundled Chart.js implementation described above.
- Restored percentage progress bars for RAM and application flash usage, and added a separate LittleFS usage indicator to the dashboard.
- Made the manual configuration reload action prominent in the file manager and clarified when it is still required.
- Added complete web fallback controls for every MQTT-controlled runtime value and consolidated both transports behind the same command handlers.
- Added `GET /api/runtime` and `POST /api/control` for current values and immediate heating control.
- Preserved valid device configuration automatically across LittleFS images uploaded through the web interface by using an NVS backup and boot-time restore.
- Added English and German web-interface localization with automatic browser-language defaults and persisted preferences.
- Reworked localization into one JSON resource per language with maintainable, area-based keys and explicit `data-i18n` attribute support, following the structure documented by the Javascript i18n core project.
- Added a persistent light/dark appearance switch to every web-interface page, with the operating-system preference used as the initial default.
- Replaced the dark-mode text control with a compact sun/moon icon and normalized MQTT form columns so translated labels wrap without displacing inputs.
- Completed the Cerasmarter branding migration by renaming Home Assistant runtime topics to `cerasmarter/<DeviceId>/...` and the local provisioning override to `CERASMARTER_CONFIG_FILE`.
- Renamed generated GitHub release artifacts to `Cerasmarter-<tag>`; historical repository URLs remain unchanged because the GitHub repository itself has not been renamed.
- Enhanced the CAN message analyzer to show the configured controller value name beside every known CAN address and captured message.
- Replaced the incomplete legacy Home Assistant integration with current MQTT device discovery using one retained device payload.
- Removed manual Home Assistant YAML and filesystem discovery-template files.
- Added discovery for heating, hot-water, controller-status, and dynamic auxiliary-temperature entities under one device.
- Added MQTT number controls for requested feed temperature, boost duration, and room-reference temperature.
- Added MQTT switches for heating enablement, boost, and fast heatup.
- Completed the Home Assistant heating command surface with heating-curve, manual and dynamic adaptation, target and auxiliary temperatures, direct-setpoint override, and valve-scaling controls.
- Added a Home Assistant sensor for the controller's remaining boost time and mirrored all accepted heating command values in the retained heating state payload.
- Centralized MQTT, Home Assistant, and web command validation, including safe temperature ranges and a nonzero maximum valve opening.
- Added retained online/offline availability through MQTT Last Will and automatic rediscovery after Home Assistant restarts.
- Added Home Assistant configuration to the web interface and automatic MQTT reconnection after saving it.
- Added cleanup of retained discovery records when Home Assistant discovery is disabled or its device identity changes.
- Added meaningful Home Assistant icons for every discovered entity and changed the burner flame entity to explicit on/off semantics with a flame icon.
- Changed the Home Assistant device manufacturer and discovery origin branding to Cerasmarter.
- Added Home Assistant diagnostic entities for heap memory, filesystem and flash storage, chip model and revision, CPU cores, CPU frequency, and auxiliary-sensor connectivity.
- Fixed MQTT command handling, including the previously unreachable hot-water parameter handler and unsafe callback payload termination.
- Prevented stale generated filesystem files from leaking into release images and made preprocessing failures stop the build.

## v0.93.4

- Pinned release and development builds to the tested pioarduino ESP32 platform, and upgraded all GitHub Actions workflows to Node.js 24-compatible action versions.
Expand Down
62 changes: 0 additions & 62 deletions Home Assistant/input_values.yaml

This file was deleted.

124 changes: 0 additions & 124 deletions Home Assistant/mqtt.yaml

This file was deleted.

Loading