Standalone support for the ThermalGrizzly WireView Pro II without depending on the external wireview_reporter exporter: - wireview.py: serial protocol (STX/ETX + 16-bit CRC16-CCITT) with vendor-data product identification, config version, UID, build string, screen layout, and temperature/power/current sensor reads; hwmon fallback with per-channel index resolution; udev-based detection (vendor 0x2560 / product 0x0101) with fallback port probing; serial read timeout and watchdog reconnect - server.py: startup detection (root only), 1 Hz poller gated on subscribed clients, WS 'wireview' channel, GET /api/wireview, rejected-product memoization, stale-read race guard - frontend: WireView tab (visible when a device is detected) with live temperature/power/current cards, sparkline history, and device info; nullable temp channels - tests: 76 tests covering parser, CRC, fault classification, hwmon resolution, JSON safety, and the serial transport against a pty-based fake device Verified live: tab appears with the device connected, disappears when unplugged, reconnects on re-plug, no serial traffic when idle.
195 lines
4.9 KiB
TypeScript
195 lines
4.9 KiB
TypeScript
export interface VFPoint {
|
|
index: number;
|
|
freq_khz: number;
|
|
freq_mhz: number;
|
|
volt_uv: number;
|
|
volt_mv: number;
|
|
delta_khz: number;
|
|
delta_mhz: number;
|
|
effective_freq_khz: number;
|
|
effective_freq_mhz: number;
|
|
domain: "gpu" | "memory";
|
|
}
|
|
|
|
export interface CurveState {
|
|
gpu_name: string;
|
|
timestamp: number;
|
|
points: VFPoint[];
|
|
}
|
|
|
|
export interface MonitoringSample {
|
|
timestamp: number;
|
|
voltage_uv: number | null;
|
|
voltage_mv: number | null;
|
|
clock_mhz: number | null;
|
|
temp_c: number | null;
|
|
power_w: number | null;
|
|
fan_pct: number | null;
|
|
fans: (number | null)[] | null;
|
|
pstate: number | null;
|
|
pstate_label: string | null;
|
|
mem_used_bytes: number | null;
|
|
mem_total_bytes: number | null;
|
|
mem_used_mib: number | null;
|
|
mem_total_mib: number | null;
|
|
gpu_util_pct: number | null;
|
|
mem_util_pct: number | null;
|
|
mem_clock_mhz: number | null;
|
|
throttle_reasons: number | null;
|
|
throttle_reasons_label: string | null;
|
|
pcie_link_width: number | null;
|
|
pcie_link_generation: number | null;
|
|
mem_temp_c: number | null;
|
|
}
|
|
|
|
export interface DashboardInfo {
|
|
name: string | null;
|
|
index: number;
|
|
driver_version: string | null;
|
|
vbios_version: string | null;
|
|
serial: string | null;
|
|
board_part_number: string | null;
|
|
uuid: string | null;
|
|
cuda_cores: number | null;
|
|
cuda_compute_capability: string | null;
|
|
rop_count: number | null;
|
|
vram_total_bytes: number | null;
|
|
vram_type: string | null;
|
|
memory_bus_width: number | null;
|
|
bar1_total_bytes: number | null;
|
|
bar1_used_bytes: number | null;
|
|
resizable_bar: boolean | null;
|
|
pcie_link_width: number | null;
|
|
pcie_link_generation: number | null;
|
|
pcie_max_link_width: number | null;
|
|
pcie_max_link_generation: number | null;
|
|
max_graphics_clock_mhz: number | null;
|
|
max_memory_clock_mhz: number | null;
|
|
max_video_clock_mhz: number | null;
|
|
power_limit_w: number | null;
|
|
power_min_limit_w: number | null;
|
|
power_max_limit_w: number | null;
|
|
persistence_mode: boolean | null;
|
|
num_fans: number | null;
|
|
supported_throttle_reasons: number | null;
|
|
temp_slowdown_c: number | null;
|
|
temp_shutdown_c: number | null;
|
|
temp_gpu_max_c: number | null;
|
|
}
|
|
|
|
export interface GpuInfo {
|
|
name: string;
|
|
index: number;
|
|
driver_version: string | null;
|
|
vram_bytes: number | null;
|
|
vram_gib: number | null;
|
|
}
|
|
|
|
export interface SnapshotInfo {
|
|
filepath: string;
|
|
timestamp: string;
|
|
gpu: string;
|
|
nonzero_offsets: number;
|
|
size: number;
|
|
}
|
|
|
|
export interface LimitsState {
|
|
// Power
|
|
power_limit_w: number | null;
|
|
default_power_limit_w: number | null;
|
|
min_power_limit_w: number | null;
|
|
min_power_limit_w_native: number | null;
|
|
max_power_limit_w: number | null;
|
|
// "nvml" (default) or "ioctl" (experimental RM power control)
|
|
power_cap_mode: "nvml" | "ioctl";
|
|
rm_power_supported: boolean;
|
|
// Clock offsets — current values
|
|
gpc_offset_mhz: number | null;
|
|
mem_offset_mhz: number | null;
|
|
// Memory offset — hardware-reported range
|
|
min_mem_offset_mhz: number | null;
|
|
max_mem_offset_mhz: number | null;
|
|
}
|
|
|
|
export interface FanPoint {
|
|
temp_c: number;
|
|
fan_pct: number;
|
|
}
|
|
|
|
export interface FanInfo {
|
|
index: number;
|
|
fan_pct: number | null;
|
|
}
|
|
|
|
export interface FanState {
|
|
fan_pct: number | null;
|
|
fans: FanInfo[] | null;
|
|
num_fans: number | null;
|
|
fan_mode: "auto" | "curve" | null;
|
|
min_fan_pct: number | null;
|
|
max_fan_pct: number | null;
|
|
curve: FanPoint[] | null;
|
|
curve_active: boolean;
|
|
// Fan indices controlled by the active curve; null = all fans.
|
|
fan_targets: number[] | null;
|
|
}
|
|
|
|
export interface ProfileData {
|
|
name: string;
|
|
gpu_name: string;
|
|
curve_deltas: Record<string, number>;
|
|
mem_offset_mhz: number | null;
|
|
power_limit_w: number | null;
|
|
// "nvml" (default) or "ioctl" (experimental RM power control)
|
|
power_cap_mode: "nvml" | "ioctl" | null;
|
|
fan_curve: FanPoint[] | null;
|
|
fan_targets: number[] | null;
|
|
}
|
|
|
|
// ── WireView Pro II (Thermal Grizzly 12 VHPWR connector monitor) ──
|
|
|
|
export interface WireViewPin {
|
|
voltage_v: number;
|
|
current_a: number;
|
|
power_w: number;
|
|
}
|
|
|
|
export interface WireViewSample {
|
|
timestamp: number;
|
|
power_total_w: number;
|
|
current_total_a: number;
|
|
voltage_avg_v: number;
|
|
pins: WireViewPin[];
|
|
// Temperatures are null when the source has no channel for them
|
|
// (e.g. an hwmon module without external-sensor channels).
|
|
temp_in_c: number | null;
|
|
temp_out_c: number | null;
|
|
temp_ext1_c: number | null;
|
|
temp_ext2_c: number | null;
|
|
fan_duty_pct: number;
|
|
fault_status: number;
|
|
fault_log: number;
|
|
psu_capability_w: number;
|
|
}
|
|
|
|
export interface WireViewInfo {
|
|
device_name: string;
|
|
hw_rev: string;
|
|
firmware_version: string;
|
|
uid: string;
|
|
build: string;
|
|
transport: "serial" | "hwmon";
|
|
port: string;
|
|
}
|
|
|
|
export interface WireViewState {
|
|
available: boolean;
|
|
connected: boolean;
|
|
info: WireViewInfo | null;
|
|
sample: WireViewSample | null;
|
|
}
|
|
|
|
export type WireViewWsMessage =
|
|
| { type: "unavailable" }
|
|
| { type: "sample"; info: WireViewInfo; sample: WireViewSample };
|