Quản lý báo thức và nhắc nhở, cho phép đặt, xem danh sách, xóa báo thức với hỗ trợ lặp lại hàng ngày.
cp main/assets/common/alarm_beep.ogg <project>/main/assets/common/
cp main/tools/alarm_manager.h <project>/main/tools/
cp main/tools/alarm_manager.cc <project>/main/tools/idf_component_register(
SRCS
# ...
"tools/alarm_manager.cc"
# ...
)#include "tools/alarm_manager.h"if (bits & MAIN_EVENT_CLOCK_TICK) {
clock_ticks_++;
auto display = Board::GetInstance().GetDisplay();
display->UpdateStatusBar();
// Check alarms every second
AlarmManager::getInstance().checkAlarms();
// Print the debug info every 10 seconds
if (clock_ticks_ % 10 == 0) {
SystemInfo::PrintHeapStats();
}
}Mục đích: Kiểm tra báo thức mỗi giây, sẽ trigger nếu đúng giờ
#include "tools/alarm_manager.h"AlarmManager::getInstance().mcpVoice();Phức Tạp: ⭐⭐ Medium | Thời gian: ~5 mins
Ném std::runtime_error nếu:
- Thời gian không hợp lệ (giờ > 23, phút > 59)
- Báo thức trùng lặp (cùng thời gian)
- NVS lỗi (lưu trữ không thành công)
Quản lý danh sách báo thức, hỗ trợ đặt báo thức một lần hoặc lặp lại hàng ngày. Dữ liệu được lưu vào NVS Flash.
self.alarm.set - Đặt báo thức mới
self.alarm.list - Xem danh sách báo thức
self.alarm.clear - Xóa tất cả báo thức
static AlarmManager& getInstance();Return: Reference đến instance duy nhất của AlarmManager (Singleton)
Mô tả: Lấy instance toàn cục
void init();Mô tả: Khởi tạo AlarmManager, mở NVS, tải báo thức từ bộ nhớ
Exception: std::runtime_error nếu mở NVS thất bại
void addAlarm(const Alarm& alarm);Tham số:
alarm: Struct chứa thông tin báo thức (hour, minute, message, enabled, repeated)
Return: Không
Mô tả: Thêm báo thức mới, tự động kiểm tra trùng lặp và lưu vào NVS
Exception: Bỏ qua nếu thời gian không hợp lệ hoặc trùng lặp
void parseResponse(const std::string& text);Tham số:
text: Chuỗi text từ LLM (ví dụ: "đặt báo thức 9h45")
Return: Không
Mô tả: Phân tích text, trích xuất thời gian, tạo báo thức mới
Hỗ trợ định dạng:
- "9h45" - Định dạng compact
- "9 giờ 45" - Định dạng đầy đủ
- "09:45" - Định dạng tiêu chuẩn
- "hàng ngày", "mỗi ngày" - Báo thức lặp lại
void checkAlarms();Return: Không
Mô tả: Kiểm tra báo thức mỗi giây, trigger nếu đúng giờ
Gọi từ: Main task mỗi giây
std::string getNextAlarmInfo();Return: Chuỗi thông tin báo thức tiếp theo (VD: "09:45 - Dậy sáng")
Mô tả: Lấy thông tin báo thức sắp tới nhất
std::string getAllAlarmsInfo();Return: Chuỗi chứa danh sách tất cả báo thức, sắp xếp theo thời gian
Ví dụ:
Danh sách báo thức:
1. 09:45 - Dậy sáng (còn 5h30p)
2. 14:00 - Ăn cơm [Hàng ngày] (còn 10h15p)
3. 22:00 - Đi ngủ [Hàng ngày] (còn 18h45p)
void clearAll();Return: Không
Mô tả: Xóa tất cả báo thức, lưu vào NVS
bool isDuplicateAlarm(uint8_t hour, uint8_t minute);Tham số:
hour: Giờ (0-23)minute: Phút (0-59)
Return: true nếu tồn tại báo thức cùng thời gian, false nếu không
Mô tả: Kiểm tra trùng lặp trước khi thêm báo thức mới
void cleanupExpiredAlarms();Return: Không
Mô tả: Xóa các báo thức đã hết hạn (enabled=false, repeated=false)
void triggerAlarm(const Alarm& alarm);Tham số:
alarm: Báo thức để trigger
Return: Không
Mô tả:
- Hiển thị thông báo trên màn hình
- Phát âm thanh báo thức 5 lần (cách nhau 1 giây)
- Tự động vô hiệu hóa nếu không phải lặp lại
const std::vector<Alarm>& getAlarms() const;Return: Reference đến vector chứa danh sách báo thức
Mô tả: Lấy danh sách báo thức trực tiếp (chỉ đọc)
void mcpVoice();Mô tả: Đăng ký 3 MCP tool:
self.alarm.set- Đặt báo thức (tham số: hour, minute, message, repeated)self.alarm.list- Xem danh sách báo thứcself.alarm.clear- Xóa tất cả báo thức
MCP Tools:
self.alarm.set(hour, minute, message="", repeated=false)
self.alarm.list()
self.alarm.clear()
struct Alarm {
uint8_t hour; // Giờ (0-23)
uint8_t minute; // Phút (0-59)
std::string message; // Nội dung nhắc nhở
bool enabled; // Báo thức có hoạt động
bool repeated; // Lặp lại hàng ngày
};Ví dụ:
AlarmManager::Alarm alarm;
alarm.hour = 9;
alarm.minute = 45;
alarm.message = "Dậy sáng";
alarm.enabled = true;
alarm.repeated = true;
AlarmManager::getInstance().addAlarm(alarm);Báo thức được lưu trữ trong NVS Flash với namespace "alarms":
count: Số lượng báo thứcalarm_0,alarm_1, ...: Dữ liệu từng báo thức
Định dạng lưu trữ: HH:MM|message|enabled|repeated
Ví dụ: 09:45|Dậy sáng|1|1