SDK, seri cihazlardan gelen Hex string'leri (örn. "0104AABB") ayrıştırmak için yüksek performanslı extension'lar içerir.
using Proxus.SDK.BaseFunctions;
using Proxus.Common.Messages;
using Proxus.Common;
using System;
namespace MyProject.Functions
{
public class LegacyParser : FunctionBase
{
public LegacyParser(object sys, object log, object config) : base(sys, log, config) { }
protected override void OnMessageReceive(FunctionContext ctx)
{
if (ctx.Message is TransportData data)
{
// Raw Value: "000140400000"
string hexStr = data.GetPayloadValueByName<string>("RawData");
if (string.IsNullOrEmpty(hexStr)) return;
try
{
// 1. Offset 0'da Status (Short - 2 byte)
short status = hexStr.ExtractValueFromHexString<short>(size: 2, startIndex: 0);
// 2. Offset 2'de Value (Float - 4 byte)
float value = hexStr.ExtractValueFromHexString<float>(size: 4, startIndex: 2);
LogInformation($"Parsed: Status={status}, Value={value:F2}");
// 3. Ayrıştırılmış veriyi yayınla
var cleanData = new TransportDataBuilder()
.WithTopic($"{data.Topic}/Parsed")
.WithPayload("Status", status)
.WithPayload("RealValue", value)
.Build();
BackToPipeline(cleanData);
}
catch (Exception ex)
{
LogError($"Parse Error: {ex.Message}");
}
}
}
}
}