Added ECHO cmd and fixed some timing issues
This commit is contained in:
+50
-2
@@ -403,6 +403,12 @@
|
||||
title="ESP-NOW Unicast-Test">
|
||||
Test
|
||||
</button>
|
||||
<button type="button" class="btn btn-outline-info btn-sm"
|
||||
@click="echoPing(c.id)"
|
||||
:disabled="busy || !state.uart_connected || !c.available"
|
||||
title="ESP-NOW Timestamp-Echo (Round-Trip-Latenz)">
|
||||
Ping
|
||||
</button>
|
||||
<button type="button" class="btn btn-outline-info btn-sm"
|
||||
@click="ledRing({ clientId: c.id })"
|
||||
:disabled="busy || !state.uart_connected || !c.available"
|
||||
@@ -640,6 +646,7 @@
|
||||
busy: false,
|
||||
configMsg: '',
|
||||
configMsgOk: false,
|
||||
_flashTimer: null,
|
||||
led: {
|
||||
mode: 'color',
|
||||
r: 0,
|
||||
@@ -1031,10 +1038,14 @@
|
||||
this.busy = false;
|
||||
}
|
||||
},
|
||||
flash(msg, ok) {
|
||||
flash(msg, ok, durationMs = 5000) {
|
||||
this.configMsg = msg;
|
||||
this.configMsgOk = ok;
|
||||
setTimeout(() => { this.configMsg = ''; }, 5000);
|
||||
if (this._flashTimer) clearTimeout(this._flashTimer);
|
||||
this._flashTimer = setTimeout(() => {
|
||||
this.configMsg = '';
|
||||
this._flashTimer = null;
|
||||
}, durationMs);
|
||||
},
|
||||
async setDeadzone(clientId, deadzone, opts = {}) {
|
||||
if (deadzone == null || deadzone < 0) {
|
||||
@@ -1258,6 +1269,43 @@
|
||||
this.busy = false;
|
||||
}
|
||||
},
|
||||
formatMs(v) {
|
||||
return v != null && Number.isFinite(Number(v)) ? Number(v).toFixed(3) : '—';
|
||||
},
|
||||
formatUsAsMs(us) {
|
||||
return us != null && Number.isFinite(Number(us))
|
||||
? (Number(us) / 1000).toFixed(3)
|
||||
: '—';
|
||||
},
|
||||
async echoPing(clientId) {
|
||||
this.busy = true;
|
||||
try {
|
||||
const r = await fetch('/api/echo-ping', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ client_id: clientId })
|
||||
});
|
||||
const data = await r.json();
|
||||
if (!r.ok) {
|
||||
this.flash(data.error || `Echo-Ping Slave ${clientId} fehlgeschlagen`, false);
|
||||
return;
|
||||
}
|
||||
if (!data.success) {
|
||||
this.flash(`Echo-Ping Slave ${clientId} fehlgeschlagen (${this.formatMs(data.rtt_ms)} ms)`, false);
|
||||
return;
|
||||
}
|
||||
this.flash(
|
||||
`Echo-Ping Slave ${clientId}: Host ${this.formatMs(data.rtt_ms)} ms, ` +
|
||||
`ESP ${this.formatUsAsMs(data.esp_rtt_us)} ms`,
|
||||
true,
|
||||
5000
|
||||
);
|
||||
} catch (e) {
|
||||
this.flash(String(e), false);
|
||||
} finally {
|
||||
this.busy = false;
|
||||
}
|
||||
},
|
||||
async restart(clientId = 0) {
|
||||
this.busy = true;
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user