@blokcert/node-red-contrib-ocpp 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/ocpp-normalizer.js +32 -8
- package/nodes/ocpp-command.js +2 -2
- package/nodes/ocpp-out.html +6 -6
- package/nodes/ocpp-out.js +3 -2
- package/package.json +1 -1
package/lib/ocpp-normalizer.js
CHANGED
|
@@ -20,32 +20,56 @@ const MessageType = {
|
|
|
20
20
|
* @returns {object} Parsed message with metadata
|
|
21
21
|
*/
|
|
22
22
|
function parseStreamMessage(streamData) {
|
|
23
|
-
const {
|
|
23
|
+
const { tenant, deviceId, timestamp } = streamData;
|
|
24
24
|
|
|
25
|
-
//
|
|
26
|
-
|
|
25
|
+
// Parse metadata (contains action, version, serverID)
|
|
26
|
+
let metadata = {};
|
|
27
|
+
if (streamData.metadata) {
|
|
28
|
+
try {
|
|
29
|
+
metadata = typeof streamData.metadata === 'string'
|
|
30
|
+
? JSON.parse(streamData.metadata)
|
|
31
|
+
: streamData.metadata;
|
|
32
|
+
} catch (e) {
|
|
33
|
+
// Ignore parse errors
|
|
34
|
+
}
|
|
35
|
+
}
|
|
27
36
|
|
|
28
|
-
// Parse payload
|
|
29
|
-
let parsedPayload = payload;
|
|
30
|
-
if (typeof
|
|
37
|
+
// Parse payload (contains the full OCPP message with uniqueID)
|
|
38
|
+
let parsedPayload = streamData.payload;
|
|
39
|
+
if (typeof parsedPayload === 'string') {
|
|
31
40
|
try {
|
|
32
|
-
parsedPayload = JSON.parse(
|
|
41
|
+
parsedPayload = JSON.parse(parsedPayload);
|
|
33
42
|
} catch (e) {
|
|
34
43
|
// Keep as string if not valid JSON
|
|
35
44
|
}
|
|
36
45
|
}
|
|
37
46
|
|
|
47
|
+
// Extract messageId from payload.uniqueID or streamData.id
|
|
48
|
+
const messageId = parsedPayload?.uniqueID || streamData.id;
|
|
49
|
+
|
|
50
|
+
// Extract action from metadata or payload
|
|
51
|
+
const action = metadata.action || parsedPayload?.action;
|
|
52
|
+
|
|
53
|
+
// Extract actual payload content
|
|
54
|
+
const actualPayload = parsedPayload?.payload || parsedPayload;
|
|
55
|
+
|
|
56
|
+
// Determine OCPP version from metadata
|
|
57
|
+
const version = metadata.version === '2.0.1' ? '2.0.1' : '1.6';
|
|
58
|
+
const protocol = version === '2.0.1' ? 'ocpp2.0.1' : 'ocpp1.6';
|
|
59
|
+
|
|
38
60
|
return {
|
|
39
61
|
messageId,
|
|
40
62
|
tenant,
|
|
41
63
|
deviceId,
|
|
42
64
|
action,
|
|
43
|
-
payload:
|
|
65
|
+
payload: actualPayload,
|
|
44
66
|
version,
|
|
45
67
|
protocol,
|
|
46
68
|
timestamp: timestamp || Date.now(),
|
|
47
69
|
// Identity string for routing
|
|
48
70
|
identity: `${tenant}:${deviceId}`,
|
|
71
|
+
// Keep original for reference
|
|
72
|
+
_rawPayload: parsedPayload,
|
|
49
73
|
};
|
|
50
74
|
}
|
|
51
75
|
|
package/nodes/ocpp-command.js
CHANGED
package/nodes/ocpp-out.html
CHANGED
|
@@ -33,18 +33,18 @@
|
|
|
33
33
|
<input type="text" id="node-input-server">
|
|
34
34
|
</div>
|
|
35
35
|
<div class="form-row">
|
|
36
|
-
<label for="node-input-
|
|
37
|
-
<input type="
|
|
38
|
-
<span style="margin-left: 10px;">Convert unified format back to OCPP version</span>
|
|
36
|
+
<label for="node-input-streamMaxLen"><i class="fa fa-list-ol"></i> Stream Max Len</label>
|
|
37
|
+
<input type="number" id="node-input-streamMaxLen" placeholder="1000">
|
|
39
38
|
</div>
|
|
40
39
|
<div class="form-row">
|
|
41
|
-
<label for="node-input-autoAck"><i class="fa fa-check"></i> Auto
|
|
40
|
+
<label for="node-input-autoAck"><i class="fa fa-check"></i> Auto Acknowledge</label>
|
|
42
41
|
<input type="checkbox" id="node-input-autoAck" style="width: auto; margin-left: 0;">
|
|
43
42
|
<span style="margin-left: 10px;">Acknowledge inbound message after response</span>
|
|
44
43
|
</div>
|
|
45
44
|
<div class="form-row">
|
|
46
|
-
<label for="node-input-
|
|
47
|
-
<input type="
|
|
45
|
+
<label for="node-input-denormalizePayload"><i class="fa fa-exchange"></i> Denormalize</label>
|
|
46
|
+
<input type="checkbox" id="node-input-denormalizePayload" style="width: auto; margin-left: 0;">
|
|
47
|
+
<span style="margin-left: 10px;">Convert unified format back to OCPP version</span>
|
|
48
48
|
</div>
|
|
49
49
|
</script>
|
|
50
50
|
|
package/nodes/ocpp-out.js
CHANGED
|
@@ -122,12 +122,13 @@ module.exports = function (RED) {
|
|
|
122
122
|
const outboundKey = Keys.outbound(tenant, deviceId);
|
|
123
123
|
|
|
124
124
|
// XADD with MAXLEN to prevent unbounded growth
|
|
125
|
+
// Use 'payload' field to match WS Server's expected format
|
|
125
126
|
await redis.xadd(
|
|
126
127
|
outboundKey,
|
|
127
128
|
'MAXLEN', '~', node.streamMaxLen,
|
|
128
129
|
'*',
|
|
129
|
-
'
|
|
130
|
-
'
|
|
130
|
+
'id', messageId,
|
|
131
|
+
'payload', response,
|
|
131
132
|
'timestamp', Date.now().toString()
|
|
132
133
|
);
|
|
133
134
|
|