Sure - ChatGPT (or Claude) spit this out. Two ways:
// Example payload coming in:
//
// {"topic":"GL-MT300N-V2","dateTime":"2025-09-04T12:35:01-06:00",
// "uptime":{"uptime_seconds":1109631.59,"idle_seconds":917449.73,"load1":0.20,"load5":0.21,"load15":0.23},
// "system":{"hostname":"GL-MT300N-V2"},
// "connectivity":{"gateway_reachable":true,"gateway":"192.168.43.1"},
// "interfaces":{
// "ra0":{ "interface":"ra0","ESSID":"fooblatz",
// "AccessPoint":"94:83:C4:64:0A:EE","Mode":"Client",
// "Channel":"1","Frequency":"(2.412 GHz)",
// "HTMode":"Channel:","BitRate":"300.0 MBit/s",
// "Encryption":"unknown","Type":"mtk",
// "HWMode":"HW","PHY":"no"},
// "apcli0":{"interface":"apcli0","ESSID":"fooblatz2","AccessPoint":"C0:17:4D:66:12:9A","Mode":"Client","Channel":"1","Frequency":"(2.412 GHz)","HTMode":"Channel:","BitRate":"300.0 MBit/s","Encryption":"unknown","Type":"mtk","HWMode":"HW","PHY":"no"}}}
//
//
function convertUptimeSeconds(jsonData) {
// Parse JSON if it's a string
const data = typeof jsonData === 'string' ? JSON.parse(jsonData) : jsonData;
// Get the uptime seconds value
const uptimeSeconds = data.uptime.uptime_seconds;
// Convert to days, hours, minutes, seconds
const days = Math.floor(uptimeSeconds / 86400);
const hours = Math.floor((uptimeSeconds % 86400) / 3600);
const minutes = Math.floor((uptimeSeconds % 3600) / 60);
const seconds = Math.floor(uptimeSeconds % 60);
// Create the formatted uptime object
const formattedUptime = {
days: days,
hours: hours,
minutes: minutes,
seconds: seconds,
total_seconds: uptimeSeconds // Keep original value for reference
};
// Replace uptime_seconds with the formatted uptime
data.uptime.uptime_seconds = formattedUptime;
return data;
}
// Example usage:
//const jsonInput = {"topic":"GL-MT300N-V2","dateTime":"2025-09-04T12:35:01-06:00","uptime":{"uptime_seconds":1109631.59,"idle_seconds":917449.73,"load1":0.20,"load5":0.21,"load15":0.23},"system":{"hostname":"GL-MT300N-V2"},"connectivity":{"gateway_reachable":true,"gateway":"192.168.43.1"},"interfaces":{"ra0":{"interface":"ra0","ESSID":"fooblatz","AccessPoint":"94:83:C4:64:0A:EE","Mode":"Client","Channel":"1","Frequency":"(2.412 GHz)","HTMode":"Channel:","BitRate":"300.0 MBit/s","Encryption":"unknown","Type":"mtk","HWMode":"HW","PHY":"no"},"apcli0":{"interface":"apcli0","ESSID":"fooblatz2","AccessPoint":"C0:17:4D:66:12:9A","Mode":"Client","Channel":"1","Frequency":"(2.412 GHz)","HTMode":"Channel:","BitRate":"300.0 MBit/s","Encryption":"unknown","Type":"mtk","HWMode":"HW","PHY":"no"}}};
//const result = convertUptimeSeconds(jsonInput);
//console.log(JSON.stringify(result, null, 2));
// Alternative version that returns a string format instead of object:
function convertUptimeSecondsToString(jsonData) {
const data = typeof jsonData === 'string' ? JSON.parse(jsonData) : jsonData;
const uptimeSeconds = data.uptime.uptime_seconds;
const days = Math.floor(uptimeSeconds / 86400);
const hours = Math.floor((uptimeSeconds % 86400) / 3600);
const minutes = Math.floor((uptimeSeconds % 3600) / 60);
const seconds = Math.floor(uptimeSeconds % 60);
// Replace with formatted string
//data.uptime.uptime_seconds = `${days}d ${hours}:${minutes}:${seconds}`;
data.uptime.uptime_formatted = `${days}d ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
return data;
}
const newPayload = convertUptimeSecondsToString(msg.payload);
msg.payload = newPayload;
return msg;