From 7bf78f91ba858be6992b84e9c5d66805d91dcbca Mon Sep 17 00:00:00 2001 From: lingniu Date: Fri, 3 Jul 2026 12:01:32 +0800 Subject: [PATCH] fix(go): project full yutong mqtt data to realtime kv --- go/vehicle-gateway/internal/realtime/kv.go | 10 +++++++++- .../internal/realtime/kv_test.go | 18 +++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/go/vehicle-gateway/internal/realtime/kv.go b/go/vehicle-gateway/internal/realtime/kv.go index b34a51b3..3f527ca7 100644 --- a/go/vehicle-gateway/internal/realtime/kv.go +++ b/go/vehicle-gateway/internal/realtime/kv.go @@ -90,7 +90,13 @@ func realtimeKVFields(env envelope.FrameEnvelope, parsed map[string]any) []Realt } rows = add(rows, "location", fields) case envelope.ProtocolYutongMQTT: - rows = add(rows, "vehicle", cloneFields(env.Fields)) + fields := cloneFields(env.Fields) + if data, ok := parsed["data"].(map[string]any); ok { + for key, value := range data { + fields[key] = value + } + } + rows = add(rows, "vehicle", fields) } return rows } @@ -171,6 +177,8 @@ func stringifyKVValue(value any) (string, string, bool) { return strconv.FormatFloat(typed, 'f', -1, 64), "number", true case float32: return strconv.FormatFloat(float64(typed), 'f', -1, 64), "number", true + case json.Number: + return typed.String(), "number", strings.TrimSpace(typed.String()) != "" case int: return strconv.Itoa(typed), "number", true case int8, int16, int32, int64: diff --git a/go/vehicle-gateway/internal/realtime/kv_test.go b/go/vehicle-gateway/internal/realtime/kv_test.go index ea7fa79c..48e80e42 100644 --- a/go/vehicle-gateway/internal/realtime/kv_test.go +++ b/go/vehicle-gateway/internal/realtime/kv_test.go @@ -62,11 +62,27 @@ func TestRealtimeKVFieldsFromJT808LocationAndMQTTFields(t *testing.T) { envelope.FieldSOCPercent: 76, "gear": 3, }, - }, map[string]any{}) + }, map[string]any{ + "data": map[string]any{ + "ACC_PEDAL_APT": 14, + "BATTERY_CAPACITY_SOC": 78.4, + "CURRENT_OF_FC": 54.9, + "HYDROGEN_LOW_PRESSURE": 1.41, + "TOTAL_MILEAGE": 119925000, + "fuelCellCoolInTempt": 59, + }, + }) mqttValues := kvMap(mqttRows) if mqttValues["vehicle/soc_percent"] != "76" || mqttValues["vehicle/gear"] != "3" { t.Fatalf("mqtt vehicle kv missing: %#v", mqttValues) } + if mqttValues["vehicle/ACC_PEDAL_APT"] != "14" || + mqttValues["vehicle/CURRENT_OF_FC"] != "54.9" || + mqttValues["vehicle/HYDROGEN_LOW_PRESSURE"] != "1.41" || + mqttValues["vehicle/TOTAL_MILEAGE"] != "119925000" || + mqttValues["vehicle/fuelCellCoolInTempt"] != "59" { + t.Fatalf("mqtt raw data kv missing: %#v", mqttValues) + } } func kvMap(rows []RealtimeKVField) map[string]string {