Refactor timerWakeCycle() to fetch a single random photo per wake using cycle-mode-aware server-side filtering via Immich's POST /api/search/random endpoint. Changes: - Add fetchOneRandomAssetId() to ImmichClient with support for isFavorite, takenAfter, takenBefore filter parameters - Add timer_last_date NVS field for chronological cursor persistence - Implement probabilistic filter selection per cycle mode: - Random: unfiltered size=1 - Chronological/ReverseChronological: date cursor in NVS - FavoritesWeighted: 66% favorites, 33% unfiltered - WeightedChronological: 66% recent (30d), 33% unfiltered - WeightedReverseChronological: 66% older (30d), 33% unfiltered - Add retry loop with filter relaxation on empty results - Initialize hardware RTC (RX8130CE) firmware-wide: - Seed system clock from RTC at boot (immediate time) - NTP sync after WiFi connect, write back to RTC - Add time_utils.h with isoNow(), isoNowMinus30d(), hasValidTime() Normal mode (PhotoQueue + displayTask) is completely untouched. Co-authored-by: Cursor <cursoragent@cursor.com>
25 lines
495 B
C++
25 lines
495 B
C++
#pragma once
|
|
|
|
#include <Arduino.h>
|
|
#include "settings.h"
|
|
|
|
class WiFiManager {
|
|
public:
|
|
void begin(SettingsManager& settings);
|
|
bool isConnected();
|
|
bool isAPMode();
|
|
String getIP();
|
|
int getRSSI();
|
|
void startAP();
|
|
void startStation();
|
|
void setupMDNS(const char* hostname);
|
|
void syncNTP();
|
|
|
|
private:
|
|
SettingsManager* _settings = nullptr;
|
|
bool _apMode = false;
|
|
int _retryCount = 0;
|
|
|
|
bool attemptConnection(const String& ssid, const String& pass);
|
|
};
|