доработка текущего времени raspberry на экране

This commit is contained in:
Maxim
2026-06-16 13:22:17 +03:00
parent 875aa8a054
commit bc40c1437a
7 changed files with 35 additions and 6 deletions

View File

@@ -42,6 +42,8 @@ func (a *API) HandleHealth(w http.ResponseWriter, r *http.Request) {
status = "Нет связи"
}
now := time.Now()
writeJSON(w, map[string]any{
"status": status,
"uptime_sec": time.Since(a.startTime).Seconds(),
@@ -50,6 +52,7 @@ func (a *API) HandleHealth(w http.ResponseWriter, r *http.Request) {
"has_data": ok,
"latest": latest,
"stats": a.buf.Stats(),
"server_time": now.Format("02.01.2006 15:04"),
})
}

View File

@@ -12,9 +12,9 @@ body {
/* ===== HEADER BAR ===== */
.header-bar {
display: flex;
display: grid;
grid-template-columns: 1fr auto 1fr;
align-items: center;
justify-content: space-between;
margin-bottom: 15px;
gap: 16px;
}
@@ -22,7 +22,20 @@ body {
h1 {
font-size: 22px;
margin: 0;
flex: 1;
}
.header-time {
font-size: 16px;
text-align: center;
white-space: nowrap;
padding: 6px 12px;
border: 1px solid rgba(0, 255, 136, 0.35);
border-radius: 8px;
background: rgba(0, 255, 136, 0.05);
}
.header-bar .cam-btn {
justify-self: end;
}
/* ===== CAMERA BUTTON (теперь в header) ===== */

View File

@@ -13,6 +13,7 @@
<div class="header-bar">
<h1>GPIO МОНИТОРИНГ В РЕАЛЬНОМ ВРЕМЕНИ</h1>
<div id="server-time" class="header-time">--:--:--</div>
<button id="camToggle" class="cam-btn">
<span class="cam-btn-icon">📷</span>
<span class="cam-btn-text">Камера</span>

View File

@@ -13,6 +13,7 @@ import {
} from "./state.js";
import {
initDOM,
setServerTime,
setStatus,
setMeta,
setBars,
@@ -82,6 +83,10 @@ async function update(): Promise<void> {
consecutiveErrors = 0;
if (health.server_time) {
setServerTime(health.server_time);
}
if (connectionLost) {
console.log("[app] Соединение восстановлено");
}
@@ -147,6 +152,7 @@ async function update(): Promise<void> {
if (consecutiveErrors === 1) console.warn("[app] Сервер недоступен, ждём...");
setStatus("СЕРВЕР НЕДОСТУПЕН", true);
setServerTime("--:--:--");
setBars(0, true);
setSignal(0, true);
resetBufferTracking();

View File

@@ -7,6 +7,7 @@ interface HealthResponse {
pipe_alive: boolean;
has_data: boolean;
latest: number;
server_time?: string;
stats: {
filled: number;
bytes_per_sec: number;

View File

@@ -103,9 +103,7 @@ export function updatePeakHolder(target: number): number {
} else if (target < state.peakValue && state.peakTimer === null) {
// Пик выше текущего значения, но таймер пропал — перезапускаем удержание
scheduleAmplitudePeakRelease();
}
// Возвращаем текущий пик
} // Возвращаем текущий пик
return state.peakValue;
}

View File

@@ -1,5 +1,6 @@
// ui.ts (DOM слой)
export interface DOMElements {
serverTime: HTMLElement | null;
status: HTMLElement | null;
meta: HTMLElement | null;
latest: HTMLElement | null;
@@ -13,6 +14,7 @@ export interface DOMElements {
}
export const DOM: DOMElements = {
serverTime: null,
status: null,
meta: null,
latest: null,
@@ -26,6 +28,7 @@ export const DOM: DOMElements = {
};
export function initDOM(): void {
DOM.serverTime = document.getElementById("server-time");
DOM.status = document.getElementById("status");
DOM.meta = document.getElementById("meta");
DOM.latest = document.getElementById("latest");
@@ -38,6 +41,10 @@ export function initDOM(): void {
DOM.bars = document.querySelectorAll(".sig-bar");
}
export function setServerTime(v: string): void {
if (DOM.serverTime) DOM.serverTime.textContent = v;
}
export function setStatus(v: string, isError: boolean = false): void {
if (!DOM.status) return;
DOM.status.textContent = v;