Skip to content

Commit 90b881f

Browse files
committed
fix(sovd_service_interface): handle status as object in list_entity_faults
When the gateway aggregates faults from a peer (rtmaps_medkit), the aggregated fault carries status as a SOVD DTC object: {"aggregatedStatus": "active", "confirmedDTC": "1", ...} list_entity_faults previously called fault_json.value("status", string{}) which throws json::type_error.302 when status is an object. Fix: check the type before extracting. Strings are passed through as-is. Objects use the "aggregatedStatus" field if present.
1 parent 67380be commit 90b881f

1 file changed

Lines changed: 6 additions & 1 deletion

File tree

src/ros2_medkit_plugins/ros2_medkit_sovd_service_interface/src/sovd_service_interface.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,12 @@ void SovdServiceInterface::handle_list_entity_faults(
194194
fault.fault_code = fault_json.value("fault_code", std::string{});
195195
fault.severity = fault_json.value("severity", static_cast<uint8_t>(0));
196196
fault.description = fault_json.value("description", std::string{});
197-
fault.status = fault_json.value("status", std::string{});
197+
if (fault_json.contains("status") && fault_json["status"].is_string()) {
198+
fault.status = fault_json["status"].get<std::string>();
199+
} else if (fault_json.contains("status") && fault_json["status"].is_object()) {
200+
// Aggregated faults may carry status as a SOVD DTC object; use aggregatedStatus if present
201+
fault.status = fault_json["status"].value("aggregatedStatus", std::string{});
202+
}
198203
fault.occurrence_count = fault_json.value("occurrence_count", static_cast<uint32_t>(0));
199204
if (fault_json.contains("first_occurred") && fault_json["first_occurred"].is_number()) {
200205
double ts = fault_json["first_occurred"].get<double>();

0 commit comments

Comments
 (0)