ricardo_maestas
05/07/2025, 12:20 AMspBv1.0/administration/DDATA/node-red/time_activity via MQTT.
My requirements:
- Process each Sparkplug B metric as a separate tag in UMH
- Use metric names as tag names
- Preserve original data types
- Extract timestamp from Sparkplug payload when available
My sample Sparkplug B payload (post-decoding):
json
{"metrics":[{"name":"pageId","value":"1eb96444-d9bc-800e-ac74-c4f89ada05c7","dataType":"String"},{"name":"lastEdited","value":1746560100000,"dataType":"DateTime"},{"name":"notes","value":"UNS Article","dataType":"String"}]}
My current implementation challenge: Past discussions describe using Bloblang/YAML for protobuf processing, but the current management console only shows a field to write code for a JavaScript processor. I'm struggling to bridge this gap and implement an effective JavaScript solution.
Questions:
1. Is the protobuf decoding handled before the JavaScript processor, or should I implement it in JavaScript?
2. What's the optimal way to handle Sparkplug B in the UMH Protocol Converter JavaScript environment?
3. Are there specific libraries available in this environment for Sparkplug B?
My simplified processor logic attempt:
// Process decoded Sparkplug payload
let payload = typeof msg.payload === 'string' ? JSON.parse(msg.payload) : msg.payload;
let messages = [];
if (payload && payload.metrics) {
const timestamp = payload.timestamp || Date.now();
payload.metrics.forEach(metric => {
messages.push({
meta: {
location_path: "R-Maestas-LLC.Curtice.Utility",
data_contract: "_historian",
tag_name: metric.name
},
payload: {
[metric.name]: metric.value,
timestamp_ms: timestamp
}
});
});
return messages;
}
return msg;
Any guidance would be greatly appreciated.jermuk
05/07/2025, 7:18 AMjermuk
05/07/2025, 7:19 AMjermuk
05/07/2025, 9:03 AMjermuk
05/07/2025, 9:03 AMjermuk
05/07/2025, 9:11 AMBrian Pribe
05/07/2025, 1:03 PMricardo_maestas
05/07/2025, 4:31 PM