8 Commits

Author SHA1 Message Date
436e55a0c5 alarm image persist for 1 second longer 2026-02-16 23:42:16 +09:00
Mikkeli Matlock
776aee18fc pi gitignore 2026-02-16 23:35:09 +09:00
Mikkeli Matlock
41e0a6b81d ui tweaks 2026-02-16 23:33:42 +09:00
Mikkeli Matlock
e4da3687b4 pi gitignore 2026-02-16 23:33:18 +09:00
Mikkeli Matlock
05cd085b89 untracked alarm config 2026-02-16 23:32:32 +09:00
Mikkeli Matlock
d0d0b4dc39 untracked vscode settings 2026-02-16 22:38:07 +09:00
Mikkeli Matlock
25420d57b3 gitignore 2026-02-16 22:37:38 +09:00
Mikkeli Matlock
18984c29a3 smooth scrolling 2026-02-16 22:28:26 +09:00
6 changed files with 18 additions and 19 deletions

3
.gitignore vendored
View File

@@ -3,3 +3,6 @@ managed_components/
sdkconfig
sdkconfig.old
dependencies.lock
# vscode local settings
.vscode/

12
.vscode/settings.json vendored
View File

@@ -1,12 +0,0 @@
{
"idf.currentSetup": "J:\\esp\\.espressif\\v5.5.2\\esp-idf",
"idf.flashType": "UART",
"idf.portWin": "COM7",
"idf.openOcdConfigs": [
"interface/ftdi/esp_ftdi.cfg",
"target/esp32s3.cfg"
],
"idf.customExtraVars": {
"IDF_TARGET": "esp32s3"
}
}

View File

@@ -132,7 +132,9 @@ static void scroll_timer_cb(lv_timer_t *timer)
cur_y = 0;
}
lv_obj_scroll_to_y(tbl_services, cur_y + s_row_h, LV_ANIM_OFF);
// lv_obj_scroll_to_y(tbl_services, cur_y + s_row_h, LV_ANIM_OFF);
const int delta_y = s_row_h / 8;
lv_obj_scroll_to_y(tbl_services, cur_y + delta_y, LV_ANIM_ON);
}
/* Measure row height, compute visible rows, append duplicates for seamless loop */
@@ -213,7 +215,7 @@ static void create_top_bar(lv_obj_t *parent)
/* Battery positive terminal nub */
lv_obj_t *batt_nub = lv_obj_create(bar_cont);
lv_obj_set_size(batt_nub, 2, 4);
lv_obj_align(batt_nub, LV_ALIGN_RIGHT_MID, -37, 0);
lv_obj_align(batt_nub, LV_ALIGN_RIGHT_MID, -38, 0);
lv_obj_set_style_bg_color(batt_nub, lv_color_white(), 0);
lv_obj_set_style_bg_opa(batt_nub, LV_OPA_COVER, 0);
lv_obj_set_style_border_width(batt_nub, 0, 0);
@@ -281,8 +283,8 @@ static void create_main_section(lv_obj_t *parent)
lv_table_set_cell_value(tbl_services, i, 1, "---");
}
/* Auto-scroll timer: 2 second period */
s_scroll_timer = lv_timer_create(scroll_timer_cb, 2048, NULL);
/* Timer for each shift of 1/8 line's height */
s_scroll_timer = lv_timer_create(scroll_timer_cb, 120, NULL);
/* === Left column: Pi Vitals (below services) === */
int rx = 0;
@@ -336,7 +338,7 @@ static void create_bottom_bar(lv_obj_t *parent)
lv_obj_t *bot_cont = lv_obj_create(parent);
lv_obj_set_pos(bot_cont, 0, y0);
lv_obj_set_size(bot_cont, SCREEN_W, BOT_H);
lv_obj_set_style_bg_color(bot_cont, lv_color_white(), 0);
lv_obj_set_style_bg_color(bot_cont, lv_color_black(), 0);
lv_obj_set_style_bg_opa(bot_cont, LV_OPA_COVER, 0);
lv_obj_set_style_border_color(bot_cont, lv_color_black(), 0);
lv_obj_set_style_border_width(bot_cont, 1, 0);
@@ -347,14 +349,14 @@ static void create_bottom_bar(lv_obj_t *parent)
lbl_net = lv_label_create(bot_cont);
lv_obj_set_style_text_font(lbl_net, &InziuIosevka_Slab_CC_12px, 0);
lv_obj_set_style_text_color(lbl_net, lv_color_black(), 0);
lv_obj_set_style_text_color(lbl_net, lv_color_white(), 0);
lv_obj_align(lbl_net, LV_ALIGN_LEFT_MID, 0, 0);
lv_label_set_text(lbl_net, "NETWORK DOWN: ---- kBps / UP: ---- kBps");
/* Local sensor readings — right-aligned */
lbl_local = lv_label_create(bot_cont);
lv_obj_set_style_text_font(lbl_local, &InziuIosevka_Slab_CC_12px, 0);
lv_obj_set_style_text_color(lbl_local, lv_color_black(), 0);
lv_obj_set_style_text_color(lbl_local, lv_color_white(), 0);
lv_obj_align(lbl_local, LV_ALIGN_RIGHT_MID, 0, 0);
lv_label_set_text(lbl_local, "T: --.- H: --%");
}

4
pi/.gitignore vendored
View File

@@ -3,3 +3,7 @@
__pycache__/
*.pyo
*.pyc
# configs
config/
!config/alarms.sample.json

View File

@@ -93,6 +93,8 @@ async def handler(ws):
await send_status_image(ws, current_img)
await stream_alarm(ws, alarm["pcm"], alarm["sr"],
alarm["ch"], alarm["bits"])
# let the image persist a bit more
await asyncio.sleep(1)
current_img = img_idle
await send_status_image(ws, current_img)