feat: add histogram_interval setting and update UI with new field.
This commit is contained in:
+9
-6
@@ -285,9 +285,10 @@ def _serialise_compliance_config(cc: Optional["ComplianceConfig"]) -> Optional[d
|
||||
if cc is None:
|
||||
return None
|
||||
return {
|
||||
"recording_mode": cc.recording_mode, # 0x00=Single Shot, 0x01=Continuous, 0x03=Histogram, 0x04=Histogram+Continuous
|
||||
"record_time": cc.record_time,
|
||||
"sample_rate": cc.sample_rate,
|
||||
"recording_mode": cc.recording_mode, # 0x00=Single Shot, 0x01=Continuous, 0x03=Histogram, 0x04=Histogram+Continuous
|
||||
"sample_rate": cc.sample_rate,
|
||||
"histogram_interval_sec": cc.histogram_interval_sec, # seconds; None if not Histogram mode
|
||||
"record_time": cc.record_time,
|
||||
"trigger_level_geo": cc.trigger_level_geo,
|
||||
"alarm_level_geo": cc.alarm_level_geo,
|
||||
"geo_adc_scale": cc.geo_adc_scale, # hw scale factor (in/s)/V — informational only, do not write
|
||||
@@ -854,9 +855,10 @@ class DeviceConfigBody(BaseModel):
|
||||
notes : Extended notes.
|
||||
"""
|
||||
# Recording parameters
|
||||
recording_mode: Optional[int] = None
|
||||
sample_rate: Optional[int] = None
|
||||
record_time: Optional[float] = None
|
||||
recording_mode: Optional[int] = None
|
||||
sample_rate: Optional[int] = None
|
||||
record_time: Optional[float] = None
|
||||
histogram_interval_sec: Optional[int] = None # seconds: 2, 5, 15, 60, 300, 900 (mode-gated)
|
||||
# Threshold parameters
|
||||
trigger_level_geo: Optional[float] = None
|
||||
alarm_level_geo: Optional[float] = None
|
||||
@@ -918,6 +920,7 @@ def device_config(
|
||||
recording_mode=body.recording_mode,
|
||||
sample_rate=body.sample_rate,
|
||||
record_time=body.record_time,
|
||||
histogram_interval_sec=body.histogram_interval_sec,
|
||||
trigger_level_geo=body.trigger_level_geo,
|
||||
alarm_level_geo=body.alarm_level_geo,
|
||||
project=body.project,
|
||||
|
||||
+21
-3
@@ -824,6 +824,20 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="cfg-field">
|
||||
<label>Histogram Interval</label>
|
||||
<select id="cfg-histogram-interval">
|
||||
<option value="">— unchanged —</option>
|
||||
<option value="2">2 seconds</option>
|
||||
<option value="5">5 seconds</option>
|
||||
<option value="15">15 seconds</option>
|
||||
<option value="60">1 minute</option>
|
||||
<option value="300">5 minutes</option>
|
||||
<option value="900">15 minutes</option>
|
||||
</select>
|
||||
<div class="hint">Only active in Histogram / Histogram + Continuous mode</div>
|
||||
</div>
|
||||
|
||||
<div class="cfg-field">
|
||||
<label>Record Time (seconds)</label>
|
||||
<input type="number" id="cfg-record-time" step="0.5" min="0.5" max="60" placeholder="e.g. 3.0" />
|
||||
@@ -1336,6 +1350,7 @@ function populateDeviceTab() {
|
||||
const complianceRows = [
|
||||
['Recording Mode', cc.recording_mode != null ? (RECORDING_MODE_LABELS[cc.recording_mode] || `0x${cc.recording_mode.toString(16).padStart(2,'0')}`) : '—'],
|
||||
['Sample Rate', cc.sample_rate != null ? `${cc.sample_rate} sps` : '—'],
|
||||
['Histogram Interval', cc.histogram_interval_sec != null ? (() => { const s = cc.histogram_interval_sec; return s < 60 ? `${s}s` : `${s/60}m`; })() : '—'],
|
||||
['Record Time', cc.record_time != null ? `${cc.record_time.toFixed(2)} s` : '—'],
|
||||
['Trigger Level (geo)', cc.trigger_level_geo != null ? `${cc.trigger_level_geo.toFixed(4)} in/s` : '—'],
|
||||
['Alarm Level (geo)', cc.alarm_level_geo != null ? `${cc.alarm_level_geo.toFixed(4)} in/s` : '—'],
|
||||
@@ -1370,9 +1385,10 @@ function renderTable(id, rows) {
|
||||
function populateConfigFromDeviceInfo() {
|
||||
if (!unitInfo) return;
|
||||
const cc = unitInfo.compliance_config || {};
|
||||
if (cc.recording_mode != null) qs('cfg-recording-mode', String(cc.recording_mode));
|
||||
if (cc.sample_rate) qs('cfg-sample-rate', String(cc.sample_rate));
|
||||
if (cc.record_time != null) qs('cfg-record-time', cc.record_time.toFixed(1));
|
||||
if (cc.recording_mode != null) qs('cfg-recording-mode', String(cc.recording_mode));
|
||||
if (cc.sample_rate) qs('cfg-sample-rate', String(cc.sample_rate));
|
||||
if (cc.histogram_interval_sec != null) qs('cfg-histogram-interval', String(cc.histogram_interval_sec));
|
||||
if (cc.record_time != null) qs('cfg-record-time', cc.record_time.toFixed(1));
|
||||
if (cc.trigger_level_geo != null) qs('cfg-trigger', cc.trigger_level_geo.toFixed(4));
|
||||
if (cc.alarm_level_geo != null) qs('cfg-alarm', cc.alarm_level_geo.toFixed(4));
|
||||
if (cc.project) qs('cfg-project', cc.project);
|
||||
@@ -1417,6 +1433,8 @@ async function writeConfig() {
|
||||
if (rm !== '') body.recording_mode = parseInt(rm, 10);
|
||||
const sr = qs('cfg-sample-rate').value;
|
||||
if (sr) body.sample_rate = parseInt(sr, 10);
|
||||
const hi = qs('cfg-histogram-interval').value;
|
||||
if (hi !== '') body.histogram_interval_sec = parseInt(hi, 10);
|
||||
const rt = qs('cfg-record-time').value;
|
||||
if (rt) body.record_time = parseFloat(rt);
|
||||
const trig = qs('cfg-trigger').value;
|
||||
|
||||
Reference in New Issue
Block a user