From 9e5cbc3c00e4e8ab1678baf5d8ff369a9345da09 Mon Sep 17 00:00:00 2001 From: Sukru Senli Date: Fri, 5 Dec 2025 13:55:12 +0100 Subject: [PATCH] temperature: show optical transceiver temperature --- src/temperature.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/temperature.c b/src/temperature.c index cdd12df..1bf736e 100644 --- a/src/temperature.c +++ b/src/temperature.c @@ -373,6 +373,35 @@ static void scan_thermal_zones(json_object *sensors_array) closedir(dir); } +static void scan_xpon_sensors(json_object *sensors_array) +{ + FILE *fp; + char output[256]; + int temp_value = 0; + + fp = popen("ubus -t 1 call xpon status 2>/dev/null | jsonfilter -e '@.ONU[0].ANI[0].Transceiver[0].Temperature'", "r"); // flawfinder: ignore + if (!fp) + return; + + if (fgets(output, sizeof(output), fp) != NULL) { + char *endptr; + long val = strtol(output, &endptr, 10); + if (endptr != output && val >= INT_MIN && val <= INT_MAX) { + temp_value = (int)val; + + /* Create JSON object for optical transceiver sensor */ + json_object *sensor = json_object_new_object(); + json_object_object_add(sensor, "name", json_object_new_string("optical_transceiver")); + json_object_object_add(sensor, "sysfs_path", json_object_new_string("")); + json_object_object_add(sensor, "temperature", json_object_new_int(temp_value)); + json_object_object_add(sensor, "source", json_object_new_string("xpon")); + json_object_array_add(sensors_array, sensor); + } + } + + pclose(fp); +} + static void discover_sensors(json_object **sensors_data) { *sensors_data = json_object_new_array(); @@ -388,6 +417,9 @@ static void discover_sensors(json_object **sensors_data) /* Scan WiFi sensors via wlctl (Broadcom) */ scan_wlctl_sensors(*sensors_data); + + /* Scan optical transceiver sensors via xpon */ + scan_xpon_sensors(*sensors_data); } static int browseTemperatureSensor(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)