From 05693f51718848e4faa3c6df596e9d3462cc8e82 Mon Sep 17 00:00:00 2001 From: Jan Hoffmann Date: Fri, 27 Mar 2026 18:58:25 +0100 Subject: [PATCH] Also show SFP TX/RX power in dBm --- html/main.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/html/main.js b/html/main.js index 8eefa01..b29ccbe 100644 --- a/html/main.js +++ b/html/main.js @@ -112,6 +112,10 @@ function decodeSfpRxPower(val, cal) { return applyRxPowerCalibration(rxPower, cal) / 10000; } +function convertPowerTodBm(val) { + return 10 * Math.log10(val); +} + function update(callback) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { @@ -170,13 +174,17 @@ function update(callback) { iHTML += "Model:" + p.sfp_model + ""; iHTML += "Serial:" + p.sfp_serial + ""; if (hasExtendedStatus) { + let txPower = decodeSfpTxPower(p.sfp_txpower, p.sfp_txpower_cal); + let txPowerdBm = convertPowerTodBm(txPower); + let rxPower = decodeSfpRxPower(p.sfp_rxpower, p.sfp_rxpower_cal); + let rxPowerdBm = convertPowerTodBm(rxPower); iHTML += "Temp:" + decodeSfpTemp(p.sfp_temp, p.sfp_temp_cal).toFixed(2) + " ℃"; iHTML += "Vcc:" + decodeSfpVcc(p.sfp_vcc, p.sfp_vcc_cal).toFixed(2) + " V"; iHTML += "TX-Fault:" + (Boolean(Number(p.sfp_state) & 0x4)) + ""; iHTML += "TX-Disabled:" + (Boolean(Number(p.sfp_state) & 0x80)) + ""; iHTML += "TX-Bias:" + decodeSfpTxBias(p.sfp_txbias, p.sfp_txbias_cal).toFixed(1) + " mA"; - iHTML += "TX-Power:" + decodeSfpTxPower(p.sfp_txpower, p.sfp_txpower_cal).toFixed(3) + " mW"; - iHTML += "RX-Power:" + decodeSfpRxPower(p.sfp_rxpower, p.sfp_rxpower_cal).toFixed(3) + " mW"; + iHTML += "TX-Power:" + txPower.toFixed(3) + " mW / " + txPowerdBm.toFixed(2) + " dBm"; + iHTML += "RX-Power:" + rxPower.toFixed(3) + " mW / " + rxPowerdBm.toFixed(2) + " dBm"; } // Not all devices & modules have LOS pin... const rx_los_pin = p.sfp_los !== null ? Boolean(Number(p.sfp_los)) : null;