доработка текущего времени raspberry на экране
This commit is contained in:
@@ -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"),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -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) ===== */
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -7,6 +7,7 @@ interface HealthResponse {
|
||||
pipe_alive: boolean;
|
||||
has_data: boolean;
|
||||
latest: number;
|
||||
server_time?: string;
|
||||
stats: {
|
||||
filled: number;
|
||||
bytes_per_sec: number;
|
||||
|
||||
@@ -103,9 +103,7 @@ export function updatePeakHolder(target: number): number {
|
||||
} else if (target < state.peakValue && state.peakTimer === null) {
|
||||
// Пик выше текущего значения, но таймер пропал — перезапускаем удержание
|
||||
scheduleAmplitudePeakRelease();
|
||||
}
|
||||
|
||||
// Возвращаем текущий пик
|
||||
} // Возвращаем текущий пик
|
||||
return state.peakValue;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user