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
5 changes: 0 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@ All notable changes to Patternflow will be documented in this file.

## [Unreleased]

## [3.4.1] - 2026-08-12

### Changed
- **A broker ships with the firmware, so MQTT works without standing up a server first.** The host and login move out of the gitignored secrets header and into `net_config.h` as published defaults — they are in the repo and readable in every release image, which is the honest place for a credential that goes to everybody. The account is scoped to match: it can read and write the `patternflow` topic and nothing else on that server, so publishing it costs its owner a topic rather than a broker. Run by **[@SimonePDA](https://github.com/SimonePDA)**, who contributed the MQTT work and confirmed the terms. Nothing dials on its own — the role still lives in NVS and starts at Off, so this arms the option rather than the radio. Point a board somewhere else by overriding `PF_MQTT_HOST` (and friends) in `patternflow_secrets.h`, which is included first and wins.

## [3.4.0] - 2026-08-12

Patterns leave the firmware and live on the filesystem, so a board ships nearly empty — and a pack ships with it. **Hardware unchanged**; v3.0 board and case carry over as-is.
Expand Down
43 changes: 8 additions & 35 deletions firmware/patternflow/net_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
// Firmware version string reported to the flasher (Improv device-info RPC).
// Keep in sync with web/public/flash/manifest.json.
#ifndef PF_IMPROV_FW_VERSION
#define PF_IMPROV_FW_VERSION "3.4.1"
#define PF_IMPROV_FW_VERSION "3.4.0"
#endif

// ── OTA (wireless flashing from Arduino IDE / espota.py) ─────
Expand Down Expand Up @@ -181,7 +181,8 @@
// anything. Nothing connects until a role is picked AND a broker host is
// set, so the default build is inert.
//
// A shared broker ships with the firmware — see the block further down.
// Broker credentials belong in patternflow_secrets.h (gitignored), never
// here: this file ships in the repo and lands in every published .bin.
//
// This costs internal DRAM: ~600 B of statics, plus ~1.8 KB for the socket
// while a role is connected. That is worth knowing because the web console
Expand All @@ -205,48 +206,20 @@
#ifndef PF_MQTT_HTTP_ENABLED
#define PF_MQTT_HTTP_ENABLED PF_MQTT_ENABLED
#endif
// ── The shared Patternflow broker ────────────────────────────
// A broker anyone with a Patternflow may use, run and paid for by
// @SimonePDA (Simone Majocchi), who contributed the MQTT work and opened it
// for exactly this. It ships so that two panels can mirror each other, or a
// panel can join a home setup, without first standing up a server.
//
// These are PUBLISHED DEFAULTS, not secrets, and the login below is scoped
// to match: it can read and write the `patternflow` topic and nothing else
// on that server. That is what makes shipping it sound rather than reckless
// — the account cannot be used to reach anything private, so publishing it
// costs its owner a topic, not a broker.
//
// Stated plainly because it is in the repo and readable in every .bin we
// release. A credential that ships to everyone is public from the first
// download; writing it here rather than hiding it in the gitignored secrets
// file only means the people reading the source can see what their board is
// configured to talk to. The release credential scan treats anything in this
// file as public for the same reason.
//
// Terms confirmed by @SimonePDA, 2026-08-12: "the MQTT broker data can be
// currently shared with other users as the broker is secured and allows just
// the patternflow topic to be read/written".
//
// It still dials nothing on its own. The role (Off / Publisher /
// Subscriber) lives in NVS and starts at Off, so shipping a broker arms the
// option rather than the radio — a board that is never told to publish
// never connects.
//
// Running your own broker, or want off this one entirely? Override any of
// these in patternflow_secrets.h; that file is included first and wins.
// Empty (the default) = no broker configured; the role picker says so and
// nothing is dialled. Set it in patternflow_secrets.h.
#ifndef PF_MQTT_HOST
#define PF_MQTT_HOST "Simonehome.xyz"
#define PF_MQTT_HOST ""
#endif
#ifndef PF_MQTT_PORT
#define PF_MQTT_PORT 1883
#endif
// Empty user = connect anonymously (brokers on a trusted LAN often allow it).
#ifndef PF_MQTT_USER
#define PF_MQTT_USER "patternflow"
#define PF_MQTT_USER ""
#endif
#ifndef PF_MQTT_PASS
#define PF_MQTT_PASS "pattern_pw_01"
#define PF_MQTT_PASS ""
#endif
// Topic root: <prefix>/knob/1..4 and <prefix>/pattern. Give each panel its
// own prefix when several share a broker and should NOT mirror each other.
Expand Down
Binary file removed web/public/flash/bin/v3.4.1/boot_app0.bin
Binary file not shown.
Binary file removed web/public/flash/bin/v3.4.1/patternflow.ino.bin
Binary file not shown.
Binary file not shown.
Binary file not shown.
10 changes: 5 additions & 5 deletions web/public/flash/manifest.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{
"name": "Patternflow",
"version": "v3.4.1",
"version": "v3.4.0",
"new_install_prompt_erase": true,
"builds": [
{
"chipFamily": "ESP32-S3",
"parts": [
{ "path": "bin/v3.4.1/patternflow.ino.bootloader.bin", "offset": 0 },
{ "path": "bin/v3.4.1/patternflow.ino.partitions.bin", "offset": 32768 },
{ "path": "bin/v3.4.1/boot_app0.bin", "offset": 57344 },
{ "path": "bin/v3.4.1/patternflow.ino.bin", "offset": 65536 }
{ "path": "bin/v3.4.0/patternflow.ino.bootloader.bin", "offset": 0 },
{ "path": "bin/v3.4.0/patternflow.ino.partitions.bin", "offset": 32768 },
{ "path": "bin/v3.4.0/boot_app0.bin", "offset": 57344 },
{ "path": "bin/v3.4.0/patternflow.ino.bin", "offset": 65536 }
]
}
]
Expand Down
6 changes: 2 additions & 4 deletions web/src/components/community/FirmwareNotice.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,9 @@ export default function FirmwareNotice() {
return (
<div className={styles.fwNotice}>
<span className={styles.fwNoticeTag}>Firmware</span>
{/* Describes the current firmware rather than one release's diff, so a
patch bump does not advertise the previous version's changes as new. */}
<span className={styles.fwNoticeText}>
<strong>{LATEST}</strong> is out — pattern packs install from a link, a set ships with the
board, and MQTT has a broker ready to use.
<strong>{LATEST}</strong> is out — patterns install from a link, and a set now ships with
the board.
</span>
<Link href="/update" className={styles.fwNoticeLink}>
Update over Wi-Fi →
Expand Down
Loading