Public Access
Add dynamic pages with clock, date, Home Assistant values and fonts
The hardcoded clock is now the built-in dynamic page "Clock". A dynamic page has a background bitmap per time of day and up to 8 elements (clock, date, Home Assistant value, text), each with position, alignment, font and overlay. Pages are drawn on the ESP32, also for the web previews. - Pages tab in the web UI: page editor with drag and drop, font upload (TTF/OTF converted in the browser to the FDF1 dot font format) - Built-in fonts Small, Normal, Large and Full height (generated by tools/make_builtin_fonts.py), built-in bitmaps Pikachu and Pikachu yawning - Home Assistant values over the REST API (URL and token in the HA tab) - Settings version 4: evening settings removed (now time slots of the Clock page), old records are converted - HA Mode dropdown lists the dynamic pages and bitmaps Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1d3b084de1
commit
0411804a2f
49 files changed
+3058
-331
No files matched your search
+12
-10
@@ -2,6 +2,9 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "logic/builtin_pages.h"
|
||||
#include "logic/page.h"
|
||||
|
||||
// Everything that can be changed in the web UI. Stored in NVS (system/settings_store),
|
||||
// the defaults are the original behaviour. Pure logic, tested in test/test_esp32.
|
||||
//
|
||||
@@ -18,9 +21,7 @@ struct ScheduleSettings
|
||||
|
||||
struct ClockSettings
|
||||
{
|
||||
bool evening_enabled = true; // yawning Pikachu in the evening
|
||||
uint16_t evening_start = 17 * 60;
|
||||
bool no_wifi_screen = true; // "No WiFi" instead of the clock when WiFi is down
|
||||
bool no_wifi_screen = true; // "No WiFi" instead of a dynamic page when WiFi is down
|
||||
};
|
||||
|
||||
struct HomeAssistantSettings
|
||||
@@ -30,6 +31,9 @@ struct HomeAssistantSettings
|
||||
uint16_t port = 1883;
|
||||
char user[32] = "";
|
||||
char password[64] = "";
|
||||
// Values for the dynamic pages, read over Home Assistant's REST API (net/ha_api)
|
||||
char api_url[96] = ""; // empty: http://<MQTT broker>:8123
|
||||
char token[256] = ""; // long-lived access token (HA user profile, Security)
|
||||
};
|
||||
|
||||
// How the Nano drives the dots (besides the flip time). Sent to the Nano, which keeps
|
||||
@@ -50,25 +54,23 @@ struct DriveSettings
|
||||
bool effect_small_only = false; // big changes (a new page) appear instantly
|
||||
};
|
||||
|
||||
// What is shown during the day: "clock" or the name of a bitmap
|
||||
const int PAGE_NAME_SIZE = 25;
|
||||
#define PAGE_CLOCK "clock"
|
||||
// What is shown during the day: the name of a dynamic page (logic/page.h) or a bitmap.
|
||||
// Both share one namespace. When it is gone, the built-in Clock page is shown.
|
||||
#define DEFAULT_PAGE BUILTIN_PAGE_CLOCK
|
||||
// What is left on the dots when the display switches off: empty = blank, or a bitmap name
|
||||
#define OFF_PAGE_BLANK ""
|
||||
|
||||
struct Settings
|
||||
{
|
||||
char page[PAGE_NAME_SIZE] = PAGE_CLOCK;
|
||||
char page[PAGE_NAME_SIZE] = DEFAULT_PAGE;
|
||||
ScheduleSettings schedule;
|
||||
ClockSettings clock;
|
||||
HomeAssistantSettings home_assistant;
|
||||
uint16_t flip_time = 225; // flip pulse length in us, sent to the Nano
|
||||
bool status_led = true;
|
||||
// Added in settings version 2: keep it last, the fields before it are read from
|
||||
// version 1 records (system/settings_store.cpp)
|
||||
char off_page[PAGE_NAME_SIZE] = OFF_PAGE_BLANK;
|
||||
// Added in version 3
|
||||
DriveSettings drive;
|
||||
// New fields go here, at the end (see system/settings_store.cpp)
|
||||
};
|
||||
|
||||
// How long a new frame can take to appear on the dots in ms (0 when instant)
|
||||
|
||||
Reference in new issue
Block a user